Bab 1 Algoritma dan Pemrograman Tersruktur 1.1 Definisi Algoritma Algoritma adalah urutan langkah-langkah logis penyelesaian masalah yang disusun secara sistematis. Contoh algoritma Euclidean untuk menentukan FPB (Faktor Persekutan Terbesar). Misal FPB untuk 80 dan 12 adalah 4. Algoritma Euclidean Diberikan dua buah bilangan bulat tak negatif m dan n (m>=n). Carilah FPB dari kedua bilangan tersebut. Deskripsi 1. Jika n = 0, maka m adalah jawabannya; stop. Tetapi jika n<>0, lanjutkan ke langkah 2. 2. Bagilah m dengan n, misalkan r adalah sisanya. 3. Ganti nilai m dengan n, dan nilai n dengan r. Ulang kembali ke langkah 1 Algoritma memiliki lima ciri penting : 1. Algoritma harus berhenti setelah mengerjakan sejumlah langkah terbatas. 2. Setiap langkah harus didefinisikan dengan tepat dan tidak berarti – dua (ambigu). 3. Algoritma memiliki nol atau lebih masukan. 4. Algoritma memiliki nol atau lebih keluaran. 5. Algoritma harus efektif. 1 1.2 Pemrograman Terstruktur Pada pemrograman terstruktur, program dibedakan antara bagian data dan instruksi. Bagian instruksi terdiri atas sederetan instruksi yang dilaksanakan satu per satu secara berurutan (terstruktur) oleh sebuah pemroses. Bahasa-bahasa tingkat tinggi seperti Cobol, Basic, Pascal, Fortran, dan C mendukung kegiatan pemrograman terstruktur. Dalam modul ini, digunakan bahasa Pascal. 1.3 Notasi Algoritma Notasi algoritma bukan notasi bahasa pemrograman. Ada beberapa notasi yang digunakan dalam penulisan algoritma. 1. Notasi I : menyatakan langkah-langkah algoritma dengan kalimat deskriptif. Algoritma Euclidean Diberikan dua buah bilangan bulat tak negatif m dan n (m>=n). Carilah FPB dari kedua bilangan tersebut. Deskripsi 1. Jika n = 0, maka m adalah jawabannya; stop.Tetapi jika n<>0, lanjutkan ke langkah 2. 2. Bagilah m dengan n, misalkan r adalah sisanya. 3. Ganti nilai m dengan n, dan nilai n dengan r. Ulang kembali ke langkah 1 2.Notasi II :menggunakan diagram alir (flowchart) Flowchart adalah serangkaian bagan-bagan yang menggambarkan alir program. Flowchart atau diagram alir memiliki bagan-bagan yang melambangkan fungsi tertentu. Bagan, nama dan fungsinya seperti yang disajikan pada tabel berikut : 2 Tabel 1. Bagan Flowchart BAGAN NAMA FUNGSI TERMINATOR Awal atau akhir program FLOW Arah aliran program PREPARATION inisialisasi/pemberian nilai awal PROCES Proses/pengolahan data INPUT/OUTPUT DATA input/output data SUB PROGRAM sub program DECISION Seleksi atau kondisi ON PAGE CONNECTOR Penghubung bagian-bagian flowchart pada halaman yang sama OFF PAGE CONNECTOR Penghubung bagian-bagian flowchart pada halaman yang berbeda COMMENT Tempat komentar tentang suatu proses Flowchart selalu diawali dan diakhiri oleh bagan terminator. Aliran selalu dari atas ke bawah, satu demi satu langkah. Tidak ada proses yang dikerjakan bersamaan, semua dikerjakan satu persatu. 3 Proses yang dilakukan komputer sebenarnya hanya ada 3 proses: input, proses data dan output. Misal Masalah 1: bagaimana menentukan bahwa suatu bilangan itu adalah bilangan genap atau ganjil? Input : bilangan bulat. Proses : menentukan bilangan ganjil atau genap dengan melakukan pembagian bilangan dengan bilangan 2. Jika sisa pembagian NOL maka bilangan tersebut genap, sebaliknya ganjil. Output : Bilangan Ganjil atau Bilangan Genap Gambaran penyelesaian dengan Flowchart : mulai Masukkan Bilangan Bulat Bilangan dibagi 2 dengan operasi sisa bagi YA Sisa bagi=0 ? Tulis “GENAP” Tidak Tulis “GANJIL” Selesai 4 3. Notasi III : menggunakan pseudo-code Pseudo-code adalah notasi yang menyerupai notasi bahasa pemrograman tingkat tinggi, khususnya Bahasa Pascal dan C. Algoritma Euclidean {Dibaca dua buah bilangan bulat tak negatif m dan n (m>=n). Carilah FPB dari kedua bilangan tersebut.} Deklarasi m,n,r : integer Deskripsi read(m,n) while n<> 0 do r m mod n m n n r endwhile write(m) Latihan 1. Tulislah algoritma menentukan bilangan terbesar dari 3 bilangan bulat A, B, C menggunakan notasi I. 2. Tulislah algoritma mengurutkan dari kecil ke besar 3 bilangan bulat A, B, C menggunakan notasi II. 5 Bab 2 Tipe, Nama, dan Nilai Tipe data ada dua macam, yaitu : tipe dasar dan tipe bentukan. Tipa dasar adalah tipe data yang dapat langsung dipakai. Tipe bentukan dibentuk oleh tipe dasar atau tipe bentukan lain yang sudah didefinisikan. 2.1 Tipe Dasar Yang termasuk dalam tipe dasar adalah : bilangan bulat (integer), logika (boolean), karakter, bilangan riil (real) dan string. Tiga tipe dasar yang pertama disebut tipe ordinal karena setiap nilai konstantanya bisa diubah ke nilai integer. 2.1.1 Bilangan Bulat (Integer) Jenis data ini terdiri atas integer positif, integer negatif dan nol. Pada TURBO PASCAL jenis data ini di bagi atas beberapa bagian, yaitu : Tipe BYTE SHORTINT INTEGER WORD LONGINT Ukuran memori (dalam byte) 1 1 2 2 4 Jangkauan nilai 0..255 -128..127 -32768..32767 0..65535 -2147483648..2147483647 Operator Integer terdiri atas : + (penjumlahan), - (pengurangan) , * (perkalian), DIV (pembagian bilangan bulat), MOD (sisa hasil bagi) 2.1.2 Logika (Boolean) Tipe data ini mempunyai nilai TRUE atau FALSE. Operator untuk jenis data ini adalah operator logika, yaitu : NOT, AND, OR dan XOR 6 2.1.3 Karakter (Char) Yang dimaksud dengan jenis data ini adalah karakter tunggal atau sebuah karakter yang ditulis diantara tanda petik tunggal, seperti misalnya ‘A’,’a’,’!’,’5’ dsb. Dasarnya adalah ASCII CHARACTER SET. Misalnya : 032 pada tabel ASCII CHARACTER SET menunjukkan karakter. Blank. 033 048 076 ! 0 L dst Operasi yang dilakukan terhadap tipe karakter adalah operasi perbandingan : =, <>, <, >, <=, >=. 2.1.4 Bilangan Riil (Real) Penulisan untuk jenis data ini selalu menggunakan titik desimal. Nilai konstanta numerik real berkisar dari 1E-38 sampai dengan 1E+38 dengan mantissa yang signifikan sampai dengan 11 digit. E menunjukkan nilai 10 pangkat. Nilai konstanta numerik real menempati memori sebesar 6 byte. Contoh : 123.45 12345. salah, titik desimal tidak boleh dibelakang 12E5 12E+5 -12.34 .1234 salah, titik desimal tidak boleh dimuka Pada TURBO PASCAL, jenis data ini dibedakan atas : Tipe SINGLE DOUBLE EXTENDED COMP Ukuran memori (dalam byte) 4 8 10 8 Jangkauan nilai Digit signifikan 1.5x10E-45 .. 3.4x10E38 5.0x10E-324 .. 1.7x10E308 1.9x10E-4951 .. 1.1x10E4932 -2E+63+1 .. 2E+63-1 7-8 15-16 19-20 19-20 Operator untuk jenis data ini terdiri atas : + (penjumlahan) , - (pengurangan) , * (perkalian) dan / (pembagian). 7 2.1.5 Tipe String Nilai data string merupakan urut-urutan dari karakter yang terletak di antara tanda petik tunggal. Nilai data string akan menenpati memori sebesar banyaknya karakter stringnya ditambah dengan 1 byte. Bila panjang dari suatu string di dalam deklarasi variabel tidak disebutkan, maka dianggap panjangnya adalah 255 karakter. Contoh : ’Belajar’, ’Pemrograman’, merupakan nilai konstanta string. Operasi terhadap tipe string terdiri dari : a. Operasi Penyambungan Operatornya : +. Digunakan untuk menyambung 2 nilai string. Contoh : ’Belajar’ + ’Pemrograman’ menjadi ’BelajarPemrograman’ b. Operasi Perbandingan 2.2 Tipe Bentukan Tipe bentukan adalah tipe yang didefinisikan sendiri oleh pemrogram. Ada dua macam tipe bentukan, yaitu : 1. Tipe dasar yang diberi nama baru Contoh : type bilangan bulat : integer 2. Rekaman (record) 2.3 Nama Nama diberikan kepada peubah (variabel), konstanta, tipe bentukan, nama fungsi, dan nama prosedur. Aturan penamaan : 1. Diawali dengan huruf alfabet. 2. Huruf besar atau kecil tidak dibedakan. 3. Nama tidak boleh mengandung operator aritmatika, operator relasional, tanda baca, spasi. 2.3.1 Konstanta. Konstanta adalah suatu identifier non-standar yang nilainya telah ditetapkan dalam suatu program dan dideklarasikan pada bagian deklarasi. Bagian umum deklarasinya adalah : 8 CONST identifier = nilai; Contoh : CONST phi = 3.14; x= 2; y = ‘S’; 2.3.2 Variabel. Variabel adalah suatu identifier non-standar yang nilainya tidak tetap atau nilainya merupakan hasil dari suatu proses. (variabel yang dimaksudkan disini sama seperti halnya arti variabel pada aljabar). Bentuk umum deklarasinya adalah : 1. Jika hanya 1 (satu) variabel yang dideklarasikan : VAR identifier : tipe data; 2. Jika lebih dari 1 (satu) variabel dan masing-masing memiliki tipe data yang sama : VAR id-1, id-2, …., id-3 : tipe data; 3. Jika beberapa variabel yang berbeda tipe datanya : VAR identifier-1 : tipe data; identifier-2 : tipe data; . . . identifier-n : tipe data; Contoh : 1. VAR x 2. VAR p,q,r 3. VAR a,b m,n 2.4 Nilai : integer; : real; : char; : boolean; Nilai adalah besaran dari tipe data yang sudah didefinisikan. Nilai dapat berupa nilai peubah atau konstanta. 9 2.4.1 Pengisian Nilai ke Nama Peubah 1. Pengisian nilai secara langsung Pengisian nilai secara langsung adalah memasukkan nilai ke dalam nama peubah langsung di teks program. peubah := konstanta Contoh : N := 10; Atau peubah1:=peubah2 Contoh : N:=M; 2. Pembacaan Nilai dari Piranti Masukan Dalam bahasa Pascal untuk keperluan input (membaca nilai) digunakan identifier standar READ atau READLN. Identifier standar ReadLn sedikit berbeda dengan Read. ReadLn digunakan untuk memasukkan data perbaris, artinya setelah tombol Enter ditekan, maka akan ganti baris, sedangkan Read tidak ganti baris, masih dalam baris yang sama. Bentuk umum penulisannya : READ (variabel input) ; Atau READLN (variabel output); Contoh : read (A,B,C) atau readln (A,B,C) 2.4.2 Ekspresi Sebuah ekspresi merupakan kumpulan dari operand-operand (seperti : bilangan, konstanta, variabel dll) yang bersama-sama dengan operator membentuk suatu bentuk aljabar dan menyatakan suatu nilai. Ada 2 (dua) jenis ekspresi dalam bahasa Pascal, yaitu : 1. Ekspresi numerik / aritmatika, yaitu suatu ekspresi yang menghasilkan nilai numerik / aritmatika. 2. Ekspresi Boolean atau ekspresi logika, yaitu suatu ekspresi yang menghasilkan nilai boolean / logika (true/false). Contoh : 1. (b * b – 4 * a * c) / (2*a) / (2 * a) ekspresi numerik, jika a,b dan c adalah bilangan (variabel bernilai numerik). 2. Upah < 1000.0 ekspresi boolean (“upah” adalah suatu variabel bernilai real). 10 2.4.3 Menuliskan Nilai ke Piranti Keluaran Untuk keperluan keluaran (mencetak keluaran) digunakan identifier standar WRITE atau WRITLN. Perbedaan Write dengan WriteLn adalah bahwa Write menampilkan hasil tanpa ganti baris dan tampilan berikutnya akan disambung dalam baris yang sama. Sedang WriteLn digunakan untuk menampilkan tampilan perbaris, akan ganti baris untuk tampilan berikutnya. Bentuk umum penulisannya : WRITE (variabel output) atau WRITELN (variabel output); WRITE (variabel output, konstanta, ekspresi) atau WRITELN (variabel output, konstanta, ekspresi); WRITE (ekspresi) atau WRITELN (ekspresi); LATIHAN 1. Tulislah rumus berikut dalam bahasa Pascal : 4 a. V r 3 3 ab b (1 ) b. m 3ac cd 2. Tulislah pernyataan dalam Pascal untuk : a. Menampilkan tulisan : ‘Belajar Pemrograman’. b. Meminta pengguna memasukkan namanya. 11 BAB 3 STRUKTUR PROGRAM PASCAL Struktur program Pascal dapat dikelompokkan menjadi tiga bagian,yaitu : 1. Kepala Program 2. Bagian Deklarasi 3. Bagian Pernyataan Program LuasLingkaran; VAR jari2, Luas : real; Begin write(’Masukkan jari-jari :’); readln(jari2); Luas:= 314*jari2*jari2; writeln(’Luas = ’, Luas); END. Pada program di atas Program LuasLingkaran merupakan kepala program. VAR jari2, Luas : real merupakan deklarasi, dan selebihnya bagian pernyatan. 3.1 Kepala Program Kepala program bersifat opsional. Digunakan untuk memberi keterangan atau judul suatu program. 3.2 Bagian Deklarasi Pada bagian ini dideklarasikan : tipe, variabel, konstanta, prosedur, dan fungsi. 1. Deklarasi tipe Digunakan untuk membuat tipe bentukan atau tipe khusus yang nantinya digunakan dalam deklarasi variabel. Bentuk deklarasi : Type pengenal = tipe data; Contoh Type bilangan = integer; 2. Deklarasi variabel Digunakan untuk mendeklarasikan semua variabel yang dipakai dalam program. 12 Bentuk umum deklarasi : Bentuk umum deklarasinya adalah : 1. Jika hanya 1 (satu) variabel yang dideklarasikan : VAR identifier : tipe data; 2. Jika lebih dari 1 (satu) variabel dan masing-masing memiliki tipe data yang sama : VAR id-1, id-2, …., id-3 : tipe data; 3. Jika beberapa variabel yang berbeda tipe datanya : VAR identifier-1 : tipe data; identifier-2 : tipe data; . . . identifier-n : tipe data; Contoh : 1. VAR x 2. VAR p,q,r 3. VAR a,b m,n : integer; : real; : char; : boolean; 3. Deklarasi konstanta Deklarasi ini untuk mendefinisikan nama yang memiliki nilai tetap. Bagian umum deklarasinya adalah : CONST identifier = nilai; Contoh : CONST phi = 3.14; x= 2; y = ‘S’; 3.3 Bagian Pernyataan Bagian pernyataan dalam Pascal diawali oleh kata BEGIN dan diakhiri dengan kata END. Untuk penutup pada program utama END diikuti tanda titik(.), sedangkan untuk sub program diikuti tanda titik koma (;). 13 Latihan 1. Buatlah program dalam Bahasa Pascal untuk menghitung luas dan keliling persegi panjang. 2. Buatlah program dalam Bahasa Pascal untuk menghitung jarak 2 titik A( x1, y1) dan B ( x 2, y 2) dengan rumus jarak = d x1 x22 y1 y22 14 BAB 4 STRUKTUR RUNTUNAN Sebuah runtunan (sequence) terdiri dari satu atau lebih instruksi. Tiap instruksi dikerjakan sesuai dengan urutan penulisannya, yakni sebuah instruksi dilaksanakan setelah instruksi sebelumnya selesai dilaksanakan. Urutan instruksi menentukan keadaan akhir program. Bila urutannya diubah, maka hasil akhirnya mungkin juga berubah. Contoh berikut adalah program menukar dua buah nilai integer A dan B. Misal sebelum penukaran nilai A = 5, nilai B=3. Setelah penukaran, nilai A=3, nilai B=5. Program Tukar; VAR A,B, temp : integer; Begin write(’Masukkan nilai A :’); readln(A); write(’Masukkan nilai B :’); readln(B); temp:=A; A:=B; B:= temp; writeln(’Nilai A sekarang = ’, A); writeln(’Nilai B sekarang = ’, B); End. Jika urutan instruksi di atas diubah, maka hasilnya juga berubah. Misal : temp:=A; A:=B; B:= temp; END. diubah menjadi : temp:=A; B:= temp; A:=B; Silakan dicek sendiri. 15 Latihan 1. Buatlah program yang membaca waktu tempuh dalam jam-menit-detik, kemudian mengubahnya dalam detik. 2. Buatlah program yang mebaca waktu dalam detik, kemudian mengubahnya dalam jam-menit-detik. 3. Dibaca dua buah waktu J1 (jam1-menit1-detik1) dan J2 (jam2-menit2-detik2). Buatlah program menghitung selisih waktu dari dari J1 ke J2 (selisih jam-selisih menit-selisih detik). 4. Buatlah program menukar dua nilai A dan B tanpa menggunakan variabel bantu temp. 16 BAB 5 STRUKTUR PEMILIHAN Pada umumnya, masalah yang akan diselesaikan memiliki beberapa alternatif pelaksanaan aksi. Suatu aksi akan dilaksanakan jika persyaratan atau kondisi dipenuhi. Kondisi adalah sesuatu yang bernilai true atau false, disebut kondisi boolean. Contoh kondisi : x>y m=n k mod 4 = 0 not(ketemu) Penentuan kondisi bolean dan aksi yang dilakukan bergantung pada jumlah kasus yang terdapat pada masalah tersebut : satu kasus, dua kasus, atau lebih dari dua kasus. 5.1 Satu Kasus Bentuk umum untuk kasus satu kasus : if kondisi then aksi ; Contoh program dengan satu kasus : Program BilanganGenap; Var Bil : integer; Begin write (‘Masukkan bilangan :’); readln(Bil); if bil mod 2 = 0 then write (Bil,’ adalah bilangan genap’); end. 5.2 Dua Kasus Bentuk umum untuk kasus dua kasus : if kondisi then aksi1 else aksi 2; 17 Contoh program dengan dua kasus : Program BilanganGenapGanjil; Var Bil : integer; Begin write (‘Masukkan bilangan :’); readln(Bil); if bil mod 2 = 0 then write (Bil,’ adalah bilangan genap’) else write (Bil,’ adalah bilangan ganjil’); end. 5.3 Tiga Kasus atau Lebih Bentuk umum untuk kasus dua kasus : if kondisi1 then aksi1 else if kondisi2 then aksi2 if kondisi3 then aksi3 .... else aksiN; Contoh program dengan tiga kasus atau lebih: Program KonversiNilai; {Program untuk merubah nilai angka menjadi nilai huruf} Var Nilai : integer; Begin write (‘Masukkan bilangan :’); readln(Nilai); if Nilai>= 80 then write (‘Nilai =A’) else if Nilai>= 65 then write (‘Nilai = B’) else if Nilai>= 50 then write (‘Nilai = C’) else if Nilai>= 35 then write (‘Nilai = D’) else write (‘Nilai = E’); end. 5.4 Struktur Case..Of Untuk masalah dengan tiga kasus atau lebih, struktur Case dapat menyederhanakan penulisan If-Then-Else yang bertingkat-tingkat seperti contoh di atas. 18 Struktur Case sebagai berikut : Case (nama_variabel) of nilai1 : aksi1; nilai2 : aksi2; ... nilaiN : aksiN; else aksiN1; Contoh program KonversiNilai menggunakan struktur Case : Program KonversiNilai; {Program untuk merubah nilai angka menjadi nilai huruf} Var NilaiAngka : integer; Begin write (‘Masukkan bilangan :’); readln(NilaiAngka); Case NilaiAngka of 80..100 : write(‘Nilai = A’); 65..79 : write(‘Nilai = A’); 50..64 : write(‘Nilai = A’); 35..49 : write(‘Nilai = A’); 0..34 : write(‘Nilai = A’); else write(‘ Masukkan nilai salah’); end. Nilai bisa berupa nilai tunggal atau beberapa nilai yang disebutkan satu per satu, atau bisa juga berupa jangkauan nilai. Latihan 1. Buatlah program menampilkan jumlah hari dalam satu bulan. Masukan program ini adalah nomor bulan dan tahun. Misalkan bulan 3 tahun 2010, maka program akan menampilkan 31. 2. Buatlah program untuk membaca tiga bilangan bulat A, B, C, lalu mengurutkannya dari yang kecil ke besar. 19 3. Buatlah program untuk menghitung total pendapatan dengan ketentuan : Total pendapatan = Gaji Pokok + Uang Lembur Berikut tabel gaji pokok dan lembur per jam berdasarkan golongan : Golongan Gaji Pokok Lembur per jam I 1000000 10000 II 2000000 20000 III 3000000 30000 Uang lembur diberikan jika jam kerja melebihi 50 jam. 20 BAB 6 STRUKTUR PENGULANGAN 6.1 Struktur Pengulangan Struktur pengulangan secara umum : <inisialisasi> awal pengulangan badan pengulangan akhir pengulangan <terminasi> Awal dan akhir pengulangan tergantung pada struktur pengulangan yang digunakan. Terdapat tiga macam struktur pengulangan, yaitu : 1. Struktur FOR 2. Struktur WHILE 3. Struktur REPEAT 6.2 Struktur FOR Bentuk umum struktur FOR ada dua macam, yaitu : menaik atau menurun. 1. FOR menaik : for pencacah := awal to akhir do aksi; Keterangan : a. Pencacah haruslah dari tipe data yang memilik predecessor dan successor, yaitu integer, karakter, subrange, dan enumerasi. b. Aksi adalah satu atau lebih instruksi yang diulang. Jika ada lebih dari satu aksi, maka dimulai dengan pernyataan BEGIN dan diakhiri dengan END; . c. Nilai awal lebih kecil atau sama dengan nilai akhir. d. Pada mulanya, pencacah diinisialisasi dengan nilai awal, kemudian secara otomatis bertambah satu, sampai akhirnya nilai pencaca sama dengan nilai akhir. e. Jumlah pengulangan adalah nilai akhir-nilai awal + 1. 21 Contoh program menghitung nilai faktorial. Program HitungFaktorial; Var i,n : integer; Faktorial : longint; Begin write(‘Nilai faktorial berapa ?’); readln(n); Faktorial :=1; For i:= 1 to n do Faktorial :=Faktorial * i; write(‘Nilai faktorial ‘,N,’ adalah =’,Faktorial); end. 2. FOR menurun : Bentuk umum : for pencacah := akhir downto awal do aksi; Keterangan : a. Pencacah haruslah dari tipe data yang memilik predecessor dan successor, yaitu integer, karakter, subrange, dan enumerasi. b. Aksi adalah satu atau lebih instruksi yang diulang. Jika ada lebih dari satu aksi, maka dimulai dengan pernyataan BEGIN dan diakhiri dengan END; . c. Nilai awal lebih kecil atau sama dengan nilai akhir. d. Pada mulanya, pencacah diinisialisasi dengan nilai akhir, kemudian secara otomatis berkurang satu, sampai akhirnya nilai pencaca sama dengan nilai awal.. e. Jumlah pengulangan adalah nilai akhir - nilai awal + 1. 6.3 Struktur WHILE Bentuk umum struktur WHILE : while kondisi do aksi; Aksi akan dilaksanakan berulangkali selama kondisi bernilai true. 22 Contoh program menghitung nilai faktorial : Program HitungFaktorial; Var i,n : integer; Faktorial : longint; Begin write(‘Nilai faktorial berapa ?’); readln(n); Faktorial :=1; i:=1; While i<=n do begin Faktorial :=Faktorial * i; i:=i + 1; end; write(‘Nilai faktorial ‘,N,’ adalah =’,Faktorial); end. 6.4 Struktur REPEAT Bentuk umum struktur REPEAT : Repeat aksi; Until kondisi; Aksi akan dilaksanakan berulangkali sampai kondisi bernilai true. 23 Contoh program menghitung nilai faktorial : Program HitungFaktorial; Var i,n : integer; Faktorial : longint; Begin write(‘Nilai faktorial berapa ?’); readln(n); Faktorial :=1; i:=1; Repeat Faktorial :=Faktorial * i; i:=i + 1; Until i > n; write(‘Nilai faktorial ‘,N,’ adalah =’,Faktorial); end. Latihan 1. Terdapat sejumlah N mahasiswa. Setiap mahasiswa memiliki nilai UTS dan UAS antara 0-100. Misalkan untuk merubah nilai angka menjadi nilai huruf mengikuti aturan : - Jika Nilai rata-rata UTS dan UAS >= 80, maka nilainya A. - Jika 80 > Nilai rata-rata UTS dan UAS >= 65, maka nilainya B. - Jika 65 > Nilai rata-rata UTS dan UAS >= 50, maka nilainya C. - Jika 50 > Nilai rata-rata UTS dan UAS >= 35, maka nilainya D. - Jika 35 > Nilai rata-rata UTS dan UAS >= 0, maka nilainya E. Buatlah program untuk membaca nilai UTS dan UAS dari N mahasiswa, kemudian menghitung berapa mahasiswa yang mendapat nilai A, B, C, D, atau E. 2. Buatlah program untuk menampilkan semua solusi bilangan bulat tidak negatif dari persamaan : X + Y + Z = 25 3. Buatlah program mengisi password. Program akan terus meminta masukan password selama kata kunci yang dimasukkan salah. 24 BAB 7 PROSEDUR Dalam bahasa pemrograman prosedural, program bisa terdiri dari beberapa sub program. Dengan membuat sub program, penulisan kode program yang sama berulangkali bisa dihindarkan, juga memudahkan menulis dan menemukan kesalahan program. Dalam Bahasa Pascal terdapat dua subprogram, yaitu Prosedur dan Fungsi. Sub program ini hanya perlu ditulis sekali, tetapi dapat dipanggil berkali-kali oleh program utama atau sub program lain. 7.1 Pendeklarasian Prosedur Bentuk deklarasi prosedur (tanpa parameter) adalah : Procedure NamaProsedur; Bagian deklarasi; Begin Bagian pernyataan; End; Contoh : Procedure HitungLuasSegitiga; Var alas, tinggi, Luas : real; Begin write(‘Masukkan panjang alas segi tiga :’); readln(alas); write(‘Masukkan tinggi segi tiga :’); readln(tinggi); Luas:=(1/2)*alas*tinggi; write(‘Luas segi tiga = ‘,Luas); End; 25 7.2 Pemanggilan Prosedur Prosedur bukan program yang berdiri sendiri, jadi tidak bisa dieksekusi secara langsung. Prosedur baru dilaksanakan dengan cara memanggil namanya dari program utama atau sub program lain. Ketika nama prosedur dipangil, kendali program secara otomatis akan berpindah ke prosedur tersebut. Instruksi di dalam prosedur dilaksanakan. Setelah semua selesai, kendali program berpindah secara otomatis ke instruksi sesudah pemanggilan tersebut. Contoh program utama untuk memanggil prosedur HitungLuasSegitiga di atas : Begin HitungLuasSegitiga; End. 7.3 Variabel Global dan Lokal Variabel yang dideklarasikan dalam prosedur hanya dikenal di badan prosedur tersebut, sehingga disebut variabel Lokal. Sedangkan variabel yang dideklarasikan di dalam program utama bersifat Global, karena dikenali di semua bagian program. Program TukarNilai; Var A, B : integer; {A,B variabel global} Procedure Tukar; Var temp : integer;{temp variabel lokal} begin temp:= A; A:= B; B:=temp; end; Begin write(‘Masukkan nilai A = ‘);readln(A); write(‘Masukkan nilai B = ‘);readln(B); Tukar; writeln(‘Nilai A sesudah ditukar = ‘,A); writeln(‘Nilai B sesudah ditukar = ‘,B); End. 26 7.4 Parameter Kebanyakan program memerlukan pertukaran informasi antara prosedur (atau fungsi) dengan pemanggilnya.Tiap item data ditransfer antara parameter aktual dan parameter formal yang bersesuaian. Parameter aktual adalah parameter yang disertakan waktu pemanggilan, sedangkan parameter formal adalah parameter yang dideklarasikan di dalam bagian Nama Prosedur. Berdasarkan maksud penggunaannya, terdapat tiga jenis parameter formal yang disertakan di dalam prosedur : 1. parameter masukan 2. parameter keluaran 3. parameter masukan/keluaran Parameter masukan adalah parameter yang nilainya berlaku sebagai masukan untuk prosedur. Pada bahasa pemrograman seperti Pascal, parameter masukan dinamakan parameter by value. Parameter keluaran adalah parameter yang menampung keluaran yang dihasilkan oleh prosedur. Pada bahasa pemrograman seperti Pascal, parameter keluaran dinamakan parameter by reference. Parameter masukan/keluaran adalah parameter yang berlaku sebagai masukan sekaligus keluaran bagi prosedur tersebut. Pada bahasa pemrograman seperti Pascal, parameter masukan/keluaran termask dalam parameter by reference. Pada bahasa Pascal, parameter formal by value tidak menggunakan kata VAR dalam deklarasinya, sedangkan parameter by reference menggunakan kata VAR. 27 1. Parameter Masukan (By value) Contoh program menggunakan parameter masukan dalam deklarasi prosedurnya: Program SegitigaKarakter; var M : integer; K : char; Proedure CetakSegitiga(C : char; N : integer); var i,j : integer; Begin for i:=1 to N do Begin for j :=1 to i do write(C); writeln; End; End; Begin write(‘Masukkan karakter yang akan dicetak :’); readln(K); write(‘Masukkan tinggi segi tiga :’); readln(M); CetakSegitiga(K,M); End. 2. Parameter Keluaran (By reference) Bila prosedur menghasilkan satu atau lebih nilai yang digunakan oleh program pemanggil, maka nilai keluaran ditampung di dalam parameter keluaran. Bila prosedur yang mengandung parameter keluaran dipanggil, nama parameter aktual akan menggantikan nama parameter formal yang bersesuaian (berlawanan dengan parameter masukan, yang dalam hal ini, nilai parameter aktual yang di assign ke dalam parameter formal). Berikut contoh perbedaan parameter masukan dan keluran : 28 Program ABC; Var A, B, C : integer; Procedure XYZ(X,Y : integer; var Z : integer); {X dan Y parameter masukan, Z parameter keluaran} Begin X:= X + 1; Y:= Y + 1; Z := X + Y; End; Begin A:= 2; B:= 5; XYZ(A,B,C); {Pemanggilan prosedur XYZ} writeln(A,’ ‘, B,’ ‘,C); {Menampilkan nilai A, B, dan C setelah pemanggilan prosedur} End. Pada Program ABC di atas, X dan Y adalah parameter masukan, sedangkan Z adalah parameter keluaran. Ketika Prosedur XYZ dipanggil dengan parameter aktual A=2 dan B=5, maka nilai itu mengisi nilai parameter formal X dan Y. Sedangkan nama parameter aktual C secara semu menggantikan nama parameter formal C (bukan nilainya yang diisikan). Sehingga setelah pemanggilan, nilai variabel A dan B tetap, yaitu A=2 dan B =5. Sedangkan nilai variabel C berubah menjadi 9. 3. Parameter Masukan/Keluaran (By reference) Parameter masukan/keluaran berfungsi sebagai masukan untuk prosedur sekaligus menampung nilai keluaran prosedur. Sehingga bila keluarannya berbeda dengan masukannya, maka hasilnya mengikuti nilai keluarannya. Contoh Program TukarNilai berikut : 2 nilai integer A dan B merupakan parameter formal Prosedur Tukar. Setelah instruksi di dalam prosedur dilaksanakan, maka nilai keluaran A dan B berubah. Karena A dan B adalah parameter 29 masukan/keluaran, maka nilai parameter aktual pemanggilnya juga berubah sesuai nilai keluaran yang dihasilkan prosedur. Program TukarNilai; Var X, Y : integer; Procedure Tukar (var A,B : integer); Var temp : integer; Begin temp := A; A := B; B:=temp; End. Begin X:= 2; Y:= 5; Tukar (X,Y); writeln(‘Nilai X setelah ditukar = ‘,X); writeln(‘Nilai Y setelah ditukar = ‘,Y); End. Latihan 1. Buatlah prosedur mencari bilangan terbesar dari 3 bilangan integer A, B, dan C. 2. Buatlah prosedur menghitung nilai rata-rata dari N buah bilangan. 30 BAB 8 FUNGSI 8.1 Definisi Fungsi Fungsi adalah sub program yang memberikan/mengembalikan sebuah nilai dari tipe tertentu. Sebagaimana halnya prosedur, fungsi diakses dengan memanggil namanya. Selain itu, fungsi juga dapat mengandung daftar parameter formal. Parameter formal pada fungsi selalu berupa parameter masukan, karena parameter pada fungsi merupakan masukan yang digunakan oleh fungsi tersebut untuk menghasilkan nilai. 8.2 Pendeklarasian Fungsi Deklarasi fungsi adalah : function NamaFungsi(daftar parameter masukan):tipe data; bagian deklarasi Begin Bagian Pernyataan; End; 8.3 Pemanggilan Fungsi Fungsi diakses dengan cara memanggil namanya dari program utama atau sub program lain, diikuti dengan daftar parameter aktual (jika ada). Karena fungsi menghasilkan nilai, maka nilai tersebut dapat ditampung dalam suatu variabel (peubah) yang bertipe sama dengan tipe fungsi. (i). peubah := NamaFungsi(daftar parameter aktual); atau dimanipulasi langsung seperti : (ii) write(NamaFungsi(daftar parameter aktual)); (iii) if NamaFungsi(daftar parameter aktual) > 0 then.... (iv) y := 2* NamaFungsi(daftar parameter aktual) +3; 31 Contoh : Program Terbesar Var A,B,C,D,Z : integer; Function Maks(X,Y : integer) : integer; Begin if X > Y then Maks:= X else Maks := Y; End; Begin A := 3; B := 6; C:= 10; D := 8; writeln(‘Bilangan terbesar antara ‘,A, ‘ dan ‘, B,’ adalah ‘,Maks(A,B)); Z:= Maks(C,D); writeln(‘Bilangan terbesar antara ‘,C, ‘ dan ‘,D,’ adalah ‘, Z); If Maks(A,B) > Maks(C,D) then writeln(‘Yang terbesar antara ‘, A,’ ‘,B,’ ‘,C,’ dan ‘,D,’ adalah = ‘, Maks(A,B)) else writeln(‘Yang terbesar antara ‘, A,’ ‘,B,’ ‘,C,’ dan ‘,D,’ adalah = ‘, Maks(C,D)); End. Latihan 1. Buatlah fungsi yang menerima masukan 2 titik A( x1, y1) dan menghitung jarak kedua titik tersebut dengan rumus jarak = d B ( x 2, y 2) dan x1 x22 y1 y22 2. Buatlah fungsi untuk mengembalikan nilai mutlak X. 32 BAB 9 REKURSI Suatu subprogram tidak hanya bisa memanggil sub program lain, tetapi juga bisa memanggil dirinya sendiri. Cara ini dikenal dengan sebutan rekursi. Rekursi banyak dipakai pada persoalan yang dapat dipecahkan secara induktif. Misalnya untuk menghitung faktorial. 1, m! 1x 2 x3 x 4....xm jika m 0 jika m 0 Pemecahan secara rekursif : 0!=1 (penghentian rekursi) jika m > 0, m ! = m x (m-1) ! (langkah induksi) 9.1 Fungsi Rekursif Fungsi yang memanggil dirinya sendiri disebut fungsi rekursif. Contoh fungsi rekursif untuk menghitung faktorial. Function FaktorialR(m:byte) : longint; Begin If m = 0 then FaktrialR:= 1 else FaktorialR:= m * FaktorialR(m-1); End; 9.2 Prosedur Rekursif Rekursi juga bisa diterapkan pada prosedur. Berikut contoh prosedur Balik : 33 Procedure Balik (X : integer); Var Sisa : integer; Begin; write (X mod 10); Sisa := X div 10; If Sisa <> 0 Then Balik(Sisa); End; Jika prosedur di atas dipanggil dengan Balik(1024) apa hasilnya ? Latihan 1. Lihat kembali Algoritma Euclidean untuk menghitung nilai FPB. Buatlah prosedur untuk menghitung nilai FPB berdasarlan Algoritma Euclidean, secara rekursif. 2. Buatlah fungsi rekursif dan non rekursif untuk menghitung nilai XN, dngan X bilangan riil dan N bilangan bulat. 34 DAFTAR PUSTAKA Kadir A, 1993, Pemrograman Dasar Turbo Pascal, Andi Offset, Yogyakarta Munir, R., 2004, Algoritma dan Pemrograman, Informatika, Bandung 35