Anda di halaman 1dari 13

Nama NIM Kelompok

: I Made Dwi Aristya Yuliarsa : 1104505090 : 19

PRAKTIKUM ALGORITMA DAN PEMROGRAMAN MODUL III ARRAY ( LARIK ) 3.1. Tujuan 1. Memahami dasar-dasar pemrograman C++. 2. Memahami penggunaan tipe data array dalam pembuatan program. 3. Mengenal dan bisa menggunakan fungsi pembangkit bilangan acak yang ada dalam Bahasa C++. 4. Mengenal dan bisa memakai fungsi untuk mendapatkan waktu dalam Bahasa C++. 5. Memahami tujuan dan mekanisme pengurutan data dan pencarian data. 6. Mampu menganalis kerja masing-masing metode pengurutan dan pencarian, sehingga bisa memilih metode pengurutan dan/atau pencarian data yang terbaik untuk suatu contoh kasus tertentu.

3.2. Tugas Pendahuluan 1. Jelaskan tentang array dan deklarasi array dalam C++ serta tipe data yang mungkin digunakan dalam array. Berikan contoh deklarasi array dalam C++ lalu hitung keperluan memory-nya. 2. Buatlah contoh cara membangkitkan bilangan random dalam C++. 3. Jelaskan apa yang dimaksud dengan sorting dan searching. 4. Jelaskan mekanisme metode pengurutan dan pencarian berikut serta berikan contoh pengurutan data yang dilakukan dengan metode tersebut. a. Insertion Sort b. Bubble Sort c. Quick Sort d. Sequential Search e. Binary Search 5. Buatlah flowchart dan pseudocode (notasi algoritama) dari masingmasing metode di atas, lalu kerjakan trace terhadap flowchart yang anda buat. 3.3. Jawaban 1. Pengertian Array (Larik) Array merupakan koleksi data dimana setiap elemen memakai nama dan tipe yang sama serta setiap elemen diakses dengan membedakan indeks arraynya. Variable array dideklarasikan dengan mencantumkan tipe dan nama variable yang diikuti dengan banyaknya lokasi memori yang ingin dibuat.

Tipe data yang mungkin di gunakan dalam array : a. Array satu dimensi 1. Setiap elemen array dapat diakses melalui index 2. Index array secara default dimulai dari 0 3. Deklarasi array : Tipe_array nama_array[ukuran] b. Array dua dimensi 1. Array dua dimensi merupakan array yang terdiri dari m buah baris dan n buah buah kolom bentuknya dapat berupa matriks atau tabel. 2. Deklarasi array : Tipe_array nama_array [baris][kolom] c. Array multidimensi 1. Array multidimensi merupakan array yang mempunyai ukuran lebih dari dua. Bentuk pendeklarasian array multidimensi sama saja dengan deklarasi array dimensi satu maupun dimensi dua. 2. Deklarasi array : Tipe_array nama_array [ukuran 1][ukuran 2] . . . [ukuran N] Contoh deklarasi array
/* Program Memasukkan 5 Data */ #include <iostream.h> #include <conio.h> Void main () { Int data [5] Int i; Cout<<masukkan data : <<endl; /*memasukkan data*/ For (i=1;i<=5;i=i+1) { Cout<<data ke <<i<< ; ; Cin>> data[i]; } Cout<<Keseluruhan data<<endl; /*menampilkan data */ For (i=1; i<=5; i++) { Cout<<data ke <<i<<: <<data [i]<<endl; } Getch ( ); }

Kode Program 3.1 Program Memasukkan 5 Data

2.

Cara membangkitkan bilangan random Terdapat dua fungsi yang dibutuhkan untuk membangkitkan bilangan acak srand() dan rand(). Fungsi srand() dibutuhkan untuk menentukan "bibit" dari bilangan acak yang akan dibangkitkan. Sama seperti kalau kita menanam tumbuhan, bibit yang berbeda tentu akan menghasilkan tambuhan dewasa yang berbeda pula. Sedangkan fungsi rand() digunakan untuk menampilkan bilangan acak yang dihasilkan dari "bibit" yang diberikan ke fungsi srand(). Contoh :
#include <iostream> using namespace std; int main() { srand(time(NULL)); int data = rand() % 10; cout << data << endl; cin>>get(); } Kode Program 3.2 Program menampilkan bilangan random

