Pemrograman
Mulyadi Yuswandono
1. Pendahuluan
Seseorang yang pertama kali menyelesaikan pekerjaannya dengan menggunakan jasa komputer, akan selalu mempunyai kesan bahwa usaha pertama yang perlu dilakukan adalah memahami bahasa komputer. Kesan ini sebenarnya adalah kurang tepat tepat. Hal yang paling utama sebetulnya adalah bagaimana menentukan metoda penyelesaian. Apabila metodanya telah ditetapkan, usaha selanjutnya adalah pekerjaan rutin, yaitu menuliskan pekerjaan tersebut ke dalam bahasa komputer. Jadi bagian yang paling penting adalah terletak pada usaha membuat urutan-urutan atau langkah-langkah penyelesaian secara rinci. Usaha ini disebut sebagai ALGORITMA. Algoritma yang ditulis ke dalam bahasa Komputer disebut PROGRAM. Sifat perintah yang dapat dianggap sebagai algoritma ditentukan oleh kelengkapan perintah tersebut. Karena Komputer BUKA Manusia. Faktor kecerdikan tidaklah dikenal oleh Komputer. Komputer hanya mampu bekerja tidak lebih dan tidak kurang mengeksekusi program dengan menelusuri perintah-perintah yang dibuat dalam suatu program.
Input / Masukan pada komputer terdiri dari dua bagian : 1. Program 2. Data Data digunakan sebagai input pada algoritma, sedangkan program dan data sebagai masukan untuk komputer
Definisi
1. Algoritma adalah teknik penyusunan langkah-langkah penyelesaian masalah dalam bentuk kalimat dengan jumlah kata terbatas, tetapi tersusun secara logis dan sistematis. 2. 2 Algoritma adalah suatuprosedur yang jelas untuk menyelesaikan suatu persoalan dengan menggunakan langkah-langkah tertentu dan jumlah terbatas
Ciri Algoritma
1. Algoritma mempunyai awal dan akhir. Suatu algoritma harus berhenti setelah mengerjakan serangkaian tugas atau dengan kata lain suatu algoritma memiliki langkah yang terbatas 2. Setiap langkah harus di definisikan dengan tepat sehingga tidak p g g p gg memiliki arti ganda (not ambiguous). 3. Memiliki masukan (input) atau kondisi awal. 4. Memiliki keluaran (output) atau kondisi akhir. 5. Algoritma harus efektif; bila diikuti benar-benar akan menyelesaikan persoalan.
Algoritma
Resep Kue Pola Pakaian Petunjuk Praktikum
Contoh langkah
Campurkan 2 butir telur ke dalam adonan, kemudian kocok hingga mengembang Gunting kain dari pinggir kiri bawah ke arah kanan atas sepanjang 15 cm Campurkan 10 ml Asam Sulfat ke dalam 15 ml Natrium Hidroksida
Sifat Algoritma
1. Input : Suatu Algoritma memiliki input atau kondisi awal sebelum algoritma dilaksanakan dan bisa berupa nilai-nilai pengubah yang diambil dari himpunan khusus. p 2. Output : Suatu algoritma akan menghasilkan output setelah dilaksanakan atau algoritma akan mengubah kondisi awal menjadi kondisi akhir, di mana nilai output diperoleh dari nilai input yang telah diproses malalui algoritma. 3. Definiteness : Langkah-langkah yang dituliskan dalam algoritma terdefinisi dengan jelas sehingga mudah dilaksanakan oleh pengguna algoritma
setelah melakukan sejumlah langkah-langkah yang terbatas jumlahnya untuk setiap kondisi awal atau input yang diberikan 5. Effectiveness : Setiap langkah dalam algoritma bisa dilaksanakan dalam suatu selang waktu tertentu sehingga pada akhirnya memberi solusi sesuai dengan yang diharapkan. g y g p 6. Generality : Langkah-langkah algoritma berlaku untuk setiap himpunan input yang sesuai dengan persoalan yang akan diberikan, tidak hanya untuk himpunan tertentu. Contoh : Susun algoritma untuk mencari angka terbesar (maksimum) dari suatu kumpulan bilangan bulat yang terbatas jumlahnya. Solusi : 1. Anggap angka pertama d l 1 A k t dalam k kumpulan t l tersebut adalah yang t b b t d l h terbesar (maksimum). 2. Bandingkan angka maksimum ini dengan angka berikutnya dalam kumpulan. Bila anghka berikut tersebut lebih besar, maka jadikanlah maksimum. 3. Ulangi langkah 2, sehingga tidak ada lagi angka yang tersisa 4. Hentikan perbandingan setelah semua angka selesai dibandingkan, sehingga angka terbesar dlm himpunan tsb adalah angka maksimum terakhir.
Solusi tersebut dalam bentuk simbol instruksi adalah sebagai berikut : andaikan N = banyaknya angka dalam himpunan index = 1 maksimum = angka(index) selama index < N, lakukan : index=index+1 index index 1 bila angka(index)>maksimum maka maksimum=angka(index) ulangi lagi untuk index berikutnya angka terbesar dalam himpunan adalah maksimum terakhir Suatu algoritma tentu dapat ditulis dengan menggunakan bahasa sehari-hari seperti contoh diatas. Namun algoritma seperti ini masih sulit untuk langsung diterjemahkan apabila akan diimplementasikan ke dalam suatu bahasa pemrograman Komputer. Setiap algoritma tentu saja memerlukan suatu langkah peralihan ke dalam suatu bahasa program ketika akan dilaksanakan dengan menggunakan komputer sehingga semakin dekat bentuk algoritma ini ke bentuk program komputer, maka akan semakin mudah diterjemahkan. Suatu algoritma juga dapat ditulis langsung dalam bentuk bahasa program, tetapi hanya dalam bahasa program tertentu.
Struktur Algoritma
Agar algoritma dapat ditulis lebih teratur maka sebaiknya dibagi ke dalam beberapa bagian. Salah satu struktur yang sering dijadikan patokan adalah : a. a Bagian Kepala (Header) : memuat nama algoritma serta informasi atau keterangan tentang algoritma yang ditulis. b. Bagian Deklarasi/Definisi Variabel : memuat definisi tentang nama variabel, nama tetapan, nama prosedur, nama fungsi, tipe data yang akan digunakan dalam algoritma. c. Bagian Deskripsi/Rincian Langkah : memuat langkah-langkah penyelesaian masalah, termasuk beberapa perintah seperti baca data, tampilkan, ulangi, yang mengubah data input menjadi output, dan sebagainya.
Contoh 2 : Berikut adalah algoritma untuk menghitung nilai rata-rata sejumlah angka yang dimasukkan lewat keyboard :
Algoritma Nilai_Rata {menghitung nilai rata sejumlah bilangan yang dimasukkan lewat keyboard} Definisi Variabel integer x, N, k, jumlah; real nilai_rata; Rincian Langkah {masukkan jumlah data} read(N); k 1; jumlah 0; while (k<=N) do
{baca data}
read(x); jumlah jumlah + x; k k + 1; endwhile
Contoh 3 : Contoh algoritma yang menerima dua buah angka bulat kemudian menampilkan angka yang lebih besar :
Algoritma Lebih_besar {menerima dua angka kemudian menampilkan angka yang lebih besar} Definisi Variabel integer angka1, angka2; Rincian Langkah {memasukkan angka} write(Masukkan angka 1 : );read(angka1); write(Masukkan angka 2 : );read(angka2); {periksa yang lebih besar} if(angka1>angka2) then write( yang lebih besar = ,angka1); else write( yang lebih besar = ,angka2); write( ,angka2); endif
2. Flowcharting
Flowchart adalah suatu teknik untuk menyusun rencana program yang telah dikenalkan dan telah dipergunakan oleh kalangan programing komputer sebelum algoritma menjadi populer. Flowchart adalah untaian simbol gambar (chart) yang menunjukkan aliran (flow) dariproses terhadap data. Simbol-simbol flowchart dapat diklasifikasikan menjadi simbol untuk program dan simbol untuk sistem (peralatan hardware)
Program Flowchart :
System Flowchart :
Contoh : Gambarkan Flowchart dari proses pemilihan satu bilangan yang lebih besar di antara dua buah bilangan : Langkah Logika : 1. Mulai 2. 2 Masukkan A dan B 3. Apakah A > B ? bila Ya, Cetak A bila Tidak, Cetak B 4. Selesai
1. Apa yang disebut dengan algoritma dan algoritma tak utuh, Jelaskan dengan singkat. 2. Program merupakan algoritma dalam bahasa komputer. Betulkah, jelaskan alasan Saudara. 3. Buatlah algoritma untuk mencari angka terbesar dari suatu himpunan angka ( (membentuk himpunan angka, kemudian mencari angka terbesar). p g , g ) 4. Apakah pembuatan suatu bagan alir dalam penulisan program dapat diabaikan untuk mempercepat proses pembuatan program. Berikan alasannya. 5. Jalan Raya trans Sulawesi sepanjang 3250 kM akan segera ditingkatkan. Pada setiap jarak 65 kM akan dibangun fasilitas pompa bensin, tempat istirahat, dan lain-lain. Tampilkan lokasi pada jarak kilometer berapa fasilitas tersebut akan dibangun. 6. Gambar Flowchart untuk memilih satu bilangan terbesar dari tiga bilangan. 7. Gambar Flowchart untuk mengganti ban kempes sebuah mobil dengan ban reserve yang tersedia. 8. Gambar Flowchart untuk menyiapkan secangkir kopi manis di pagi hari (dimulai dari memasak air hingga menghidangkan kopi tersebut). k i hi hid k k it b t) 9. Gambar Flowchart untuk memilih satu bilangan terbesar dari empat bilangan. 10. Gambar Flowchart untuk memilih satu bilangan terbesar dari N buah bilangan
SOAL :
Ya
Tidak
Ya
Tidak
Selesai
10
Prinsip, suatu komputer memanipulasi data untuk menjadi suatu informasi yang berguna. Dengan demikian, perlu dipahami beberapa hal mengenai data, yaitu tipe, variabel dan nilai data, sebagai berikut : Tipe Data : angka bulat (integer), angka biasa (real), karakter (chart) Variabel : perlu p p pendefinisian dengan nama p g pada masing-masing g g variabel Nilai : setiap tipe data mempunyai batasan nilai masing-masing Tipe Data : Ada dua katagori, yaitu tipe Dasar adalah tipe yang selalu tersedia pada setiap bahasa pemrograman, misal bilangan bulat (integer), bilangan biasa (real), bilangan tetap (const.), karakter (char), logik (logic atau boolean) dan tipe bentukan adalah tipe yang dibentuk oleh kombinasi tipe dasar dasar, misalnya larik (array), rekaman (record), string (string).
Tipe Dasar
1.
2.
3.
4.
Bilangan Bulat (integer) : * Bilangan atau angka yang tidak memiliki titik desimal atau pecahan * Tipe dituliskan sebagai : integer atau int * Jangkauan nilai tergantung implementasi perangkat keras * Operasi aritmatik ( +, -, *, :, sisa hasil bagi % ) * Operasi p p perbandingan ( < or <=, > or >=, =, >< ) g Bilangan Biasa (real) : * Bilangan atau angka yang mempunyai titik desimal atau pecahan * Tipe ditulis sebagai : real * Jangkauan nilai tergantung implementasi perangkat lunak * Operasi aritmatik dan perbandingan juga berlaku bagi bil biasa Bilangan Tetap (const) : * Semua bilangan yang nilainya tidak berubah selama algoritma dilaksanakan * Tipe ditulis sebagai : const * Jangkauan meliputi semua bilangan yang mungkin Karakter ( h ) K kt (char) : * Data tunggal yang mewakili semua huruf, simbol, angka yang tidak dapat dioperasikan secara matematis * Tipe dituliskan sebagai char * Jangkauan nilai meliputi semua karakter dalam code ASCII atau tombol Keyboard * Operasi perbandingan dapat dilakukan dan dievaluasi menurut urutan code ASCII
11
5.
Logik (logical) : * Tipe data logik adalah tipe data yang digunakan untuk memberi nilai pada hasil perbandingan atau kombinasi perbandingan * Tipe dituliskan sebagai : boolean * Jangkauan nilai ada dua true dan false * Contoh 45 > 56 hasilnya false, Amir < Husni hasilnya true. * Operasi perbandingan ( < or <=, > or >=, =, >< ) * Ada beberapa operasi untuk data logik, antara lain and, or, dan not.
23
Tipe Bentukan
1.
2.
3.
Array (larik) : * Adalah tipe untuk menampung beberapa nilai data sejenis kumpulan data bulat adalah array integer kumpulan data tidak bulat adalah array real * Cara mendefinisikan adalah : Nilai_ujian : array [1 .. 10] of integer, atau Int nilai_ujian[10] j [ ] String (string) : * Berupa deretan karakter yang membentuk satu kata atau kalimat yang biasanya diapit oleh dua tanda kutip * Contoh : nama, alamat, judul * Cara mendefinisikan adalah : String Nama, Alamat; atau Nama, Alamat : String; Record (rekaman) : * Wadah untuk menampung elemen data yang tipenya tidak perlu sama dengan t j d tujuan mewakili satu j i obyek kili t jenis b k * Contoh : mahasiswa sebagai satu jenis obyek, memiliki beberapa elemen data, seperti : nomor_sttb, nama, umur, t_lahir, jekel * Cara mendefinisikan adalah : Type DataMhs : record < nomor_sttb : integer, nama_mhs : string, umur : integer > 24
12
Variable : Adalah nama yang mewakili suatu elemen data seperti : Jekel untuk jenis kelamin, t_lahir untuk tempat lahir. Ada aturan tertentu yang wajib diikuti dalam pemberian nama variabel, antara lain : Harus dimulai dengan abjad, tidak boleh dengan angka atau simbol g j , g g Tidak boleh ada spasi Jangan menggunakan simbol-simbol seperti (: ; , dsb) Sebaiknya memiliki arti yang sesuai dengan elemen data Sebaiknya tidak terlalu panjang Contoh variabel yang benar : Nama, Alamat, Nilai_Ujian Contoh variabel yang salah : 3PQR, IP rata-rata, Var:+xy,456; y g Q , , y, ;
25
Pemberian Nilai : Ada dua cara yang dapat digunakan untuk memberi nilai pada suatu variabel, yaitu melalui proses assignment dan pembacaan. Pemberian Nilai dengan cara assignment mempunyai bentuk umum sebagai berikut : @ Variabel nilai; @ Variable1 variabel2; @ V i b l Variabel ekspresi; k i Contoh assignment : @ Nama Ali bin Abi Thalib; @ Jarak 100.56; @ X Jarak; @ Rentang X+503*Y; Pemberian nilai dengan cara pembacaan dapat dilakukan melalui instruksi pembacaan dengan bentuk umum sebagai berikut : @ read(variabel1); atau d( i b l1) t @ read(variabel1, variabel2, ); Contoh pembacaan data : @ read(Nama); @ read(Jarak, Rentang, X);
26
13
Menampilkan Nilai : Agar hasil pelaksanaan Algoritma dapat dikomunikasikan dan ditayangkan , maka nilai variabel yang telah diproses dalam algoritma dapat ditampilkan. Instruksi untuk menampilkan nilai variabel adalah : write(variabel, ); Contoh penampilan nilai adalah sebagai berikut : @ write( nama anda : Nama); @ write(nilai_ujian = nilai); it ( il i ji il i) @ write(Jumlah variabel =, X+Y+Z);
27
Ekspresi (Expression) : Adalah transformasi data dan peubah dalam bentuk persamaan yang direalisasikan oleh operator dan operand. Operand adalah data, tetapan, peubah, atau hasil dari suatu fungsi, sedangkan operator adalah simbol-simbol yang memiliki fungsi untukmenghubungkan operand sehingga terjadi transformasi. Jenis-jenis operator adalah : @ Operator Aritmatik : operator untuk melakukan fungsi aritmetika ( + - * : ) @ Operator Relational : untuk menyatakan relasi atau perbandingan antara dua operand seperti > or >=; < or <=; ==; ! (tidak sama) atau <> or >< @ Operator Logik : untuk merelasikan operand secara logis && (and), || (or) dan ! (not) @ Operator String : untuk memanipulasi string, seperti + (concatenation), Ien (panjang string), dan substr (substring, mencuplik). Berdasarkan jenis operator yang digunakan maka ada empat macam ekspresi, yaitu ekspresi aritmetika ekspresi relational ekspresi logik, dan ekspresi string. aritmetika, relational, logik string
28
14
Ekspresi Aritmetika : ekspresi yang memuat operator aritmetika, contoh : 5*(C+32)/9; @ T @ Y 5*((a+b)/(c+d)+m/(e+f)); @ Gaji GaPok*(a+JumNak*0.05+Lembur*1.25); Ekspresi Relatononal : ekspresi yang memuat operator relational, contoh : @ Nilai_A>Nilai_B; @ (A+B)<(C+D); @ (x+57)!=(y+34); Ekspresi Logik : ekspresi yang memuat operator logik contoh : @ m (x>y)&&(5+z); @ n (!A || !(B&&C)); Ekspresi String : ekspresi denganoperator string contoh : p g p g p g @ Alamat Jalan Tangkuban Perahu + Km 9 Bandung; @ Hasil Saudara : + Nama_Mhs + adalah Mahasiswa Sipil; @ Tengah Substr(Kalimat, 5, 10);
29
SOAL :
1. 2. Susun Algoritma untuk menghitung pajak sebesar 12.50%, dengan meminta harga barang yang dibeli dari pengguna program Susun algoritma, yang meminta data dasar mahasiswa KG 1A (misal : Nama, alamat, nomor telepon yang bisa dihubungi, hobi, dll.), kemudian menampilkan kembali secara tersusun.
30
15
INSTRUKSI UTAMA
Secara garis besar hanya ada tiga macam kategori instruksi utama, sebagai berikut : Instruksi Runtunan (sequential) : Instruksi Pemilihan (selection) : Instruksi Perulangan (repetition) : Instruksi Runtunan (sequential) : Adalah instruksi yang d e ja a seca a be u uta atau be u uta ba s pe ba s da a st u s ya g dikerjakan secara berurutan berurutan baris per baris mulai dari baris pertama hingga baris terakhir, tanpa ada loncatan atau perulangan. Tiap instruksi dikerjakan satu per satu sebanyak satu kali Urutan pelaksanaan instruksi sama dengan urutan penulisan algoritma Instruksi terakhir merupakan akhir algoritma Urutan penulisan instruksi bisa menjadi penting, bila diubah dapat menyebabkan hasil yang berbeda
Contoh 1 : Algoritma Runtunan_1 Al it R t 1 {menunjukkan urutan yang berbeda memberi hasil yang berbeda} Deklarasi integer A, B; Deskripsi A 10); A 2 * A; B A; write(B);
16
Algoritma Runtunan_2 {menunjukkan urutan yang berbeda memberi hasil yang berbeda} Deklarasi integer A, B; Deskripsi A 10); B A; A 2 * A; write(B);
Algoritma Runtunan_3 {Algoritma untuk menghitung luas sebuah segitiga} Deklarasi real Alas, Tinggi; real Luas; Deskripsi write (Masukkan panjang alasnya : ); read ( (Alas); ) write (Masukkan tingginya : ); read (Tinggi); Luas Alas * Tinggi / 2; write(Luas segitiga = ,Luas);
Instruksi Pemilihan (selection) : Adalah instruksi yang dipakai untuk memilih satu aksi dari beberapa kemungkinan aksi berdasarkan suatu persyaratan. Ada dua bentuk instruksi pemilihan yang sering digunakan, yaitu if/then/else dan case Instruksi If/Then/Else : Digunakan untuk memilih alternatif apabila suatu syarat atau kondisi dipenuhi (1 kasus), atau memilih satu alternatif dari dua kemungkinan berdasarkan apakah syarat terpenuhi atau tidak (2 kasus)
Bentuk 1 kasus : if (syarat) then aksi endif Syarat Y Aksi
Apabila syarat dipenuhi, maka aksi dijalankan. Pada contoh berikut ini, nilai x akan ditambah 5 apabila nilainya lebih besar dari 100.
Contoh : if (x > 100) then x x + 5 endif 34
17
Bentuk 2 kasus : if (syarat) then aksi 1 else aksi - 2 endif Syarat Y Aksi - 1 N Aksi - 2
Apabila syarat dipenuhi, maka aksi - 1 dijalankan, tetapi bila syarat tidak dipenuhi, maka aksi 2 yang akan dilaksanakan. Pada contoh berikut ini, nilai a lebih besar dari 0 maka akan ditampilkan bilangan ini positif. Selain itu akan ditampilkan bilangan ini negatif.
Contoh : if (a > 0) then write (bilangan ini positif) else write (bilangan ini negatif) endif
35
Bentuk Bersusun (lebih dari 1 syarat) : if (syarat - 1) then aksi 1 else if (syarat 2) then aksi 2 else aksi 3 endif endif Syarat - 1 Y Aksi - 1 N Syarat - 2 Y Aksi - 2 N Aksi - 3
Pada bentuk ini, aksi 1 dilaksanakan segera setelah syarat 1 dipenuhi, aksi 2 dilakukan apabila syarat 1 tidak dipenuhi, tetapi syarat 2 dipenuhi. Aksi 3 hanya dilakukan apabila kedua syarat tidak dipenuhi.
Atau sebagai berikut : if (syarat - 1) then if (syarat - 2) then aksi - 1 else aksi 2 endif else aksi - 3 endif Syarat - 1 Y Syarat - 2 Y Aksi - 1 N Aksi - 2 N Aksi - 3
36
18
Pada bentuk diatas, aksi 1 hanya dilaksanakan apabila syarat 1 dan juga syarat 2 dipenuhi. Apabila syarat 1 tidak dipenuhi, maka aksi 3 langsung dikerjakan, sedangkan aksi 2 hanya dilakukan apabila syarat 1 dipenuhi, tetapi syarat 2 tidak. Dalam bentuk bersusun ini, dapat dilihat bahwa jumlah aksi yang mungkin dilakukan adalah jumlah instruksi if ditambah 1. Dengan kata lain, bila ada 2 instruksi if yang bersusun, maka bisa disediakan 3 pilihan aksi, demikian seterusnya. Hal lain yang perlu diperhatikan adalah pasangan if / else. Saat kita menarik garis dari if ke pasangan else-nya, maka tidak boleh ada garis yang berpotongan apabila instruksi tersebut bersusun sehingga pasangan itu harus dimulai dari if / else yang paling dalam baru bergerak keluar Dengan kata lain If keluar. lain, terakhir berpasangan dengan else pertama, dan if pertama selalu berpasangan dengan else terakhir. Berikut ini disajikan beberapa contoh pemakaian instruksi pemilihan if / then / else : Contoh 1 : Algoritma berikut ini menunjukkan pemakaian instruksi pemilihan if / then / else untuk menentukan apakah bilangan bulat yang dimasukkan lewat papan ketik adalah bilangan genap atau ganjil.
Algoritma Pemilihan_1 {contoh algoritma untuk menunjukkan pemakaian instruksi pemilihan. algoritma ini menerima satu bilangan bulat kemudian memeriksanya apa a bilangan genap atau bilangan ganjil} apakah b a ga ge ap a au b a ga ga j } Definisi Variabel integer bilangan; Rincian Langkah write (Masukkan satu bilangan bulat : ); read (bilangan); if (bilangan %2 == 0) then write (bilangan genap !); else write (bilangan ganjil !); endif
37
Contoh 2 : Algoritma berikut menunjukkan pemakaian instruksi pemilihan di mana ada 3 bilangan bulat dimasukkan lewat papan ketik, kemudian dicari bilangan yang terbesar diantara ketiganya.
Algoritma Pemilihan_2 {contoh algoritma ini menerima 3 bilangan bulat kemudian menetapkan bilangan yang terbesarl} Deklarasi integer A, B, C, maks; Deskripsi write (Masukkan bilangan 1 : ); read (A); write (Masukkan bilangan 2 : ); read (B); write (Masukkan bilangan 3 : ); read (C); if (A > B) then maks else maks endif if (C > maks) then maks endif A; B;
C;
38
19
Instruksi Case : Digunakan sebagai instruksi pemilihan dimana aksi yang akan dilakukan hanya bergantung pada nilai dari satu macam variabel. Dengan kata lain, variabel yang menentukan ini mungkin memiliki banyak macam nilai dan setiap nilainya berkaitan dengan satu macam aksi.
Bentuk Instruksi Case : case (variabel) ( ) nilai-1 : aksi 1; nilai-2 : aksi 2; nilai-3 : aksi 3; default : aksi-n; endcase
Bentuk case di atas dapat diterjemahkan sebagai berikut : Dimungkinkan ada n-buah aksi, mulai dari aksi 1 hingga aksi n Setiap aksi hanya dilakukan apabila suatu nilai variabel dicapai sesuai persyaratan. Misal, aksi 1 dilakukan hanya bil variabell b il i nilai-1, aksii 2 dilaksanakan apabila variabell b il i nilai-2, d dil k k h bila i b bernilai il i 1 k dil k k bil i b bernilai il i 2 dan seterusnya. Apabila tak satupun nilai variabel yang cocok, maka aksi n dikerjakan sebagai aksi default (hanya dikerjakan apabila tidak ada yang memenuhi syarat)
39
Contoh : Gaji karyawan pada sebuah perusahaan didasarkan pada jam kerja dalam satu bulan, serta posisi atau golongannya dalam perusahaan itu. Upah per jam menurut golongan adalah sebagai berikut : Golongan Upah/jam (Rp.) A 5000 B 6000 C 7500 D 9000 Apabila karyawan bekerja lebih dari 150 jam per minggu, maka kelebihan jam kerja tersebut dihitung sebagai lembur dengan upah/jam 25% di atas upah reguler. Buat sebuah algoritma yang menerima nama, golongan, serta jam kerja karyawan, kemudian tampilkan gaji totalnya dalam satu bulan.
40
20
Algoritma Gaji_Karyawan {algoritma yang menerima nama, golongan serta jam kerja kemudian menampilkan total gaji yang diterima karyawan} Deklarasi real gaji, total, jamkerja, lembur, upah; string nama; char golongan; Deskripsi write (Masukkan Nama Karyawan : ); read (nama); write (M kk Golongannya : ); it (Masukkan G l ) read (golongan); write (Masukkan Jam Kerjanya : ); read (jamkerja); case (golongan); A :upah 5000; B :upah 6000; C :upah 7500; D :upah 9000; default : write (golongannya salah ! ); upah 0; endcase if (jamkerja > 150) then lembur (jamkerja 150) * upah * 1.25; gaji 150 * upah; else lembur 0; gaji jamkerja * upah; endif total gaji + lembur write (Gaji yang diterima sdr : ,nama, adalah = Rp. ,total); 41
Instruksi Perulangan (Repetition) : Instruksi yang dapat mengulang pelaksanaan sederetan instruksi-instruksi lainnya berulang-ulang sesuai persyaratan yang ditetapkan. Struktur instruksi perulangan pada dasarnya terdiri atas : Kondisi perulangan : suatu kondisi yang harus dipenuhi agar perulangan dapat terjadi Badan (Body) perulangan : deretan instruksi y g akan diulang-ulang p ( y) p g yang g g pelaksanannya y Pencacah (counter) perulangan : suatu variabel yang nilainya harus berubah agar perulangan dapat terjadi dan pada akhirnya membatasi jumlah perulangan yang dapat dilaksanakan. Ada tiga macam bentuk instruksi perulangan yang biasa ditemukan dalam program, yaitu while do, repeat until, dan for.
42
21
Perulangan While - do :
Bentuk Umum : while (kondisi) do instruksi instruksi endwhile
kondisi N
Instruksi-instruksi
Makna dari bentuk instruksi tersebut adalah ulangi Instruksi-instruksi selama kondisi yang diberikan masih terpenuhi. Perhatikan :
1.
2.
Ada instruksi yang berkaitan dengan kondisi sebelum masuk ke while / do sehingga kondisi ini benar (terpenuhi) dan pengulangan bisa dilaksanakan. Bila tidak, kemungkinan instruksi while tidak bisa dijalankan Ada satu instruksi di antara instruksi-instruksi yang diulang agar pada satu saat kondisi perulangan tidak terpenuhi, sehingga perulangan bisa berhenti, atau jumlah perulangan bisa dibatasi. Bila tidak, ada kemungkinan perulangan berlangsung terus tak terhingga terhingga.
43
Contoh : Algoritma berikut menggunakan while/do untuk menampilkan angka 1 hingga 100 secara berurutan. Perhatikan bahwa perintah : angka 1 adalah kondisi awal, sedangkan instruksi : angka angka + 1, adalah instruksi yang bisa merubah kondisi hingga tidak terpenuhi pada saat angka > 100.
Algoritma Perulangan_1 {mencetak angka 1 hingga 100} Deklarasi integer angka; i t k Deskripsi angka 1; while (angka < 100) do write (angka); angka angka + 1 endwhile
44
22
Makna dari bentuk instruksi tersebut adalah ulangi pelaksanaan Instruksi-instruksi hingga kondisi terpenuhi. Perhatikan :
1. 2. 3. 4. 5.
Instruksi-instruksi akan diulang apabila kondisi tidak terpenuhi, dan ketika kondisi terpenuhi, maka perulangan berhenti. Instruksi-instruksi dikerjakan terlebih dulu sebelum kondisi diperiksa. Harus ada satu instruksi yang mendahului repeat/until agar kondisi tidak terpenuhi sehingga perulangan bisa berlangsung. Harus ada instruksii di antara instruksii yang diulang sehingga pada akhirnya d t mengibah k di i H d i t k t i t k di l hi d khi dapat ib h kondisi menjadi terpenuhi dan perulangan berhenti. Apabila di awal pelaksanaan kondisi sudah terpenuhi, maka instruksi-instruksi paling tidak dikerjakan satu kali.
45
Contoh : Algoritma berikut menampilkan Halo sebanyak 25 kali, dengan memanfaatkan instruksi repeat-until.
Algoritma Perulangan_2 {memakai repeat-until untuk menampilkan Halo sebanyak 25 kali} Deklarasi integer cacah; Deskripsi cacah 1; repeat write (Helo ); cacah cacah + 1 until (cacah > 25)
46
23
Contoh : Gunakan repeat-until untuk menghitung jumlah angka 1 + 2 + 3 + + N, dimana N adalah angka bulat yang dimasukkan melalui papan ketik.
Algoritma Perulangan_3 {menghitung jumlah 1 + 2 + 3 + + N, N dimasukkan lewat papan ketik} Deklarasi integer cacah, N, Jumlah; Deskripsi write (Masukkan nilai N : ); read (N); cacah 1; Jumlah 0; repeat Jumlah Jumlah + cacah; cacah cacah + 1 until (cacah > N) write (Jumlahnya = , Jumlah);
47
Perulangan For :
Var = awal Bentuk Umum : for (var = awal to akhir step n) instruksi instruksi Endfor. Y kondisi N Instruksi-instruksi Instruksi instruksi
Var = var + n
Makna dari bentuk instruksi tersebut adalah ulangi Instruksi-instruksi tersebut berdasarkan variabel perulangan mulai nilai awal hingga nilai akhir dengan perubahan nilai sebesar n. Perhatikan :
1. 1 2. 3. 4. 5.
Variabel perulangan (var) harus bertipe dasar (integer, real, atau char). (integer real char) Nilai awal harus lebih kecil dari akhir, bila n > 0 (positif). Nilai awal harus lebih besar dari akhir bila n < 0 (negatif). Mula-mula variabel var bernilai awal, kemudian setiap satu kali putaran maka nilai var bertambah sebesar n. Perulangan akan berhenti apabila nilai var sudah mencapai akhir.
48
24
Contoh : Algoritma berikut menampilkan Halo sebanyak 10 kali, dengan memanfaatkan instruksi for.
Algoritma Perulangan_4 {menampilkan Halo memakai instruksi for} Deklarasi integer cacah; Deskripsi for (cacah = 1 to 10 step 1); write (Helo ); endfor.
Contoh : Melakukan pencacahan mundur mulai dari 100, 99, 98, hingga 0, dengan memanfaatkan instruksi for.
Algoritma Perulangan_5 {mencacah terbalik atau count down, memakai instruksi for} Deklarasi integer cacah; Deskripsi for (cacah = 100 to 0 step -1); write (cacah); endfor. write (Go !); 49
SOAL :
1. 2. 3. Susun Algoritma dengan menggunakan while/do dan juga if/then/else untuk menampilkan syair/lagu anak ayam yang mati mulai dari 10 hingga habis. Susun Algoritma dengan menggunakan repeat-until untuk menghitung rata-rata dari N buah bilangan yang dimasukkan melalui papan ketik. Susun Algoritma menghitung nilai rata-rata dari N buah bilangan yang dimasukkan lewat papan ketik, menggunakan instruksi for.
50
25
LARIK (ARRAY)
Pendahuluan : Larik sering dijumpai dalam aplikasi sehari-hari terutama yang berkaitan dengan manipulasi tabel-tabel angka, atau dalam bentuk struktur data matematis yang disebut vektor dan matriks. Larik (Array) : adalah suatu bentuk struktur data yang menampung satu atau lebih dari satu data yang sejenis (bertipe data sama), yang diwakili oleh satu nama variabel. Setiap l S ti elemen atau anggota larik dapat dikenali atau di k t t l ik d t dik li t diakses melalui suatu i d k l l i t indeks Larik berdimensi satu disebut vektor. Larik berdimensi dua disebut matriks. Larik berdimensi lebih dari dua disebut tensor. Mendefinisikan Larik : Ada beberapa cara mendefinisikan larik. Salah satu bentuk definisi ini bisa digunakan secara konsisten dalam algoritma, antara lain : nama_array : array [1 ... n] of tipe_data; contoh : A : array [1 10] of integer tipe_data nama_array [n]; contoh : integer A[10] type larik : array [1 n] of tipe_data; nama_array : larik; contoh : tipe larik : array [1 10] of integer; A : larik;
52
26
Operasi Larik : Beberapa cara teknik operasi untuk Larik berdimensi satu (vektor) akan dibahas, antara lain : Membaca / mengisi Larik. Mencetak / menampilkan Larik. Menggeser isi Larik. Menggabungkan beberapa Larik. Menguraikan satu Larik. Mengurutkan isi Larik. Mencari elemen dalam Larik. Membaca / Mengisi Larik : Proses membaca atau mengisi suatu larik, dimulai dengan mendefinisikan array disertai dengan jumlah elemen yang akan disimpan. Kemudian, dengan memakai instruksi perulangan, satu per satu elemen diisi dengan indeks yang berurutan mulai dari 1 hingga indeks maksimum. Berikut disajikan dua algoritma untuk mengisi suatu larik. Algoritma yang pertama tidak menggunakan prosedur, sedangkan algoritma kedua menggunakan prosedur.
53
Algoritma IsiLarik_1 {membaca atau mengisi larik tanpa menggunakan prosedur} Deklarasi const integer integer Deskripsi for ( indeks = 1 to N step 1) write (Masukkan elemen ke-,indeks) read (A[indeks]); endfor. N=10; A[N]; indeks;
54
27
Algoritma IsiLarik_2 {membaca atau mengisi larik dengan menggunakan prosedur} Deklarasi const N=10; integer A[N]; integer K; prosedur Baca Larik (input integer M output nteger A[ ] ); Baca_Larik M, Deskripsi write (Masukkan Jumlah Elemen Larik (<100) :); read (K); Baca_Larik (K,A); Prosedur Baca_Larik (input integer M, output integer A[ ] ) {prosedur membaca/mengisi larik} Deklarasi, integer indeks; Deskripsi for (indeks = 1 to M step 1) write (Masukkan elemen ke- , indeks); read (A[indeks]); endfor.
55
Menampilkan Isi Larik : Berikut disampaikan sebuah prosedur untuk menampilkan isi suatu larik dengan M buah elemen. Prosedur ini dapat dipanggil oleh algoritma yang memerlukan prosedur untuk menampilkan sebuah larik.
Prosedur Cetak_Larik (input integer M, output integer A[ ] ) {p {prosedur untuk menampilkan isi suatu larik atau array} p y} Deklarasi, integer indeks; Deskripsi for (indeks = 1 to M step 1) write (A[indeks]); endfor.
28
Menggeser Isi Larik : Beberapa aplikasi memerlukan pergeseran isi larik, misalnya menggeser ke kiri atau ke kanan yang digambarkan sebagai berikut :
5 2 4 4 5 6 6 4 8 8 6 3 3 8 2 2 3 5
Proses Geser Kanan berarti elemen berindeks i digeser ke posisi berindeks i+1, dengan catatan elemen terakhir akan dipindahkan ke posisi pertama. Sebaliknya, proses Geser Kiri berarti elemen berindeks i digeser ke posisi berindeks i-1, dengan menggeser elemen pertama ke posisi terakhir.
Prosedur Geser_Kanan (in-out integer A[ ], input integer M, ) {menggeser elemen suatu larik (vektor) ke kanan, A[i+1] A[i]} Deklarasi, integer indeks, temp; Deskripsi temp A[M]; for (indeks = M-1 to 1 step -1) A[indeks+1] A[indeks]; endfor. A[1] temp; 57
Prosedur Geser_Kiri (in-out integer A[ ], input integer M ) {menggeser elemen suatu larik (vektor) ke kiri, A[i-1] A[i]} Deklarasi integer indeks, temp; Deskripsi temp A[1] for (indeks = 2 to M step 1 ); A[indeks+1] A[indeks]; endfor. A[M] temp;
Suatu algoritma untuk menggeser elemen larik dengan memanfaatkan prosedur-prosedur yang telah digunakan di atas diberikan berikut ini.
Algoritma Geser_Larik {algoritma untuk menggeser isi larik dengan memanfaatkan prosedur-prosedur larik} Deklarasi const Nmax=100; integer N, pilihan, A[Nmax}; prosedur Baca_Larik (input integer M, input integer A[ ]); prosedur Cetak_Larik (input integer M, input integer A[ ]); prosedur Geser_Kanan (in-out integer A[ ], input integer M); prosedur Geser_Kiri (in-out integer A[ ], input integer M);
58
29
Deskripsi write (Masukkan Jumlah Elemen Larik : ); read (N); Baca_Larik (N, A); write (Pilih salah satu : ); write (1. Geser Kanan ); write (2. Geser Kiri ); read (pilihan); if (pilihan = 1) then Geser_Kanan (A,N); else Geser_Kiri (A,N); endif. Cetak_Larik (N,A);
59
Menggabung (Merge) Larik : Beberapa larik dapat digabungkan menjadi satu larik yang lebih besar. Misalkan Larik A dengan 10 elemen akan digabungkan dengan Larik B dengan 15 elemen. Tentu saja gabungannya berupa Larik C harus memiliki elemen yang sama atau lebih besar dari 25. Berikut ini adalah sebuah prosedur yang menggabungkan Larik A, N buah elemen dengan Larik B, M buah elemen, menjadi Larik C dengan L elemen, dimana L=N+M.
Prosedur Gabung_Larik (input integer N, input integer B[ ], input integer M, output integer C[ ], output integer L ) {menggabungkan dua larik menjadi larik yang lebih besar} Deklarasi, integer indeks; Deskripsi L N+M; {salin isi A ke dalam C} for (indeks = 1 to N step 1) C[ de s] C[indeks] A[indeks]; [ de s]; endfor. {salin isi B ke dalam C} for (indeks = N+1 to L step 1) C[indeks] B[indeks-N]; endfor.
60
30
Memisah (Split) Larik : Sebuah larik dapat dipisahkan menjadi beberapa larik yang lebih kecil. Misalkan satu larik C dengan 25 elemen dapat dipisahkan menjadi larik A dengan 10 elemen dan larik B dengan 15 elemen. Berikut ini adalah sebuah prosedur yang memisahkan Larik C, dengan L elemen, menjadi larik A dengan N elemen, dan Larik B dengan M elemen.
Prosedur Pisah_Larik (output integer A[ ], input integer N, output integer B[ ], input integer M, input integer C[ ], input integer L ) {memisahkan sebuah larik menjadi dua larik yang lebih kecil} Deklarasi, integer indeks; Deskripsi {salin isi C ke dalam A} for (indeks = 1 to N step 1) A[indeks] C[indeks]; [ de s] C[ de s]; endfor. {salin sisanya ke B} for (indeks = N+1 to L step 1) B[indeks-N] C[indeks]; endfor.
61
Mengurutkan (Short) isi Larik : Beberapa aplikasi memerlukan data yang berurut baik dari kecil ke besar (ascending) maupun dari besar ke kecil (descending). Pada bagian ini, akan digunakan teknik short yang sederhana yang disebut metoda gelembung (bubble short). Pada bagian lain akan dibahas berbagai teknik sort yang lebih rumit. Prinsip dari bubble short adalah sebagai berikut : 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. Andaikan ada 5 elemen dalam larik [ 10, 8, 3, 5, 4 ] Mula-mula ambil indeks 1 sebagai patokan A[1]=10 Bandingkan isi A[1] dengan A[2], A[3], A[4], dan A[5] Bila A[1] < A[2] maka tukar tempat sehingga A[1]=8 Bila A[1] < A[3] maka tukar tempat sehingga A[1]=3 Bila A[1] < A[4] maka tukar tempat, tidak terjadi Bila A[1] < A[5] maka tukar tempat, tidak terjadi Sekarang ambil indeks 2 sebagai patokan A[2]=10 Bandingkan A[2] dengan A[3], A[4] dan A[5] Hasilnya adalah [ 3, 4, 10, 8, 5 ] Sekarang ambil indeks 3 sebagai patokan A[3]=10 Bandingkan A[3] dengan A[4] dan A[5] Hasilnya adalah [ 3, 4, 5, 10, 8 ] Sekarang ambil indeks 4 sebagai patokan A[4]=10 Bandingkan A[4] dengan A[5] Hasilnya adalah [ 3, 4, 5, 8, 10 ] Dengan demikian proses pengurutan selesai
[ 8, 10, 3, 5, 4 ] [ 3, 10, 8, 5, 4 ]
62
31
Proses pengurutan yang dijelaskan di atas secara algoritma memerlukan dua buah indeks, indeks pertama sebagai patokan yang bergerak dari 1 hingga N-1 (1 sampai 4 pada contoh di atas), dan indeks kedua sebagai pembanding yang selalu bergerak dari posisi indeks patokan + 1 hingga posisi terakhir N (mulai dari 2 sampai 5 pada contoh di atas).
Prosedur Short_Larik (in-out integer A[ ], input integer N) {mengurutkan isi larik secara ascending dengan metoda bubble short} Deklarasi, integer idx1, idx2, temp; Deskripsi for (idx1 = 1 to N-1 step 1) for (idx2 = idx1+1 to N step 1) {bila A[idx1] > A[idx2] tukar} if ( A[idx1] > A[idx2]) then temp A[idx1]; A[idx1] A[idx2]; A[idx2] temp; [ ] p; endif. endfor. endfor.
Beberapa teknik pengurutan lebih lanjut akan dibahas pada bab pengurutan data.
63
Mencari (Search) Elemen Larik : Mencari suatu elemen dalam larik merupakan suatu proses dasar yang sangat penting. Aplikasi lanjut dari proses ini banyak ditemukan pada sistem basis data untuk menemukan suatu rekaman data, atau pada pemroses teks (word processing) dalam mencari kata (find) atau mengganti kata (replace). Hasil pencarian yang diharapkan antara lain : 1. Indikator Y bila ditemukan atau N bila tidak ditemukan 2. 2 Posisi dalam larik di mana elemen tersebut ditemukan ditemukan. Berikut ini disajikan sebuah prosedur untuk mencari satu elemen di dalam larik dengan jumlah elemen sebanyak N buah.
Prosedur Cari_Elemen (input integer A[ ], input integer N, input integer x, output char indikator, output integer posisi ) {suatu prosedur untuk mencari elemen x di dalam larik A, dengan indikator dan posisi sebagai hasilnya} Deklarasi, integer indeks; Deskripsi indikator N; posisi 0; indeks 1; while (indeks < N+1 && indikator = N) do if (A[indeks]=x) then posisi indeks; indikator Y; endif. indeks indeks+1; endwhile.
64
32
Matriks / Larik Dua Dimensi : Salah satu struktur data larik yang juga banyak digunakan dalam berbagai aplikasi adalah matriks atau larik 2D (dua dimensi); satu untuk menunjukkan baris dan yang lainnya untuk menunjukkan kolom. Susunan angka berikut menunjukkan matriks 4 x 5 (4 baris dan 5 kolom).
10 8 13 45 12 15 8 27 7 10 34 6 9 11 23 5 16 25 7 17
Mengisi suatu matriks berdimensi 4 x 5 dilakukan baris demi baris, mulai dari baris 1 dengan mengisi kolom 1 sampai kolom 5, kemudian pindah ke bais 2 dan mengisi kolom 1 sampai dengan kolom 5, dan seterusnya.
65
Algoritma Isi_Matriks_4x5 {algoritma mengisi suatu matriks 4x5} Deklarasi const baris=4, kolom=5; integer brs, kol; integer A[baris][kolom]; Deskripsi for (brs=1 to baris step 1) for (kol=1 to kolom step 1) write (Elemen baris-,brs, kolom-,kol); read (A[brs][kol]); endfor. endfor.
66
33
Prosedur untuk mengisi elemen-elemen Matriks berdimensi NxM disajikan berikut ini :
Prosedur Isii_Matriks (input integer N, input integer M, output integer A[ ]) {prosedur untuk mengisi matriks berdimensi N x M} Deklarasi integer brs, kol; Deskripsi for (brs=1 to N step 1) ( p ) for (kol=1 to M step 1) write (Elemen baris-,brs, kolom-,kol); read (A[brs][kol]); endfor. endfor.
SOAL :
1. Buat sebuah algoritma yang membaca tiga vektor A, B, C masing-masing dengan 5 elemen, kemudian membentuk matriks D berdimensi 3 x 5 sedemikian rupa sehingga vektor A mengisi baris-1 dari D, vektor B pada baris-2, dan vektor C pada baris-3. Tampilkan matriks D setelah selesai. Buat sebuah algoritma yang menerima input berupa nomor mahasiswa Anda ke dalam sebuah vektor, misalnya vektor A (tiap digit menjadi elemen dari vektor tersebut), kemudian lakukan perkalian semua elemen vektor itu (kecuali angka 0), hasilnya adalah x, dan bentuk sebuah vektor lain B di mana elemennya adalah jumlah dari elemen A dengan x. Contoh : NoMhs=06101060 A = [0|1|1|2|3|4|5] maka x = 120 B = [120|121|121|122|123|124|125]
2.
68
34
Prosedur : Adalah bagian dari suatu program yang disusun secara terpisah untuk melakukan suatu tugas khusus/fungsi tertentu. Pada dasarnya ada dua macam bentuk prosedur, yaitu : Subrutin (subprogram) dan Fungsi. Subrutin (subprogram) : Adalah bagian dari program yang dibuat terpisah untuk melaksanakan sebagian dari tugas yang harus diselesaikan oleh suatu program. Pada umumnya yang dikenal dengan nama prosedur sebenarnya adalah subprogram. Fungsi : Adalah bagian dari program yang dibuat terpisah untuk melaksanakan fungsi tertentu yang menghasilkan suatu nilai untuk dikembalikan ke program utama. Manfaat Pembuatan Prosedur : modularisasi : Suatu program yang besar dan kompleks dapat dibagi ke dalam beberapa p p prosedur sehingga setiap p gg p prosedur merupakan bagian y g mudah p g yang dikerjakan. Dengan demikian, program besar tersebut menjadi mungkin diselesaikan. simplifikasi : Dalam suatu program, sering diperlukan suatu tugas yang harus dikerjakan berulang-ulang dengan nilai-nilai variabel yang berbeda. Agar tidak merepotkan maka tugas ini cukup ditulis sekali saja dalam bentuk prosedur yang kemudian dipanggil berulang-ulang sesuai kebutuhan.
70
35
Contoh : Andaikan ada sebuah program menyediakan fasilitas untuk menghitung luas, keliling dan diagonal dari sebuah persegi panjang dengan kemungkinan pemilihan melalui suatu menu. Contoh ini dapat dibagi ke dalam enam prosedur, yaitu prosedur menampilkan menu, prosedur membaca dimensi persegi panjang, menghitung luas, menghitung keliling, menghitung diagonal, dan menampilkan hasil.
Algoritma Empat_Persegi_Panjang {algoritma ini menunjukkan contoh pemakaian prosedur untuk menghitung luas, keliling, dan diagonal dari empat persegi panjang} Deklarasi integer pilihan; real panjang, lebar, hasil; prosedur menu; prosedur baca_dimensi; prosedur hitung_luas; prosedur hitung_keliling; prosedur hitung_diagonal; prosedur tampil_hasil;
71
Deskripsi pilihan repeat 0; menu; write (Masukkan pilihan Anda : ); read (pilihan); if (pilihan < 4) then baca_dimensi; endif case (pilihan) 1. : hitung_luas; 2. : hitung_keliling; 3. : hitung_diagonal; 4. : write (Selesai sampai jumpa !); default : write (Pilihan salah, Ulangi !! ); endcase if (pilihan < 4) then tampil_hasil; tampil hasil; endif until (pilihan =4) Prosedur menu {menampilkan menu program} Deklarasi
36
Deskripsi write (Menu Program Empat Persegi Panjang ); write (1. Menghitung Luas ); write (2. Menghitung Keliling ); write (3. Menghitung Diagonal ); write (4. Keluar dari Program ); Prosedur baca_dimensi {membaca dimensi persegi panjang} Deklarasi Deskripsi write (Masukkan Panjang : ); read (panjang); write (Masukkan Lebar : ); read (lebar); Prosedur hitung_luas {menghitung Luas empat persegi panjang} Deklarasi real luas; Deskripsi luas hasil panjang * lebar; luas;
73
Prosedur hitung_keliling {menghitung keliling empat persegi panjang} Deklarasi real keliling; Deskripsi keliling 2 * (panjang + lebar); hasil keliling; Prosedur hitung_diagonal {menghitung diagonal empat persegi panjang} Deklarasi real diagonal; Deskripsi diagonal sqrt (panjang^2 + lebar^2); hasil diagonal; Prosedur tampil_hasil p _ {menampilkan hasil dari program ini} Deklarasi Deskripsi write (hasil = ,hasil);
74
37
75
Parameter :
Ketika suatu prosedur dipanggil, maka pada hakekatnya bisa dilakukan pertukaran data antara program utama dan prosedur. Pertukaran ini dilakukan melalui parameter. Parameter aktual, Adalah parameter yang disertakan pada saat prosedur dipanggil untuk dilaksanakan, sering disebut argumen. argumen Parameter Formal, Adalah parameter yang dituliskan pada definisi suatu prosedur/fungsi. Ada tiga jenis parameter formal, yaitu : Parameter masukan (input), Parameter keluaran (output), Parameter masukan dan keluaran (input-output) 1. Parameter Masukkan (input) : Parameter yang menerima nilai dari parameter aktual. 2. Parameter Keluaran (output) : Parameter yang menyerahkan nilai ke parameter aktual 3. Parameter Masukan dan Keluaran (input - output) : Parameter yang menerima nilai dari parameter aktual untuk diproses dalam prosedur kemudian diserahkan kembali ke parameter aktual setelah selesai.
76
38
Contoh 2 : Algoritma berikut menunjukkan pemakaian parameter masukan dan parameter keluaran untuk prosedur menghitung luas segitiga.
Algoritma Luas_Segitiga {menghitung luas segitiga dengan menggunakan prosedur yang memanfaatkan parameter input dan parameter output} Deklarasi real alas, tinggi, luas; prosedur Hit_Luas_segi_3 (Input real a, t; output real Is; ); Deskripsi write (Masukkan alas segitiga : ); read (alas); write (Masukkan tingginya : ); read (tinggi); Hit_Luas_segi_3 Hit Luas segi 3 (alas, tinggi, luas ); write (Luas segitiga = ,luas); Prosedur Hit_Luas_segi_3 (input real a, t; output real Is; ) {prosedur menghitung luas segi_3, menerima a (alas) dan t (tinggi), mengembalikan ls (luas) } Deklarasi {} Deskripsi ls a * t/2.0; luas ls; 77
Contoh 3 : Algoritma berikut menunjukkan pemakaian parameter masukan dan parameter keluaran yang digunakan untuk prosedur yang melakukan pertukaran nilai variabel.
Algoritma Tukar_nilai {menukar nilai dua variabel yang dilakukan oleh suatu prosedur dengan parameter input/output} Deklarasi integer A B; A,B; prosedur Tukar (in-out integer a,b ); Deskripsi write (Masukkan nilai A : ); read (A); write (Masukkan nilai B : ); read (B); Tukar (A,B); write (Setelah ditukar : ); write (A = ,A, B = ,B); Prosedur Tukar (i - out iinteger a, b ) P d T k (in t t {prosedur yang melaksanakan pertukaran nilai} Deklarasi integer temp; Deskripsi temp a; a b; b temp;
78
39
Fungsi :
Fungsi pada hakekatnya serupa dengan prosedur dalam pelaksanaannya, tetapi harus mengembalikan suatu nilai ke program yang menggunakan fungsi. Prosedur hanya bisa mengembalikan nilai melalui parameter input/output (in-out). Bentuk Umum : Fungsi nama_fungsi (pameter formal ) {spesifikasi fungsi} Deklarasi {variabel lokal} Deskripsi {langkah/proses yang dilakukan oleh fungsi} {pengembalian nilai} return hasil. tipe_hasil
79
Contoh 4 : Algoritma berikut adalah contoh yang melaksanakan fungsi matematika, sbb. : f(x) = x2 + 8x + 10
Fungsi F (input real x ) real {menghitung nilai fungsi f(x) = x^2 + 8x + 10} Deklarasi real y; Deskripsi y x*x + 8* + 10 * 8*x return y;
Contoh 5 : Algoritma berikut adalah algoritma yang menggunakan fungsi untuk mengganti bulan dalam angka (misal 3) menjadi nama bulan (misal Maret)
Algoritma Tanggal_Lahir {algoritma ini memanggil fungsi untuk menampilkan nama bulan} Deklarasi integer tanggal, bulan, tahun; string nama_bulan; fungsi Nama_bulan (input integer bln ) Deskripsi write (tanggal : ); write (bulan : ); write (tahun : ); read (tanggal); read (bulan); read (tahun); string;
40
fungsi Nama_bulan (input integer bln) string {fungsi yang mengembalikan nama bulan berdasarkan angka bulan} Deklarasi string nama_bln; fungsi digit (input integer d) Deskripsi case (bln) 1. : nama_bln Januari; 2. : nama_bln Februari; 3. : nama_bln Maret; 11. : nama_bln November ; 12. : nama_bln Desember; endcase. return nama_bln; string;
81
SOAL :
1. 2. Susun Algoritma untuk penggunaan fungsi untuk menterjemahkan angka menjadi kata, mula-mula untuk angka 1 digit positif. Selanjutnya, teruskan untuk menterjemahkan angka maksimum 2 digit (maksimum 99) ke dalam kata. Angka tersebut harus dipisah menjadi d2 untuk puluhan dan d1 untuk satuan, dengan cara sebagai berikut : d2 angka \ 10; yaituhasil bagi bulat dari angka dengan 10 d1 angka % 10; yaitu sisa pembagian dari angka dengan 10 Misal angka 25, maka d2 = 2 dan d1 = 5. Kemudian d2 diterjemahkan ke kata dan ditambah kata puluh disampung dengan terjemahan d1 dalam kata sehingga : angka = digit(d2) + puluh + digit(d1) Susun Algoritma yang menunjukkan pemakaian fungsi untuk menampilkan angka bulat (maksimum 4 digit) dalam bentuk kalimat, misal :
3.
82
41
TEKNIK PENCARIAN
Pendahuluan :
Pencarian elemen (searching) merupakan proses fundamental dalam pemrograman. Berbagai proses dalam aplikasi memerlukan searching, antara lain : Proses editing (perbaikan dan peremajaan data) selalu didahului dengan pencarian akan posisi data yang akan diedit. Proses inserting (penyisipan data) memerlukan searching posisi di mana suatu data akan di i i k k disisipkan, Program pengolah kata (word atau text processing) menyediakan fasilitas Find, Replace, dan Goto yang pada hakekatnya memerlukan teknik pencarian. Definisi persoalan pencarian elemen dalam larik adalah sebagai berikut : Diberikan sebuah larik A yang elemen-elemennya sudah ditetapkan. Terdapat sebuah elemen x yang bertipe sama dengan elemen larik A. Selanjutnya, akan dicari apakah ada elemen dalam A yang bernilai sama dengan x. Bila ada, maka tampilkan bahwa x ditemukan. Diberikan sebuah larik A yang sudah terisi penuh. Terdapat sebuah elemen x yang bertipe sama dengan elemen larik A. Selanjutnya, akan dicari apakah ada elemen dalam larik A yang bernilai sama dengan x. Bila ada maka tentukan posisinya (indeks) dari elemen tersebut. Bila terjadi sebaliknya, nyatakan indeks=0. Diberikan sebuah larik yang terisi penuh. Kemudian, ada sebuah elemen x yang bertipe sama dengan elemen larik A sehingga akan dicari apakah ada elemen dalam larik A yang bernilai sama dengan x. Bila ada maka berikan nilai true kepada suatu variabel logis (Boolean). Bila tidak ada maka berikan nilai false kepada variabel tersebut.
84
42
Beberapa metoda pencarian yang akan dibicarakan pada bagian ini adalah : Pencarian secara beruntun (sequential atau linear search). Pencarian dengan teknik sentinel. Pencarian bagi dua (binary search).
85
Algoritma Sequential_V.1 {sorted dan akan menampilkan kalimat bila elemen ditemukan} Deklarasi integer integer integer Deskripsi {baca elemen matriks A} for ( indeks = 1 to m step 1) write (Masukkan elemen ke-,indeks); read (A[indeks]); endfor. {baca elemen x} write (Masukkan elemen x :); read (x); {mencari x dalam A} indeks 1; while (indeks <= m && x!= A[indeks]) do indeks indeks + 1; endwhile. {menetapkan hasilnya} if (x=A[indeks]) then write (x ditemukan ); else write (x tidak ditemukan ); endif. 86 m=10; A[m], x; indeks;
43
Algoritma Sequential_V.2 {algoritma pencarian beruntun di mana elemen-elemen A tidak sorted dan akan ditampilkan posisi atau indeks bila elemen ditemukan} Deklarasi integer integer integer Deskripsi {baca elemen matriks A} for ( indeks = 1 to m step 1) write (Masukkan elemen ke-,indeks); read (A[indeks]); endfor. {baca elemen x} write (Masukkan elemen x :); read (x); {mencari x dalam A} indeks 1; while (indeks <= m && x!= A[indeks]) do indeks indeks + 1; endwhile. {menetapkan hasilnya} posisi 0 if (x=A[indeks]) then posisi endif. write (posisi = ,posisi); m=10; A[m], x; indeks, posisi;
indeks; 87
Algoritma pencarian beruntun versi_3 berikut menggunakan peubah logik (boolean) di mana nilai peubah ini false bila data tidak ada dalam larik, dan true bila data ditemukan dalam larik.
Algoritma Sequential_V.3 {algoritma pencarian beruntun, dimana elemen-elemen A tidak sorted dan akan ditetapkan variabel boolean apakah true atau false} Deklarasi integer integer integer boolean Deskripsi {baca elemen matriks A} for ( indeks = 1 to m step 1) write (Masukkan elemen ke-,indeks); read (A[indeks]); endfor. {baca elemen x} write (Masukkan elemen x :); read (x); {mencari x dalam A} indeks 1; while (indeks <= m && x!= A[indeks]) do indeks indeks + 1; endwhile. 88 m=10; A[m], x; indeks; ketemu;
44
true;
Adakalanya elemen-elemen dalam larik A sudah diurutkan (sorted) sehingga akan terdapat sedikit perbedaan dalam proses pencariannya.
Algoritma Sequential_V.4 {algoritma pencarian beruntun, dimana elemen-elemen A sorted dan akan ditampilkan kalimat bila elemen ditemukan} Deklarasi integer integer integer Deskripsi {baca elemen matriks A} for d k f ( iindeks = 1 t m step 1) to t write (Masukkan elemen ke-,indeks); read (A[indeks]); endfor. {baca elemen x} write (Masukkan elemen x :); read (x); 89 m=10; A[m], x; indeks;
{mencari x dalam A} indeks 1; while (indeks <= m && x < A[indeks]) do indeks indeks + 1; endwhile. {menetapkan hasilnya} if (x=A[indeks]) then write (x ditemukan ); else write (x tidak ditemukan ); (x ); endif.
90
45
Pencarian dengan Sentinel : Sentinel pada hakekatnya adalah elemen fiktif yang ditambahkan ke dalam suatu larik pada posisi terakhir yang nilainya sama dengan nilai dari elemen yang dicari. Pada proses pencarian ada dua kemungkinan, yaitu : Elemen ditemukan pada posisi indeks antara 1 sampai m (indeks maksimum). Artinya, elemen yang dicari benar ada di dalam larik. Atau, elemen ditemukan pada posisi indeks (m+1) atau elemen sentinel. Artinya, sebenarnya elemen yang dicari tidak ada di dalam larik.
Algoritma Sentinel_Search {melakukan pencarian dengan menambahkan elemen sentinel} Deklarasi integer integer integer Deskripsi {menambahkan sentinel} A[m+1] x; {mulai pencarian} indeks 1; while ( x != A[indeks]) do indeks indeks+1; endwhile. {menetapkan hasil} if (indeks < m+1) then write (x ditemukan pada posisi , indeks ); else write (x tidak ditemukan dalam larik ); endif. m=10; A[m+1], x; indeks;
92
46
93
Algoritma Binary_Search {pencarian elemen dengan metoda bagi dua} Deklarasi integer integer integer boolean Deskripsi idx1 1; idx2 m; ketemu false; while ( !ketemu && (idx1 < idx2) ) do {menghitung titik tengah} indeks (idx1 + idx2)/2; if ( x = A[indeks] ) then ketemu true; else if ( x > A[indeks] ) ;{ } then idx1 indeks + 1; {sisi kanan} else idx2 indeks 1; {sisi kiri} endif. endif. endwhile. if ( ketemu ) then write (x ketemu di posisi : , indeks); else write ( x tidak ditemukan ); endif. 94 m=10; A[m], x; idx1, idx2, indeks; ketemu;
47
TEKNIK PENGURUTAN
Pendahuluan :
Pengurutan (shorting) adalah proses yang mengatur sekumpulan obyek/data sehingga nilainya tersusun, apakah berurut menaik (ascending) dari kecil ke besar atau berurut menurun (descending) dari besar ke kecil. Contoh : [ 23 30 45 52 67 ] data integer ascending g g [ 67 48 50 25 17 ] data integer descending [ Amir Badu Charles Daud ] data string ascending <991023, Eko, A> <991055, David, B> <991075 Abdu, C> record mhs ascending Ada dua katagori pengurutan, yaitu : Pengurutan internal pengurutan yang dilaksanakan hanya dengan menggunakan memori komputer, pada umumnya bila jumlah elemen tidak terlalu banyak. Pengurutan eksternal pengurutan yang dilaksanakan dengan bantuan virtual memori atau harddisk karena jumlah elemen yang akan diurutkan terlalu banyak. Terdapat sejumlah teknik pengurutan, tetapi di sini akan dibahas 3 macam, yaitu : Teknik Gravitasi. Teknik Minimum dan Maksimum (MiniMax). Teknik Penyisipan (Insertion).
96
48
Teknik Gravitasi :
Teknik Gravitasi adalah suatu teknik yang merupakan variasi dari teknik gelembung (Bubble Sort) yang pernah dibahas pada bagian terdahulu. Teknik ini memanfaatkan sifat gravitasi di mana yang berat (bernilai besar) akan turun ke bawah. Mulai dari indeks = 1, bandingkan A[1] dengan A[2]. Bila A[1] lebih berat, maka adakan penukaran tempat. Selanjutnya indeks = 2 dan bandingkan A[2] dengan A[3]. Bila A[2] lebih berat A[3] berat, adakan penukaran tempat. Lakukan seterusnya sehingga semua nilai yang berat turun ke bawah. Contoh, andaikan A = [ 25 27 10 8 76 21 ]
Putaran 1 :
[ 25 10 27 8 76 21 ] [ 25 10 8 27 76 21 ] [ 25 10 8 27 21 76 ] [ 10 25 8 27 21 76 ] [ 10 8 25 27 21 76 ] [ 10 8 25 21 27 76 ] [ 8 10 25 21 27 76 ] [ 8 10 21 25 27 76 ]
Putaran 2 : P t
Putaran 3 :
Putaran 4 :
Apabila larik A memiliki m buah elemen, dimana setiap kali ada dua elemen yang dibandingkan maka pada hakekatnya jumlah putaran maksimum adalah (m-1) kali. Pada setiap putaran, elemen terberat akan menempati posisi terbawah sehingga pada putaran berikutnya jumlah elemen yang harus dibandingkan selalu berkurang satu. Prosedurnya sebagai berikut :
Prosedur Teknik_Gravitasi (in-out integer A[ ], input integer m) {mengurutkan data dengan teknik gravitasi} Deklarasi integer Deskripsi maks m; for ( putaran = 1 to m - 1 step 1) for ( indeks = 1 to maks - 1 step 1) if ( A[indeks] > A[indeks + 1] ) then temp A[indeks]; A[indeks] A[indeks + 1]; A[indeks + 1] [ ] temp; p; endif. endfor. maks maks - 1; endfor. putaran, indeks, jum_elemen, temp;
98
49
Teknik MiniMax :
Teknik MiniMax merupakan suatu prosedur yang memilih elemen terkecil (minimum) atau yang terbesar (maksimum) untuk ditempatkan pada posisi yang sesuai dengan tujuan pengurutan. Andaikan suatu larik akan diurutkan ascending, maka prosedurnya sebagai berikut : Mula-mula, ambil elemen terakhir A[m], kemudian carilah elemen terbesar di antara elemen-elemen lainnya ( A[1] sampai A[m-1] ). y [ ] p [ ]) Andaikan elemen pada posisi x adalah yang terbesar, bandingkan A[x] dengan A[m]. Bila A[x] > A[m] maka lakukan penukaran posisi; yang terbesar ada posisi m. Berikutnya, ambil elemen satu dari terakhir A[m-1]. Kemudian, cari elemen terbesar di antara elemen lainnya ( A[1] sampai A[m-2] ). Andaikan diperoleh A[y] terbesar, maka tukarkan dengan A[m-1] Demikian seterusnya hingga semua elemen telah diproses. Contoh, andaikan A = [ 25 27 10 8 76 21 ]
Putaran 1 : Ambil A[6] yaitu 21, kemudian cari yang terbesar di antara A[1] sampai A[5]. [ ]y , y g [ ] p [ ] Diperoleh bahwa A[5] = 76 merupakan yang terbesar. Oleh karena 76 > 21, adakan penukaran tempat sehingga :
A = [ 25 27 10 8 21 76 ]
Putaran 2 : Ambil A[5] yaitu 21, kemudian cari yang terbesar di antara A[1] sampai A[4]. Diperoleh bahwa A[2] = 27 merupakan yang terbesar. Oleh karena 27 > 21, adakan penukaran tempat sehingga :
A = [ 25 21 10 8 27 76 ]
99
Putaran 3 :
Ambil A[4] yaitu 8, kemudian cari yang terbesar di antara A[1] sampai A[3]. Diperoleh bahwa A[1] = 25 merupakan yang terbesar. Oleh karena 25 > 8, adakan penukaran tempat sehingga :
A = [ 8 21 10 25 27 76 ]
Putaran 4 : Ambil A[3] yaitu 10, kemudian cari yang terbesar di antara A[1] sampai A[2]. Diperoleh bahwa A[2] = 21 merupakan yang terbesar. Oleh karena 21 > 10, adakan penukaran tempat sehingga :
100
50
Prosedur Sort_MiniMax (in-out integer A[ ], input integer m) {mengurutkan larik dengan metoda maksimum} Deklarasi integer integer Deskripsi { mula-mula maksimum ada pada A[m] } mula mula imaks m; { lakukan putaran sebanyak m 1 kali } for ( putaran = 1 to (m 1) step 1) { cari yang terbesar diantara A[1] hingga A[m-putaran] } for ( idx = 1 to m-putaran step 1) if ( A[idx] > A[max] ) then { tukar tempat } temp A[imax]; A[imax] A[idx]; A[idx] temp; endif. endif endfor. { ambil elemen berikutnya } imax imax - 1; endfor. imax, temp; putaran, idx;
101
Teknik Penyisipan :
Teknik Penyisipan pada prinsipnya adalah mengambil satu elemen berurut dari posisi awal satu per satu untuk disisipkan pada urutannya yang tepat. Prosedurnya adalah sebagai berikut : Mula-mula, anggap A[1] sudah memiliki posisi yang tepat. Ambil A[2], dan bandingkan dengan A[1]. Bila A[2] lebih kecil, maka lakukan penggeseran elemen ke kanan, atau A[1] geser ke A[2], dan nilai A[2] yang tadi disisipkan pada A[1] A[1]. Ambil A[3], dan sisipkan pada posisi antara A[1] dan A[2]. Lakukan hal yang sama untuk elemen-elemen selanjutnya. Contoh, andaikan A = [ 25 27 10 8 76 21 ]
Putaran 1 : Putaran 2 : A[1] = 25, ambil A[2] = 27, bandingkan dengan A[1], posisi sudah tepat. Ambil A[3] = 10, bandingkan dengan A[1] dan A[2], geser A[1] ke A[2], geser A[2] ke A[3] dan sisipkan A[3] ke A[1] sehingga :
A = [ 10 25 27 8 76 21 ]
Putaran 3 : Ambil A[4] = 8, tempatkan pada posisi diantara A[1] sampai A[3], geser A[1] hingga A[3] ke A[4] dan A[4] masuk ke A[1] sehingga :
A = [ 8 10 25 27 76 21 ]
Putaran 4 : Putaran 5 : Ambil A[5] = 76, bandingkan dengan yang lain, posisinya sudah tepat. Ambil A[6] = 21, bandingkan dengan yang lain, geser A[3] ke belakang, sisipkan A[6] pada posisi A[3] sehingga : A = [ 8 10 21 25 27 76 ] Pada putaran ini, larik A sudah terurut ascending.
102
51
Prosedur Sort_Insertion (in-out integer A[ ], input integer m) {mengurutkan larik dengan metoda penyisipan} Deklarasi integer Deskripsi for ( posisi = 2 to m step 1) x A[posisi]; idx 1; { cari posisinya } while ( x > A[idx] && idx < posisi ) do idx idx + 1; endwhile { sisipkan pada posisi yang tepat } if ( x <= A[idx] ) then ( geser ke kanan ) for { k = posisi to idx+1 step -1 } A[k] A[k-1]; endfor. endfor A[idx] x; endif. endfor. x, posisi, idx;
103
SOAL :
Buat sebuah algoritma lengkap yang melakukan beberapa langkah berikut ini : Membaca 100 record data Nama, Alamat, dan Nomor_Telepon. 2. Melakukan pengurutan terhadap 100 record tersebut ascending berdasarkan Nama 3. Menampilkan daftar Nomor_Telepon urut menurut Nama, hasil pengurutan data.
104
52
OPERASI MATRIKS
Pendahuluan :
Matriks adalah larik dua dimensi, memiliki dimensi baris dan dimensi kolom. Ada beberapa jenis matriks, antara lain : Matriks bujursangkar adalah matriks yang memiliki jumlah baris sama dengan jumlah kolom. Matriks segiempat adalah matriks yang jumlah barisnya tidak sama dengan jumlah kolom. k l Matriks diagonal adalah matriks bujursangkar yang elemen-elemennya 0, kecuali elemen-elemen diagonal. Matriks identitas adalah matriks diagonal yang semua elemen diagonalnya bernilai 1. Matriks segitiga atas adalah matriks bujursangkar yang semua elemen di bawah diagonal 0. Matriks segitiga bawah adalah matriks bujur-sangkar yang semua elemen di atas diagonal 0. Beberapa operasi matriks yang akan dibahas adalah : Menjumlahkan dua matriks. Mengalikan dua matriks. Mencari determinan matriks. Melakukan transpose. Mencari inversi matriks. Menyelesaikan persamaan linear.
106
53
107
{baca elemen matriks B} for ( ibx = 1 to brs step 1) for (ikx=1 to klm step 1); read (B[ibx][ikx]]; endfor. endfor. {menjumlahkan matriks A dan B} for ( ibx = 1 to brs step 1) ( p ); for (ikx=1 to klm step 1); C[ibx][ikx] A[ibx][ikx] + B[ibx][ikx] endfor. endfor. {menampilkan matriks C} for (ibx=1 to brs step 1) for (ikx=1 to klm step 1); write ( C[ibx][ikx] ); endfor. write ( ); endfor.
108
54
109
Deskripsi {baca matriks A} for ( i=1 to brsA step 1 ) for ( k=1 to klmA step 1 ); read ( A[i][k] ); endfor. endfor. {baca elemen matriks B} for ( i=1 to brsB step 1 ) for ( j=1 to klmB step 1 ); read ( B[i][j]] ); endfor. endfor. {mengalikan matriks} for ( i=1 to brsA step 1) for ( j=1 to klmB step 1); C[i][j] 0; for ( k=1 to klmA step 1); C[i][j] = C[i][j] + A[i][k] * B[k][j]; endfor. endfor. endfor. {menampilkan hasil perkalian} for ( i=1 to brsA step 1 ) for ( j=1 to klmB step 1); write ( C[i][j] ); endfor. write ( ); endfor.
110
55
Determinan Matriks :
Determinan suatu matriks merupakan salah satu ukuran dari kekuatan elemenelemen dari matriks bujur sangkar. Proses menghitung dapat dipahami melalui serangkaian contoh berikut ini : Misal : A = [ a11 a12 a13 ] [ a21 a22 a23 ] [ a31 a32 a33 ] = a11.a22.a33 + a12.a23.a31 + a13.a21.a32 a31.a22.a13 a32.a23.a11 a33.a21.a12 = a11.a22.a33 + a12.a23.a31 + a13.a21.a32 a13.a22.a31 a11.a23.a32 a12.a21.a33 B = [ b11 [ b21 [ b31 [ b41 b12 b22 b32 b42 b13 b23 b33 b43 b14 ] b24 ] b34 ] b44 ]
Maka Det(A)
Misal
Maka Det(B)
111
Proses menghitung determinan matriks dapat dibagi dua yaitu : Menghitung perkalian suku positif, yang dimulai dengan perkalian semua elemen diagonal, b11.b22.b33.b44 dan seterusnya, kemudian perkalian elemen-elemen dengan indeks baris mulai dari 1, 2, 3 dan seterusnya yang diikuti indeks kolom mulai 2 dan seterusnya. Namun, setiap kali indeks kolom telah mencapai maksimum (m) maka dikembalikan ke indeks 1. Algoritma bagian positif ini dapat ditulis sebagai berikut :
for ( idx=1 to m step 1 ) pos[1] pos[1] * B[idx][klm]; endfor. for ( idx=2 to m step 1) klm idx; for ( brs=1 to m step 1 ) pos[idx] pos[idx] * B[brs][klm]; klm klm + 1; if ( klm > m ) then klm 1; endif. endfor. endfor.
112
56
Menghitung perkalian suku negatif, yang dimulai dengan perkalian elemen-elemen berindeks baris 1 hingga m, dan indeks kolom dimulai dari m dan menurun ke 1, misalnya b11.b24.b33.b42, kemudian b12.b21.b34.b43 dan seterusnya. Algoritmanya sebagai berikut :
for ( idx=1 to m step 1 ) klm idx; for ( brs=1 to m step 1) neg[idx] neg[idx] * B[brs][klm]; klm klm - 1; if ( klm < 1 ) then klm m; endif. endfor. endfor.
113
Deskripsi {baca elemen matriks} for ( brs=1 to m step 1 ) for ( klm=1 to m step 1 ); read ( B[brs][klm] ); endfor. endfor. {inisiasi nilai perkalian B} for ( idx=1 to m step 1 ) pos[idx] 1; neg[idx] 1; endfor. {perkalian positif} for ( idx=1 to m step 1) pos[1] pos[1] * B[brs][klm]; endfor. for ( brs=2 to m step 1); klm idx; for ( brs=1 to m step 1); pos[idx] pos[idx] * B[brs][klm]; klm klm + 1; if ( klm > m ) then klm 1; endif. endfor. endfor. 114
57
{perkalian negatif} for ( idx=1 to m step 1) klm idx; for ( brs=1 to m step 1); neg[idx] neg[idx] * B[brs][klm]; klm klm 1; if ( klm < 1 ) then klm m; endif. endfor. endfor. {menghitung hasil} for ( idx=1 to m step 1 ) D D + pos[idx] neg[idx]; endfor. write ( Determinan = , D );
115
Melakukan Transpose :
Transpose adalah proses mengubah posisi elemen matriks sehingga elemen baris menjadi elemen kolom dan sebaliknya. Misal : A = [ 12 5 9 10 ] [ 7 8 11 6 ] [ 4 10 3 2 ] Trans(A) = AT = [ 12 7 4 ] [ 5 8 10 ] [ 9 11 3 ] [ 10 6 2 ]
Algoritma Transpose_Matriks {melakukan Transpose Matriks} Deklarasi integer integer integer Deskripsi {baca elemen matriks} for ( ib=1 to idx1 step 1 ) for ( ik=1 to idx2 step 1 ); read ( A[ib][ik] ); endfor. endfor. idx1=3, idx2=4; A[idx1][idx2], AT[idx2][idx1]; ib, ik;
116
58
{Melakukan Transpose} for ( ib=1 to idx1 step 1 ) for ( ik=1 to idx2 step 1 ) AT[ik][ib] A[ib][ik]; endfor. endfor. {Menampilkan hasil} for ( ib=1 to idx2 step 1) for ( ik=1 to idx1 step 1) write ( AT[ib][ik]); endfor. endfor.
117
Pada hakekatnya, sebuah matriks bujursangkar dapat di transpose tanpa mendefinisikan suatu matriks baru (in-place transpose), tetapi di transpose pada tempatnya sendiri. Misal : A=[ 1 2 3 ] [ 4 5 6] [ 7 8 9] Trans(A) = AT = [ 1 4 7 ] [ 2 5 8] [ 3 6 9]
Perhatikan bahwa pada transpose elemen diagonal tidak berubah posisi. Elemen A[1][2] bertukar tempat dengan A[2][1], A[1][3] dengan A[3][1], dan A[2][3] dengan A[3][2].
Proses transpose berlangsung sebagai berikut : for ( ib=1 to idx1 step 1 ) for ( ik=ib+1 to idx2 step 1 ) if ( ib!= ik ) then temp A[ib][ik] A[ik][ib] [ ][ ] endif. endfor. endfor.
118
59
119
Dalam simbol matriks ditulis sebagai A.x = b, dimana A adalah matriks koefisien. Pada prinsipnya, ada banyak cara untuk menyelesaikan persamaan linear simultan. Namun, pada kesempatan ini akan dibahas dua teknik saja, yaitu metoda eliminasi Gauss, dan metoda eliminasi Gauss-Jordan. Metoda eliminasi Gauss, adalah metoda manipulasi yang mengeliminir (me-nol-kan) elemen-elemen matriks yang berada di bawah diagonal, sehingga matriks koefisien menjadi matriks segitiga atas sebagai berikut : [ a11 a12 a13 ] [ x1 ] [ b1 ] [ 0 a22 a23 ] [ x2 ] = [ b2 ] [ 0 0 a33 ] [ x3 ] [ b3 ] Kemudian, nilai variabel dapat dihitung dengan melakukan substitusi balik : x1 x2 x3 = = = b3 / a33; ( b2 a23.x3 ) / a22; ( b1 a12.x2 a13.x3 ) / a11;
Metoda Gauss-Jordan, adalah metoda manipulasi yang mengeliminir (me-nol-kan) elemen-elemen matriks koefisien sehingga tercipta matriks diagonal berikut : [ a11 0 0 ] [ x1 ] [ b1 ] [ 0 a22 0 ] [ x2 ] = [ b2 ] [ 0 0 a33 ] [ x3 ] [ b3 ]
120
60
Dengan demikian, nilai variabel dapat dihitung langsung, yaitu : x1 = b1 / a11; x2 = b2 / a22; x3 = b3 / a33; Proses eliminasi dapat dilakukan dengan mengurangkan elemen di bawah diagonal dengan nilai pada diagonal. Misalkan kita memiliki persamaan matriks sbg berikut : [ 10 2 [ 2 -5 [ -1 3 2 ] [ x1 ] [ 20 ] 4 ] [ x2 ] = [ 4 ] 5 ] [ x3 ] [ 20 ]
Elemen A[2][2] dapat di-nol-kan dengan cara mengurangkan baris dua dengan (2 / 10) kali baris pertama. Dengan kata lain : ambil m = A[2][1] / a[1][1] = 2 / 10 lalu A[2][1] = A[2][1] m * A[1][1] = 2 (2/10)*10 = 0 A[2][2] = A[2][2] m * A[1][2] = -5 (2/10)*2 = -5.4 A[2][3] = A[2][3] m * A[1][3] = 4 (2/10)*2 = 3.6 36 B[2] = B[2] m * B[1] = 4 (2/10)*20 = 0 untuk baris ketiga, ambil m = A[3][1] / A[1][1] = -1 / 10 lalu A[3][1] = A[3][1] m * A[1][1] = -1 + (1/10)*10 = 0 A[3][2] = A[3][2] m * A[1][2] = 3 + (-1/10)*2 = 2.8 A[3][3] = A[3][3] m * A[1][3] = 5 + (-1/10)*2 = 4.8 B[3] = B[3] m * B[1] = 20 (-1/10)*20 = 18
121
Dengan demikian, nilai variabel dapat dihitung langsung, yaitu : x1 = b1 / a11; x2 = b2 / a22; x3 = b3 / a33; Dengan demikian matriks menjadi : [ 10 2 2 ] [ x1 ] [ 20 ] [ 0 -5 4 3 6 ] [ x2 ] = [ 0 ] 5.4 3.6 [ 0 2.8 4.8 ] [ x3 ] [ 18 ] Eliminasi elemen A[3][2] menjadi : A[3][2] = 2.8 + ( -2.8 / 5.4 ) * 5.4 = 0 A[3][3] = 4.8 + ( 2.8 / 5.4 ) * 3.6 = 6 Maka diperoleh matriks segitiga atas : [ 10 2 2 ] [ x1 ] [ 20 ] [ 0 -5 4 3 6 ] [ x2 ] = [ 0 ] 5.4 3.6 [ 0 0 6 ] [ x3 ] [ 18 ] Dengan demikian, diperoleh : x3 x2 x1 = = = 18 / 6 = 3.0; ( 0 3.6*3 ) / 5.4 = 2.0; ( 20 2*2 2*3 ) / 10 = 1.0;
122
61
Algoritma Gauss {menyelesaikan persamaan linear simultan dengan teknik eliminasi Gauss} Deklarasi real integer real integer Deskripsi write (masukkan elemen matriks koefisien ); ( masukkan for ( ib=1 to brs step 1 ) for ( ik=1 to klm step 1 ); read ( A[ib][ik] ); endfor. endfor. write (masukkan nilai vektor ruas kanan ); for ( ib=1 to brs step 1 ) read ( B[ib] ); endfor. {proses eliminasii elemen matriks } { li i l t ik for ( ib=1 to brs-1 step 1 ) for ( ik=ib+1 to brs step 1 ); m - A[ik][ib] / A[ib][ib]; for ( il=ib to brs step 1 ); A[ik][il] A[ik][il] + m * A[ib][il]; endfor. B[ik] B[ik] + m * B[ib] endfor. endfor. m; brs=3, klm=3; A[brs][klm], B[brs], X[brs]; ib, ik, il;
123
{proses substitusi balik} X[brs] B[brs] / A[brs][brs] for ( ib=brs-1 to 1 step -1 ) X[ib] B[ib]; for ( ik=ib+1 to brs step 1 ) X[ib] X[ib][ik] * X[ik]; endfor. X[ib] X[ib] / A[ib][ib] endfor. {menampilkan hasil} for ( ib=1 to brs step 1) write ( x , ib, = , X[ib] ); endfor.
124
62
Algoritma Gauss_Jordan {menyelesaikan persamaan linear simultan dengan metode eliminasi Gauss Jordan yang melakukan eliminasi terhadap semua elemen, kecuali elemen diagonal} Deklarasi real integer real integer Deskripsi write (masukkan elemen matriks koefisien ); for ( ib=1 to brs step 1 ) for ( ik=1 to klm step 1 ); read ( A[ib][ik] ); endfor. endfor. write (masukkan nilai vektor ruas kanan ); for ( ib=1 to brs step 1 ) read ( B[ib] ); endfor. m; brs=3, klm=3; A[brs][klm], B[brs], X[brs]; ib, ik, il;
125
{proses eliminasi elemen matriks } for ( ik=1 to klm step 1 ) for ( ib=1 to brs step 1 ); {lakukan eliminasi kecuali diagonal} if ( ik != ib ) then m - A[ib][ik] / A[ik][ik]; for ( il=ik to klm step 1 ); A[ik][il] A[ik][il] + m * A[ib][il]; endfor. endfor B[ib] B[ib] + m * B[ik] endif. endfor. endfor. {penyelesaian} for ( ib=1 to brs step 1) X[ib] B[ib] / A[ib][ib] write ( x , ib, = , X[ib] ); endfor.
126
63
127
0 1 0
0] 0] 1]
Matriks ini dimanipulasi sehingga diperoleh : [1 [0 [0 0 1 0 0 | b11 b12 b13 ] 0 | b21 b22 b23 ] 1 | b31 b23 b33 ]
128
64
{matriks identitas adalah matriks B } for ( ib=1 to brs step 1 ) for ( ik=1 to klm step 1 ); if ( ib = ik ) then B[ib][ik] 1; else B[ib] 0; endif. endfor. endfor. {proses eliminasi} for ( ik=1 to klm step 1 ); for ( ib to brs step 1 ); {lakukan eliminasi kecuali diagonal} if ( ik != ib ) then m - A[ib][ik] / A[ik][ik]; for ( il=ik to klm ) A[ib][il] B[ib][il] endfor. endif. endfor. endfor.
129
{penyelesaian} {Jadikan matriks diagonal A menjadi matriks identitas} for ( ib=1 to brs step 1 ) A[ib][ib] 1; B[ib][ib] B[ib][ib] / A[ib][ib]; endfor. {tampilkan hasil} for ( ib=1 to brs step 1 ); for ( ik=1 to klm step 1) write ( B[ib][ik], endfor. write ( ); endfor.
);
SOAL :
1. Buat sebuah Algoritma yang menampilkan menu pilihan operasi matriks untuk memeriksa apakah matriks y g elemennya dimasukkan lewat keyboard adalah matriks p yang y y identitas, matriks segitiga atas, matriks segitiga bawah dan matriks diagonal.
130
65