Laporan Praktikum 14 (5) (19-01-2015) Metode Komputasi Matematika Penyelesaian Soal UAS Metode Komputasi 2016 Syarif Abdullah (G551150381) Matematika Terapan FMIPA Institut Pertanian Bogor e-mail:
[email protected] 19 Januari 2016 Berikut merupakan soal dan jawaban UAS metode komputasi tahun 2016 Soal nomor 1. Jawablah pertanyaan ini dengan menulis Betul atau Salah pada lembar jawaban yang diberikan. Tulislah betul, jika pertanyaan yang sesuai betul, atau tulis Salah bila salah. 1. RAM adalah memory primer yang diakses secara sekuential. 2. Bilangan, bilangan real atau integer, disimpan pada mesin komputer dalam bentuk bilangan berbasis 2 (biner) 3. Mesin komputer hanya mengenal perintah dalam bentuk bahasa mesin sehingga perintah atau perogram yang ditulis dalam bahasa lain, misalnya bahasa C atau Java, perlu ditrasnslasi (diterjemahkan) ke bahasa mesin oleh Compiler. 4. Tree adalah bentuk khusus graph, sehingga dalam tree mungkin saja dijumpai cyclic. 5. Binary tree adalah bentuk khusus Tree, dimana setiap node dalam binary tree memiliki anak 2 yaitu anak kiri dan anak kanan. Jawaban nomor 1. 1. Salah. Karena RAM (Random Access Memmory) merupakan memory primer yang diakses secara random 2. Betul 3. Betul 4. Salah. Karena Tree merupakan salah satu bentuk struktur data tidak linear yang menggambarkan hubungan yang bersifat hierarkis (hubungan one to many) antara elemen-elemen. Tree biasa didenisikan sebagai kumpulan simpul/node dengan elemen khusus yang disebut Root. Node lainnya terbagi menjadi himpunan-himpunan yang saling tak berhubungan satu sama lain (disebut Subtree). Jadi Suatu Tree tidak mungkin bisa dibuat menjadi cycle 5. Salah. Belum tepat, karena Binary Tree adalah tree dengan syarat bahwa tiap node hanya boleh memiliki maksimal dua subtree dan kedua subtree tersebut harus terpisah. Sesuai dengan definisi tersebut tiap node dalam binary tree hanya boleh memiliki paling banyak dua child yaitu anak kanan dan anak kiri.
Soal nomor 2. Jawablah pertanyaan berikut: 1. Jelaskan apa yang dimaksud dengan istilah “Open Source” 2. Elaborasi kelebihan dan kekurangan menggunakan program atau paket “Open Source”? Jawaban nomor 2. 1. Aplikasi open source adalah program komputer yang lisensinya memberi kebebasan pada pengguna dalam menjalankan program tersebut untuk apa saja, mempelajari dan memodifikasi program tersebut, dan mendistribusikan penggandaan program asli atau yang sudah dimodifikasi tanpa harus membayar royalti kepada pembuat sebelumnya. 2. Berikut merupakan kelebihan dan kekurangan menggunakan program atau paket “Open Source” Beberapa kelebihan open source sebagai berikut: 1. Software dapat diperoleh dan digunakan secara gratis tanpa perlu membayar lisensi. Meskipun ada yang berbayar tapi tidak semahal proprietary software 2. Jumlah user tak terbatas 3. Aplikasi dapat digandakan 4. Kode sumber program terbuka, isinya dapat dilihat, dipelajari, dimodifikasi dukungan ditangani oleh perusaahaan atau komunitas. Sedangkan beberapa kekuragan open source sebagai berikut: 1. Kompabilitas hardware tidak terjamin (terutama pada sistem operasi) 2. Interface terkadang tidak user friendly 3. Masih terus dalam pengembangan dan penyempurnaan. Soal nomor 3. Perhatikan fungsi berikut: function res=jk(n) res=0 for i=1:n res=res+i^2 end endfunction
1. Bila fungsi jk dipanggil dengan parameter bernilai 5 atau dipanggil sebagai berikut: Disp(jk(5)) Berapa nilai yang akan diitampilkan? 2. Buatlah fungsi jkrec, yaitu fungsi yang melakukan hal yang sama dengan fungsi jk, tetapi dilakukan secara rekursif. Jawaban nomor 3. 1. Disp(jk(5))=55
untuk i = 1, maka res = res+1^2=0+1=1 untuk i =2, maka res = 1+2^2=1+4=5 untuk i=3, maka res = 5+3^2=5+9=14 untuk i=4, maka res = 14+4^2=14+16=30 untuk i=5, maka res = 30+5^2=30+25=55 o karena n=5, maka iterasi STOP.
2. Berikut adalah fungsi jk secara rekursif function res=jkrec(n) if (n==1) then res=1 else res = (n^2)+jkrec(n-1) end endfunction
Soal nomor 4. Misalkan 100 bilangan integer disimpan pada peubah array A secara berurutan, dari nilai yang terkecil ke nilai terbesar. Bila x menyimpan suatu nilai yang akan dicari pada array A.
1. Tulislah dalam kata-kata, bagaimana mencari nilai x pada array A yang terbaik atau tercepat menurut saudara? 2. Misalkan fungsi Cari dengan parameter x dan A, sehingga dipanggil di main program sbb: k=Cari(x,A) dimana k adalah indeks posisi nilai yang disimpan pada variable x dalam array A. Tulislah fungsi Cari dalam scilab. Misalnya, bila A=[10,12,13,14,15], dan x=14 maka eksekusi perintah berikut k=Cari(x,A) akan menghasil k bernilai 4. Jawaban nomor 4. 1. Karena nilai pada array A terurut dari kecil ke terbesar, menurut saya cara yang terbaik untuk menemukan nilai x pada array A adalah dengan pencarian membagi dua array, kemudian dibandingkan. Langkah pertama adalah membagi dua array tersebut hingga menemukan sebuah nilai tengah, kemudian nilai tengah tersebut dibandingkan dengan nilai x yang akan dicari. Apabila nilai x lebih besar dari pada nilai tengah array, maka pencaarian selanjutnya adalah pada potongan terakhir array yang telah terbagi dua (hal ini dapat mempersingkat pencarian karena pencarian tidak dilakukan pada potongan lainnya), jika sebaliknya maka pencarian selanjutnya adalah pada potongan pertama array yang telah terbagi dua untuk kemudian langkah selanjutnya tetap sama yakni membagi 2 potongan yang telah terbagi dan membandingkannya kembali antara nilai x dan nilai tengah potongan array. Misalkan x=61, berikut langkah pencarian nilai x 1. Bagi dua array A hingga ditemukan sebuah nilai tengah, misalkan 50. 2. Karena x lebih besar dari 50, maka pencarian berikutnya adalah pada potongan kedua. 3. Bagi dua array tempat pencarian berikutnya (array lebih besaar sama dengan 50) hingga ketemu nilai tengah, misalkan 75. 4. Karena x lebih kecil dari 75, maka tempat pencarian berikutnya adalah pada potongan antara 50 sampai 75. Dan seteerusnya hingga x=61 ditemukan. 1. Berikut fungsi Cari dalam Scilab untuk perintah k=Cari(x,A) //program cari indeks ke-k function k=Cari(x, A) n = length(A); i=1; while(i
k=-1; end endfunction
Soal nomor 5. Ordered linked lists adalah linked lists yang selalu terurut (dari kecil ke terbesar). Misalkan ordered linked lists menggunakan struktur Scilab sebagai berikut: node = struct(“info”,0,”next”,[]) dimana field “info” menyimpan bilangan integer, sedangkan field “next” menyimpan link ke node berikutnya atau field “next” berisikan [] (address nol) bila node sedang dikunjungi merupakan node yang terakhir dalam linked lists. Bila variable head merupakan header dari ordered linked lists, node = struct(“info”,0,”next”,[]); head=node; maka fungsi berikut berfungsi mencetak informasi: function printlist() x=head.next; while (x<>[]) disp(x.info) x=x.next; end endfunction
1. Bila fungsi insertlist (x) adalah fungsi yang meng-insert node x ke ordered linked lists, seperti perintah berikut (misal k adalah nilai info yang akan di-insert): x = node; x.info = k; insertlist(x); tulislah fungsi “insertlist” dalam Scilab. 5. Lengkapilah fungsi deletelist(k) yaitu fungsi untuk menghapus sebuah node dengan info yang bernilai k pada linked lists. Berikut ini contoh penggunaan fungsi deletelist untuk menghapus node yang bernilai 5. k = 5; deletelist(k); Jawaban nomor 5.
Berikut merupakan fungsi insertlist dengan Scilab Program
// insert2ion pada suatu sorted list funcprot(0); //Membuat list function [List]=create(list1) global List; // Membuat node list1.number=input("Masukkan bilangan(Ketik -999 untuk Stop)= ");
if list1.number==-999 then list1.next=NULL; list1.add=NULL; else list1.add=list1.add+1; list1.next=NULL; List(i)=list1; if(i==1) then else List(i-1).next=List(i).add end i=i+1; create(list1);// Membuat next node end return; endfunction function []=print1(list1) if list1(i)(1).next~=NULL then printf("%d--->",list1(i)(1).number);//Print current item i=i+1; if list1(i)(1).next==NULL then printf("%d",list1(i)(1).number); end print1(list1);//Pindah ke next item end return; endfunction function [List]=insert2(list1) global List; x=input("Masukkan bilangan yang akan di insert2ed= ");//Membaca Bilangan //Menemukan Lokasisehingga bilangan ditempatkan di sorted order while (list1(i)(1).next~=NULL) if(list1(i)(1).number>=x) then break; end i=i+1; end key=i; //Insetion if(list1(i)(1).next==NULL & list1(i)(1).number < x) then list1(i+1)(1).number=x; list1(i+1)(1).add=i+1; list1(i+1)(1).next=NULL; list1(i)(1).next=list1(i+1)(1).add; List=list1; return; end i=1; while (list1(i)(1).next~=NULL) i=i+1; end j=i+1;
//Key node ditemukan dan insert2 new node atau item while(list1(i)(1).add~=key) list1(i+1)(1).number=list1(i)(1).number; i=i-1; end list1(i+1)(1).number=list1(i)(1).number list1(i)(1).number=x; list1(j)(1).add=j; list1(j)(1).next=NULL; list1(j-1)(1).next=list1(j)(1).add; List=list1; endfunction global List; NULL=0;i=1; //Membuat Struktur node node=struct('number',0,'add',0,'next',0); head=node; //Calling the functions printf("Masukkan Bilangan yang diurutkan(ascending/naik)"); List=create(head); printf("\nList Sebelum diinsert= "); print1(List); List=insert2(List); printf("\nList Setelah diinsert= "); print1(List);
Berikut merupakan fungsi deletelist
//Delete Linked List //Menulis program/function untuk menghapus specifik node. funcprot(0); //Membuat Linked list
function [List]=create(list1) global List; // Membuat Node list1.number=input("Masukkan ")//scanf("%d"); if list1.number==-999 then list1.next=NULL; list1.add=NULL; else list1.add=list1.add+1; list1.next=NULL; List(i)=list1; if(i==1) then
bilangan(ketik
-999
untuk
Stop)=
else List(i-1).next=List(i).add end i=i+1; create(list1);// Membuat next node end return; endfunction //Function untuk print bilangan dari Linked list function []=print1(list1) if list1(i)(1).next~=NULL then printf("%d--->",list1(i)(1).number);//Print current item i=i+1; if list1(i)(1).next==NULL then printf("%d",list1(i)(1).number); end print1(list1);//Pindah ke next item end return; endfunction //Function untuk delete spesifik node function [List]=delete(list1) key=input("Nilai dari bilangan yang akan dihapus= ");//membaca nilai key //Menemukan dan hapus key node while(list1(i)(1).number~=key) then if list1(i)(1).next==NULL then printf("Item Tidak ditemukan. Silahkan coba lagi!"); return; end i=i+1; end while(list1(i).next~=NULL) list1(i)(1).number=list1(i+1)(1).number; i=i+1; end list1(i-1)(1).next=NULL; List=list1; endfunction
global List; NULL=0;i=1; //Membuat stcture node node=struct('number',0,'add',0,'next',0); head=node; //Memanggil functions List=create(head); printf("\nList Sebelum dihapus= "); print1(List); List=delete(List); printf("\nList Setelah dihapus= "); print1(List)
Diskusi: 1. Syarif Abdullah (G551150381) (kredit:95) 2. Lili Hernawati (G551150321) (kredit:95) 3. I Made Yoga Emma Prasetya (G551150271) (kredit:95)