Fungsi rand() umumnya digunakan untuk membangkitkan bilangan acak yang bertipe bilangan bulat. 3. Pengertian Sorting dan Searching Sorting adalah algoritma yang menempatkan unsur-unsur daftar dalam urutan tertentu. Perintah yang paling sering digunakan adalah urutan numerik dan leksikografis ketertiban. Pemilahan efisien adalah penting untuk mengoptimalkan penggunaan algoritma lain (seperti pencarian dan algoritma merge) yang membutuhkan diurutkan daftar untuk bekerja dengan benar, melainkan juga sering berguna untuk canonicalizing data dan untuk memproduksi output yang terbaca manusia. Lebih formal, output harus memenuhi dua kondisi. Pencarian (Searching) merupakan proses yang fundamental dalam pemrograman, guna menemukan data (nilai) tertentu di dalam sekumpulan data yang bertipe sama. Fungsi pencarian itu sendiri adalah untuk memvalidasi (mencocokkan) data. Mekanisme Metode Pengurutan dan Pencarian a. Insertion Sort Pengurutan dengan cara penyisipan : Anggap elemen ke1 sampai dengan elemen ke j telah terurut Elemen ke i adalah elemen yang akan disisipkan antara elemen yang telah terurut (1 sampai j) pada posisi yang tepat, misalnya pada p. Pencarian posisi yang tepat untuk i adalah sebagai berikut : 1. Simpan l[i] pada suatu variabel temporer, temp. 2. Geser elemen j ke bekas tempat i kemudian geser elemen j 1 ke i 1, dan seterusnya sampai mencapai posisi yang tepat untuk i, yaitu p.

4.

Contoh :
#include <iostream.h> #include <stdlib.h> int data[10],data2[10]; int n; void tukar(int a, int b) { int t; t = data[b]; data[b] = data[a]; data[a] = t; } void insertion_sort() { int temp,i,j; for(i=1;i<=n;i++) { temp = data[i]; j = i-1; while(data[j]>temp && j>=0) { data[j+1] = data[j]; j--; } data[j+1] = temp; } } void main() { cout<<"PROGRAM INSERTION SORT"; cout<<"masukkan jumlah= "; cin=>>n; for(int i=1;i<=n;i++) { cout<<"Masukkan data ke "<<i<<" : ; cin>>data[i]; data2[i]=data[i]; } insertion_sort(); cout<<"\n\n"; //tampilkan data cout<<"Data Setelah di Sort : "; for(int i=1; i<=n; i++) { cout<<" "<<\n\n; cout<<sorting selesai"; getch(); } }

Kode Program 3.3 Sorting Data

b. Bubble Sort a. Hampir sama dengan Selection Sort b. Cara pengurutan elemen yang paling sederhana c. Menggunakan metode pembandingan dan pertukaran d. Tiap putaran, elemen yang bersebelahan akan dibandingkan dan isinya akan ditukar jika nilainya tidak berurut Contoh :
#include <iostream.h> #include <stdlib.h> int data[10],data2[10]; int n; void tukar(int a, int b) { int t; t = data[b]; data[b] = data[a]; data[a] = t; } void bubble_sort() { for(int i=1;i<=n;i++) { for(int j=n; j>=i; j--) { if(data[j] < data[j-1]) tukar(j,j-1); } } } void main() { cout<<"===PROGRAM BUBBLE SORT==="; cout<<"masukkan jumlah= cin>>n; for(int i=1;i<=n;i++) { cout<<"Masukkan data ke "<<i<<; cin=>>data[i]; data2[i]=data[i]; } } bubble_sort(); cout<<"\n\n"; //tampilkan data cout<<"Data Setelah di Sort : "; for(int i=1; i<=n; i++) { cout<<" "<<<"\n\n cout<<sorting selesai"; getch(); } Kode Program 3.4 Program bubble sort

c.

Quick Sort Quick Sort adalah sebuah algoritma sortir dari model Divide and Conquer yaitu dengan cara mereduksi tahap demi tahap sehingga menjadi 2 bagian yang lebih kecil. 1. Kita harus mengidentifikasi key pada indeks pertama dalam list. 2. List dipartisi menjadi 2 bagian dimana list yang sebelah kiri adalah kumpulan dari key-key yang lebih kecil dari key pada indeks pertama dan list yang disebelah kanan adalah kumpulan dari key-key yang lebih besar dari key pada indeks pertama. Sequential Search Sequensial Search (penelusuran sequensial) yaitu proses mengunjungi melalui suatu pohon dengan cara setiap simpul di kunjungi hanya satu kali yang disebut tree transversal / kunjungan pohon. Contoh :
#include <iostream.h> #include <stdlib.h> int cari_linear(int array[],int ukuran, int cari); void main() { const int ukuran=10; int array[ukuran]={25,36,2,48,0,69,14,22,7,19}; cout<<"Isi dari array: "<<\n\n; cout<<masukkan data yang dicari: ; cin=>>cari; tanda= cari_linear(array,ukuran,cari); if (tanda!=-1) { cout<<"\n\nData tersebut ditemukan pada posisi: array["<< tanda<<"],"<<" atau deret ke"<<(tanda+1); } else { cout<<"\nData tersebut tidak ditemukan "; } getch(); } Kode Program 3.5 Program pencarian data

