MODUL MATA KULIAH ALGORITMA DAN PEMROGRAMAN 2 STIMIK EL RAHMA JOGJAKARTA 2015 JURUSAN : SISTEM INFORMASI SEMESTER GENAP 2015 MATA KULIAH : LOGIKA DAN ALGORITMA REVIEW DESKRIPSI SINGKAT MATA KULIAH Mata Kuliah ini bermaksud untuk mempelajari dasar dari langkah-langkah dalam membuat design/rancangan pemecahan masalah secara terstruktur. Rancangan pemecahan masalah ini lebih dikenal dengan nama Algoritma. Yang selanjutnya selanjutnya algoritma ini bisa diimplementasikan pada program, tidak bergantung bahasa pemrograman yang akan akan digunakan. MATERI MATA KULIAH 1. Pendahuluan ( Pengenalan Algoritma) 2. Struktur dasar Algoritma (Notasi, Kondisi, Aksi), nama dan harga 3. Tipe data dasar (Boolean, Integer, Real, Char, String) 4. Tipe Bentukan (Record, Procedure, Fungsi). 5. Pengkondisian (if_endif, if_else_endif, case_endcase) 6. Perintah Pengulangan (while_endwhile), (repeat_until) dan (for_endfor) 7. Procedure (variabel global dan lokal) dan parameter input, output dan input/output 8. Function (parameter input dan output) 9. Array (larik) DAFTAR PUSTAKA 1. Inggriani Liem , ”Algoritma dan Pemrograman”, ITB,1992 2. Knuth, “Fundamental of Algorithm”, Addison Wisley, 1978 3. Mewati Ayub, Ir “Dasar-Dasar Pemrograman”, DCI, 1994 4. Niklause Wirth, “Algorithms + Data Structures = Programs”, Prentice Hall, 1991 5. Antony Pranata, “Algoritma dan Pemrograman”,Graha Ilmu, Yogyakarta, 2005 6. Rinaldi Munir, “Algoritma dan Pemrograman dalam Bahasa Pascal dan C”, Informatika, 2005 MATERI 4 NOTASI PENGKONDISIAN/PENCABANGAN Struktur runtunan hanya terdapat pada program sederhana. Pada umumnya masalah yang akan diselesaikan memiliki beberapa alternatif pelaksanaan aksi. Suatu aksi hanya dilakukan bila persyaratan atau kondisi tertentu dipenuhi. Pernyataan (statement) ataupun instruksi pada program, seringkali tidak hanya dilaksanakan sekali jalan saja, atau tanpa kondisi,akan tetapi : Pada bagian penting, perlu mempertimbangkan kondisi dan persyaratan agar dapat menempuh kelanjutan keputusan yang tepat. Tidak jarang menghadapi berbagai alternatif, dan harus menentukan pilihan yang memberikan penyelesaian dengan tepat. Struktur Kontrol Pertimbangan Kondisi dan Keputusan (Pencabangan) Adakalanya dalam kehidupan sehari-hari kita dihadapkan pada sebuah kondisi atau lebih, dimana kita harus memilih salah satunya. Begitu pula dengan program, pada suatu saat kita perlu membuat suatu aturan untuk melakukan pemilihan terhadap suatu kondisi, yang memungkinkan kita untuk membuat deretan instruksi yang sama, namun menghasilkan eksekusi yang berbeda-beda. Notasi Pencabangan adalah notasi yang pada umumnya akan menyelesaikan suatu kasus dengan beberapa alternatif pelaksanaan aksi. Mengapa dibutuhkan? Untuk membantu dalam menentukan alternatif solusi pelaksanaan aksi yang akan dilakukan berdasarkan kondisi yang telah ditentukan Penentuan kondisi dan aksi yang dilakukan bergantung pada jumlah kasus yang terdapat pada suatu masalah tersebut : satu kasus, dua kasus, atau bahkan lebih. Algoritma Notasi Pencabangan dibagi berdasarkan kasus: Satu Kasus (IF - THEN) Dua Kasus (IF – THEN - ELSE) Tiga Kasus atau lebih (IF – THEN – ELSE, CASE) 4.1 SATU KASUS (IF - THEN) Notasi algoritma untuk analisis dengan satu kasus adalah dengan menggunakan konstruksi IF – THEN (jika-maka) dalam bentuk : IF kondisi_dipenuhi (true) THEN Laksanakan_aksi EndIf Ket : Kondisi → berupa ekspresi yang menghasilkan true atau false Aksi → instruksi/pernyataan yang akan dilaksanakan jika kondisi yang dipasangkan dengan aksi yang bersangkutan dipenuhi/bernilai benar (true). Bila kondisi bernilai salah (false), tidak ada pernyataan apapun yang dikerjakan. Kata endif sengaja ditambahkan untuk mempertegas awal dan akhir struktur IF-THEN. Notasi Pascal : if kondisi_dipenuhi (true) then Laksanakan_aksi Jika Aksi lebih dari satu buah, maka : if kondisi_dipenuhi (true) then begin Laksanakan_aksi end; contoh-contoh: (a) if x > 100 then x :=x+1 endif (b) if kar = ‘*’ then stop:=true endif (c) if max >10 then max:=x endif Contoh Satu Kasus: Tulis algoritma yang membaca sebuah bilangan bulat dari suatu piranti masukan. Diminta mencetak pesan ”Bilangan genap” jika bilangan tersebut genap.Bilangan genap adalah bilangan yang habis dibagi 2. Program Genap Deklarasi : Bil : integer Algoritma : Write (’Masukan Bilangan :’) Read (Bil) If Bil mod 2 =0 Then Write (’Bilangan Genap’) Endif Pascal : Program Genap; Var Bil : integer; Begin Write (’Masukan Bilangan :’); Read (Bil); If Bil mod 2 =0 Then Write (’Bilangan Genap’); End. 4.2 DUA KASUS (IF – THEN - ELSE) Notasi algoritma untuk analisis dengan dua kasus adalah dengan menggunakan konstruksi IF – THEN ELSE (jika-maka-kalau-tidak) dalam bentuk: IF kondisi_dipenuhi (true) THEN Laksanakan_aksi1 Else {kondisi_tidak dipenuhi (false)} Laksanakan_aksi2 EndIf Notasi Pascal : if kondisi_dipenuhi (true) then Laksanakan_aksi1 else {kondisi_tidak dipenuhi (false)} Laksanakan_aksi2; Keterangan : Aksi1 dilaksanakan jika kondisi bernilai benar, sebaliknya jika kondisi bernilai salah maka Aksi2 akan dilaksanakan, bisa diperhatikan bahwa else menyatakan ingkaran (negation) dari kondisi. Contoh-contoh: (a) if a>0 then write(’bilangan positif’) else write(’bukan bilangan positif’) endif (b) if (k mod 2 = 0) then write(’bilangan genap’) else write(’bilangan ganjil’) endif Contoh Dua Kasus: Tulislah program yang membaca sebuah bilangan bulat dari suatu piranti masukan. Diminta mencetak pesan ”Bilangan genap” jika bilangan tersebut adalah genap, atau ”Bilangan ganjil” jika bilangan tersebut adalah ganjil. Program Genap_Ganjil Deklarasi : Bil : integer Algoritma : Write (’Masukan Bilangan :’) Read (Bil) If Bil mod 2 =0 Then Write (’Bilangan Genap’) Else Write (’Bilangan Ganjil’) Endif Pascal : Program Genap_Ganjil; Var Bil : integer; Begin Write (’Masukan Bilangan :’); Read (Bil); If Bil mod 2 =0 Then Write (’Bilangan Genap’) Else Write (’Bilangan Ganjil’); end. 4.3 TIGA KASUS Atau Lebih Notasi algoritma untuk analisis dengan tiga kasus atau lebih adalah dengan menggunakan konstruksi IF – THEN - ELSE bertingkat-tingkat dalam bentuk : IF kondisi1_dipenuhi (true) THEN Laksanakan_aksi1 Else IF kondisi2_dipenuhi THEN Laksanakan_aksi2 Else IF kondisiN_dipenuhi THEN Laksanakan_aksiN Else Laksanakan_aksi_lain EndIf EndIf EndIf Contoh Tiga Kasus Atau Lebih: Tulislah program yang membaca sebuah bilangan bulat, lalu menentukan apakah bilangan tersebut positif, negatif, atau nol. Program Cek_Bilangan Deklarasi : Bil : integer Algoritma : Write (’Masukan Bilangan :’) Read (Bil) If Bil > 0 Then Write (’Bilangan Positif’) Else If Bil < 0 Then Write (’Bilangan Negatif’) Else Write (’Bilangan Nol’) Endif Endif Pascal : Program Cek_Bilangan; Var Bil : integer; Begin Write (’Masukan Bilangan :’); Readln (Bil); If Bil > 0 Then Write (’Bilangan Positif’) Else If Bil < 0 Then Write (’Bilangan Negatif’) Else Write (’Bilangan Nol’); end. 4.4 Struktur Kontrol Pemilihan Alternatif (Case ) Untuk masalah dengan dua kasus atau lebih, struktur CASE, dapat menyederhanakan penulisan if_then_else. CASE... OF... merupakan struktur kontrol pemilihan alternatif, dimana dapat dipilih salah satu pelaksanaan aksi diantara sejumlah alternatif kondisi yang disajikan. Notasi Algoritmik : CASE <ekspresi> OF Alternatif_Kondisi1 : laksanakan_aksi1 Alternatif_Kondisi2 : laksanakan_aksi2 Alternatif_KondisiN : laksanakan_aksiN Otherwise Laksanakan_aksi_lain EndCase Ket : Ekspresi adalah sembarang ekspresi (aritmetika atau Boolean) yang menghasilkan suatu nilai (Konstanta). CASE memeriksa apakah nilai dari ekspresi tersebut sama dengan salah satu dari : Alternatif_Kondisi1, Alternatif_Kondisi2,….Alternatif_KondisiN Jika nilai ekspresi sama dengan alternatif kondisik, maka laksanakan_aksik Jika tidak ada satupun nilai ekspresi yang cocok, maka pernyataan sesudah Otherwise dikerjakan. Otherwise bersifat opsional, artinya boleh ditulis atau tidak didalam konstruksi CASE. Notasi Pascal : case <ekspresi> of Alternatif_Kondisi1 : laksanakan_aksi1 Alternatif_Kondisi2 : laksanakan_aksi2 Alternatif_KondisiN : laksanakan_aksiN else Laksanakan_aksi_lain end; Keterangan : Alternatif_Kondisi1, Alternatif_Kondisi2,….Alternatif_KondisiN adalah nilai yang bertipe integer, char, atau boolean. Contoh: Tulislah Algoritma yang membaca seluruh bilangan bulat yang nilainya terletak antara 1 sampai 4, lalu menuliskannya ke piranti keluaran. Misalnya : input =1, maka output=’satu’ Solusi STRUKTUR IF-THEN-ELSE PROGRAM KonversiAngka Teks {mencetak kata untuk angka 1 sampai 4} DEKLARASI: angka:integer ALGORITMA read(angka) if angka=1 then write (’satu’) else if angka=2 then write(’dua’) else if angka=3 then write(’tiga’) else if angka=4 then write(’empat’) else write(’angka yang dimasukan salah’) endif endif endif endif Solusi STRUKTUR CASE...OF… Program Angka Deklarasi : A: integer Algoritma : Write (’Masukan Angka 1-4 :’) Read (A) Case A Of 1 : Write (’Satu’) 2 : Write (’Dua’) 3 : Write (’Tiga’) 4 : Write (’Empat’) Otherwise Write (’Angka salah!’) EndCase yang anda masukan Pascal : Program Var Angka; A : integer; Begin Write (’Masukan Angka 1-4 :’); Readln (A); Case A Of 1 : Write (’Satu’); 2 : Write (’Dua’); 3 : Write (’Tiga’); 4 : Write (’Empat’); Else Write (’Angka yang anda masukan salah!’); end; end. LATIHAN 1. Buatlah algoritma untuk membaca sebuah karakter dan menentukan karakter yang dimasukan adalah karakter ’A’ atau bukan! 2. Buatlah algoritma untuk membaca sebuah bilangan bulat dari suatu papan ketik, lalu mencetak pesan bahwa ”Bilangan tersebut lebih besar dari 100” jika bilangan tersebut adalah lebih besar dari 100! 3. Buatlah algoritma yang membaca angka tahun masehi dari papan ketik, lalu menentukan apakah tahun tersebut merupakan tahun kabisat! 4. Buatlah algoritma untuk menentukan bilangan yang dimasukan adalah habis dibagi 5, jika bilangan tersebut habis dibagi 5 maka pesan tertulis ’bilangan habis dibagi 5’ jika tidak ’bilangan tidak habis dibagi 5’! 5. Buat Algoritma untuk membaca temperature air T (dalam satuan derajat celcius) pada tekanan normal, lalu menentukan apakah wujud air tersebut dalam keadaan padat (T 0 C) , Cair (0 C < T <100 C) atau Gas ( T 100 C) 6. Buat algoritma untuk menghitung Nilai Akhir : - Input : Nilai UTS,UAS,Quiz,Tugas - Nilai= Tugas* 0.1 + Quiz*0.2 + UTS*0.3+ UAS*0.4 - Dengan IF then Else tentukan Nilai akhir dimana : 80 Nilai 100 → Indeks A 70 Nilai < 80 → Indeks B 55 Nilai < 70 → Indeks C 40 Nilai < 55 → Indeks D 0 Nilai < 40 → Indeks E - Output : Tugas, Quiz, UTS, UAS, Nilai, Nilai_Akhir 7. PT XYZ membutuhkan suatu program untuk perhitungan gaji pegawai dengan ketentuan sebagai berikut: Gol I II III IV GajiPokok 1000000 850000 750000 500000 UpahLembur 20000 15000 12000 10000 Tunjangan 50% * Gaji Pokok 40% * Gaji Pokok 30% * Gaji Pokok 20% * Gaji Pokok Ppn 5% 3% 2% 1% Potongan pajak adalah ppn * GajiPokok Para pegawai bekerja selama 150 jam, bila melebihi jam tersebut maka dihitung lembur, kemudian pegawai yang sudah menikah mendapatkan Tunjangan sebesar 15% dari GajiPokok Berdasarkan ketentuan tersebut, buatlah Algoritma untuk menyelesaikan permasalah tersebut! Output yang diminta yaitu : NIK, Nama, Gol dan Gaji Bersih Rumus : 1. GajiBersih := (GajiPokok+Tunjangan) – Potongan 2. GajiBersih := ((GajiPokok+Tunjangan)+(JamLembur*UpahLembur))-Potongan MATERI 5 NOTASI PENGULANGAN Salah satu kelebihan komputer dibandingkan dengan manusia adalah kemampuannya untuk mengulang suatu instruksi, bahkan aksi, secara berulang-ulang dengan performansi yang sama. Berbeda dengan manusia yang cenderung melakukan kesalahan jika melakukan hal yang sama karena lelah atau bosan. Struktur pengulangan secara umum terdiri dari dua bagian : 1. Kondisi pengulangan, yaitu ekspresi boolean yang harus dipenuhi untuk melaksanakan pengulangan. Kondisi ini ada yang dinyatakan secara ekplisit oleh pemrogram atau dikelola sendiri oleh komputer (implisit). 2. Badan pengulangan, yaitu aksi/pernyataan yang harus diulang selama kondisi yang ditentukan untuk pengulangan masih dipenuhi. Disamping itu, struktur pengulangan biasanya disertai dengan bagian : 1. Inisialisasi, yaitu aksi yang dilakukan sebelum pengulangan dilakukan pertama kali. 2. Terminasi, yaitu aksi yang dilakukan setelah pengulangan selesai dilaksanakan. Insialisasi dan terminasi tidak selalu harus ada, namun pada berbagai kasus inisisalisasi umumnya diperlukan. Struktur pengulangan secara umum : <inisialisasi> awal pengulangan badan pengulangan akhir pengulangan <terminasi> Pengulangan harus berhenti, ini yang harus dijamin oleh pemrogram. Karena algoritma yang tidak pernah berhenti/pengulangan yang terus menerus (looping) adalah algoritma yang salah. Struktur Kontrol pengulangan terdiri dari : a. Pernyataan FOR b. Pernyataan WHILE a. Pernyataan REPEAT 5.1 Pernyataan FOR Adalah pengulangan yang paling sederhana. Pengulangan ini dipakai jika kita mengetahui berapa kali pengulangan akan dilakukan. Bentuk umum pernyataan FOR ada dua macam, yaitu menaik (ascending) atau menurun (descending). FOR menaik Bentuk umum struktur kontrol FOR menaik ini, dapat dirumuskan dengan : Notasi Algoritmik : FOR (nama_pencacahnilai_awal) TO (nilai_akhir) (aksi/pernyataan) EndFor DO Keterangan: Aksi/pernyataan adalah satu atau lebih instruksi yang diulang. Keterangan: Nilai_awal dan nilai_akhir pada umumnya bilangan integer atau karakter, asal nilai_akhir ≥ nilai_awal Pengulangan dilaksanakan berulang-ulang tanpa kondisi atau syarat apapun dengan jumlah ulangan= nilai_akhir – nilai_awal + 1 Pada awalnya, pencacah diinisialisasi dengan nilai_awal. Nilai pencacah secara otomatis bertambah satu setiap kali badan pengulangan dimasuki, sampai akhirnya nilai pencacah = nilai_akhir. Notasi Pascal : for (nama_pencacah:=nilai_awal) to (nilai_akhir) do begin (aksi/pernyataan) End; Contoh : Misalkan adalah : kita ingin mencetak angka 1 sampai 10, maka algoritma Algoritmik : Program Tulis_nomor Deklarasi : nomor: integer Algoritma : FOR nomor1 To 10 DO write(nomor) EndFor Pascal : Program Var Tulis_nomor; nomor : integer; Begin for nomor:= 1 to 10 do writeln(nomor); end. FOR menurun Bentuk umum struktur kontrol FOR menurun ini, dapat dirumuskan dengan : dan programnya Notasi Algoritmik : (nama_pencacahnilai_awal) DOWNTO (nilai_akhir) FOR DO (aksi/pernyataan) EndFor Keterangan: Aksi/pernyataan adalah satu atau lebih instruksi yang diulang. Nilai_awal dan nilai_akhir pada umumnya bilangan integer atau karakter, asal nilai_awal ≥ nilai_akhir Pengulangan dilaksanakan berulang-ulang tanpa kondisi atau syarat apapun dengan jumlah ulangan= nilai_awal – nilai_akhir + 1. Pada awalnya, pencacah diinisialisasi dengan nilai_awal. Nilai pencacah secara otomatis berkurang satu setiap kali badan pengulangan dimasuki, sampai akhirnya nilai pencacah = nilai_akhir. Notasi Pascal : for (nama_pencacah:=nilai_awal) downto (nilai_akhir) do begin (aksi/pernyataan) end; Contoh : Misalkan kita ingin meghitung mundur angka dari Algoritmik : 10 sampai 1, maka algoritma dan programnya adalah : Program hitung_mundur Deklarasi : nomor: integer Algoritma : FOR nomor10 Downto 1 DO write(nomor) EndFor Pascal : Program Var Hitung_mundur; nomor : integer; Begin for nomor:= 10 downto 1 do writeln(nomor); end. 5.2 Pernyataan WHILE Bentuk umum struktur kontrol WHILE dapat dirumuskan dengan : WHILE (kondisi_pengulangan) DO (aksi/pernyataan) EndWhile Keterangan: Pengulangan bisa tidak dilakukan , jika pada saat awal, kondisi_pengulangan tidak terpenuhi (false). Tidak mengetahui berapa kali pengulangan akan dikerjakan Kondisi pengulangan akan diperiksa sebelum masuk ke aksi / pernyataan. Pengulangan akan dilaksanakan berulang-ulang jika kondisi_pengulangan dipenuhi (true). Di dalam pernyataan, harus ada instruksi yang mengubah nilai kondisi agar pengulangan berhenti. Notasi Pascal : while (kondisi_pengulangan) do begin (aksi/pernyataan) end; Contoh : Buat algoritma/program untuk menampilkan angka sesuai dengan angka yang di-input dari keyboard. Program akan berhenti jika user meng-input angka 0 ; Algoritmik : Program CetakAngka Deklarasi : i,angka: integer Algoritma : write('Masukan angkanya: ') read(angka) i1 While (angka ≠ 0) do write(‘Angka yang anda input:’, angka) write('Masukan angkanya: ') read(angka) ii+1 EndWhile Pascal : Program Var CetakAngka; i, angka : integer; Begin write('Masukan angkanya: '); readln(angka); i:=1; While (angka <> 0) do Begin writeln(‘Angka yang anda input:’, angka); write('Masukan angkanya: '); readln(angka); ii+1; end end. 5.3 Pernyataan REPEAT Bentuk umum struktur kontrol REPEAT dapat dirumuskan dengan : REPEAT (aksi/pernyataan) UNTIL (kondisi_berhenti) Keterangan: Aksi / pernyataan akan dikerjakan minimal satu kali , karena pernyataan dilaksanakan terlebih dahulu kemudian baru diperiksa kondisi berhenti. Aksi / pernyataan akan dikerjakan berulang-ulang dan akan berhenti jika kondisi berhenti terpenuhi Tidak mengetahui berapa kali pengulangan akan dikerjakan Di dalam pernyataan, harus ada instruksi yang mengubah nilai kondisi agar pengulangan berhenti.. Notasi Pascal : repeat begin (aksi/pernyataan) end; until (kondisi_berhenti) Contoh : Buat algoritma/program untuk menampilkan menu masakan sebagai berikut : Menu Masakan 1. Ayam Goreng 2. Ayam Tulang Lunak 3. Ayam Bakar 4. Keluar Dan membaca nomor pilihan menu yang diinput oleh user. Kemudian tampilkan pesan nomor menu yang di-input. Misalnya : input : 1 Output : ”Anda memilih Ayam Goreng” Algoritmik : sesuai dengan Program Memilih_Menu Deklarasi : pilihan : char Algoritma : Repeat write(‘Menu Masakan’) write(‘1.Ayam Goreng’) write(‘2. Ayam Tulang Lunak’) write(‘3. Ayam Bakar’) write(‘4. Keluar’) write(‘Masukan pilihan anda:’) read (pilihan) case pilihan of ’1’ : write (‘Anda memilih Ayam Goreng’) ’2’ : write (‘Anda memilih Ayam Tulang lunak’) ’3’ : write (‘Anda memilih Ayam Bakar’) ’4’ : exit else (‘Menu yang anda pilih salah’) endcase Until (pilihan=’4’) Pascal : Program Var MemilihMenu; pilihan : char; Begin Repeat writeln(‘Menu Masakan’); writeln(‘1.Ayam Goreng’); writeln(‘2. Ayam Tulang Lunak’); writeln(‘3. Ayam Bakar’); writeln(‘4. Keluar’); write(‘Masukan pilihan anda:’); readln (pilihan); case pilihan of ’1’ : writeln (‘Anda memilih Ayam Goreng’); ’2’ : writeln (‘Anda memilih Ayam Tulang lunak’); ’3’ : writeln (‘Anda memilih Ayam Bakar’); ’4’ : exit; else writeln(‘Menu yang anda pilih salah’); end; Until (pilihan=’4’); end. Kesimpulan : FOR digunakan untuk proses pengulangan yang jumlah pengulangannya dapat diketahui diawal. WHILE fungsinya sama seperti FOR, tetapi WHILE juga dapat digunakan untuk proses yang jumlah pengulangannya tidak dapat ditentukan sebelum eksekusi. REPEAT fungsinya sama seperti WHILE, kita dapat menggunakan WHILE maupun REPEAT untuk masalah-masalah tertentu. Tetapi, pada beberapa masalah, pemilihan WHILE atau REPEAT bergantung kepada persoalannya. Ini artinya, ada masalah yang hanya benar bila menggunakan struktur WHILE, tetapi bisa fatal bila menggunakan REPEAT. Untuk mengetahui struktur mana yang lebih tepat, kita harus mengetahui perbedaannya, yaitu : Pada Konstruksi REPEAT, kondisi pengulangan diperiksa pada akhir pengulangan. Jadi instruksi di dalam badan pengulangan dilaksanakan dulu, baru pemeriksaan kondisi dilakukan. Konsekuensinya badan pengulangan dilaksanakan paling sedikit satu kali. Pada konstruksi WHILE, kondisi pengulangan diperiksa di awal pengulangan. Jadi instruksi didalam badan pengulangan hanya dapat dilaksanakan jika pemeriksaan kondisi menghasilkan nilai true. Konsekuensinya badan pengulangan mungkin tidak akan pernah dilaksanakan, bila kondisi pengulangan pertama kali bernilai false. Jadi : → Gunakan konstruksi WHILE pada kasus yang mengharuskan terlebih dahulu pemeriksaan kondisi objek sebelum objek tersebut dimanipulasi → Gunakan konstruksi REPEAT pada kasus yang terlebih dahulu memanipulasi objek, baru kemudian memeriksa kondisi objek tersebut. Latihan 1. 2. 3. 4. 5. 6. 7. 5.4 Tuliskanlah algoritma untuk menentukan nilai terkecil dari N buah data integer yang dibaca dari papan ketik. Nilai N dibaca terlebih dahulu (N>0) Buat algoritma/program untuk menampilkan kata “Saya sedang belajar pemrograman” sebanyak 50 kali. Buat algoritma/program untuk menulis angka deret tambah mulai dari angka 0 hingga 100 dengan pertambahan 10. Sehingga tampilan output di layar : 0 10 20 30 40 50 60 70 80 90 100 (dengan selang 2 spasi diantara angka-angka itu). Buat algoritma/program untuk menampilkan jumlah angka 20 bilangan asli pertama. Bilangan asli adalah bilangan bulat dimulai dari 1,2,3,…. Buat algoritma/program untuk membuat Daftar telepon. Daftar Telepon berisi Nama dan No.Telp. Pertama kali dibaca berapa jumlah data Nama dan No.Telp yang akan diinput, kemudian masukan data Nama dan No.Telp sesuai dengan jumlah data yang dibaca dari keyboard. Buat algoritma/program untuk menghitung nilai rata-rata dari N buah data bilangan bulat yang dibaca dari keyboard. Nilai rata-rata adalah jumlah seluruh data dibagi dengan banyaknya data. Misalnya, jika N=5 dan data bilangan yang dibaca berturut-turut adalah 2,5,3,4,2 maka nilai rata-ratanya adalah (2+5+3+4+2)/5=16/5=3.2. Buat algoritma untuk memeriksa apakah password dari suatu kartu ATM diterima atau ditolak. Pakailah flag Ok bertipe Boolean. Buatlah password sebagai konstanta= ‘100107’. Pemasukan password boleh diulang sampai 3x. Jika password benar, Output : ‘PIN benar, lanjutkan proses’ Jika password salah, Output : ‘PIN salah, ulangi lagi’ Jika password 3x salah, Output : ‘Kartu ditolak!’ MESIN ABSTRAK Mesin abstrak menggambarkan dalam suatu mesin terdapat pita yang bertipe karakter dan tipe numerik. Jika Pita bertipe karakter maka akhir dari pita tersebut ditandai dengan ’ . ’ atau ’ * ’ Jika Pita bertipe numerik maka diakhiri dari pita tersebut ditandai dengan 9999 Jika Pita hanya berisi akhiran ’ . ’ , ’ * ’ dan 9999 berarti pita kosong Contoh : Pita Karakter S A Y A * Arah pembacaannya Read (Baca) Notasi Algoritma Pita bertipe karakter Pita bertipe numerik {inisialisasi} read(x) while x ≠ ’ * ’ do aksi read(x) {dibaca kembali isi mesin karakter} endwhile {terminasi} {inisialisasi} read(x) while x ≠ 9999 do aksi read(x) {dibaca kembali isi mesin numerik} endwhile {terminasi} Contoh Kasus untuk Mesin Karakter Contoh 1: Didalam pita karakter terdapat sederatan karakter yang diakhiri dengan tanda ’ * ’, tuliskan algoritma untuk menampilkan deretan karakter tersebut! illustrasi S A Y A * PROGRAM MenampilkanKarakter {Menghitung jumlah karakter yang dimasukan} DEKLARASI x : char {data character yang dibaca dari papan ketik} ALGORITMA read(x) {baca data character} while x ≠ ‘ * ’ do write(x) read(x) endwhile {x = ’*’} {kondisi setelah pengulangan berhenti} Contoh 2: Didalam pita karakter terdapat sederatan karakter yang diakhiri dengan tanda ’ * ’, tuliskan algoritma untuk menghitung jumlah karakter yang dimasukan! illustrasi S A Y A * Jumlah karakter adalah : 4 PROGRAM HitungJumlahKarakter {Menghitung jumlah karakter yang dimasukan} DEKLARASI x : char {data character yang dibaca dari papan ketik} jumlah : integer ALGORITMA read(x) {baca data character} jumlah 0 {inisialisasi} while x ≠ ‘ * ’ do jumlah jumlah + 1 read(x) endwhile {x = ’*’} {kondisi setelah pengulangan berhenti} write(jumlah) Contoh Kasus untuk Mesin Numerik Contoh 1: Diberikan mesin bertipe integer yang terdapat sederetan angka numerik yang dimasukan dan diakhiri dengan tanda 9999. tuliskan algoritma untuk menghitung jumlah seluruh angka tersebut! illustrasi 1 3 4 2 9999 Jumlah seluruh angka tersebut adalah : 10 PROGRAM HitungJumlahAngka {Menghitung jumlah seluruh bilangan yang dimasukan} DEKLARASI x : integer {data integer yang dibaca dari papan ketik} jumlah : integer ALGORITMA read(x) {baca data integer} jumlah 0 {inisialisasi} while x ≠ 9999 do jumlah jumlah + x read(x) endwhile {x = 9999} {kondisi setelah pengulangan berhenti} write(jumlah) Contoh 2: Diberikan mesin bertipe integer yang terdapat sederetan angka numerik yang dimasukan dan diakhiri dengan tanda 9999. tuliskan algoritma untuk menghitung banyaknya angka positif dari deretan angka tersebut! illustrasi 1 -3 4 -2 -9 9999 Jumlah angka positif adalah : 2 PROGRAM BanyaknyaAngkaPositif {Menghitung jumlah bilangan positif yang dimasukan} DEKLARASI x : integer {data integer yang dibaca dari papan ketik} jumlah : integer ALGORITMA read(x) {baca data integer} jumlah 0 {inisialisasi} while x ≠ 9999 do if x > 0 then jumlah jumlah + 1 endif read(x) endwhile {x = 9999} {kondisi setelah pengulangan berhenti} write(jumlah) LATIHAN Mesin Karakter 1. Diberikan mesin bertipe karakter yang terdapat sederetan karakter yang dimasukan dan diakhiri tanda ’ * ’. Tuliskan algoritma untuk menghitung karakter ’A’ yang dimasukan! Ilustrasi M A K A N * Jumlah karakter A : 2 2. Tuliskan algoritma untuk menghitung jumlah kemunculan pasangan huruf ’an’ di dalam mesin karakter. Misalkan pada contoh dibawah ini jumlah ’an’ ada 3 buah (ditandai dengan arsiran.) Ilustrasi P A N D A N G A N * Jumlah ’an’ adalah : 3 3. Tuliskan Algoritma untuk menghitung banyaknya kata di dalam pita karakter. Kata adalah deretan karakter bukan spasi yang diakhiri dengan spasi atau titik. Ilustrasi H A R I I N I H U J A N . * Jumlah Kata adalah : 3 Mesin Integer 1. Diberikan mesin bertipe integer yang terdapat sederetan angka numerik yang dimasukan dan diakhiri dengan tanda 9999. tuliskan algoritma untuk menghitung nilai rata-rata angka tersebut! illustrasi 1 2. 3 5 6 10 9999 Diberikan mesin bertipe integer yang terdapat sederetan angka numerik yang dimasukan dan diakhiri dengan tanda 9999. tuliskan algoritma untuk menghitung jumlah bilangan genap saja! illustrasi 1 3. 3 5 6 10 9999 Diberikan mesin bertipe integer yang terdapat sederetan angka numerik yang dimasukan dan diakhiri dengan tanda 9999. tuliskan algoritma untuk menghitung jumlah angka 10 saja! illustrasi 1 10 5 6 10 9999 MATERI 6 PROCEDURE DAN FUNCTION Program yang besar lebih sulit dimengerti dan lebih sulit lagi dalam melakukan pelacakan kesalahan (Jika ada). Oleh karena itu, program sebaiknya dipecah menjadi beberapa sub program yang lebih kecil. Setiap sub program melakukan komputasi yang spesifik. Sub program yang baik adalah sub program yang independent dari program utama, sehingga programnya dapat dirancang tanpa mempermasalahkan bagaimana sub program tersebut dilakukan, tetapi cukup memikirkan apa yang ia lakukan. Sub program yang bagus menyembunyikan detil operasi dari bagian program yang tidak perlu tahu tentang sub-program tersebut. Teknik pemecahan program menjadi sejumlah sub program dinamakan teknik pemrograman modular. Modular artinya penyelesaian seluruh masalah dapat dipecah-pecahkan dengan unsur-unsur langkah penyelesaian spesifik berbentuk modul yang berwujud prosedur (procedure) dan fungsi (function). Keuntungan Pemrograman Modular Untuk aktivitas yang harus dilakukan lebih dari satu kali, modularisasi menghindari penulisan teks program yang sama secara berulangkali. Disini sub-program cukup ditulis sekali saja, lalu sub-program dapat dipanggil dari bagian lain di dalam program. Disini, penggunaan sub-program dapat mengurangi panjang program. Kemudahan menulis dan menemukan kesalahan (debug) program. Kemudahan menulis akan sangat berguna pada masalah besar yang dikerjakan oleh satu tim pemrogram yang beranggotakan beberapa orang. Masalah yang akan diprogram dipecah menjadi beberapa masalah yang lebih kecil. Setiap masalah yang lebih kecil tesebut ditulis kedalam modul yang spesifik dan dikerjakan oleh orang yang berbeda. Satu modul bisa berisi dari satu atau lebih sub-program. Seluruh modul diintegrasikan menjadi satu buah program yang lengkap.Program yang modular menjadi lebih mudah untuk dibaca dan dimengerti. Program yang tidak modular sulit dipahami, khususnya kalau program tersebut panjang atau terdiri dari puluhan, ratusan, atau ribuan baris instruksi. Karena setiap sub-program melakukan aktivitas spesifik, maka apabila terdapat kesalahan di dalam program, kesalahan tersebut cukup dilokalisir di dalam sub-program yang bersangkutan. Kebanyakan program komputer ditulis modular, meskipun program tersebut tidak melibatkan ekseskusi yang berulang dari aktivitas yang sama. Pemecahan program menjadi modul-modul yang lebih kecil umumnya dianggap sebagai praktik pemrograman yang baik dan terstruktur. Terdapat 2 bentuk sub-program, yaitu prosedur (procedure) dan fungsi (function). Dimana struktur setiap sub-program tersebut pada hakikatnya sama dengan struktur program biasa, yaitu ada bagian judul (header) yang berisi nama modul, bagian deklarasi, dan badan (body) program yang berisi instruksi yang akan dilaksanakan. Variabel Global dan Variabel Lokal Variabel global adalah variabel yang dapat dipakai diseluruh program, di program utama atau di dalam procedure atau function. Variabel lokal hanya dapat dipakai di tempat pendefinisiannya. Jika variabel lokal didefinisikan didalam procedure, maka hanya procedure tersebut yang mengenalnya. Suatu variabel atau peubah akan dideklarasikan global atau local tergantung kepada penggunaan nama tersebut. Jika suatu variabel digunakan di seluruh bagian program (termasuk di dalam prosedur), maka variabel tersebut harus dideklarasikan global. Sebaliknya, jika variabel tersebut hanya digunakan di dalam prosedur/function saja, maka nama variabel “sebaiknya” dideklarasikan sebagai variabel lokal saja, meskipun bila dideklarasikan global pun masih tetap benar. Usahakanlah menggunakan variabel global sesedikit mungkin. Penggunaan variabel lokal akan memberikan keuntungan, sebab variabel lokal membuat program lebih elegan, dan dapat meminimumkan usaha pencarian kesalahan yang disebabkan oleh nama tersebut, karena variabel lokal hanya dipakai di dalam lingkup procedure atau function saja. Procedure/function yang baik adalah yang independen dari program pemanggilnya. Pernyataan ini menyiratkan bahwa procedure/function yang baik tidak menggunakan variabel-varibel global di dalam badan procedur / function-nya. Jika program utama perlu mengkomunikasikan nilai variabel global ke dalam procedure/fucntion, maka ada satu cara untuk melakukannya yaitu dengan menggunakan parameter. Karena parameter dapat mengurangi kebutuhan penggunaan variabel global. 6.1 Parameter Kebanyakan program memerlukan informasi antara procedure ( atau fungsi) dimana ia dipanggil. Penggunaan parameter menawarkan mekanisme pertukaran informasi tersebut. Tiap item data ditransfer antara parameter actual dan parameter formal yang bersesuaian. Parameter actual adalah parameter yang disertakan pada waktu pemanggilan, sedangkan parameter formal adalah parameter yang dideklarasikan didalam bagian header procedure/function itu sendiri. Ketika procedure/function dipanggil, parameter actual menggantikan parameter formal. Tiap-tiap parameter actual berpasangan dengan parameter formal yang bersesuaian. Berdasarkan maksud penggunaannya, terdapat tiga jenis parameter formal yang disertakan didalam procedure/function, yaitu : a. Parameter masukan (input) → parameter yang nilainya berlaku sebagai masukan untuk procedure/function. b.Parameter keluaran (output)→parameter yang menampung keluaran yang dihasilkan oleh procedure. c.Parameter masukan/keluaran (input/output parameter)→ parameter yang berfungsi sebagai masukan sekaligus keluaran bagi procedure tersebut. Dalam function hanya ada parameter masukan saja. Bila procedure menghasilkan keluaran yang digunakan oleh program pemanggil, gunakan parameter keluaran untuk menampung keluaran tersebut. Sebaliknya, bila procedure tidak menghasilkan keluaran, atau kalaupun menghasilkan keluaran dan ternyata keluaran tersebut hanya digunakan di dalam procedure itu saja, gunakan parameter masukan. Bila procedure menerima masukan sekaligus keluaran pada parameter yang sama, gunakan parameter masukan/keluaran. Aturan penting yang harus diamati dalam korespondensi satu-satu antara parameter actual dan parameter formal adalah : a. Jumlah parameter actual pada pemanggilan procedure/function harus sama dengan jumlah parameter formal pada deklarasi procedure/function-nya. b. Tiap parameter actual harus bertipe sama dengan tipe parameter formal yang bersesuaian. 6.2 PROCEDURE (PROSEDUR) Procedure adalah modul program yang mengerjakan tugas/aktivitas yang spesifik dan menghasilkan suatu efek netto. Pada beberapa bahasa pemrograman, procedure dikenal dengan nama subroutine. Atau lebih jelasnya, procedure merupakan sekumpulan instruksi yang dibungkus yang akan dipakai / dipanggil dalam program utama. Ini berarti, instruksi-instruksi didalam procedure baru dapat dilaksanakan hanya bila procedure tersebut diakses. Struktur Procedure : Notasi Algoritmik : Procedure NamaProcedure(deklarasi parameter,jika ada) {Spesifikasi procedure, berisi penjelasan tentang apa yang dilakukan oleh prosedur ini, keadaan sebelum prosedur dijalankan dan setelah prosedur dijalankan} Deklarasi : {Semua nama yang dipakai dalam prosedur didefinisikan disini dan hanya berlaku lokal di dalam prosedur} Algoritma : {Badan prosedur, berisi kumpulan instruksi} Notasi Pascal : Procedure NamaProcedure(deklarasi parameter,jika ada); {Spesifikasi procedure, berisi penjelasan tentang apa yang dilakukan oleh prosedur ini, keadaan sebelum prosedur dijalankan dan setelah prosedur dijalankan} (* Deklarasi *) var {Semua nama yang dipakai dalam prosedur didefinisikan disini dan hanya berlaku lokal di dalam prosedur} (*Algoritma*) begin {Badan prosedur, berisi kumpulan instruksi} end; Keterangan : Dalam bahasa Pascal, pendefinisian prosedur ditulis bersatu di dalam program utama, kecuali jika direalisasikan sebagai unit. Prosedur diletakkan dibawah kata var. Bahasa Pascal memungkinkan prosedur mempunyai parameter masukan, parameter keluaran, dan parameter masukan/keluaran. Parameter formal yang bertipe keluaran atau masukan/keluaran harus diawali dengan kata kunci var, sedangkan untuk parameter formal yang bertipe masukan tidak diawali dengan kata kunci var. Argumen parameter aktual dilewatkan ke parameter formal bertipe masukan sebagai “by value”, sedangkan bila parameter formalnya bertipe keluaran atau masukan/keluaran, maka argumen parameter aktual dilewatkan sebagai “By reference” Contoh procedure : Algoritmik: Procedure Luas_Segitiga {Procedure tanpa parameter) Deklarasi : {Variabel Lokal} alas,tinggi,luas: real Algoritma : write('Masukan alas segitiga: ') read(alas) write('Masukan tinggi segitiga: ') read(tinggi) luas (alas*tinggi)/2 write('luas segitiga: ',luas) Procedure Tukar1 ( input A,B :integer) {Procedure dengan 2 parameter input) Deklarasi : Temp:integer Algoritma : Temp A A B B Temp Procedure Maksimum ( input A,B:integer; output Maks:integer) {Procedure dengan 2 parameter input dan 1 parameter output) Algoritma : if A>B then maks A else maks B endif Procedure Tukar2 ( input /output A,B :integer) {Procedure dengan 2 parameter input/output) Deklarasi : Algoritma : Temp:integer Temp A A B B Temp Program Contoh_Prosedur Deklarasi : x,y,maksi:integer Procedure Luas_Segitiga Procedure Tukar1 ( input A,B :integer) Procedure Maksimum ( input A,B:integer; output Procedure Tukar2 ( input /output A,B :integer) Maks:integer) Algoritma : {Program Utama} Luas_Segitiga write('Masukan Angka ke-1: ') read(X) write('Masukan Angka ke-2: ') read(Y) Maksimum(X,Y,maksi) write('Angka ke-1: ',x,' ','Angka ke-2: ',Y,' ','Nilai Maksimum: ',maksi) Tukar1(X,Y) Write('Angka ke-1 sekarang nilainya: ',X) Write('Angka ke-2 sekarang nilainya: ',Y) Tukar2(X,Y) Write('Angka ke-1 sekarang nilainya: ',X) Write('Angka ke-2 sekarang nilainya: ',Y) Pascal: Program Contoh_prosedur; var X,Y,maksi:integer; procedure luas_segitiga; var alas,tinggi,luas:real; begin write('masukan alas segitiga: '); readln(alas); write('masukan tinggi segitiga: '); readln(tinggi); luas:=(alas*tinggi)/2; write('Luas segitiga:',luas); end; procedure tukar1 (a,b:integer); var temp:integer; begin temp:=a; a:=b; b:=temp; end; procedure maksimum(a,b:integer;var maks:integer); begin if a>b then maks:=a else maks:=b end; procedure tukar2 (var a,b:integer); var temp:integer; begin temp:=a; a:=b; b:=temp; end; {Program Utama} begin luas_segitiga; write ('Masukan angka ke-1:'); readln(X); write ('Masukan angka ke-2:'); readln(Y); maksimum(X,Y,maksi); writeln('Angka ke-1:',x,' ','Angka ke-2:',Y,' ','Nilai maksimum: ',maksi); tukar1(x,y); writeln('Angka ke-1 sekarang nilainya:',X); writeln('Angka ke-2 sekarang nilainya:',Y); tukar2(x,y); writeln('Angka ke-1 sekarang nilainya:',X); writeln('Angka ke-2 sekarang nilainya:',Y); end. 6.3 Function (Fungsi) Function adalah modul program yang memberikan/mengembalikan (return) sebuah nilai dan tipe tertentu. Sebagaimana halnya dengan procedure, function diakses dengan memanggil namanya. Selain itu, fungsi juga dapat mengandung daftar parameter formal. Parameter pada fungsi sama seperti didalam prosedur, tetapi hanya ada parameter masukan saja jika ada. Function hanya dapat mengembalikan nilai bertipe sederhana. Karena itu, tipe hasil dari fungsi haruslah dari tipe sederhana. Struktur Function : Notasi Algoritmik : Function NamaFunction(deklarasi parameter,jika ada):tipe {Spesifikasi function, berisi penjelasan tentang apa yang dilakukan dan yang dikembalikan oleh function} Deklarasi : {Semua nama yang dipakai dalam function didefinisikan disini dan hanya berlaku lokal di dalam function } Algoritma : {Badan function, berisi kumpulan instruksi-instruksi untuk menghasilkan nilai yang akan dikembalikan oleh function} Notasi Pascal : function NamaFunction(deklarasi parameter,jika ada):tipe {Spesifikasi function , berisi penjelasan tentang apa yang dilakukan dan yang dikembalikan oleh function} (* Deklarasi *) var {Semua nama yang dipakai dalam function didefinisikan disini dan hanya berlaku lokal di dalam function } (*Algoritma*) begin {Badan function, berisi kumpulan instruksi-instruksi untuk menghasilkan nilai yang akan dikembalikan oleh function} NamaFunction:= ekspresi; {pengembalian nilai yang dihasilkan fungsi} end; Keterangan : Dalam bahasa Pascal, function hanya dapat mengembalikan nilai bertipe sederhana (integer, real, boolean, char, dan string). Karena itu, tipe hasil dari fungsi haruslah dari tipe sederhana. Apabila function tidak memiliki daftar parameter formal, maka tanda ‘( )’ tidak ditulis. Function dideklarasikan sekaligus didefinisikan di dalam blok program utama pemanggil (sesudah kata kunci var). Cara memanggil function: Function diakses dengan cara memanggil namanya dari program pemanggil, diikuti dengan daftar parameter actual (bila ada). Karena fungsi menghasilkan nilai, maka nilai tersebut ditampung dalam sebuah peubah yang bertipe sama dengan tipe fungsi. peubah namafunction(daftar parameter actual) atau nilai yang dikembalikan oleh function dapat langsung dimanipulasi seperti contoh-contoh berikut: write (Namafunction(daftar parameter actual)) if (Namafunction(daftar parameter actual)) < 0 then …….. z2* (Namafunction(daftar parameter actual))-x+y Contoh function : Algoritmik : Function NilaiRata(a,b,c:integer):real Deklarasi : NR:real Algoritma : NR (a+b+c)/3 NilaiRataNR Program Contoh_fungsi Deklarasi : Nilai1,Nilai2,Nilai3:integer RataRata:real Function NilaiRata(a,b,c:integer):real Algoritma : write('Nilai 1 : ') read(Nilai1) write('Nilai 2 : ') read(Nilai2) write('Nilai 3 : ') read(Nilai3) RataRataNilaiRata(Nilai1,Nilai2,Nilai3) write('Nilai rata-rata adalah ', RataRata) Perhatikan bagian deklarasi function: function NilaiRata(a,b,c:integer):real Function di atas mempunyai 3 parameter nilai,yaitu a,b,c. Ketiga parameter tersebut bertipe integer.Hasil dari function NilaiRata bertipe real. Di dalam function harus ada pernyataan yang memberi nilai pada function, pada contoh diatas adalah: NilaiRataNR. Perhatikan cata pemanggilan function didalam program utama: NilaiAkhirNilaiRata(Nilai1,Nilai2,Nilai3) Karena hasil dari function NilaiRata bertipe real,maka NilaiAkhir juga harus bertipe real. Pascal: Program Contoh_fungsi; var Nilai1,Nilai2,Nilai3:integer; RataRata : real; function NilaiRata (a,b,c : integer):real; var NR:real; begin NR:= (a+b+c)/3; NilaiRata:=NR; end; {Program Utama} begin write('Nilai 1 : '); readln(Nilai1); write('Nilai 2 : '); readln(Nilai2); write('Nilai 3 : '); readln(Nilai3); RataRata:=NilaiRata(Nilai1,Nilai2,Nilai3); write('Nilai rata-rata adalah ', RataRata); end. KESIMPULAN Fungsi digunakan apabila modul program mengembalikan sebuah nilai. Prosedur digunakan bila modul menghasilkan effek netto dari (satu atau) sekumpulan aksi. Fungsi dapat dikonversi sebagai prosedur dengan cara menyatakan nilai yang dikembalikan (return value) oleh fungsi tersebut sebagai parameter keluaran pada prosedur. Prosedur yang mempunyai satu buah parameter keluaran dapat ditulis sebagai fungsi dengan cara menyatakan parameter keluaran sebagai nilai yang dikembalikan oleh fungsi. Latihan - Buatlah program untuk menghitung berbagai luas dengan menggunakan procedure dan - function. - Buat procedure yang menghasilkan nilai rata-rata sekumpulan data bilangan bulat yang dibaca secara berulang-ulang dari keyboard (akhir pembacaan adalah 9999). Prosedur ini memiliki parameter keluaran, yaitu nilai rata-rata yang dihasilkan. - Buatlah function untuk menentukan bilangan genap dan program utamanya. - Buat function untuk menghitung fungsi F(X)= 2x2 + 5x +- 8 MATERI 7 ARRAY (LARIK) Array adalah struktur data statis yang menyimpan sekumpulan elemen yang bertipe sama, dimana setiap elemen memiliki nilai indeks. Konsep umum dari array : 1. Indeks array harus suatu type yang mempunyai keterurutan (ada suksesor dan predesesor). Misalnya integer atau karakter. Kecuali dalam bahasa C indeks array selalu bertipe integer. 2. Banyaknya elemen array harus sudah diketahui sebelum program dieksekusi. 3. Tipe data elemen array dapat berupa tipe sederhana atau tipe bentukan (record.), atau bahkan bertipe array yang lain. 4. Setiap elemen data dapat diakses secara acak (random), jika indeksnya diketahui 5. Merupakan struktur data yang statis, artinya jumlah elemen yang sudah ditentukan, tidak bisa diubah selama eksekusi program. Keuntungan data array / larik : a. Paling mudah pengoperasiannya b. Ekonomis dalam pemakaian memori, bila semua elemen terisi c. Akses ke setiap elemen memerlukan waktu yang sama Kerugian data array / larik : Memboroskan tempat jika banyak elemen yang tidak digunakan. Penggunaan struktur data array/larik: Array digunakan bila kita mempunyai sejumlah data yang bertipe sama, dan kita perlu menyimpan sementara data tersebut, untuk selanjutnya data tersebut dimanipulasi. Selama pelaksanaan program, array tetap menyimpan nilai. Hal ini bermanfaat bila kita ingin menggunakan nilai-nilai di dalam array tersebut untuk diproses lebih lanjut di bagian lain di dalam algoritma. Dengan menggunakan array, kita dapat menghindari penggunaan nama-nama variabel yang banyak. Misalnya : kita membutuhkan 10 buah variabel untuk menyimpan nilai-nilai yang sama, misalnya integer. Otomatis ini akan ada 10 buah pernyataan membaca dan menulis ke layar, dan beberapa ekspresi untuk memanipulasi nilai-nilai tersebut. Dengan menggunakan array, menyimpan 10 buah variabel nilai hanya dibutuhkan satu variabel array yang terdiri atas 10 buah elemen. Selain itu, dengan array, instruksi pembacaan/penulisan seluruh elemen array cukup ditulis satu kali saja di dalam sebuah konstruksi pengulangan. Representasi array yang umum dibagi menjadi dua, yaitu : 1. Representasi array 1 dimensi. A[1] 2. A[2] ………………………… A[Nmax] Representasi array 2 dimensi A[1,1] A[1,2] A[1,1] A[2,1] A[1,Nmax] A[1, Nmax] A[2, Nmax] A[Nmax,1] A[Nmax, Nmax] Keterangan : Sebenarnya array dapat direpresentasikan dengan dimensi yang tak hingga, tetapi ini tidak umum digunakan, jadi jumlah dimensi disesuaikan dengan kebutuhan setiap penanganan kasus yang berbeda beda. PEMROSESAN LARIK Pemrosesan beruntun pada larik adalah pemrosesan mulai dari elemen pertama larik. Yaitu elemen dengan indeks terkecil, berturut-turut pada elemen berikutnya, sampai elemen terakhir dicapai, yaitu elemen dengan indeks terbesar. 7.1 ARRAY 1 DIMENSI Cara Pendefinisian Array : 1. Sebagai variabel Contoh: Algoritmik 2. Pascal C A : array [1..20] of integer A : array [1..20] of integer; int A[20]; NamaBrg : array [‘a’.. ‘z’] of string NamaBrg : array [‘a’.. ‘z’] of string; char namabrg[30] [20]; /* Artinya namabrg bertipe string dengan panjang 30 dan merupakan array yang berisi 21 elemen, karena di C indeks elemen dimulai dari 0 */ Sebagai tipe baru dan array bertipe bentukan (record) Contoh: Algoritmik : Type Mhs = record <NPM: integer, Nama : string [20], Alamat: [30]> Type DataMhs = string array [1..20] of Mhs A: DataMhs Pascal : Type Mhs = record NPM: integer; Nama : string [20]; Alamat: [30]; Type DataMhs = end; array [1..20] of Mhs string A: DataMhs; 3. Mendefinisikan ukuran maksimum elemen array sebagai konstanta Contoh: Algoritmik : Const Nmaks = 20 Type Huruf = array [1..Nmaks] of char A : Huruf Pascal : Const Nmaks = 20; Type Huruf = array [1..Nmaks] of char; Var A : Huruf; Contoh Kasus : Terdapat sebuah data yang berisi deretan angka, sebagai berikut : 5 6 8 1 1 ... ... 2 3 4 ... 200 Operasi-operasi dasar : 1. Menginisialisasi elemen array 2. Mengisi elemen array 3. Mencetak elemen array 4. Pencarian nilai maksimum pada array 5. Pencarian sebuah bilangan pada array dengan metode sekuensial artinya pemrosesan dilakukan terurut berdasarkan indeks array. Maka deklarasinya adalah : Algoritmik: Versi 1 : Versi 2 : Versi 3 : Const Nmax=200 A:array [1..Nmax] of Type DeretAngka : array [1.. 200] of integer Const Nmax=200 integer ATAU A:array [1..200] of A:DeretAngka Type DeretAngka : array [1..Nmax] of integer Integer A:DeretAngka Pascal : Versi 1 : Versi 2 : Const Nmax=200; VAR A:array [1..Nmax] of integer; Type DeretAngka : array [1.. 200] of integer; ATAU VAR A:array [1..200] of integer; 1. VAR A:DeretAngka; Versi 3 : Const Nmax=200; Type DeretAngka : array [1..Nmax] of integer; VAR A:DeretAngka; Menginisialisasi elemen array Algoritmik : Procedure InisialisasiArray (input/output A:deretAngka , input n:integer) {Procedure ini berfungsi untuk memberikan harga awal untuk n elemen array,dengan nilai 0} Deklarasi: i:integer Algoritma : for i←1 to n do A[i]← 0 endfor Pascal : Procedure InisialisasiArray (var A:deretAngka ; n:integer); {Procedure ini berfungsi untuk memberikan harga awal untuk n elemen array, dengan nilai 0} VAR i:integer; Begin for i:=1 to n do A[i]:=0; end; 2. Mengisi elemen array Algoritmik: Procedure IsiArray ( input/output A:deretAngka, input n:integer) { Procedure ini berfungsi untuk mengisi elemen array, dengan: input n =jumlah elemen array yang akan diisi output A = array yang n elemennya sudah terisi } Deklarasi : bil,i:integer Algoritma : for i←1 to n do write('Masukan bilangan:') read(bil) A[i]← bil endfor Pascal: Procedure IsiArray ( var A:deretAngka; n:integer); { Procedure ini berfungsi untuk mengisi elemen array, dengan: input n =jumlah elemen array yang akan diisi output A = array yang n elemennya sudah terisi } Var Bil,i:integer; Begin for i:=1 to n do begin write('Masukan bilangan:');readln(bil); A[i]:=bil; end; end; 3. Mencetak elemen array Algoritmik: Procedure CetakArray (input A:deretAngka, input n:integer) { Procedure ini berfungsi untuk mencetak isi dari sebuah array, dengan: input A= array yang sudah berisi angka , n=jumlah elemen array yang akan dicetak isinya } Deklarasi : i :integer Algoritma : for i←1 to n do write('Indeks ke-',i,'berisi angka:',A[i]) endfor end; Pascal : Procedure CetakArray (A:deretAngka; n:integer); { Procedure ini berfungsi untuk mencetak isi dari sebuah array, dengan: input A= array yang sudah berisi angka , n=jumlah elemen array yang akan dicetak isinya } Var i :integer; Begin for i:=1 to n do begin writeln('Indeks ke-',i,'berisi angka:',A[i]) end; end; 4. Pencarian nilai maksimum pada array Algoritmik : Procedure CariMax (input A:deretAngka, output Maks:integer, input N :integer) {Procedure ini berfungsi untuk mencari nilai maksimum pada sebuah array,dengan: input A= array yang sudah berisi angka, output Maks=nilai maksimun yang dicari pada array} Deklarasi: i:integer Algoritma: maks← A[1] for i←2 to N do if A[i] > maks then maks←A[i] endif endfor Pascal : Procedure CariMax (A:deretAngka;var Maks:integer; N:integer); {Procedure ini berfungsi untuk mencari nilai maksimum pada sebuah array,dengan: input A= array yang sudah berisi angka, output Maks=nilai maksimun yang dicari pada array} var i:integer; begin maks:= A[1]; for i:=2 to N do if A[i] > maks then maks:=A[i]; end; 5. Pencarian sebuah bilangan pada array dengan metode sekuensial Algoritmik : Procedure CariNilai(input A:DeretAngka;input x:integer) {Procedure ini berfungsi untuk mencari sebuah nilai pada array, dengan nilai yang akan dicari} Deklarasi: i:integer Algoritma: i←1 while (A[i] ≠ x) and (i < 10) do i←i+1 endwhile if A[i]=x then write('Ketemu di indeks ke-',i) else write('Tidak ketemu') endif Pascal : Procedure CariNilai(A:DeretAngka;x:integer); {Procedure ini berfungsi untuk mencari sebuah nilai pada array, dengan input A= array berisi angka dan x = nilai yang akan dicari} var i:integer; begin i:=1; while (A[i] <> x) and (i < 10) do begin i:=i+1; end; input A= array berisi angka dan x = if A[i]=x then writeln('Ketemu di indeks ke-',i) else writeln('Tidak ketemu'); end; Program utama untuk memanggil prosedur-prosedur diatas : Algoritmik : Program Contoh_Array Deklarasi : Const Nmax=200 Type DeretAngka : array [1.. Nmax] of integer Procedure InisialisasiArray (input/output A:deretAngka , input n:integer) Procedure IsiArray (input/output A:deretAngka, input n:integer) Procedure CetakArray (input A:deretAngka, input n:integer) Procedure CariMax (input A:deretAngka,output Maks:integer,N:integer) Procedure CariNilai(input A:DeretAngka,input x:integer) B : deretAngka; jumlah,maksimum,angka : integer; Algoritma Utama : write(‘Masukan banyaknya array:’) read(jumlah) InisialisasiArray(B,jumlah) IsiArray(B,jumlah) CetakArray(B,jumlah) CariMax(B,maksimum,jumlah) write(‘Nilai maksimum:’,maksimum) write(‘Masukan angka yang akan dicari:’) read(angka) CariNilai(B,angka) Pascal : Program Contoh_Array; Const Nmax=200; Type DeretAngka : array [1.. Nmax] of integer; Procedure InisialisasiArray (var A:deretAngka ; n:integer); Procedure IsiArray ( var A:deretAngka; n:integer); Procedure CetakArray (A:deretAngka; n:integer); Procedure CariMax (A:deretAngka;var Maks:integer; N:integer); Procedure CariNilai(A:DeretAngka;x:integer); Var B : deretAngka; jumlah,maksimum,angka : integer; Begin write(‘Masukan banyaknya array:’); readln(jumlah); InisialisasiArray(B,jumlah); IsiArray(B,jumlah); CetakArray(B,jumlah); CariMax(B,maksimum,jumlah); writeln(‘Nilai maksimum:’,maksimum); write(‘Masukan angka yang akan dicari:’); read(angka); CariNilai(B,angka); end. 7.2 ARRAY BERTIPE TERSTRUKTUR Algortma Array sebelumnya menggunakan tipe data sederhana, Elemen Array juga bisa menggunakan Tipe data bentukan yaitu Record atau lebih dikenal dengan Tipe Terstruktur. Misalkan akan melakukan proses pengolahan data 100 orang mahasiswa, Data setiap mahasiswa terdiri dri NPM (Nomor Pokok Mahasiswa), Nama mahasiswa, dan IPK (Indeks prestasi Kumulatif Siswa). Struktur Lojiknya sebagai berikut: 1 2 3 . . N NPM 28001 28002 28003 NamaMhs Dina Rahmayanti Catur Wulan Bayu Nisa IPK 3.57 3.30 3.53 280020 Risma wulandari 3.60 Struktur Array yang dideklarasikan sebagai berikut: DEKLARASI const Nmaks = 100 type Mahasiswa : record <NPM: integer, NamaMhs:String, IPK : real> type TabMhs : Array [1…NMaks] of Mahasiswa Mhs : TabMhs Algoritma untuk mengisi dan membaca larik Mhs adalah sebagai berikut: Procedure BacaDataMahasiswa(input N :integer, output Mhs:TabMhs) Deklarasi I : integer; Algoritma : For i:=1 To N Do Read(Mhs[i].NIM) Read(Mhs[i].NamaMhs) Read(Mhs[i].IPK) EndFor Procedure TulisDataMahasiswa(input N:integer, output:Mhs:TabMhs) Deklarasi I,j : integer; Algoritma : For i:=1 To N Do Write (Mhs[i].NPM, Mhs[i].NamaMhs, Mhs[i].IPK) EndFor LATIHAN 1. Diketahui sebuah integer array TabInt [1…8], yang telah terisi dengan nilai-nilai ujian mahasiswa seperti berikut ini: 50 90 80 70 60 100 90 100 Tuliskan Algoritma untuk: a. Mencari Nilai Maksimum dari Nilai Ujian Tersebut. b. Menghitung Nilai Rata-rata Nilai Tersebut. 2. Diketahui sebuah integer array TabInt [1…8], yang telah terisi dengan nilai-nilai berikut ini: 10 90 50 70 60 100 30 Tuliskan Algoritma untuk: a. Menghitung banyaknya bilangan Genap dan Ganjil. b. Menghitung banyaknya bilangan positif dan negatif. 100