Array Processing & Modular Pertemuan ke 4
Array Processing Array (larik) adalah suatu tipe variabel yang berisi kumpulan data dengan setiap elemen datanya bertipe sama. Setiap elemen diakses langsung melalui indeksnya. Indeks array harus bertipe data yang menyatakan keterurutan (misal: integer atau karakter) Macam/Jenis Array: - Array 1 dimensi vektor - Array 2 dimensi matriks
Menggunakan Do Loop atau DOWHILE Loop Contoh 1: Find_sum_of_elements Set sum to zero DO index=1 to number_of_elements sum=sum + array(index) ENDDO Print sum END
Contoh 2: Find_element_average Set sum to zero DO index=1 to number_of_elements sum=sum + array(index) ENDDO average=sum/number_of_elements Print average END
Contoh 3: Find_largest_element Set largerst_element to array(1) DO index=2 to number_of_elements IF array(index) > largest_element THE N largest_element=array(index) ENDIF sum=sum + array(index) ENDDO Print largest_element END
Inisialisasi elemen array Contoh: nama –nama bulan dalam setahun Initialise_month_table month_table(1)=‘January’ month_table(2)=‘February’ .. month_table(12)=‘December’ END
Inisialisasi elemen array dari keyboard Read_values_into_array Set max_num_elements to required value Set index to zero Read first input value DOWHILE (input values NOT=999) AND (index < max_num_elements) index=index + 1 array(index)=input value Read next input value ENDDO IF index < max_num_elements THEN index = index + 1 array(index)=999 ELSE Print ‘Array size too small’ ENDIF END
Array 1 Dimensi Contoh Jika diisi Array A dengan 8 elemen A(8) A 1 2 3 4 5 6 7 8 Jika diisi
Array 1 Dimensi Contoh A(1) = 100 A(2) = 80 A(3) = 10 A(4) = 50 Array A dengan 8 elemen A A(1) = 100 A(2) = 80 A(3) = 10 A(4) = 50 A(5) = 75 A(6) = 100 A(7) = 95 A(8) = 20 1 2 3 4 5 6 7 8 100 80 10 50 75 100 95 20
Selama pelaksaan program, elemen array tetap menyimpan nilai ! Contoh Pseudocode Pseudocode Tanpa_Array Begin For i=1 to 6 do read X EndFor write X End Pseudocode Dengan_Array Begin For i=1 to 6 do read X(i) EndFor write X(i) End Selama pelaksaan program, elemen array tetap menyimpan nilai ! 20 30 40 50 60 70 20 30 40 50 60 70 Output Output 20 30 40 50 60 70 70 70 70 70 70 70
Array 2 Dimensi Array 2 dimensi merupakan perluasan dari array 1 dimensi. Perluasan itu terletak pada jumlah index untuk menunjuk ke sebuah elemen array. Array 2 dimensi menggunakan 2 angka index untuk menunjuk ke sebuah elemen array. Kedua angka index ini disusun dalam format BARIS dan KOLOM. 1 2 3 … N-2 N-1 Index kolom : M-1 Index baris Penulisan: NamaArray(baris,kolom)
Implementasi Array Pengolahan data sejenis dalam jumlah besar, misal data siswa, data karyawan, data barang dan lain-lain. Proses pencarian data, yaitu mencari suatu data dengan kriteria tertentu dari sekumpulan data yang sangat banyak. Proses pengurutan data, yaitu menyusun data menurut aturan tertentu. (ASCENDING atau DESCENDING) Perhitungan data matrik. Misalnya perhitungan konstruksi gedung, perhitungan data grafis untuk keperluan animasi dan sebagainya.
~ Searching ~ Searching adalah usaha untuk mencari satu atau lebih data dengan mengikuti aturan atau kriteria tertentu Searching dilakukan untuk 2 (dua) tujuan: Memastikan keberadaan suatu data Menghitung banyaknya suatu data Proses searching pada dasarnya adalah kegiatan memeriksa keberadaan sebuah data dalam sebuah basis-data (database). Tindakan yang dilakukan terkait dengan ditemukannya data bukanlah menjadi bagian dari proses searching Kecepatan proses searching tidak ditentukan oleh berapa lama waktu yang digunakan untuk mencari suatu data, akan tetapi berapa jumlah langkah dalam mencari suatu data.
~ Searching ~ Algoritma untuk searching: Sequential Search: mencari data secara urut dari data pertama sampai data terakhir Binary Search: mencari data pada posisi ekstrem (awal, akhir dan tengah deretan). Syaratnya: data harus sudah dalam keadaan terurut Proses searching akan dihentikan jika terpenuhi 2 (dua) kondisi: Jika data yang dicari sudah ditemukan Jika sudah tidak ada lagi data yang harus diperiksa.
Sequential Search Perhatikan Array Berikut: 13 16 14 21 76 5 6 Misal nilai yang dicari adalah 21 Maka: Elemen yang akan diperiksa: 13, 16, 14, 21 Ditemukan! Misal nilai yang dicari adalah 13 Maka: Elemen yang akan diperiksa: 13 Ditemukan! Misal nilai yang dicari adalah 15 Maka: Elemen yang akan diperiksa: 13, 16, 14, 21, 76, 21 Tidak Ditemukan!
Algoritma umum Posisi=0 Ada=false Perulangan selama (i<=N) kerjakan baris 4 Jika (Data[i]=x) maka Ada=true, posisi=i, jika tidak dicari lagi
Jangan Lupa, Data harus diurutkan terlebih dahulu! ~ Binary Search ~ Jangan Lupa, Data harus diurutkan terlebih dahulu!
Prinsip pencarian Biner Mula-mula diambil posisi awal=1 dan posisi akhir=N Dicari posisi data tengah dengan rumus (posisi awal + posisi akhir)/2 Data yang dicari dibandingkan dengan data tengah Jika lebih kecil (<), proses dilakukan kembali tetapi posisi akhir dianggap sama dengan posisi tengah -1 Jika lebih besar(>), proses dilakukan kembali tetapi posisi awal dianggap sama dengan posisi tengah + 1 Demikan seterusnya sampai data tengah sama dengan yang dicari.
Pencarian Biner Data yang dicari: 17 3 9 11 12 15 17 23 31 35 awal tengah akhir Cari data tengah. Rumus (1 + 9)/2 = 5 data ke 5 (15) 2. 17 dibandingkan dengan data tengah. Karena 17>15, proses dilanjutkan. Posisi awal dianggap sama dengan posisi tengah + 1 (posisi 6) 3 9 11 12 15 17 23 31 35 awal tengah akhir
Pencarian Biner Data yang dicari: 17 4. Data tengah yang baru didapat dengan rumus (6+9)/2=7. Data tengah yang baru data ke 7 (23) 3 9 11 12 15 17 23 31 35 awal tengah akhir 5. 17 dibandingkan dengan data tengah. 6. Karena 17<23, proses dilanjutkan. Posisi akhir dianggap sama dengan posisi tengah -1 (posisi 6) 3 9 11 12 15 17 23 31 35 Awal=akhir
Pencarian Biner 3 9 11 12 15 17 23 31 35 Data yang dicari: 17 7. Data tengah yang baru didapat dengan rumus (6+6)/2=6. Data tengah yang baru data ke 6 (17) 3 9 11 12 15 17 23 31 35 Awal=akhir 8. 17 dibandingkan dengan data tengah (17). 9. Data yang dicari (17) = data tengah. Data ditemukan!
Algoritma umum Ada=false, Left= 1, Right= n, location=0 Selama (Right>= left) kerjakan baris 3 sampai dengan 6 Mid:= (left+right) div 2 Jika (x>A[mid]) maka left:= mid+1 Jika (x<A[mid]) maka right:=mid-1 Jika (x=A[mid]) maka Ada=true, location=mid dan left:=right+1
Pseudocode Sequential Search Pseudocode Binary Search ?
Modularisasi & Komunikasi Antar Modul
Definisi Teknik Modular: Teknik modular pada Teknik Pemograman adalah: suata cara menyelesaikan masalah pemrograman dengan melakukan klasifikasi permasalahan Permasalahan utama dapat diklasifikasikan menjadi beberapa permasalahan yang lebih kecil spesifik Masing-masing klasifikasi mempunyai keterkaitan secara langsung untuk menyelesaikan masalah utama.
Tujuan Teknik Modular: Menyederhanakan permasalahan Menghindari penulisan proses yang sama secara berulang Penyusunan proses menjadi lebih terstruktur sesuai dengan klasifikasinya Proses penyelesaian masalah menjadi lebih mudah dipahami.
Model Teknik Modular: Begin inputData; prosesData; cetakData; End. …….. End; ProgramUtama; Begin inputData; prosesData; cetakData; End. prosesData; Begin …….. End; cetakData; Begin …….. End;
Sifat Teknik Modular: Penyelesaian masalah terdiri dari beberapa proses kecil (modul) Terdapat proses utama, yang terdiri dari beberapa modul, dan berfungsi untuk menggabungkan modul yang ada.
Sifat Teknik Modular: Deklarasi variabel dibedakan menjadi 2, yaitu: Variabel Global, yaitu variabel yang digunakan diseluruh proses, baik proses utama maupun dalam sub-proses (modul) Variabel Lokal, yaitu variabel yang hanya digunakan dalam sub-proses, dan tidak dikenali/tidak berlaku dalam proses utama Antar sub-proses dapat saling mengirimkan perubahan nilai variabel yang terjadi.
Contoh Hitung_Luas_Lingkaran const Phi=22/7 Begin Luas= Phi * r * r write Luas End Hitung_Keliling_Lingkaran Const Phi=22/7 Keliling= 2*Phi*r write Keliling Pseudocode ContohModular read r End. Contoh
Hierarchy Chart Hierarchy Chart dari contoh: ContohModular Hitung_Luas_Lingkaran Hitung_Keliling_Lingkaran
Contoh 2 Process_three_characters Prompt the operator for char1, char2, char3 Get char1, char2, char3 DOWHILE NOT (char1=‘X’ AND char2=‘X’ AND char3=‘X’) IF char1 > char2 THEN temp=char1 char1=char2 char2=temp ENDIF IF char2 > char3 THEN temp=char2 char2=char3 char3=temp IF char1>char2 THEN Output to the screen char1, char2, cha3 Prompt operator for char1, char2, char3 ENDDO END Process_three_characters Prompt the operator for char1, char2, char3 Get char1, char2, char3 DOWHILE NOT (char1=‘X’ AND char2=‘X’ AND char3=‘X’) Sort_three_characters Output to the screen char1, char2, cha3 Prompt operator for char1, char2, char3 ENDDO END IF char1 > char2 THEN temp=char1 char1=char2 char2=temp ENDIF IF char2 > char3 THEN temp=char2 char2=char3 char3=temp IF char1>char2 THEN
Hierarchy Chart dari contoh2: Process_three_characters Sort_three_characters
Komunikasi Antar Modul Data: Variabel, Konstanta, Literal Elementary Data Integer Real Character Boolean Struktur Data Record File Array String
Variabel, Konstanta, Literal Adalah nama yang diberikan bagi sekumpulan sel memory yang di rancang untuk menyimpan data tertentu Disebut variabel karena data yang tersimpan dapat diubah Konstanta Sebuah data dengan nama dan nilai yang akan tetap sama selama program dijalankan Literal Adalah konstanta yang namanya menunjukkan nilainya Matakuliah MPP
Elementary data Integer: Real : Character Boolean: Menampilkan set bilangan baik positif maupun negatif Real : Menampilkan set bilangan, positif dan negatif dan juga desimal Character Menampilkan karakter alphabet, dengan tambahan spesial karakter Boolean: Menampilkan flag atau switch yang berisi satau dari dua kemungkinan – False atau True Matakuliah MPP
Struktur Data Record: File Array String Sebuah kumpulan data / field yang memiliki hubungan antara satu dengan yang lainnya File Sebuah kumpulan record. Array Sebuah struktur data yang terdiri dari sejumlah variabel yang mempunyai tipe yang sama dan diakses dengan nama yang sama juga String Sebuah kumpulan karakter Matakuliah MPP
Komunikasi Antar Modul Global Data Variabel yang dikenal diseluruh program tersebut, dan dapat diakses dari setiap modul di program tersebut. Local Data Variabel yang didefiniskan disebuah modul. Variabel ini hanya dikenal di modul dimana variabel tersebut didefinisikan Jangkauan Data Adalah bagian program dimana variabel didefinisikan dan dapat diakses. Contoh: jangkauan data untuk global data adalah seluruh program Side Effect Adalah sebuah bentuk komunikasi antar modul dengan bagian lain dalam program.
Komunikasi Antar modul Passing Parameter Menyampaikan data dari modul pemanggil ke modul yang dipanggil (subordinate) Menyampaikan informasi dari subordinate ke modul pemanggil Informasi/data yang dikirim atau diterima di pass 2 arah dari modul pemanggil ke subordinate maupun sebaliknya
Parameter Parameter Data Parameter Status flag/boolean Dalam merancang modul sebaiknya lebih banyak menggunakan parameter data Hindari menggunakan parameter status sebanyak mungkin
Process_Three_Characters Hierarchi Chart / bagan susun Process_Three_Characters Sort_three_characters Char1 Char2 Char3
Struktur Chart
Penggunaan Parameter Contoh penggunaan parameter: Pseudocode untuk melakukan Sorting 3 karakter yang dibaca dari keyboard A. Input Processing Output Char_1 Char_2 Char_3 Prompt for characters Accept three characters Sort three characters Output three characters
B. Hierarchy chart Process_three_characters Read_three_characters char_1,char_2,char_3 Read_three_characters Sort_three_characters Print_three_characters
Pseudocode_three_characters Read_three_characters (char_1, char_2, char_3) DOWHILE Not (Char_1=‘X’ AND char_2=‘X’ AND char_3=‘X’) Sort_three_characters(char_1, char_2, char_3) Print_three_characters(char_1, char_2, char_3) Read_three_characters(char_1, char_2, char_3) ENDDO END Prompt the operator for char_1, char_2, char_3 Get char_1, char_2, char_3 IF char_1>char_2 THEN temp=char_1 char_1=char_2 char_2=temp ENDIF IF char_2>char_3 THEN temp=char_2 char_2=char_3 char_3=temp ENDIF IF char_1>char_2 THEN temp=char_1 char_1=char_2 char_2=temp END Print_three_characters(char_1,char_2,char_3) Output to the screen char_1,char_2,char_3
Contoh 2 Dengan kasus yang sama (membandingkan 3 karakter), tetapi diselesaikan dengan modular yang berbeda
Pseudocode_three_characters Read_three_characters (char_1, char_2, char_3) DOWHILE Not (Char_1=‘X’ AND char_2=‘X’ AND char_3=‘X’) Sort_three_characters(char_1, char_2, char_3) Print_three_characters(char_1, char_2, char_3) Read_three_characters(char_1, char_2, char_3) ENDDO END Prompt the operator for char_1, char_2, char_3 Get char_1, char_2, char_3 IF char_1>char_2 THEN Swap_two_characters (char_1, char_2) ENDIF IF char_2>char_3 THEN Swap_two_characters (char_2, char_3) Print_three_characters(char_1,char_2, char_3) Output to the screen char_1,char_2, char_3 END Swap_two_characters(first_char, second_char) temp=first_char first_char=second_char second_char=temp
Hierarchy chart Process_three_characters Read_three_characters char_1,char_2,char_3 char_1,char_2,char_3 char_1,char_2,char_3 char_1,char_2,char_3 Read_three_characters Sort_three_characters Print_three_characters char_1,char_2,char_3 First_char,Second_char Swap_two_characters
Buatlah pseudocode dengan teknik modular untuk kasus berikut: Menentukan apakah suatu segiempat itu merupakan bujursangkar atau persegi panjang. Jika segiempat itu adalah bujursangkar, maka hitung luasnya. Jika segiempat itu adalah persegi panjang, maka hitung kelilingnya. Pada sebuah kelas terdapat n orang siswa, yang mempunyai nilai yang berbeda untuk pelajaran IPA. Hitung rata-rata nilai IPA untuk kelas tsb!
3. Memilih hasil yang diinginkan dari 2 proses yang ditawarkan: a. Menampilkan deret bilangan genap dan total nilai bilangan genap, dari 6 data yg dimasukkan b. Menampilkan bilangan ganjil dan total nilai bilangan ganjil dari 5 data yg dimasukkan.
Tujuan Harga net/tiket Jakarta Jam penerbangan 4. Sebuah jasa penerbangan di kota X mempunyai 3 tujuan penerbangan dengan harga tiket penerbangan dari kota X adalah sbb: Tujuan Harga net/tiket Jakarta Jam penerbangan 06.00 & 07.00 Rp. 299.000,- 12.00 Rp. 199.000,- 15.00 Rp. 145.000,- Bali Jam penerbangan 06.00 & 07.00 Rp. 310.000,- 20.00 Rp. 99.000,- Surabaya Jam penerbangan 07.00 Rp. 355.000,- Apabila penumpang membawa anak kecil berusia 0 – 24 bulan, maka dia akan dikenakan biaya tambahan Rp. 75.000,-/per anak. Namun apabila umur anak di atas 24 bulan, maka dia harus membeli 1 tiket penuh. Harga tiket penerbangan berlaku untuk hari Jumat, Sabtu, Minggu dan Senin saja. Di luar hari itu tiket tersebut dipotong sebesar 15%. Setiap 1 tiket dikenakan biaya administrasi: Rp. 30.000,-, Iuran wajib Jasa Raharja: Rp. 6000,-, Asuransi: Rp. 12.500,- dan Pajak sebesar 10% dari harga net tiket. Hitunglah transaksi penjualan tiket pesawat tersebut di atas!
Latihan Modul comAvg(data,avg) tidak memenuhi kriteria perancangan yang baik karena kohesinya bukan fungsional. Bagilah modul tersebut menjadi dua modul sehingga masing-masing mempunyai kohesi fungsional. Modul pertama tetap dengan nama comAvg(data,avg) dan modul kedua dengan nama comSum(data,sum) sedemikian rupa sehingga modul kedua merupakan subordinat dari modul pertama. Tulislah algoritma kedua modul ini dan kemudian gambarlah structured chart-nya. Jika modul-modul intDt(data), comAvg(data,avg), dan outDt(data…avg) adalah subordinat mainProgram, sedangkan comSum(data,sum) adalah subordinat comAvg(data,avg), gambarlah structured chart, termasuk parameter input dan output, diantara mereka.
Reference Anne, Lesley R, “Simple Program Design: A Step-by-Step Approach” Hand-out Kuliah Logika & Algoritma: STIKOM Surabaya Dari Berbagai sumber