d.

e.

Binnary Search Binary search, atau metode pencarian secara biner hanya bisa dilakukan jika data sudah terurut. Keunggulan dari proses binary search ini adalah sistem pencariannya yang relatif cepat dan efisien walaupun ada banyak data sekalipun. Karena data dicari dari depan, tengah dan belakang. Tetapi sintaks dan algoritmanya sedikit lebih rumit, karena kita harus mengurutkan data terlebih dahulu. Pengurutan data disini bias dilakukan dengan metode ascending ataupun descending.

Contoh :
#include <iostream.h> #include <stdlib.h> int binary_search(int array[],int size, int elemen); void main() { const int size = 10; int array[size]={0,6,9,12,20,23,29,32,47,79}; cout<<"masukkan data yang dicari"; cin>>elemen; cout<<"\n\n"; tanda= binary_search(array,size,elemen); if (tanda!=-1) { cout<<"Data "<<elemen<<" ditemukan pada posisi :"; cin>>array[tanda]; getch(); } Int binary_search(int array[],int size, int elemen); { start=0; end=size 1; middle; middle=start+2; do if (elemenarray[middle]) { start=middle+1; middle=(start+end)/2; } while(start<=end && array[middle]!=elemen); if(array[middle]==elemen) { posisi=middle; return posisi; } } Kode Program 3.6 Program Pengurutan Data

5.

Pengaplikasian Metode Pengurutan dan Pencarian a. Metode Insertion Sort Flowchart

Start

Input n

i = 2

N i<=n Y A C

Temp = data [j] Data[0] = temp j = i - 1

Temp<data[j] Y Data[j+1] = data [j] j = j - 1

Data[j+1] = temp

i i + 1

Start

Gambar 3.1 Flowchart Mengurutkan Data dengan Insertion Sort

Pseudecode Read n Set n i = 2 For (i=1;i<array_size;i++) j=i b=number[i] while ((j>0) && (numbers[j-1]>b)) count = count + 1 numbers [j] = numbers [j-1] j- numbers [j] = b print count end

b. Metode Bubble Sort Flowchart


Start

i=1 j=n

Data[j]<data[j-1] Y Data[j]=data[j-1] j=j-1

j=i

i=i+1

j=n Y Stop

Gambar 3.2 Flowchart Pengurutan Data dengan Bubble Sort

Pseudecode procedure bubbleSort( A : list of sortable items ) repeat swapped = false for i = 1 to length(A) - 1 inclusive do: if A[i-1] > A[i] then swap( A[i-1], A[i] ) swapped = true end if end for until not swapped end procedure

c. Metode Quick Sort


Start

i=1 j=m s=-1

X[i]<=x[j] Yes

No

Ubah x[i] dengan x[j]

S=-s S=1 No j=j-1 Yes i=i+1

No

i=j Yes Stop

Gambar 3.3 Flowchart Pengurutan Data dengan Quick Sort

Pseudecode function quicksort('array') read [i] if length [i] 1 return [i] if [x] 'pivot' then append 'x' to 'less' else append 'x' to 'greater' return concatenate(quicksort('less'), 'pivot', quicksort('greater'))

d. Metode Sequential Search


Start

i=0 found=0

I<n && !found Yes A[i]==key Yes i=i+1

No

No i=i+1

Gambar 3.4 Flowchart Pencarian Data dengan Sequential Sort

Pseudecode Read key Set i = 0 Found = 0 While (i<8 && !found) If (a[i]==key) found = 1 Else i++ If (found) Print pencarian sukses Else Print pencarian gagal End

e. Binary Search
Start

L=0 R=N+1

P=(R-L)/2

If p>0

No

Stop

Yes P=L+p

L=p

A(p). Key<x

Compare A(p).Key to x

X<A(p) .Key

R=p

Stop

Gambar 3.5 Flowchart Pencarian Data dengan Binary Search

Pseudecode find(X, node) if(node = NULL) return NULL if(X = node:data) return node else if (X < node:data) return find (X,node:leftChild) else X > node:data return find (X,node:rightChild)