Modul : Algoritma dan pemrograman 1
BAB I ALGORITMA DAN PEMROGRAMAN Pengantar Algoritma Apakah Algoritma ? Sejarah kata Algoritma berasal dari nama seorang ahli matematika bangsa Arab yaitu Abu Ja'far Muhammad ibnu Musa al-Khuwarizmi. Al-Khuwarizmi dibaca oleh orang Barat menjadi Algorism. Perubahan kata algorism menjadi algorithm karena kata algorism sering dikelirukan dengan arithmetic, sehingga akhiran –sm berubah menjadi –thm. Lambat laun kata algorithm dipakai sebagai metode perhitungan (komputasi) secara umum, sehingga kehilangan makna aslinya. Dalam bahasa Indonesia kata algorithm diserap menjadi algoritma. Definisi Algoritma adalah : Susunan langkah-langkah sistematis dan logis dalam pemecahan suatu masalah. Ada 3 cara dalam menyusun algoritma yaitu : Algoritma cara ke-1 : Dengan merumuskan langkah-langkah pemecahan masalah melalui kalimat yang tersetruktur (tersusun secara logis). Contoh : Ada persoalan sbb : Dua buah gelas misalkan gelas A berisi air warna merah dan gelas B berisi air warna biru. Permasalahannya adalah bagaimana mempertukarkan isi kedua gelas A dan B sehingga gelas A berisi air warna biru dan gelas B berisi air warna merah. Buatlah algoritmanya. Jawab : Langkah-langkahnya sbb: 1. Sediakan satu gelas kosong misalkan C 2. Tuangkan isi gelas A ke gelas C 3. Tuangkan isi gelas B ke gelas A 4. Tuangkan isi gelas C ke gelas B 5. Selesai {Program : URUT.PAS} PROGRAM URUT_DATA; USES CRT; VAR D,X,Z : BYTE; T : LONGINT; R : REAL; DATA : ARRAY[1..5] OF BYTE; BEGIN CLRSCR; T:=0; FOR D:=1 TO 5 DO BEGIN Write('DATA KE ',D,' : '); ReadLn(DATA[d]); T:=T+Data[d]; END;
54n1
Untuk Kalangan Sendiri
Hal : 1
Modul : Algoritma dan pemrograman 1
WriteLn; Write('Data sebelum diurut : '); FOR D:= 1 TO 5 DO Write(Data[d]:3); { ----- URUT DATA -----} FOR D:= 1 TO 4 DO BEGIN FOR X:= D+1 TO 5 DO BEGIN IF DATA[d] > DATA[x] THEN BEGIN Z:=DATA[d]; DATA[d] := DATA[x]; DATA[x] := Z; END; END; END; WriteLn; WriteLn; Write('DATA SETELAH DIURUT : '); FOR D:=1 TO 5 DO WRITE(DATA[d]:3); WRITELN; WRITELN('TOTAL : ',T); R:=T/D; WRITELN('RATA : ',R:10:2); READLN; END.
Algoritma cara ke-2 : Menggabungkan kalimat dengan penggalan statements yang ada di suatu bahasa pemrograman (mis : Pascal ). Biasa disebut Pseudo code (mirip kode/perintah pemrograman) Contoh : Algoritma untuk konversi bilangan berbasis-10 menjadi bilangan berbasis-2. 1. INPUT a { a adalah bilangan bebasis 10} Hit = 1 { hit adalah indeks untuk menyimpan sisa hasil bagi } 2. DO WHILE a>0 sb = sisa bagi a dengan 2 bil(hit) = sb hit = hit + 1 a = hasil pembagian a dengan 2 ENDDO 3. DO WHILE hit > 0 cetak bil(hit); hit = hit + 1 ENDDO
54n1
Untuk Kalangan Sendiri
Hal : 2
Modul : Algoritma dan pemrograman 1
Algoritma cara ke-3 : Menggunakan diagram alir (flowchart). Lambang lambang flowchart secara umum No Lambang Keterangan 1 Terminal (Start atau Finish) : Sebagai lambang untuk mengawali flowchart dan mengakhiri flowchart. 2
3
4
5
6
Input atau Output : Sebagai lambang untuk memasukkan data atau mengeluarkan data atau hasil proses data Proses : Sebagai lambang proses terhadap data maupun formulasi matematis lainnya. Predefined proses : Merupakan suatu Prosedur atau Rutin atau Sub Program baik yang terpisah dari program utama maupaun yang terpadu dalam satu program. Preparasi : Pemberian harga awal terhadap suatu pengenal ( indentifier) yang akan digunakan Decision ( Pengambilan keputusan berdasarkan hasil pengujian ekspresi logis apakah hasilnya True atau False )
7
Connector dalam satu halaman
8
Connector ke halaman lain
9
Line : Sebagai lambang arah / arus dari aliran program
Gambar 1.1 : Lambang-lambang flowchart.
54n1
Untuk Kalangan Sendiri
Hal : 3
Modul : Algoritma dan pemrograman 1
Contoh: flowchart konversi bilangan basis 10 menjadi bilangan basis-2 : START
L No
HIT = 1 HIT>0 INPUT - A
END
Yes
Cetak Sisa Hasil Bagi dari Belakang ke Depan
SB=MOD(A/2) BIL(HIT)=SB HIT=HIT+1 A=DIV(A/2)
HIT = HIT - 1 No
A=0 ? Yes
L Gambar 1.2 : Flowchart konversi bil desimal ke biner. Buatlah program menggunakan Turbo Pascal untuk konversi bil basis 10 ke bil basis 2 sesuai flowchart diatas. Simpan program dengan nama Biner.Pas { Nama Program : Biner.Pas } Program Konversi_Biner; Uses Crt; Var Hit,A,SB : Integer; Bil:Array[1..100] of Integer; Begin ClrScr; Write('Masukan bilangan basis 10 : '); ReadLn(A); Hit:=1; Repeat SB := A Mod 2; Bil[Hit]:=SB; Hit:=Hit+1; A := A Div 2; Until A=0; Writeln; Repeat Write(Bil[Hit]:2); Hit:=Hit-1; Until Hit=0; ReadLn; End.
54n1
Untuk Kalangan Sendiri
Hal : 4
Modul : Algoritma dan pemrograman 1
Algoritma merupakan jantung Ilmu Informatika Algoritma adalah merupakan jantung ilmu komputer atau informatika. Banyak cabang ilmu komputer yang diacu dalam terminologi algoritma. Namun jangan beranggapan algoritma selalu identik dengan ilmu komputer saja. Cara membuat kue atau masakan yang dinyatakan dalam resep masakan, itu juga merupakan algoritma. Ibu-ibu yang mencoba resep masakan tersebut akan membaca satu persatu langkah pembuatannya, lalu mengerjakan proses (melakukan aksi) sesuai yang ia baca. Secara umum, pihak yang mengerjakan proses disebut pemroses (processor). Pemroses dapat berupa manusia, komputer, robot, alat mekanik, alat elektronik dll. Melaksanakan algoritma berarti mengerjakan langkah-langkah yang tertulis dalam algoritma tersebut. Mekanisme Pelaksanaan Algoritma Agar algoritma dapat dilaksanakan dalam komputer maka algoritma harus di ubah ke notasi bahasa pemrograman sehingga disebut program. Jadi program adalah merupakan perwujudan atau implementasi dari algoritma. Program ditulis dalam salah satu bahasa pemrograman. Kegiatan menulis program disebut pemrograman(programming). Orang yang menulis program disebut pemrogram (programmer). Tiap langkah di dalam program disebut pernyataan atau instruksi. Jadi program adalah : "Sederetan instruksi yang sistematis dan logis yang menggunakan sintaks tertentu untuk menyelesaikan permasalahan". Secara garis besar komputer tersusun atas 4 komponen utama yaitu : 1. Input device (piranti masukan) 2. Output device (piranti keluaran) 3. Unit pemroses utama (Central Processing Unit ) 4. Memory (piranti penyimpan sementara) Mekanisme kerja ke-empat komponen tersebut dapat dijelaskan sbb : - Program dimasukan kedalam memori komputer. - Setiap instruksi yang ada di memori di dikirim ke CPU untuk dieksekusi. - CPU mengerjakan operasi-operasi yang bersesuain dengan instruksi tsb. • Bila operasi memerlukan data maka data dibaca dari pirnati masukan. Data yang dimasukan disimpan dimemori lalu dikirim ke CPU untuk operasi yang memerlukan operasi tadi. • Bila proses menghasilkan keluaran atau informasi, maka keluaran disimpan ke memori, lalu memori menuliskan keluaran ke piranti keluaran (mis : screen atau printer) Perbedaan belajar Memprogram dengan Belajar Bahasa Pemrograman - Belajar memprogram adalah belajar tentang metodologi pemecahan masalah, kemudian menuangkannya kedalam suatu notasi yang mudah dipahami. Belajar algoritma sama dengan belajar memprogram. - Belajar bahasa pemrograman adalah belajar memakai suatu bahasa, aturan dan tata bahasanya, instruksi-instruksinya, cara pengoreasian compiler-nya. Belajar bahasa program contohnya adalah belajar TurboPascal.
54n1
Untuk Kalangan Sendiri
Hal : 5
Modul : Algoritma dan pemrograman 1
Pemrograman Prosedural. Bahasa pemrograman yang menerapkan konsep prosedural didalam penulisan programnya misalnya adalah T.Pascal. Teknik pemrograman prosedural adalah : program di bagi menjadi beberapa bagian program yang lebih kecil yang disebut modul atau sub program atau rutin atau procedure atau function. Bagian-bagian program kecil ini nantinya di kontrol atau dikendalikan dari program utama (main program). Setiap sub program dapat di panggil berkali-kali dari program utama. Perhatikan skema konsep pemrograman prosedural berikut ini. ** Program Utama {statements} ..... ..... CALL Proc1 {statements}
Procedure Proc1
CALL Proc2
Procedure Proc2
{statements} ..... ..... END
{statements} ...... ...... ...... EXIT
{statements} ...... ...... ...... EXIT
Gambar 1.3 : Diagram konsep prosedural. Program Utama memanggil sub program Procedure Proc1 kemudian melaksanakan semua statements yang ada di sub program Procedure Proc1 hingga selesai (disini digambarkan dengan Exit). Kemudian program keluar dari sub program dan kembali ke perintah (statements) dibawah pemanggil. Demikian juga dengan prosedur-prosedur yang lain. Contoh : { Program: Modular1.Pas} Program Prosedure1; Uses Crt; Label Ulang; Var Pilihan : integer; { --------------------------------------------- } Procedure Pros_Persegi; Var P,L,Luas : Integer; Begin ClrScr; WriteLn('Menghitung Luas Persegi Panjang'); Write('Masukkan Panjang : '); ReadLn(P);
54n1
Untuk Kalangan Sendiri
Hal : 6
Modul : Algoritma dan pemrograman 1
Write('Masukkan Lebar Luas := P * L; Write('Luas adalah ReadLn; End;
: '); ReadLn(L); : ',Luas:10);
{ --------------------------------------------- } Procedure Pros_Lingkaran; Var R, Luas : Real; Begin ClrScr; WriteLn('Menghitung Luas Lingkaran'); Write('Masukkan Panjang Jari-jari: '); ReadLn(R); Luas := Pi * R * R; Write('Luas adalah : ',Luas:10:5); ReadLn; End; { --------------------------------------------- } Procedure Pros_Kubus; Var S, Volume : Integer; Begin ClrScr; WriteLn('Menghitung Volume Kubus'); Write('Masukkan Panjang Sisi kubus: '); ReadLn(S); Volume := S * Sqr(S); Write('Luas adalah : ',Volume:10); ReadLn; End;
{ ------------------- Bag Utama Program -------------------------- } Begin ulang: ClrScr; WriteLn('Ini modul utama '); WriteLn('1. Luas Persegi panjang '); WriteLn('2. Luas Lingkaran '); WriteLn('3. Volume Kubus '); WriteLn('4. Selesai '); WriteLn; Write('Pilihan anda : '); ReadLn(Pilihan); Case Pilihan of 1 : Pros_Persegi; 2 : Pros_Lingkaran; 3 : Pros_Kubus; Else Exit; End; GoTo ulang; ReadLn; End.
54n1
Untuk Kalangan Sendiri
Hal : 7
Modul : Algoritma dan pemrograman 1
BAB-2 Aturan Penulisan Teks Algoritma Teks Algoritma Agar algoritma mudah ditranslasikan ke dalam notasi bahasa pemrograman, maka sebaiknya notasi algoritmik tersebut berkoresponden dengan notasi bahasa pemrograman secara umum. Misalkan kita menulis perintah : tulis nilai x dan y dalam notasi algoritmik ditulis menjadi : write(x,y) Tabel notasi algoritmik No.
Notasi biasa
Notasi algoritmik
Notasi T.Pascal
1 2 3 4 5 6
masukan nilai x isikan nilai 5 kedalam x isikan nilai x kedalam min tambahkan nilai 1 ke X itulah X tulis nilai x dan y jika a lebih besar dari b maka
readln(x) x Å 5 min Å x x Å x + 1 write(x,y) if a>b then
ReadLn(x); X:=5; Min:=x; X:=x+1; Write(x,y); If a>b Then
Aturan diatas tidak baku, hanya penyesuaian dengan bahasa pemrograman Turbo Pascal. Pada dasarnya teks algoritma tersusun dari 3 bagian (blok) yaitu : 1. Kepala Algoritma atau judul (header) 2. Bagian deklarasi. 3. Bagian deskripsi (uraian) algoritma. -
-
-
Header atau kepala algoritma bagian yang terdiri dari nama algoritma dan penjelasan singkat (spesifikasi) tentang algoritma tersebut. Penjelasan di apit tanda kurung kurawal { - }. Deklarasi merupakan bagian untuk mendefinisikan semua nama yang dipakai dalam algoritma. Nama dapat berupa nama peubah, tetapan, tipe, prosedur, fungsi, dll. Deskripsi merupakan bagian yang menjelaskan atau menguraikan langkahlangkah penyelesaian masalah. Uraian ditulis baris perbaris sesuai urutan yang harus dikerjakan secara sistematis.
Gambaran sebuah algoritma seperti berikut : Algoritma NAMA_ALGORITMA { penjelasan tentang algoritma yang berisi uraian singkat mengenai apa yang dilakukan oleh algoritma} DEKLARASI : { semua nama yang dipakai meliputi nama peubah, tetapan, tipe, prosedur, fungsi, label didefinisikan di bagian ini } DESKRIPSI : { semua langkah/aksi algoritma ditulis dibagian ini }
54n1
Untuk Kalangan Sendiri
Hal : 8
Modul : Algoritma dan pemrograman 1
Translasi teks algoritma ke dalam Teks Program Teks algoritma hanya berisi pemikiran konseptual. Agar dapat dilaksanakan oleh komputer, algoritma harus ditranslasikan kedalam notasi bahasa pemrograman tertentu. Dalam hal ini kita akan mentranslasikan kedalam notasi bahasa pemrograman pascal. Algoritma
Kode program dengan Pascal
Algoritma UPAH_KARYAWAN {menghitung upah mingguan karyawan. Masukkan yang dibaca dari papan kunci adalah nama karyawan, golongan, dan jumlah jam kerja. nama karyawan dan upah kerja dicetak ke piranti keluaran}
Program UPAH_KARYAWAN; {menghitung upah mingguan karyawan. Masukkan yang dibaca dari papan kunci adalah nama karyawan, golongan, dan jumlah jam kerja. nama karyawan dan upah kerja dicetak ke piranti keluaran}
DEKLARASI const UL = 3000 {upah lembur/jam} Nama : String gol : char {'A','B','C','D'} JJK : integer upah : real UJ : real {upah per jam}
Uses Crt; const UL = 3000; {upah lembur/jam} Var Nama : String; gol : char; {'A','B','C','D'} JJK : integer; upah : real; UJ : real; {upah per jam}
DESKRIPSI Read(Nama, gol, JJK) Case (gol) gol='A' : UJ <- 4000 gol='B' : UJ <- 5000 gol='C' : UJ <- 6000 gol='D' : UJ <- 7500 endcase
Begin ClrScr; Write('Nama : ');ReadLn(Nama); Write('Gol : ');ReadLn(gol); Write('Jlh jam kerja:');ReadLn(JJK); Case gol of 'A' : UJ := 4000; 'B' : UJ := 5000; 'C' : UJ := 6000; 'D' : UJ := 7500; end;
If JJK <= 48 then upah <- JJK * UJ else upah <- 48 * UJ + (JJK-48) * UL endif write(Nama, upah)
If JJK <= 48 then upah := JJK * UJ else upah := 48 * UJ + (JJK-48) * UL; writeLn('Nama : ',nama); writeLn('Upah : ',upah:10:2); ReadLn; End.
Sebelum kita bisa mentranslasikan notasi algoritma ke notasi bahasa pemrograman Turbo Pascal maka sebaiknya kita perlu mengetahui struktur dasar penulisan program pascal. Dibawah ini adalah skema struktur penulisan program pada T.Pascal secara umum sebagai berikut.
54n1
Untuk Kalangan Sendiri
Hal : 9
Modul : Algoritma dan pemrograman 1
Bag. Judul program
Program Latihan;
Bag. Deklarasi Deklarasi Unit Pascal
Uses Crt;
Deklarasi Pengenal
Var Nama : String ; Gaji : LongInt;
Bag. Blok Utama program
Begin ClrScr; Write('Nama : '); ReadLn(Nama); Write('Gaji Pokok : '); ReadLn(Gaji); ReadLn; End.
Gambar 2.1 : Struktur penulisan program pada T.Pascal Bag. Judul : Bagian ini untuk memberikan judul dari program yang akan dibuat. Judul ini sama dengan header pada algoritma. Penulisan judul diawali Clausa "Program" diikuti nama program yang diberikan oleh pemrogram. Nama program dibuat sedapat mungkin berkoresponden dengan isi program. Judul program bersifat optional artinya boleh tidak dibuat dan tidak akan mengganggu jalannya program. Bag. Deklarasi : Bagian ini terbagi menjadi dua kategori yaitu : - deklarasi unit-unit pascal yaitu menyertakan unit-unit pascal yang nantinya akan mendukung proses compilasi program. Beberapa unit pascal daintaranya adalah Crt, Print, Graph, Windos dll. Deklarasi unit pascal diawali dengan clausa "USES" diikuti dengan nama unit-nya. Misalnya : Uses Crt; - deklarasi pengenal untuk mendefinisikan pengenal-pengenal yang akan digunakan dalam program utama. Pengenal dapat berupa Type, Constanta, Variabel, Label, Prosedur, Fungsi. Deklarasi pengenal diawal dengan clausa dari masing-masing jenis pengenal lalu diikuti nama pengenal beserta tipenya. Berikut ini adalah clausa yang dimasud.
54n1
Untuk Kalangan Sendiri
Hal : 10
Modul : Algoritma dan pemrograman 1
Type --> clausa untuk pengenal berupa type buatan. Const --> clausa untuk pengenal berupa constanta (tetapan). Var --> clausa untuk pengenal berupa variabel (peubah). Label --> clausa untuk pengenal berupa Label (pengenal baris). Procedure --> clausa untuk pengenal berupa prosedur. Function --> clausa untuk pengenal berupa fungsi. Bag. Blok Utama program Bagian ini adalah bagian utama program. Blok utama program diawal clausa "BEGIN" dan diakhiri clausa "END." CONTOH : Program Contoh_Program1; Uses Crt; Const Harga = 1000; var Jumlah : Integer; HasilX : Real; Bagin ClrScr; Jumlah := 10; HasilX := Jumlah * Harga; Writeln(‘Hasil perkaliannya adalah :’,HasilX); ReadLn; End.
54n1
Untuk Kalangan Sendiri
Blok Utama
Hal : 11
Modul : Algoritma dan pemrograman 1
BAB III Tipe, Nama, dan Nilai Pengenal Pengantar Pada umumnya, program komputer bekerja dengan memanipulasi objek(data) di dalam memori. Objek yang akan diprogram bermacam-macam jenis atau tipenya, misalnya nilai numerik, karakter, string dan rekaman (record). Suatu tipe menyatakan pola penyajian data dalam komputer. Tipe data dapat dikelompokan menjadi atas dua macam: tipe data dasar dan tipe tipe bentukan. Tipe dasar adalah tipe yang dapat langsung dipakai, sedangkan tipe bentukan dibentuk dari tipe dasar. Suatu tipe diacu dari namanya. Nilai-nilai yang dicakup oleh tipe tersebut dinyatakan di dalam ranah (domain) nilai. Tipe Dasar - Bilangan Logika - Bil Bulat - Bil Riil - Karakter Tipe Bilangan Logika Bilangan Bulat
Bilangan Riil
Nama Tipe boolean integer
real
Ranah Nilai
Tetapan
True atau False
True dan not, and, or, False xor tidak me- 1. aritmatika (+
1.byte 2.shortInt 3.word 4.integer 5.LongInt 1. real 2. single 3. double
Karakter
54n1
char
0..255 -128..127 0..65535 -32768..32767 -2147483648 ..2147483647 2.9x10-39..1.7x1038 -45
38
1.5x10 ..3.4x10 5.0x10-324 ..1.7x10308 4.extended 3.4x10-4932 ......1.1x104932 - semua alfabet - semua angka - tanda baca - operator aritmatik - karakter khusus
Untuk Kalangan Sendiri
Operasi
ngandung titik desimal
- * div mod )
harus ditulis dengan titik desimal
1. aritmatika
harus diapit tanda petik tunggal
perbandingan (=, <>, <, >, >=)
2. perbandingan (<, <=, >,>=, =, <>)
(+ - * / ) 2. perbandingan
(<, <=, >,>=, <>)
Hal : 12
Modul : Algoritma dan pemrograman 1
Tipe Bentukan - String. - Tipe dasar yang diberi nama tipe baru. - Rekaman (record). Tipe String
Nama Tipe string
Ranah Nilai
Tetapan
deretan karakter didefinisikan pada karakter
yang harus ranah diapit petik tunggal
Operasi 1. Penyambungan (+)
2. Perbandingan (=, <>, <, >, >=, <=) hasil operasi berupa bilangan logic (true/false)
Tipe dasar yang diberi nama tipe baru : Kita dapat memberi nama baru untuk tipe dasar dengan kata kunci type ranah nilai, tetapan dan operasi sama seperti tipe dasar aslinya. Contoh : type BilBulat : integer; BilBulat adalah tipe bilangan bulat yang sama dengan tipe integer. Rekaman Rekaman disusun oleh satu atau lebih field. Tiap field menyimpan data dari tipe dasar tertentu atau tipe bentukan yang sudah didefinisikan. Nama rekaman ditentukan oleh pemrogram sendiri. Contoh : NilMhs adalah nama tipe tersetruktur yang menyatakan nilai ujian seorang mahasiswa untuk suatu mata kuliah (MK) yang diambil. Data setiap mahasiswa adalah NIM (Nomor Induk Mahasiswa), Nama Mahasiswa, Kode Mata Kuliah, Nilai mata kuliah. NIM NamaMhs Cara menuliskan tipe NilMhs : type NilMhs : record < NIM : string NamaMhs : string
54n1
KodeMK
Nilai
{ Nomor Induk Mahasiswa}
Untuk Kalangan Sendiri
Hal : 13
Modul : Algoritma dan pemrograman 1
KodeMK Nilai
: string : integer
{kode mata kuliah} {nilai M.Kuliah }
>
Jika dideklarasikan M adalah peubah bertipe NilMhs, maka cara mengacu tiap field pada rekaman M adalah : M.NIM M.NamaMhs M.KodeMK M.Nilai Tipe NilMhs didefinisikan sebagai berikut : Nama Tipe : NilMhs Ranah Nilai : sesuai ranah masing-masing field Contoh tetapan: <'2007001', 'Shulthan Sany', 'FI123',85> <'2007002','Sundari Zahra','MA222',78> Operasi : - operasi aritmatik bilangan bulat terhadap Nilai - operasi string terhadap NIM, NamaMhs, KodeMK Nama Setiap objek diberi nama agar objek tersebut mudah diindentifikasi dari objek lainnya. Dalam algoritma nama dipakai sebagai pengindentifikasi "sesuatu" dan pemrogram mengacu "sesuatu" itu melalui namanya. Karena itu tiap nama haruslah unik (tidak sama). Didalam algoritma "sesuatu" yang diberi nama itu dapat berupa : 1. Label Label merupakan pengenal baris. Suatu baris dalam program diberi nama/pengenal. Label ini diberikan pada baris tertentu biasanya untuk instruksi percabangan. 2. Peubah (variabel) Variabel adalah alamat memory yang diberi nama sebagai tempat penyimpan data/informasi dan isi variabel dapat diubah. 3. Tetapan (constanta) Sama dengan variabel tetapi isinya tetap (tidak bisa diubah) selama pelaksanaan program. 4. Tipe bentukan. Nama tipe bentukan diberikan oleh pemrogram. 5. Fungsi (function). 6. Prosedur (procedure). Nilai - Pengisian nilai ke dalam nama peubah Nilai adalah besaran dari tipe data yang sudah dikenal. Nilai dapat berupa isi yang disimpan oleh nama peubah (variabel) atau nama tetapan(constanata), atau hasil dari perhitungan atau nilai yang dikirim oleh fungsi lain. Cara mengisi nilai ke dalam nama peubah dapat dilakukan sbb : • Pengisian nilai secara langsung. Nama := 'Budi Santoso'; Gaji := 2500000; Tunj := Gaji * 0.1; • Pembacaan nilai dari piranti masukan (input device)
54n1
Untuk Kalangan Sendiri
Hal : 14
Modul : Algoritma dan pemrograman 1
ReadLn(Nama); ReadLn(Gaji); -
Ekspresi Transformasi nilai(data) menjadi keluaran(informasi) melalui suatu proses perhitungan dinyatakan dalam suatu ekspresi. Ekspresi terdiri dari operand dan operator. Operand adalah nilai yang dioperasikan, operator adalah lambang untuk operasi. Ada tiga macam ekspresi yaitu : • Ekspresi Aritmatik menggunakan operator aritmatika. c:=a*b; a:=a+1; d:=(a+b)/c*0.1; Operator yang digunakan ( +, -, *, /, div, mod, sqr, sqrt) • Ekspresi Relational (ekspresi perbandingan yang menghasilkan nilai boolean) a>b; a>=d; c=d; e
, >=, =, <>) • Ekspresi Relational menggunakan operator (not, and, or, xor ). Ekpresi ini menghasilkan nilai boolean (True atau False). Kondisi 1 T T F T
Kondisi 2 T F T T
AND T F F F Not -T Not - F
OR T T T F
XOR F T T F
F T
•
Ekspresi String Ekspresi string adalah ekspresi dengan operator "+" (operator penyambungan/concatenation). a:='Budi'; b:='Joko'; write(a+b); { BudiJoko} - Menuliskan Nilai kepiranti keluaran (output device) Nilai yang disimpan dimemori dapat ditampilkan ke piranti keluaran (misalnya layar peraga). Instruksi penulisan nilai dilakukan dengan notasi Write Nama := 'Budi Santoso'; Gaji := 2500000; Tunj := Gaji * 0.1; WriteLn(Nama); WriteLn(Gaji); WriteLn(Tunj);
54n1
Untuk Kalangan Sendiri
Hal : 15
Modul : Algoritma dan pemrograman 1
BAB IV Struktur Dasar Algoritma Dasar-dasar Algoritma Proses, Instruksi dan Aksi Tiap langkah instruksi mengerjakan suatu tindakan (aksi). Bila suatu aksi dilaksanakan, maka sejumlah operasi yang bersesuaian dengan aksi itu dikerjakan oleh pemroses. Efek dari pengerjaan suatu aksi dapat diamati dengan membandingkan keadaan pada saat aksi belum dimulai t0 dan keadaan setelah aksi selesai dikerjakan t1. t0 t1
: keadaan sebelum aksi dikerjakan aksi : keaaan setelah aksi dikerjalan
Struktur Dasar Algoritma Konstruksi algoritma dibangun atas 3 konstruksi dasar yaitu : - Runtunan aksi - Pemilihan aksi - Pengulangan aksi Runtunan Aksi (Squence) Proses pelaksanaan instruksi dikerjakan beruntun dari urutan istruksi pertama, instruksi kedua, instruksi ketiga dan seterusnya hingga berakhir atau berhenti karna ada kesalahan isntruksi. Urutan instruksi menentukan keadaan akhir dari algoritma. Bila urutannya diubah maka kemungkinan hasil akhir juga berubah. Perhatikan ilustrasi berikut. Misalkan runtunan instruksi yang dilambangkan dengan A1, A2, A3, A4 dan A5 yang disusun sbb : A1 A2 A3 A4 A5 Mula-mula pemroses malaksanakan istruksi A1. Selesai instruksi A1 dilanjutkan pelaksanaan instruksi A2. Intrsuksi A3 akan dilaksanakan jika instruksi A2 selesai dikerjakan dan seterusnya hingga A5. Pelaksanaan instruksi akan berurut kecuali jika ada perintah percabangan. Pengaruh urutan instruksi terhadap hasil adalah apabila urutan diubah maka hasil akhir kemungkinan juga berubah. Contoh : Kita ambil persoalan seperti pada bab-I Ada persoalan sbb : Dua buah gelas misalkan gelas A berisi air warna merah dan gelas B berisi air warna biru. Permasalahannya adalah bagaimana
54n1
Untuk Kalangan Sendiri
Hal : 16
Modul : Algoritma dan pemrograman 1
mempertukarkan isi kedua gelas A dan B sehingga gelas A berisi air warna biru dan gelas B berisi air warna merah. Buatlah algoritmanya. Jawab :
Langkah-langkahnya sbb: 1. Sediakan satu gelas kosong misalkan C 2. Tuangkan isi gelas A ke gelas C 3. Tuangkan isi gelas B ke gelas A 4. Tuangkan isi gelas C ke gelas B 5. Selesai
Jika urutan diubah
Hasil akhir adalah gelas A berisi larutan biru dan gelas B berisi larutan merah. Keadaan hasil akhir ini adalah jawaban yang sesuai dengan keinginan algoritma.
Contoh A
Langkah-langkahnya sbb: 1. Sediakan satu gelas kosong misalkan C 2. Tuangkan isi gelas B ke gelas A 3. Tuangkan isi gelas A ke gelas C 4. Tuangkan isi gelas C ke gelas B 5. Selesai
Hasil akhir adalah gelas A kosong dan gelas B berisi larutan campuran merah dan biru. Keadaan hasil akhir ini adalah jawaban yang tidak sesuai dengan keinginan algoritma.
Contoh B
{Program : Lagu.Pas} Program LaguIndonesiaRaya; Uses Crt;
{Program : Lagu.Pas} Program LaguIndonesiaRaya; Uses Crt;
Begin ClrScr; WriteLn('Indonesia tanah airku'); WriteLn('Tanah tumpah darahku'); WriteLn('Disanalah aku berdiri'); WriteLn('Jadi pandu ibuku'); ReadLn; End.
Begin ClrScr; WriteLn('Disanalah aku berdiri'); WriteLn('Tanah tumpah darahku'); WriteLn('Indonesia tanah airku'); WriteLn('Jadi pandu ibuku'); ReadLn; End.
- - - - - - - - - - hasil- - - - - - - - - - - Indonesia tanah airku Tanah tumpah darahku Disanalah aku berdiri Jadi pandu ibuku
- - - - - - - - - - hasil- - - - - - - - - - - Disanalah aku berdiri Tanah tumpah darahku Indonesia tanah airku Jadi pandu ibuku
54n1
Untuk Kalangan Sendiri
Hal : 17
Modul : Algoritma dan pemrograman 1
BAB V Pemilihan aksi Pemilihan Aksi (Selection) Adakalanya suatu instruksi hanya akan dikerjakan jika kondisi tertentu dipenuhi dan tidak akan dikerjakan kalau kondisi tertentu tersebut tidak terpenuhi. Untuk mengambil keputusan (decision) apakah instruksi akan dikerjakan atau tidak, maka struktur penulisan secara umum dapat dituliskan sbb : Ada dua model untuk melakukan decision yaitu : 1. Dengan struktur If – Then – Else - EndIf 2. Dengan struktur Case of – Else – EndCase Bentuk struktur If – Then – Else – EndIf If Then Aksi;
ATAU
If <expresiLogic> Then Aksi;
Kondisi; berupa ekspresi logic yang akan diperiksa oleh pemroses. Ekpresi logic ini akan menghasilkan nilai logika (kebenaran/kepatutan) yaitu True atau False. Pemroses akan menguji yang ditentukan, jika bernilai benar (True) maka Aksi akan diproses, tetapi jika bernilai salah (False) maka Aksi tidak akan diproses. Bila Aksi lebih dari satu; maka aksi-aksi tersebut diblok oleh Begin – End. Pelaksanaan instruksi akan dilanjutkan pada instruksi-instruksi di bawah Aksi Bentuk penulisan struktur pemilihan diatas hanya memberikan satu pilihan aksi saja yaitu bila kondisi bernilai benar dan tidak memberikan pilihan aksi lain bila kondisi bernilai salah. Bentuk pemilihan yang lebih umum adalah memilih satu dari dua pilihan aksi bergantung pada nilai kondisinya benar atau salah. Bentuk yang dimaksud dalah :
If Then Aksi_1 Else Aksi_2;
False
True ExpLogic
Aksi_2
Aksi_1
Else artinya "selain itu" atau "kalau tidak". Bila kondisi benar maka Aksi_1 yang diproses, kalau tidak benar maka Aksi_2 yang diproses.
54n1
Untuk Kalangan Sendiri
Hal : 18
Modul : Algoritma dan pemrograman 1
If <expLogic> Then Begin Aksi_1a; Aksi_1b; End Else Begin Aksi_2a; Akso_2b; End; Contoh program : { Nama Program : If1.Pas } Program Jenis_Kelamin; USES CRT; VAR JK:CHAR; BEGIN CLRSCR; WRITE('JENIS KELAMIN : '); READLN(JK); IF JK = 'L' THEN WRITELN('LAKI-LAKI') ELSE WRITELN('PEREMPUAN'); READLN; END.
Untuk pilihan kondisi yang lebih dari dua adalah sbb : True IF Then Aksi_1 Else If Then Aksi_2 Else If Then Aksi_3 ……. Else Aksi_n;
ExpLogic1
Aksi_1
False
True ExpLogic2
Aksi_2
False
True ExpLogic3
Aksi_3
False
Aksi_N;
54n1
Untuk Kalangan Sendiri
Hal : 19
Modul : Algoritma dan pemrograman 1
Contoh program: { Nama Program : If2.Pas } Program Nama_Bulan; USES CRT; VAR BULAN:INTEGER; NAMABULAN:STRING; BEGIN CLRSCR; WRITE('MASUKKAN SUATU BILANGAN : '); READLN(BULAN); IF BULAN=1 THEN NAMABULAN:='JANUARI' ELSE IF BULAN=2 THEN NAMABULAN:='FEB' ELSE IF BULAN=3 THEN NAMABULAN:='MAR' ELSE IF BULAN=4 THEN NAMABULAN:='APR' ELSE IF BULAN=5 THEN NAMABULAN:='MEI' ELSE IF BULAN=6 THEN NAMABULAN:='JUN' ELSE IF BULAN=7 THEN NAMABULAN:='JUL' ELSE IF BULAN=8 THEN NAMABULAN:='AGT' ELSE IF BULAN=9 THEN NAMABULAN:='SEP' ELSE IF BULAN=10THEN NAMABULAN:='OKT' ELSE IF BULAN=11THEN NAMABULAN:='NOP' ELSE IF BULAN=12 THEN NAMABULAN:='DES' ELSE NAMABULAN:='SALAH'; WRITELN('NAMA BULAN : ', NAMABULAN); READLN; END.
54n1
Untuk Kalangan Sendiri
Hal : 20
Modul : Algoritma dan pemrograman 1
Bentuk struktur Case of – Else – EndCase Bentuk lain yang bisa digunakan untuk pemilihan aksi berdasarkan kondisi adalah : Case variabel of Nilai1 : aksi_1; Nilai2 : aksi_2; Nilai3 : aksi_3; … Nilai_n : aksi_n; Else Aksi_akhir; End; Nilai variabel akan di cek; jika nilainya ber-Nilai1 maka aksi_1 yang diproses, jika ber-Nilai2 maka aksi_2 yang diproses dan jika semua nilai tidak ada yang cocok maka aksi_akhir yang diproses. Contoh program: { Nama Program : Case1.Pas } Program Kelompok_Usia; USES CRT; VAR UMUR :INTEGER; NAMA,KELOMPOK: STRING; BEGIN CLRSCR; WRITE('MASUKAN NAMA ANDA :');READLN(NAMA); WRITE('MASUKKAN UMUR ANDA:');READLN(UMUR); CASE UMUR OF 0..5 : KELOMPOK := 'BALITA'; 6..17 : KELOMPOK := 'ANAK-ANAK'; 18..25 : KELOMPOK := 'REMAJA'; 26..65 : KELOMPOK := 'DEWASA'; 66..100: KELOMPOK := 'MANULA'; ELSE KELOMPOK:='LUAR BIASA'; END; WRITELN(NAMA,' KAMU TERGOLONG ', KELOMPOK); READLN; END. -----------------------------------------------------------------
54n1
Untuk Kalangan Sendiri
Hal : 21
Modul : Algoritma dan pemrograman 1
Contoh program : {Program : Case2.Pas} Program CaseOfElse; Uses Crt; Var NilAng : Integer; NilHur : string[1]; Begin Clrscr; Write('Input Nilai Angka Readln(NilAng); Case NilAng Of 81..100 : NilHur:='A'; 71..80 : NilHur:='B'; 61..70 : NilHur:='C'; 51..60 : NilHur:='D'; 41..50 : NilHur:='E'; Else NilHur:='K'; End; Write('Nilai Huruf Readln; End.
:');
:',NilHur);
---------- ---------- ---------- ---------- -----------------Contoh program: { Nama Program : Repeat1.Pas } Program Faktorial; USES CRT; VAR U,N:INTEGER; F:LONGINT; BEGIN CLRSCR; WRITE('BERAPA FAKTORIAL ? : ');READLN(N); F:=1; u:=0; Repeat U:=U+1; F:=F*U; Until U = N; WRITELN(F); READLN; END.
----------------------------------------------------------------------------------------------------
54n1
Untuk Kalangan Sendiri
Hal : 22
Modul : Algoritma dan pemrograman 1
BAB VI Pengulangan aksi Pengulangan Aksi (Repetition) Salah satu kelebihan komputer adalah kemampuannya melakukan pekerjaan yang sama berulang kali dengan cepat tanpa mengenal lelah. Misalkan kita diminta untuk menulis kata "Merdeka" sebanyak 1000 kali maka kita selain lelah juga bosan dan memakan waktu yang relatif lama. Tetapi tidak demikian halnya dengan komputer Untuk dapat melakukan pekerjaan yang sama dan berulangulang sebanyak yang diinginkan maka kita dapat menuliskan algoritma-nya sesuai dengan struktur umum pengulangan seperti dibawah ini. Ada tiga macam bentuk pengulangan yang dapat dibuat yaitu : 1. For – To – Do - EndFor 2. Repeat – Until 3. While – Do - EndWhile Bentuk Umum Struktur Pengulangan Cara 1. For peubah Å Nawal To Nakhir DO Aksi_1 Aksi_2 .... EndFor
Cara 2. Repeat Aksi_1 Aksi_2 .... Until
Cara 3. While Do Aksi_1 Aksi_2 .... EndWhile
Struktur pengulangan yang ada pada Turbo Pascal adalah seperti berikut. Cara 1.
Cara 2.
Cara 3.
For Variabel := N1 To N2 DO Begin Aksi_1; Aksi_2; .... End;
Repeat Aksi_1; Aksi_2; .... Until ;
While Do Begin Aksi_1; Aksi_2; .... End;
Ket : 1. For To Do Variabel akan diisi nilai mulai dari N1 hingga mencapai nilai N2. Setiap kali kenaikan nilai variabel; blok Aksi yang diapit kata Begin-End akan dilaksanakan secara berurut. Jadi apabila perubahan nilai variabel terjadi
54n1
Untuk Kalangan Sendiri
Hal : 23
Modul : Algoritma dan pemrograman 1
sebanyak 5 kali, maka berarti blok aksi juga diproses sebanyak 5 kali juga, kecuali ada perintah untuk keluar dari perulangan walaupun nilai variabel belum mencapai N2. 2. Repeat ... Until Repeat artinya ulangi, Until artinya hingga. Blok aksi yaitu mulai Aksi_1, Aksi_2 dst akan dilaksanakan berulang-ulang hingga yang disyaratkan terpenuhi. Atau dapat diartikan sbb "Ulangilah aksi-aksi dibawah ini hingga yang disyaratkan terpenuhi". 3. While .... Do While artinya selama, Do artinya kerjakan. Selama yang disyaratkan masih benar maka blok aksi akan diproses terus menerus (kecuali ada perintah keluar dari perulangan). Blok aksi dimulai dengan kata Begin dan diakhiri kata End. Contoh-ccontoh program: { Nama Program : For1.Pas } Program Faktorial; USES CRT; VAR U,N:INTEGER; F,C,K:LONGINT; BEGIN CLRSCR; WRITE('BERAPA FAKTORIAL ? : ');READLN(N); F:=1; FOR U:=1 TO N DO F:=F*U; WRITELN(F); READLN; END.
-----------------------------------------------------------------------------------------{ Nama Program : For2.Pas } Program Sinus; USES CRT; VAR U,D : LONGINT; S:REAL; CONST PHI=3.14; BEGIN CLRSCR; U:=0; D:=0; FOR U:= 1 TO 13 DO BEGIN S:=SIN((PHI/180)*D); WRITELN('SIN: ',D, ' = ',S:5:2); D:=D+15; END; READLN; END.
54n1
Untuk Kalangan Sendiri
Hal : 24
Modul : Algoritma dan pemrograman 1
--------------------------------------------------------------------------------------------------------{Nama Program : For3.Pas} Program Animasi; USES CRT; VAR U : INTEGER; BEGIN CLRSCR; FOR U:= 25 DOWNTO 1 DO BEGIN GOTOXY(10,U); WRITELN('I LOVE YOU'); DELAY(500); GOTOXY(10,U); WRITELN(' '); END; READLN; END.
---------- ------------------- ------------------- --------{Nama Program : Repeat1.Pas} Program Repeat1; USES CRT; VAR U,F : INTEGER; BEGIN CLRSCR; U:=0; F:=1; REPEAT U:=U+1; F:=F*U; UNTIL U=5; WRITELN( U,' FAKTORIAL = ' ,F); READLN; END.
---------- ------------------- ------------------- --------{Nama Program : Repeat2.Pas}
Program Perulangan_RepeatUntil; Uses Crt; Var I : Integer; Begin I := 0; Repeat Inc(I); { menaikan nilai I dengan kenaikan 1} Writeln(‘Nilai I adalah : ‘,I); Until I = 10; Readln; End.
54n1
Untuk Kalangan Sendiri
Hal : 25
Modul : Algoritma dan pemrograman 1
{Nama Program : Repeat3.Pas} Program Putar; USES CRT ; VAR T:STRING; PK,KOL:BYTE; BEGIN CLRSCR; T:='SELAMAT DATANG DI FATEK UMSU...'; PK:=LENGTH(T); KOL:= (80-PK) DIV 2; REPEAT T := COPY(T,2,PK-1) + COPY(T,1,1); GOTOXY(KOL,5); WRITE(T); DELAY(50000); UNTIL KEYPRESSED; END.
---------- ------------------- ------------------- --------{ Nama Program : While1.Pas } Program Faktorial; USES CRT; VAR U,F : INTEGER; BEGIN CLRSCR; U:=0; F:=1; WHILE U<5 DO BEGIN U:=U+1; F:=F*U; END; WRITELN( U,' FAKTORIAL = ' ,F); READLN; END.
--------- ------------------- ------------------- --------{Nama Program : While2.Pas}
Program CetakAngkaUrut; Uses Crt; Var I : Integer; Begin I := 1; While I <= 10 Do Begin Writeln(‘Nilai I adalah : ‘,I) Inc(I); End; Readln; End.
---------- ------------------- ------------------- ---------
54n1
Untuk Kalangan Sendiri
Hal : 26
Modul : Algoritma dan pemrograman 1
{Nama Program : While3.Pas} Program Perkalian; USES CRT; VAR A,B,C : INTEGER; BEGIN CLRSCR; A:=0; WHILE A<5 DO BEGIN A:=A+1; B:=0; While B<3 Do Begin B:=B+1; C:=A*B; WriteLn(A,'x',B,'=',C:3); End; WriteLn; END; READLN; END.
---------- ------------------- ------------------- ---------
54n1
Untuk Kalangan Sendiri
Hal : 27
Modul : Algoritma dan pemrograman 1
BAB VII Prosedur Pengertian Prosedur Sebuah program yang besar dapat dipecah-pecah menjadi bagian-bagian program yang lebih kecil. Penggalan program ini disebut modul atau subprogram atau rutin atau prosedur atau fungsi. Subprogram kadangkala cukup independen dari program utama sehingga programnya dapat dirancang tanpa mempertimbangkan konteks tempat ia digunakan. Subprogram ini dapat dieksekusi berulang-ulang sesuai keperluan. Teknik pemrograman ini dinamakan teknik pemrograman modular atau teknik pemrograman prosedural. Modularisasi program memberikan dua keuntungan yaitu : - Untuk menghindari penulisan teks program yang sama secara berulang. Dapat mengurangi panjangnya program. - Kemudahan menulis dan menemukan kesalahan (debug) program. - Menjadikan program lebih flexible. ** Program Utama {statements} ..... ..... CALL Proc1 {statements}
Procedure Proc1
CALL Proc2
Procedure Proc2
{statements} ..... ..... END
{statements} ...... ...... ...... EXIT
{statements} ...... ...... ...... EXIT
Gambar 7.1 Mekanisme penggunaan modul dari program utama. Ada dua macam prosedur yaitu prosedur terpasang (standart) dan prosedur buatan pemakain. Contoh prosedur standart adalah ClrScr --> membersihkan layar Mendefinisikan prosedur Pada dasarnya struktur prosedur sama dengan struktur algoritma yang sudah kita kenal, yaitu ada judul(header), deklarasi (keterangan) dan deskripsi (uraian).
54n1
Untuk Kalangan Sendiri
Hal : 28
Modul : Algoritma dan pemrograman 1
Procedure NAMA_PROSEDUR { keterangan spesifikasi singkat tentang prosedur} Deklarasi { semua nama yang dipakai dalam prosedur dan hanya berlaku lokal dalam prosedur} Deskripsi { badan prosedur berisikan kumpulan instruksi }
Contoh Algoritma
Procedure CETAK_HALO { mencetak string 'Halo' ke piranti keluaran} Deklarasi { tidak ada nama pengenal} Deskripsi write('Halo')
Gambar 7.2 Struktur prosedur. Pemanggilan prosedur Prosedur bukan program yang berdiri sendiri, ia tidak dapat dieksekusi secara langsung. Isi prosedur hanya dapat diakses dengan cara memanggil namanya dari program pemanggilanya ( program utama atau modul lain). Bentuk umum cara pemanggilan prosedur adalah sbb : NAMA_PROSEDUR; Ketika nama prosedur dipanggil maka kendali program berpindah secara otomatis ke prosedur yang dipanggil tersebut. Setelah isi prosedur selesai dieksekusi, kendali program kembali ke instruksi sesudah pemanggil prosedur. Nama global dan nama lokal Nama-nama indentifier yang dideklarasikan di dalam bagian deklarasi prosedur, hanya dikenal di dalam badan prosedur itu saja. Nama-nama indentifier tersebut dikatakan bersifat "lokal" dan hanya dapat dikenali didalam prosedur itu sendiri, sedangkan nama-nama yang dideklarasikan di program utama bersifat "global" dan dapat dikenali didalam prosedur. Parameter Kebanyakan program memerlukan pertukaran informasi antara prosedur/fungsi dan titik dimana ia dipanggil. Penggunaan parameter menawarkan mekanisme pertukaran informasi tersebut. Tiap item data ditransfer antara parameter aktual dan parameter formal yang bersesuaian. Parameter aktual adalah parameter yang disertakan pada waktu pemanggilan prosedur, sedangkan parameter formal adalah parameter yang dideklarasikan didalam header prosedur itu sendiri. Ketika prosedur itu dipanggil, parameter aktual menggantikan parameter formal. Tiap parameter aktual berpasangan dengan parameter formal yang bersesuaian.
54n1
Untuk Kalangan Sendiri
Hal : 29
Modul : Algoritma dan pemrograman 1
contoh : Procedure SATU(input x,y : integer) { cth prosedure dgn parameter formal berjenis parameter masukan, K.Awal : nilai x dan nilai y sudah terdefenisi K.Akhir : nilai x dan y masing-masing dinaikkan satu, lalu dicetak ke piranti keluaran } DEKLARASI: { TIDAK ADA} DESKRIPSI: x Å x + 1 y Å y + 1 write(x) write(y)
Algoritma PQR { cth program utama yg memanggil prosedur SATU } DEKLARASI: a, b : real procedure SATU(input x, y : integer ) {cth prosedur dgn parameter formal berjenis parameter masukan} DESKRIPSI: SATU(4,10) read(a, b) SATU(a, b) SATU(a+2, 20)
-
54n1
Masukan Keluaran Masukan / keluaran Prosedur tanpa parameter Prosedur dengan parameter Parameter masukan dan parameter keluaran
Untuk Kalangan Sendiri
Hal : 30
Modul : Algoritma dan pemrograman 1
BAB VIII Fungsi Pengertian Fungsi Fungsi merupakan potongan program yang tidak dapat berdiri sendiri, karena fungsi memberikan hasil berupa suatu nilai dan memerlukan suatu tempat untuk menampung nilai tersebut. Ada fungsi standart (fungsi terpasang) dan ada fungsi buatan (defined function) Contoh-contoh fungsi dan prosedur standart antara lain : Fungsi Numerik : 1. ABS(n) Memberikan nilai mutlak (harga positif) dari bilangan n. N : Real atau Integer; Hasil : sesuai dengan tipe-n 2. FRAC(n) Memperoleh bilangan pecahan dari suatu bilangan pecahan (real). N : Real Hasil : Real 3. INT(n) Memperoleh bilangan bulat dari suatu bilangan pecahan (real). N : Real Hasil : Real 4. TRUNC(n) Memperoleh bilangan bulat dari suatu bilangan pecahan (real). N : Real Hasil : LongInt 5. ROUND(n) Membulatkan bilangan pecahan (real) atau pembulatan. N : Real Hasil : LongInt 6. EXP(n) Memperoleh nilai exponential (ex(e=bilangan natural)). N : Real Hasil : Real
54n1
Untuk Kalangan Sendiri
Hal : 31
Modul : Algoritma dan pemrograman 1
7. LN(n) Memperoleh nilai logaritma natural. N : Real atau Integer Hasil : Real 8. SQR(n) Memperoleh nilai kwadrat N : Real atau Integer Hasil : sesuai tipe argumen - n 9. SQRT(n) Memperoleh nilai akar kwadrat (√n) N : Real atau Integer Hasil : Real 10. PI Memperoleh nilai konstanta bernilai 3.14 Hasil : Real 11. SIN(n) Memperoleh nilai sinus - n N : Real Hasil : Real 12. COS(n) Memperoleh nilai cosinus - n N : Real Hasil : Real 13. ARCTAN(n) Memperoleh nilai arcus tangen - n N : Real Hasil : Real
360o = 2Л radian 1o = Л2/360o = Л/180o
14. ODD(n) Menentukan apakah n bilangan ganjil atau tidak (True/False) N : Word Hasil : Bolean 15. RANDOM(n) Memperoleh bilangan acak N : Word Hasil : Real Æ 0 ≤ hasil < n 16. RANDOM Menentukan bilangan acak Hasil : Real Æ 0 ≤ hasil < 1
54n1
Untuk Kalangan Sendiri
Hal : 32
Modul : Algoritma dan pemrograman 1
Prosedur dan fungsi Library standart untuk string : 1. CHR(n) Memperoleh karakter dengan nomor ASCII-n N : Byte Hasil : Char 2. ORD(kar) Memperoleh nomor ASCII dari karakter kar kar : Char Hasil : Byte 3. CONCATE(string1, string2, string3, ... ) Menggabungkan string1, string2, string3, ... string1, string2, string3, ... : String Hasil : String 4. LENGTH(st) Memperoleh jumlah karakter dari - st St : String Hasil : Byte 5. POS(st1, st2) Menentukan posisi st1 didalam st2 St1 : Char atau String Hasil : Byte 6. UPCASE(kar) Mengubah karakter huruf kecil menjadi huruf besar (berlaku hanya 1 karakter awal) kar : Char Hasil : Char 7. COPY(st, p, n) Menyalin isi st dimulai posisi p sebanyak n karakter st : String p,n : Byte Hasil : String 8. READKEY Meminta penekanan 1 tombol. Tombol yang diberikan tidak tampil di layar Hasil : Char 9. DELETE(st, p, n) Menghapus isi st dimulai posisi p sebanyak n karakter st : String p,n : Byte Hasil : String
54n1
Untuk Kalangan Sendiri
Hal : 33
Modul : Algoritma dan pemrograman 1
10. INSERT(st1, st2, p) Menyisip st1 kedalam st2 pada posisi p. Hasilnya disimpam di dalam st2. st1, st2 : String p : Byte Hasil : String 11. STR(Bil[:k[:d]],BilSt) Mengubah bilangan numerik Bil menjadi bilangan string dengan format tertentu. Hasil disimpan dalam BilSt. k, d : Byte dimana K=lebar kolom, D=lebar desimal BilSt : String 12. VAL(BilSt, Hasil, ValErr) Mengubah bilangan string menjadi bilangan numerik. BilSt : String (angka) Hasil : Real atau Integer ValErr : Word {Program Kon1.Pas} Program Konversi1; Uses Crt; Var a : string; b : real; err: integer; Begin ClrScr; a := '1234.5'; val(a,b,err); if err<>0 then write('salah') else write(b+2:10:2);
Hasilnya 1236.5 Readln; End. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - {Program Kon2.Pas} Program Konversi2; Uses Crt; Var a : string; b : real; err: integer; Begin ClrScr; a := 'abc'; val(a,b,err); if err<>0 then write('salah') else write(b+2:10:2); Readln; End.
54n1
Hasilnya : salah
Untuk Kalangan Sendiri
Hal : 34
Modul : Algoritma dan pemrograman 1
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Mendefenisika Fungsi Seperti halnya prosedur, struktur fungsi sama dengan struktur algoritma yaitu ada header yang berisi nama fungsi dan spesifikasi fungsi, bagian deklarasi, dan badan fungsi. Setiap fungsi mempunyai nama yang unik serta daftar parameter formal (jika ada). Function Nama_Fungsi(dtr parameter formal) { keterangan spesifikasi singkat tentang fungsi} Deklarasi { semua nama yang dipakai dalam fungsi dan hanya berlaku lokal dalam fungsi} Deskripsi { badan fungsi berisikan kumpulan instruksi }
Function F( input x:real) of real; { mengembalikan nilai F(x)=2x2+5x-8} Deklarasi { tidak ada } Deskripsi return 2*x*x+5x-8
Kata cadangan FUNCTION mengawali bagian deklarasi fungsi diikuti oleh identifier yang merupakan nama dari fungsinya dan secara optional dapat diikuti oleh kumpulan parameter, tipe dari fungsinya dan diakhiri dengan titik koma. Contoh deklarasi fungsi : FUNCTION Pangkat(X, Y : real) : Real;
Pemanggilan Fungsi Fungsi diakses dengan cara memanggil namanya dari program pemanggil diikuti dengan daftar parameter aktual (bila ada). Contoh pemanggilan fungsi (menggunakan notasi algoritmik): peubah Å Nama_Fungsi(daftar parameter aktual)
atau Write(Nama_Fungsi(daftar parameter aktual)) Contoh dalam program : {Nama Program : Fungsi1.Pas } Program Faktorial; Uses Crt; Var f,x : Integer; Function Fak(x:integer) :integer; Var f:integer; u:byte; Begin f:=1; for u:=1 to x do f:=f*u; fak:=f; End;
54n1
pemangilan fungsi Fak dgn parameter aktual x Untuk Kalangan Sendiri
Hal : 35
Modul : Algoritma dan pemrograman 1
Begin { -- blok utama program -- } ClrScr; write('Masukan berapa faktorial : '); readLn(x); write(x,' faktorial adalah ',Fak(x)); readLn; End. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
{ Nama Program : Fungsi2.Pas} Program Contoh_Fungsi; Uses Crt; Var X, Y, Z : Integer;
{ ----------- Bag. Prosedur ----------- } Procedure Inp_Bil(A, B : Integer); Begin Write('Input Bilangan I : ');Readln(X); Write('Input Bilangan II : ');Readln(Y); End; { ----------- Bag. Fungsi ----------- } Function Tam_Bil(A, B : Integer) : Integer; Begin Tam_Bil:=A+B; End;
pemangilan fungsi Tam_Bil dgn parameter aktual x dan y
{ ----------- Program Utama ----------- } Begin Clrscr; Inp_Bil(X, Y); Write('Hasil dari : ',X,' + ',Y,' = ',Tam_Bil(X, Y)); Readln; End.
54n1
Untuk Kalangan Sendiri
Hal : 36
Modul : Algoritma dan pemrograman 1
BAB IX Larik (Array) Definisi Larik (Array) Array (larik) adalah salah satu bentuk struktur data yang bersifat linier (kontinu). Variabel array digunakan untuk menyimpan sejumlah data yang bertipe sama sehingga dapat menghemat jumlah variabel yang digunakan. Penunjukan kepada setiap lokasi atau elemen array menggunakan nama variabel dan subscrip (index), nilai subscrip selalu dimulai dengan 1 (satu). Contoh : a = 10 a=a+5 a=5 Maka dimemori komputer nilai data dari variabel a adalah 5. Nilai data a yang 10 (baris pertama), dan 15 (baris kedua) akan terhapus oleh nilai data a yang 5 (baris ketiga). Masalah yang muncul adalah bila semua nilai a tersebut sangat dibutuhkan, bagaimana caranya ?. Jawabnya gunakan variabel array. Ilustrasi : lokasi / elemen data Nama Array Subscrip/index 1
2
3
4
5
6
7
8
Mendefinisikan Larik di dalam bagian DEKLARASI - mendefenisikan banyaknya elemen larik - mendefenisikan tipe elemen larik Contoh deklarasi variabel larik/array: Var V_Array_SatuD : Array[1..4] of tipe_data; V_Array_DuaD : Array[1..4, 1..2] of tipe_data;
atau const max = 50; type Larik = array[1..max] of real; var X : Larik;
Operasi pada tipe data array 1. Proses isi data array 2. Proses tampil data array 3. Proses urutkan data array 4. Proses cari data array
54n1
Untuk Kalangan Sendiri
Hal : 37
Modul : Algoritma dan pemrograman 1
Cara Mengacu elemen larik Elemen larik diacu melalui indeksnya. Nilai indeks harus terdefenisi. Dengan mengacu larik yang sudah didefenisikan sebelunya. Contoh cara mengacu elemen larik adalah : L[4] { mengacu elemen ke-4 dari Larik L } P[k] { mengacu elemen ke-k dari Larik P } Harga[i+1] { mengacu elemen ke-i+1 dari Larik Harga } Pemrosesan Larik Proses adalah aksi yang dilakukan terhadap elemen larik. Proses dapat berupa aksi pengisian nilai kedalam larik, aksi pembacaan nilai dalam larik, penulisan nilai yang ada dalam larik ke media output, atau manipulasi lainnya. Contoh : {Nama Program : Array1.Pas} program mencari_hari_lahir; uses crt; type x = string[7]; const faktorBLN : array[1..12] of byte =(0,3,3,6,1,4,6,2,5,0,3,5); hari : array[0..8] of x = ('Minggu','Senin','Selasa',' ,'Rabu','Kamis','Jumat','Sabtu'); var i: word; nama :string[255]; j1,j2,j3,j4 :integer; tanggal,Bulan, Tahun : integer; Begin ClrScr; writeln('PROGRAM MENCARI HARI KELAHIRAN ABAD 20'); WRITELN('Tahun input dari 1900 s/d 1989'); WRITELN('****************************** '); write('MASUKKAN TANGGAL YANG DICARI: '); READLN(Tanggal); write('MASUKKAN BULANNYA : ');READLN(Bulan); write('MASUKKAN TAHUNNYA JUGA : ');READLN(Tahun); if tahun > 1900 then tahun := tahun - 1900; j1 := trunc(tahun * 365.25); j2 := j1 + faktorBLN[Bulan]; if (tahun/4 = int(tahun/4)) and (Bulan < 3) then J2 := j2-1; j3 := j2 + tanggal; j4 := trunc(frac(j3/7)*10); writeln; writeln('HARI TERSEBUT ADALAH HARI: ',HARI[J4]); readln; End.
Larik dua dimensi Larik dua dimensi larik yang elemen datanya dibentuk dari 2 bidang data yaitu bidang baris dan bidang kolom. Larik dua dimensi biasanya digunakan untuk matrik. Karna elemen matrik diakses berdasarkan nomor baris dan nomor kolom.
54n1
Untuk Kalangan Sendiri
Hal : 38
Modul : Algoritma dan pemrograman 1
⎡2 1 4⎤ A=⎢ ⎥ ⎣3 5 0⎦ elemen matrik 2 terletak di baris-1 kolom-1 elemen matrik 1 terletak di baris-1 kolom-2 elemen matrik 4 terletak di baris-1 kolom-3 elemen matrik 3 terletak di baris-2 kolom-1 elemen matrik 5 terletak di baris-2 kolom-2 elemen matrik 0 terletak di baris-2 kolom-3 contoh : uses crt; const p:array[1..3,1..4] of byte = ((2,3,4,5),(1,2,2,1),(2,3,3,2)); q:array[1..3,1..4] of byte = ((3,2,2,1),(2,3,3,4),(4,5,3,2)); var k,b:byte ; r:array[1..3,1..4] of byte; begin { ---- proses mengisi larik dua dimensi ---- } clrscr; for b:=1 to 3 do begin for k:=1 to 4 do write(p[b,k]:3); writeln; end; { ---- proses penulisan larik dua dimensi ---- } writeln; writeln; for b:=1 to 3 do begin for k:=1 to 4 do write(q[b,k]:3); writeln; end; { ----- penjumlahan matrik r=p+q ------ } for b:=1 to 3 do begin for k:=1 to 4 do r[b,k]:=p[b,k]+q[b,k]; end; { ---- proses penulisan larik dua dimensi hasil penjumlahan --- } writeln; writeln; for b:=1 to 3 do begin for k:=1 to 4 do
54n1
Untuk Kalangan Sendiri
Hal : 39
Modul : Algoritma dan pemrograman 1
write(r[b,k]:3); writeln; end; readln; end.
PENCARIAN DATA DALAM ARRAY Apabila suatu array sudah diisi data maka dapat dilakukan pencarian data tertentu didalam array dengan kemungkinan : • Data yang dicari tidak ada didalam array • Data ditemukan, selanjutnya perlu dipastikan subscrip lokasi tempat data itu berada. Permasalahan : Deklarasikan satu array numerik dengan subscrip 10, kemudian input data kedalam semua array tersebut. Selanjutnya diinput data numerik sembarang oleh operator untuk dicari didalam array tersebut. Output yang diminta adalah 1 diantara 2 kemungkinan yaitu : • Jika ditemukan tampilkan dan pada subscrip ke berapa • Data tidak ditemukan. Buatlah algoritma untuk keperluan tersebut. Pemahaman : • Output : Satu diantara dua kemungkinan, yaitu : - Data ditemukan pada subscrip yang ke berapa - Data tidak ditemukan • Input : - 10 data numerik - 1 data numerik • Analisis : - Deklarasikan array dengan subscrip 10 dengan perintah array. - Input data kedalam array dengan proses perulangan - Input 1 data numerik yang akan dicari ke array - Cari data didalam array dengan prsoses perulangan - Dalam setiap perulangan dilakukan pembandingan data yang dicari - Jika sama berarti data ditemukan dan proses perulangan dihentikan - Jika sampai ke subscrip akhir tidak ada yang sama berarti data tidak ditemukan • Algoritma : ......... Mengurutkan Data Dalam Array (Sort) Dalam banyak hal perlu data dalam keadaan berurutan. Pengurutan data ada dua macam , yaitu : 1. Ascending atau urutan menaik 2. Descending atau urutan menurun
54n1
Untuk Kalangan Sendiri
Hal : 40
Modul : Algoritma dan pemrograman 1
Untuk menghasilkan data berurutan proses dasar yang dilakukan adalah mebandingkan dua data yang berdekatan. Untuk mengetahui harga data yang lebih besar atau yang lebih kecil, dilakukan operasi pembanding. Kemudian jika posisi kedua data itu tidak sesuai dengan urutan yang diinginkan, maka dilakukan pertukaran tempat. Sedangkan jika sesuai dengan urutan yang diinginkan tentu tidak perlu proses apapun. Algortima untuk pengurutan data ini dikembangkan menurut logika untuk memperoleh proses yang seefisien mungkin sehingga dapat meminimalkan kegiatan dan waktu proses. Beberapa macam algoritma pengurutan data yang selama ini dikenal, antara lain : 1. Model Bubble / Exchange Sort Membandingkan elemen yang sekarang dengan elemen yang berikutnya, jika elemen sekarang > elemen berikutnya, maka dilakukan pertukaran. 2. Model Selection Sort Membandingkan elemen sekarang dengan elemen yang berikutnya sampai dengan terakhir. 3. Model Insertion Sort Pengurutan dilakukan dengan cara membandingkan data ke-i (dimana i dimulai dari data ke-2 sampai dengan terakhir) dengan data berikutnya. Jika ditemukan data yang lebih kecil maka data tersebut disisipkan ke depan sesuai dengan posisi yang semestinya. 4. Model Quick Sort Membandingkan suatu elemen (disebut pivot) dengan elemen yang lain dan menyusunnya sedemikian rupa sehingga elemen-elemen lain yang lebih kecil dari pada pivot tersebut terletak disebelah kirinya dan elemen-elemen lain yang lebih besar dari pada pivot terletak disebelah kanannya.
SORT Definisi Sort Sort adalah proses pengurutan data yang sebelumnya disusun secara acak sehingga menjadi tersusun secara teratur menurut suatu aturan tertentu. Pada umumnya terdapat 2 jenis pengurutan : Ascending (Naik) Descending (Turun) Contoh : Data Acak
:5
6
8
1
3
25 10
Terurut Ascending
:1
3
5
6
8
10 25
Terurut Descending
: 25 10 8
6
5
3
1
Bubble / Exchange Sort Memindahkan elemen yang sekarag dengan elemen yang berikutnya, jika elemen sekarang > elemen berikutnya, maka tukar posisi.
54n1
Untuk Kalangan Sendiri
Hal : 41
Modul : Algoritma dan pemrograman 1
Proses : Langkah 1 : 22 10
15
3
8
2
22 10
15
3
2
8
22 10
15
2
3
8
22 10
2
15
3
8
22 2
10
15
3
8
2
10
15
3
8
22
Pengecekan dapat dimulai dari data paling awal atau paling akhir. Pada contoh di samping ini pengecekan di mulai dari data yang paling akhir. Data paling akhir dibandingkan dengan data di depannya, jika ternyata lebih kecil maka tukar. Dan pengecekan yang sama dilakukan terhadap data yang selanjutnya sampai dengan data yang paling awal.
Langkah 2 : 2
22
10
15
3
8
2
22
10
15
3
8
2
22
10
3
15
8
2
22
3
10 15
8
2
3
22
10 15
8
Kembalinya data paling akhir dibandingkan dengan data didepannya jika ternyata lebih kecil maka tukar, tetapi kali ini pengecekan tidak dilakukan sampai dengan data paling awal yaitu 2 karena data tersebut pasti merupakan data terkecil (didapatkan dari hasil pengurutan pada langkah 1).
Langkah 3 :
Langkah 4 :
2
3
22
10
15
8
2
3
8
22
10
15
2
3
22
10
8
15
2
3
8
22
10
15
2
3
22
8
10
15
2
3
8
10
22
15
2
3
8
22
10
15
Proses pengecekan pada langkah 3 dst. Sama dengan langkah sebelumnya. Langkah 5 :
Terurut :
2
3
8
10
22
15
2
3
8
10
15
22
2
54n1
3
8
10
15 22
Untuk Kalangan Sendiri
Hal : 42
Modul : Algoritma dan pemrograman 1
Proses di atas adalah pengurutan data dengan metoda bubble ascending. Untuk yang descending adalah kebalikan dari proses diatas. Berikut penggalan listing program Procedure TukarData dan Procedure Bubble Sort. Procedure TukarData Procedure TukarData(var a,b : word); Var c : word; Begin c:=a; a:=b; b:=c; End;
Procedure Bubble Sort Ascending Procedure Asc_Bubble(var data:array; jmldata:integer); Var i,j : integer; Begin For i:= 2 to JmlData do For j:= JmlData DownTo i Do If data[j] < data[j-1] Then Tukardata (data[j], data[j-1]); End;
Untuk pengurutan secara descending anda hanya perlu menggantikan baris ke-6 dengan berikut ini : If data[j] > data[j-1] then
Selection Sort Membandingkan elemen yang sekarang dengan elemen yang berikutnya sampai dengan elemen yang terakhir. Jika ditemukan elemen lain yang lebih kecil dari elemen sekarang maka dicatat posisinya dan kemudian ditukar. Dan begitu seterusnya. Proses :Langkah 1:
Langkah 2 :
i=1 2 3 4 5 6 22 10 15 3 8 2 pembanding Posisi 22 > 10 2 10 < 15 2 10 > 3 4 3 <8 4 3 >2 6 Posisi data ke-1(22) = 6 Tukar data ke-1 dengan data ke-6 2 10 15 3 8 22
54n1
i=1 2 3 2 10 15 pembanding 10 < 15 10 > 3 3 <8 3 < 22
4 5 6 3 8 22 Posisi 2 4 4 4
Posisi data ke-2(10) = 4 Tukar data ke-2 dengan data ke-4 2 3 15 10 8 22
Untuk Kalangan Sendiri
Hal : 43
Modul : Algoritma dan pemrograman 1
Langkah 3 :
Langkah 4 :
i=1 2 3 4 5 6 2 3 15 10 8 22 pembanding 15 > 10 10 > 8 8 < 22
i=1 2 3 4 5 6 2 3 8 10 15 22 pembanding Posisi 10 < 15 4 10 < 22 4
Posisi 4 5 5
Posisi data ke-3(15) = 5 Tukar data ke-3 dengan data ke-5
Posisi data ke-4 tetap Pada posisinya = 4 (tidak berubah)
Langkah 5 : i=1 2 3 2 3 8
Terurut : 4 10
5 15
6 22
2
3
8
10
15
22
pembanding Posisi 15 < 20 5 posisi data ke-5 tetap pada posisinya = 5 (tidak Proses pengurutan di atas adalah dengan metoda selection Ascending. Untuk descending hanyalah kebalikan dari proses di atas. Berikut penggalan listing program Procedure Selection Sort secara ascending Procedure Selection Sort Ascending Procedure Asc_Selection; Var min, pos : byte; Begin For i:= 1 to max-1 do Begin Pos:=i; For j:= i+1 to max do If data[j] < data[pos] then pos:=j; If i <> pos then tukardata(data[i],data[pos]); End; End;
Untuk pengurutan secara descending, anda hanya perlu mengganti baris ke-8 sbb : if data[pos] < data[j] then pos:=j;
54n1
Untuk Kalangan Sendiri
Hal : 44
Modul : Algoritma dan pemrograman 1
Insertion Sort Pengurutan dilakukan dengan cara membandingkan data ke-I (dimana I dimulai dari data ke-2 sampai dengan data terakhir) dengan data berikutnya. Jika ditemukan data yang lebih kecil maka data tersebut disisipkan ke depan sesuai posisi yang seharusnya. Proses : Langkah 1:
Langkah 2 :
i= 1 2 3 4 5 6 22 10 15 3 8 2
i= 1 2 3 4 5 6 10 22 15 3 8 2
temp cek 10 temp<22 posisi 2
temp cek 15 temp<22 posisi 3 temp>10
geser data ke-1Æ
geser data ke-2Æ
temp menempati posisi ke-1. temp menempati posisi ke-2. Langkah 3 :
Langkah 4:
i= 1 2 3 4 5 6 10 15 22 3 8 2
i= 1 2 3 4 5 6 3 10 15 22 8 2
temp 3
temp 8
cek temp < 22 temp < 15 temp < 10
geser data ke-3Æ posisi 4 data ke-2Æ posisi 3 data ke-1Æposisi 2
temp menempati posisi ke-1. 3 10 15 22 8 2
cek temp < 22 temp < 15 temp < 10 temp > 3
geser data ke-4Æposisi 5 data ke-3Æposisi 4 data ke-2Æposisi 3
temp menempati posisi ke-2. 3 8 10 15 22 2
Langkah 5 :
Langkah 6 :
i= 1 3
2 3 4 5 6 8 10 15 22 2
temp 2
cek temp < 22 temp < 15 temp < 10 temp < 8 temp < 3
2
3
8
10
15
22
geser data ke-5Æposisi 6 data ke-4Æposisi 5 data ke-3Æposisi 4 data ke-2Æposisi 3 data ke-1Æposisi 2
temp menempati posisi ke-1.
54n1
Untuk Kalangan Sendiri
Hal : 45
Modul : Algoritma dan pemrograman 1
Procedure Insertion Sort Ascending Procedure Asc_Insert; Var i , j , temp : byte; Begin For i := 2 to max do Begin Temp :=data[i]; j := i-1; while (data[j] > temp) and (j>0) do begin data[j+1] := data[j]; dec(j); end; data[j+1]:=temp; end; end;
Untuk pengurutan secara descending anda tinggal mengganti baris ke 8 dengan baris berikut ini : While(data[j] < temp)and(j>0)do
54n1
Untuk Kalangan Sendiri
Hal : 46
Modul : Algoritma dan pemrograman 1
BAB X QUICK SORT Membandingkan suatu elemen (disebut pivot) dengan elemen yang lain dan menyusunnya sedemikian rupa sehingga elemen- elemen lain yang lebih kecil daripada pivot tersebut terletak di sebelah kirinya dan elemen-elemen lain yang lebih besar daripada pivot tersebut terletak di sebelah kanannya. Sehingga dengan demikian telah terbentuk dua sublist, yang terletak di sebelah kiri dan kanan dari pivot. Lalu pada sublist kiri dan sublist kanan kita anggap sebuah list baru dan kita kerjakan proses yang sama seperti sebelumnya. Demikian seterusnya sampai tidak terdapat sublist lagi. Sehingga didalamnya telah terjadi proses Rekursif. Proses : Bilangan yang di dalam kurung merupakan pivot Persegi panjang yang digambarkan dengan garis terputus-putus menunjukkan sublist. i bergerak dari sudut kiri ke kanan sampai mendapatkan nilai yang >= pivot. j bergerak dari sudut kanan ke kiri sampai menemukan nilai yang < pivot. Langkah 1 : Index = 1
22
2
3
4
5
6 j
10
15
3
8
2
i
i berhenti pada index ke-1 karena langsung mendapatkan nilai yang > dari pivot (15). j Berhenti pada index ke-6 karena juga langsung mendapatkan nilai yang < dari pivot. Karena i < j maka data yang ditunjuk olh I ditukar dengan data yang ditunjuk oleh j sehingga menjadi : 2
54n1
10
15
3
8
Untuk Kalangan Sendiri
22
Hal : 47
Modul : Algoritma dan pemrograman 1
Langkah 2 : Index = 1
2
2
10
3
4
5
6 j
15
3
8
22
i
i berhenti pada index ke-3 (pivot) karena tidak menemukan bilangan yang > dari pivot. j berhenti pada index k-5 menunjuk pada nilai yang < dari pivot. Karena i < j maka data yang ditunjuk oleh i (pivot) ditukar dengan data yang ditunjuk oleh j sehingga menjadi : 2
10
8
3
15
22
Langkah 3 : Index = 1
2
3
4
5
6
15
22
j 2
10
8
3
i Proses yang sama seperti sebelumnya dilakukan terhadap 2 buah sublist yang baru (ditandai dengan persegi panjang dengan garis terputus-putus). 2
3
8
10
15
22
Atau dapat juga digambarkan dalam bentuk tree seperti di bawah ini dengan pivot yang ditandai dengan huruf tebal. Kemudian setelah terurut dibaca inorder. 22 10 2
10 3
3
15
8 10 8
54n1
3
2
15
8
2 22
8 10
Untuk Kalangan Sendiri
Hal : 48
Modul : Algoritma dan pemrograman 1
Procedure Quisort dengan nilai paling kiri sebagai pembanding (pivot). Procedure Asc_Quick(L,R : Integer); Var i, j:integer; Begin If L= data[1]; repeat dec(j) until data[j] <= data[1]; if i < j then tukardata (data[i], data[j]); until i > j; tukardata (data[1], data[j]); Asc_Quick(L,j-1); Asc_Quick(j+1,R); End; End;
Untuk pengurutan secara descending anda tinggal mengganti tanda aritmatik pada baris ke 8 dan 9 sehingga menjadi seperti baris berikut : repeat inc(i) until data[i] >= data[l]; repeat dec(j) until data[j] <= data[l];
Procedure Quick Sort dengan nilai tengah sebagai pembanding (pivot). Procedure Asc_Quick(L,R : Integer); Var mid, i, j : integer; Begin i:= L; j:=R; mid := data[(L+R) div 2]; repeat while data[i] < mid Do inc(i); while data[j] > mid do dec(j); if i < j then begin change(data[i],data[j]); inc(i); dec(j); end; until i > j; if L < j then Asc_Quick(L , j); if i > R then Asc_Quick(i , R); end;
Untuk pengurutan secara descending, anda hanya perlu mengganti baris ke-6 & 7 sbb : while data[j] < mid do inc(j); while data[k] > mid do dec(k);
54n1
Untuk Kalangan Sendiri
Hal : 49
Modul : Algoritma dan pemrograman 1
Latihan Soal beserta jawaban (Listing program) dan penjelasan. Anda diminta membuat sebuah program sorting dengan metode bublsort. Mintalah user untuk memasukkan 10 angka. Lalu tampilkan angka-angka tersebut setelah disort baik secara ascending maupun descending. Layar 1 : Masukkan 10 data ========== Data ke-1 = 5 Data ke-2 = 2 Data ke-3 = 67 Data ke-4 = 43 Data ke-5 = 90
Data ke-6 = 45 Data ke-7 = 8 Data ke-8 = 23 Data ke-9 = 39 Data ke-10 = 7
{ket : tampilan ketika mengiput 10 angka} Layar 2 : 5 2 67 43 90 45 8 23 39 7 Data yang telah diurutkan : ****************** Ascending : 2 5 7 8 23 39 43 45 67 90 Descending: 90 67 45 43 39 23 8 7 5 2 {ket : tampilan setelah dilakukan bubble sort} Jawaban : contoh: sortir buble. uses crt; const max Type arr Var i Data
= = : :
10; array[1..max] of byte; byte; arr;
Procedure Input; begin Clrscr; Writeln (‘Masukkan 10 data’); Writeln (‘= = = = = = = = = =’); For i := 1 to max do {input 10 data} begin write(‘Data ke-‘, i ,’=’); readln(data[i]); end; Clrscr; For i := 1 to max do Write(data[i],’ ‘); Writeln; Writeln (‘ * * * * * * * * * * * * * * *);
54n1
Untuk Kalangan Sendiri
Hal : 50
Modul : Algoritma dan pemrograman 1
Writeln (‘Data yang telah diurutkan :’); end; Procedure Change (var a,b :byte); {procedure untuk menukar data} Var c : byte; Begin c := a; a := b; b := c; end; Procedure Asc_Buble; {pengurutan secara ascending} Var p,q : byte; flaq : boolean; begin flaq:=false; p:=2; while (p<max) and (not flaq) do begin flaq:=true; for q := max downto p do if data[q] < data[q-1] then begin change (data[q], data[q-1]); flaq:=false; end; inc(i); end; write(‘Ascending :’); end; Procedure Desc_Buble; {pengurutan secara descending} Var p, q : byte; Flaq : boolean; Begin flaq:=false; p:=2; while (p<max) and (not flaq) do begin flaq:=true; for q := max downto p do if data[q] < data[q-1] then begin change (data[q], data[q-1]); flaq:=false; end; inc(i); end; write(‘Descending :’); end; Procedure Output; Begin For i := 1 to max do Write(data[i],’’); Writeln; 54n1
Untuk Kalangan Sendiri
Hal : 51
Modul : Algoritma dan pemrograman 1
end; Begin {program utama} Input; Asc_buble; output; Desc_buble; output; Readkey; end. Contoh Program sort PROGRAM SORTING_BUBLE; USES CRT; VAR DERET : array[1..100] of integer; loop,nested,banyak, tampung : integer; begin clrscr; write('Masukan berapa bilangan yang anda inginkan: '); readln(banyak); for loop :=1 to banyak do begin write('bilangan ke', loop:3,'='); readln(deret[loop]); end; {proses pengurutan ascending} for loop := 1 to banyak -1 do for nested :=loop + 1 to banyak do if(deret[nested]<deret[loop]) then begin tampung := deret[nested]; deret[nested] :=deret [loop]; deret[loop] :=tampung; end; {cetak hasil secara ascending} writeln; writeln('hasil sort secara Ascending'); for loop := 1 to banyak do writeln('Data Ke: ',loop:3, '= ', deret[loop]); {cetak hasil Descending} writeln('Hasil sort secara Descending'); for loop := banyak downto 1 do writeln('Data Ke: ',(banyak-loop+1):3, '= ', deret[loop]); readkey; end.
Contoh Program Sort Max PROGRAM Pilihmaks; USES CRT; VAR DERET : array[1..100] of integer; loop,nested,banyak, tampung,imaks : integer; begin clrscr; writeln('METODE SELECTION SORT MAKSIMUM'); write('Masukan berapa bilangan yang anda inginkan: '); readln(banyak);
54n1
Untuk Kalangan Sendiri
Hal : 52
Modul : Algoritma dan pemrograman 1
for loop := 1 to banyak do begin write('bilangan ke', loop:3,'='); readln(deret[loop]); end; {proses pengurutan ascending} for loop := banyak downto 2 do begin imaks:=1; for nested := 2 to loop do if(deret[nested] > deret[imaks]) then imaks:=nested; tampung := deret[imaks]; deret[imaks] := deret [loop]; deret[loop] :=tampung; end; {cetak hasil secara ascending} writeln; writeln('hasil sort secara Ascending'); for loop := 1 to banyak do writeln('Data Ke: ',loop:3, '= ', deret[loop]); WRITELN('====================================='); {cetak hasil Descending} writeln('Hasil sort secara Descending'); for loop := banyak downto 1 do writeln('Data Ke: ',(banyak-loop+1):3, '= ', deret[loop]); WRITELN('====================================='); WRITELN('THANKS FOR YOU'); readln; end.
Program Insert sort PROGRAM Insertion_Sort; {USES CRT;} VAR Larik : array[1..100] of integer; i,j,N, X : integer; ketemu : boolean; begin {clrscr;} writeln('Metode Pengurutan sisip max dan min'); writeln('==================================='); write('Masukan Banyak Data: '); readln(N); for i :=1 to N do begin write('bilangan ke', i:3,'='); readln(Larik[i]); end; {proses pengurutan ascending} for I := 2 to N do begin X := Larik[I]; J := I -1; ketemu :=false; while (J >= 1) and (not ketemu) do begin
54n1
Untuk Kalangan Sendiri
Hal : 53
Modul : Algoritma dan pemrograman 1
if X < Larik[J] then begin Larik[J + 1] := Larik[J]; J := J - 1; end else ketemu := true; end; Larik[J+1] := X; end; {cetak hasil secara ascending} writeln; writeln('hasil sort secara Ascending'); writeln('vvvvvvvvvvvvvvvvvvvvvvvvvvv'); for i := 1 to N do writeln('Data Ke: ',i:3, '= ', Larik[i]); writeln; {cetak hasil Descending} writeln('Hasil sort secara Descending'); writeln('VVVVVVVVVVVVVVVVVVVVVVVVVVVV'); for i := N downto 1 do writeln('Data Ke: ',(N - i + 1):3, '= ', Larik[i ]); readln; end.
BAB XI SEARCH SEARCHING Î adalah suatu proses untuk menemukan informasi dari sejumlah data yang ada . ada beberapa metode search, akan tetapi pada bab ini kita akan membahas 2 metode yaitu: 1. Metode Sequential search 2. Metode Binary search
Ad1. Metode Squential search Suatu metode pencarian data dengan cara membandingkan setiap elemen satu persatu secara beruntun, mulai dari elemen pertama hingga elemen yang di cari di temukan, atau seluruh elemen sudah di periksa. Contoh: 13 1
16 14 21 2 3 4
76
15 5
6
Misalkan nilai yang dicari: X= 21 Elemen yang di bandingkan : 13,16,14,21 (ditemukan)
54n1
Untuk Kalangan Sendiri
Hal : 54
Modul : Algoritma dan pemrograman 1
Indeks larik yang dikembalikan IDX= 4 Misalkan nilai yang dicari: X= 13 Elemen yang di bandingkan : 13 (ditemukan) Indeks larik yang dikembalikan IDX= 1 Misalkan nilai yang dicari: X= 15 Elemen yang di bandingkan : 13,16,14,21,76,21 (ditemukan) Indeks larik yang dikembalikan IDX= -1 Setiap elemen pada larik L akan dibandingkan dengan X mulai dari elemen L[1]. Proses perbandingan akan terus dilakukan selama indeks larik tidak melebehi N (jumlah larik) dan larik ke [k] tidak sama dengan X Dan nilai yang dikembalikan adalah peubah boolean yaitu Ketemu = true dan tidak ketemu = false. Procedure sequentialsearch1(input L : larik, input n: integer, input x:integer, output ketemu: integer) {Mencari keberadaan nilai X di dalam L[1..n]. K.awal: X dan larik L[1..n] sudah terdefenisih nilainya dan K.Akhir ketemu bernilai True jika x Ditemukan, jika X tidak di temukan maka ketemu =bernilai False} Deklarasi K: integer; {indeks larik} Deskripsi K Í 1 While (K x do K Í K +1 Endwhile {K = n or L [K]= x} If L[k] =x then {di temukan} Ketemu Í true Else Ketemu Í false {tidak ada di dalam larik} Endif
Ad2. Metode Binary Search Suatu metode pencarian data dengan cara membagi dua data Syarat-syarat yang harus di penuhi pada metode ini adalah: 1. Data harus sudah terurut baik ascending atau descending. 2. Bagi dua elemen larik pada elemen tengah Indeks k=(i+j) div 2 Bagian kiri L[i..j] dan kanan L[k+1..j] 3. Periksa apakah L[ k] = x ,jika ya ketemu pencarian selesai.
54n1
Untuk Kalangan Sendiri
Hal : 55
Modul : Algoritma dan pemrograman 1
Jika tidak tanyakan Apakah L[k] < x jika ya pencarian dilakukan di bagian kiri dan sebaliknya jika L[k] > x di cari dikanan . hal ini tergantung larik terurut ascending atau descending. 4. Ulangi langkah 1 sampai x di temukan atau i>j yaitu ukuran larik sudah nol. Contoh: Ilustrasi pencarian data . misalkan Larik L dengan 8 buah elemen terurut menurun sbb: 81 i=1
76 2
21 3
18 4
16 5
13 6
10 7
7 8=j
10 7
7 8
misalkan elemen yang di cari adalah x=18 Langkah 1. i= 1 dan j=8 indeks elemen tengah k=(1+8) div 2 = 4(diarsir)
81 1
76 2
21 3
18 4
16 5
13 6
Kiri
Kanan
Langkah 2: L[4] =18? Ya ! ( X di temukan, Pencarian selesai)
(ii) Misalkan elemen yang di cari adalah X=16. Langkah 1: i= 1 dan j=8 indeks elemen tengah k=(1+8) div 2 = 4(diarsir)
81 1
76 2
21 3
18 4
16 5
Kiri
13 6
10 7
7 8
Kanan k
Langkah 2: L[4] = 16 ? Tidak! Maka akan diputuskan cari di bagian kiri atau bagian kanan. L[4] > 16 ? Ya! Maka cari dikanan dengan i= k+1 =5 dan j = 8(tetap)
54n1
Untuk Kalangan Sendiri
Hal : 56
Modul : Algoritma dan pemrograman 1
16 i= 5
13 6
10 7
7 j= 8
Langkah 1: i=5 dan j= 8 indeks elemen tengah k =(5 + 8) div 2 =6(diarsir)
16 i= 5
13 6
kiri
10 7
7 j= 8 kanan
k Langkah 2: L[6]= 16? Tidak L[6] >16? Tidak maka cari di bagian kiri i=5 (tetap) dan j=k-1 = 5
16 i= 5
Langkah 1: i=5 dan j=5 indeks elemen tengah k=( 5+5) div 2 = 5( di arsir)
16
Langkah 2 L[5] = 16 ? ya! (X di temukan, Pencarian selesai) Contoh Program binary search {* SRTUKTUR DATA BY MARSONO,S.KOM * program mencari data pada suatu larik * pencarian dilakukan dengan metode binary search } PROGRAM PENCARIAN_BINER; USES CRT; TYPE LARIK = ARRAY[1..100] OF INTEGER; VAR VEKTOR : LARIK;
54n1
Untuk Kalangan Sendiri
Hal : 57
Modul : Algoritma dan pemrograman 1
KETEMU : BOOLEAN; CARI,LOKASI,CACAH, BARIS: INTEGER; { ------ PROCEDURE MEMBACA ELEMEN VEKTOR --------} PROCEDURE BACA_VEKTOR(VAR VEKTOR: LARIK; VAR N, BARIS : INTEGER); VAR I, KOLOM :INTEGER; BEGIN KOLOM :=1; WRITE('BERAPA CACAH ELEMENNYA: '); READLN(N); WRITELN('MASUKKAN ELEMEN ELEMENNYA(SECARA TERURUT): '); WRITELN('ASCENDING ATAU DESCENDING'); WRITELN; FOR I :=1 TO N DO BEGIN READLN(VEKTOR[I]); { GOTOXY(( I MOD 10) * 6(WHEREY -1)} writeln(I mod 10) End; END; {------- PROCEDURE UNTUK MENCETAK VEKTOR ------- } PROCEDURE CETAK_VEKTOR (VEKTOR : LARIK; N: INTEGER); VAR I : INTEGER; BEGIN FOR I := 1 TO N DO BEGIN WRITE(VEKTOR[I]:6); IF I MOD 10 = 0 THEN WRITELN; END END; {------- PROCEDURE SORT SELEKSI ELEMEN VEKTOR ----} PROCEDURE SORTIR(VAR VEKTOR: LARIK; N : INTEGER); VAR I,J,POSISI,BANTU :INTEGER; BEGIN FOR I := 1 TO N-1 DO BEGIN POSISI :=I; FOR J := I+1 TO N DO IF VEKTOR [POSISI] > VEKTOR[J] THEN POSISI := J; BANTU := VEKTOR[I]; VEKTOR[I] :=VEKTOR[POSISI]; VEKTOR[POSISI] := BANTU END END; {------ PROSEDUR UNTUK MENCARI DATA METODE BINARY SEARCH ----} PROCEDURE MENCARI_BINER (VAR KETEMU : BOOLEAN; VAR LOKASI : INTEGER; VAR CARI : INTEGER; VEKTOR : LARIK; N: INTEGER); VAR ATAS, BAWAH : INTEGER; BEGIN 54n1
Untuk Kalangan Sendiri
Hal : 58
Modul : Algoritma dan pemrograman 1
WRITELN; WRITELN; WRITE('INPUT DATA YANG DI CARI: ');READLN(CARI); ATAS := N; BAWAH:= 1; KETEMU:= FALSE; WHILE(NOT KETEMU) AND (BAWAH <= ATAS) DO BEGIN LOKASI := (ATAS + BAWAH) DIV 2; IF CARI = VEKTOR[LOKASI] THEN KETEMU := TRUE ELSE IF CARI > VEKTOR[LOKASI] THEN BAWAH := LOKASI + 1 ELSE ATAS := LOKASI -1; END; END; { --------------- PROGRAM UTAMA --------------------} BEGIN CLRSCR; BARIS := 8; WRITELN('MENCARI DATA PADA SUATU VEKTOR DENGAN METODE BINARY SEARCH'); WRITELN('++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ++'); BACA_VEKTOR(VEKTOR,CACAH,BARIS); MENCARI_BINER(KETEMU,LOKASI,CARI,VEKTOR,CACAH); WRITELN; WRITE('VEKTOR DIATAS TELAH DISORTIR'); WRITELN(' MENJADI (DIBACA PERBARIS): '); CETAK_VEKTOR( VEKTOR, CACAH); WRITELN; IF KETEMU THEN BEGIN WRITELN('BILANGAN"', CARI:1,'" ADA PADA VEKTOR DI ATAS'); WRITE('YAITU PADA ELEMEN KE " ',LOKASI:1); WRITELN('"DARI VEKTOR TERSORTIR') END ELSE WRITELN(' BILANGAN" ',CARI:1,'" TIDAK ADA PADA VEKTOR DIATAS') ; Readln; END.
54n1
Untuk Kalangan Sendiri
Hal : 59
Modul : Algoritma dan pemrograman 1
Hasil Program
54n1
Untuk Kalangan Sendiri
Hal : 60