Anda di halaman 1dari 65

Algoritma

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.

Data dan Program


Program merupakan algoritma yang ditulis dalam bahasa komputer. Di dalam menulis program, semua perintah mutlak dirinci agar dilaksanakan oleh komputer. Secara skematis unsur interaksi pada jaringan kerja bagi komputer, dapat g g digambarkan dalam diagram berikut : DATA KOMPUTER PROGRAM HASIL

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 bisa ditemukan dalam kehidupan sehari-hari : Proses


1. Membuat Kue 2. 2 Membuat Pakaian 3. Praktikum Kimia

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

Sifat Algoritma (lanjutan)

4. Finiteness : Suatu Algoritma harus memberi kondisi akhir atau output

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 1 : Berikut adalah suatu contoh struktur sebuah algoritma :


Algoritma Luas_Lingkaran {menghitung luas sebuah lingkaran apabila jari-jari lingkaran tersebut diberikan} Deklarasi {Definisi nama tetapan} const N=10; const phi=3.14; {definisi nama peubah/variabel} real jari_jari, luas; Deskripsi read(jari_jari); luas=phi*jari_jari*jari_jari; write(luas); ( );

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

{hitung nilai rata}

nilai_rata jumlah/N; write(nilai_rata);

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 :

Program Flowchart lanjutan :

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 :

Algoritma Dalam Bahasa Natural


1. 2. 3. 4. 5. 6. Ambil bilangan pertama dan set maks sama dengan bilangan pertama Ambil bilangan kedua dan bandingkan dengan maks Apa bila bilangan kedua lebih besar dari maks, set maks sama dengan bilangan kedua Ambil blangan ketiga dan bandingan dengan maks Apabila bilangan ketiga lebih besar dari maks, set maks sama dengan bilangan ketiga Variabel maks berisi bilangan terbesar. Tayangkan hasilnya

Algoritma dengan Flowchart


Mulai Maks = bilangan pertama

Maks < bilangan kedua

Ya

Maks = bilangan kedua

Tidak

Maks < bilangan ketiga

Ya

Maks = bilangan ketiga

Tidak

Selesai

Algoritma dengan pseudo-code


maks bilangan pertama if (maks < bilangan kedua)
maks bilangan kedua

if (maks < bilangan ketiga)


maks bilangan ketiga

TIPE DATA, VARIABEL, NILAI DAN EKSPRESI

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.

A False False True True False True False True

A and B False False False True

A or B False True True True

Not A True True False False

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);

Algoritma tersebut menampilkan hasil = 20

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);

Dengan urutan yang diubah, algoritma menampilkan hasil = 10

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;

write (maksimum = , maks);

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

Perulangan Repeat - until :


Bentuk Umum : repeat instruksi instruksi until (kondisi) kondisi Y N Instruksi-instruksi

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

Larik Asli Setelah Geser Kanan Setelah Geser Kiri

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.

Menampilkan isi dari matriks 4x5 di atas adalah sebagai berikut :


Algoritma Tampilkan_Isi_Matriks {algoritma menampilkan isi matriks 4 x 5} Deklarasi const b i 4 k l t baris=4, kolom=5; 5 integer brs, kol; integer A[baris][kolom]; Deskripsi for (brs=1 to baris step 1); for (kol=1 to kolom step 1); write (Masukkan nilai B : ); endfor. write ( ); 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.

Prosedur untuk menampilkan elemen-elemen matriks berdimensi N x M adalah sebagai berikut :


prosedur Tampil_Matriks (input integer N, input integer M, input integer A[ ]) {prosedur untuk menampilkan isi matriks berdimensi N x M} Deklarasi integer brs, kol; Deskripsi for (brs=1 to N step 1); for (kol=1 to M step 1); write (A[brs][kol] ); endfor. endfor. 67

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 DAN FUNGSI

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

Bentuk Umum Prosedur (Subprogram) :


Prosedur nama_prosedur {spesifikasi dari prosedur, keadaan awal sebelum prosedur dilaksanakan dan juga keadaan akhir setelah prosedur dilaksanakan} Deklarasi {deklarasi variabel-variabel prosedur} Deskripsi {deskripsi dari tugas tugas prosedur} tugas-tugas

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;

{semua prosedur harua di deklarasikan}

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

Variabel Lokal dan Variabel Global :


Penggunaan prosedur pada suatu program menyebabkan munculnya dua katagori variabel, yaitu variabel lokal dan variabel global. Variabel Lokal adalah variabel yang hanya dikenal dan berlaku dalam suatu prosedur saja. Variable Global adalah variabel yang berlaku di semua bagian program dan di semua prosedur. Semua variabel yang didefinisikan pada deklarasi suatu prosedur adalah variabel lokal, dan variabelvariabel yang didefinisikan pada deklarasi algoritma utama adalah variabel global. Program yang menggunakan banyak variabel global terasa memudahkan karena tak perlu lagi mendefinisikan variabel dalam prosedur. Namun, jika terdapat terlalu banyak variabel global, program akan sulit di-debug (cari kesalahan) dan memerlukan memosi yang lebih besar.

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;

nama_bulan Nama_bulan (bulan); write (tanggal, -,nama_bulan,-,tahun); 80

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).

Pencarian secara Beruntun (sequential atau linear search) :


Pencarian secara beruntun dilakukan dengan cara memeriksa elemen larik satu per satu mulai dari indeks=1 hingga indeks di mana elemen tersebut ditemukan. Bila indeks maksimum telah dilampaui maka berarti elemen tersebut tidak ditemukan. Contoh : Andaikan larik A = [20 15 18 35 40 27], dan x = 18. Bila A diperiksa mulai dari indeks=1 maka akan ditemukan pada indeks=3. Namun bila x=45, maka pemeriksaan tidak berhasil menemukan, karena hingga indeks=6 elemen ini tetap tidak ditemukan. Algoritma pencarian secara beruntun versi_1 adalah algoritma untuk data yang tidak berurut (unsorted) dengan tampilan x ditemukan atau x tidak ditemukan. (unsorted), x ditemukan x ditemukan Demikian juga Algoritma berikutnya adalah pencarian secara beruntun versi_2 yang dapat digunakan pada data yang tidak berurut (unsorted). Hasilnya adalah posisi = 0 apabila data tidak ditemukan, dan posisi = letak data tersebut dalam larik apabila ditemukan.

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

{menetapkan hasilnya} if (x=A[indeks]) then ketemu endif. write ( ketemu );

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 larik.
Algoritma Sentinel_Search {melakukan pencarian dengan menambahkan elemen sentinel} Deklarasi integer integer integer Deskripsi {menambahkan sentinel} A[m 1] 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;

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

Pencarian Bagi Dua (Binary search) :


Pencarian bagi dua adalah teknik yang diterapkan hanya pada elemen larik yang telah terurut (sorted). Pencarian beruntun memiliki satu kekurangan, yaitu dalam kasus terburuk (elemen yang dicari berada pada posisi terakhir), maka pencarian harus dilakukan sepanjang larik. Semakin banyak elemen maka semakin lama pencarian yang harus dilakukan. Proses pencarian bagi dua dilakukan sebagai berikut : Abaikan jumlah elemen adalah m maka tetapkan indeks=m/2 sehingga larik terbagi m, dua, yaitu bagian kiri dengan indeks dari 1 sampai m/2, dan bagian kanan dengan indeks (m/2)+1 hingga m. Periksa dulu apakah x = A[indeks]. Bila ya, berarti elemen ditemukan. Bila tidak, teruskan ke langkah berikutnya. Periksa apakah x > A[indeks]. Bila ya, maka cari di sisi kanan. Bila tidak maka cari di sisi kiri. Teruskan pencarian pada sisi yang tepat dengan mengambil indeks tengah dari sisi tersebut, sampai elemen ditemukan atau tidak sama sekali. Contoh : Andaikan larik A = [ 7 10 13 16 18 21 76 81], dan x = 10. Pada contoh ini, jumlah elemen m = 8 sehingga indeks = 8/2 = 4 dan A[4] = 16. Namun, x tidak sama dengan A[4]. Periksa, apakah x > A[4], atau x > 16. Jika jawabannya tidak, periksa sisi kiri. Pada sisi kiri indeks = (1 + 4) / 2 = 2, sehingga A[2] = 10. Ternyata x = A[2] sehingga elemen ditemukan dalam dua langkah.

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 27 10 8 76 21 ] menjadi [ 25 10 27 8 76 21 ] menjadi [ 25 10 8 27 76 21 ] menjadi [ 25 10 8 27 21 76 ] menjadi j di [ 10 25 8 27 21 76 ] menjadi [ 10 8 25 27 21 76 ] menjadi [ 10 8 25 21 27 76 ] menjadi [ 8 10 25 21 27 76 ] menjadi

[ 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 :

[ 8 10 21 25 27 76 ] larik A sudah berurut ascending


97

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 :

A = [ 8 10 21 25 27 76 ] Pada putaran ini, ternyata larik A sudah terurut ascending

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

Menjumlahkan Dua Matriks :


Dua matriks hanya bisa dijumlahkan apabila dimensinya sama. Andaikan matriks A dan matriks B akan dijumlahkan menjadi matriks C, maka rumus umumnya : C[i,j] A[i,j] + B[i,j] yang berarti hanya elemen pada posisi sama yang dapat dijumlahkan. Contoh : andaikan A=[ 2 3 4] B= [ 6 3 7] [ 5 8 6] [ 9 2 5] [ 1 7 9] [ 4 1 8] C = [ 8 6 11 ] [ 14 10 11 ] [ 5 8 17 ]
Algoritma Jumlah_Matriks {menjumlahkan dua matriks} Deklarasi ti t brs=3, klm=3; const integer b 3 kl 3 integer A[brs][klm] B[brs][klm]; integer ibx, ikx; Deskripsi {baca matriks A} for ( ibx = 1 to brs step 1) for (ikx=1 to klm step 1); read ( A[ibx][ikx] ); endfor. endfor.

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

Mengalikan Dua Matriks :


Dua buah matriks dapat dikalikan hanya apabila jumlah kolom dari matriks pertama sama banyaknya dengan jumlah baris dari matriks kedua. Matriks A [ 3 x 4 ] bisa dikalikan dengan matriks B [ 4 x 5 ], menjadi C [ 3 x 5 ] Matriks A [ 4 x 5 ] tidak bisa dikalikan dengan matriks B [ 3 x 4 ] Rumus perkalian matriks C = A x B adalah C [ i,j ] = A [ i,j ] x B [ k,j ]. Contoh : A=[ 1 2 3 4] B=[ 2 3 4 7 5] [ 5 8 9 7] [ 6 8 1 9 3] [ 3 5 8 6] [ 2 7 3 8 4] [ 3 5 2 9 6] Misal : C[1][2] = A[1][1]*B[1][2] + A[1][2]*B[2][2] + A[1][3]*B[3][2] + A[1][4]*B[4][2] = 1x3 + 2x8 + 3x7 + 4x5 = 60 C[2][5] = A[2][1]*B[1][5] + A[2][2]*B[2][5] +A[2][3]*B[3][5] + A[2][4]*B[4][5] = 5x5 + 8x3 + 9x4 + 7x6 = 127
Algoritma Perkalian_Matriks {mengalikan dua buah matriks C = A x B} Deklarasi integer integer integer brsA=3, klmA=4, brsB=4, klmB=5; A[brsA][klmA], B[brsB][klmB]; i, k, j;

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)

= b11.b22.b33.b44 + b12.b23.b34.b41 + b13.b24.b31.b42 + b 14.b21.b32.b43 b14.b23.b32.b41 b11.b24.b33.b42 b12.b21.b34.b43 b13.b22.b31.b44

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.

Secara lengkap algoritma untuk menghitung determinan adalah sebagai berikut :


Algoritma Determinan_Matriks { {menghitung nilai determinan sebuah matriks bujur sangkar} g g j g } Deklarasi integer integer integer m=4; B[m][m], pos[m], neg[m]; idx, brs, klm, D=0;

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.

A[ib][ik]; A[ik][ib]; temp; p;

118

59

Menyelesaikan Persamaan Linear Simultan :


Persamaan Linear Simultan adalah suatu sistem persamaan yang terdiri atas lebih dari satu variabel dan melibatkan lebih dari satu persamaan di mana semua variabel dalam order-1 (linear). Tujuan persamaan Linear simultan adalah mencari nilai variabel yang terkait sedemikian rupa sehingga memenuhi semua persamaan yang ada. Secara t iti agar dapat diselesaikan maka sebuah persamaan linear simultan S teoritis, d t di l ik k b h li i lt harus memiliki persamaan yang minimal sama dengan banyaknya variabel yang tidak diketahui nilainya. Bentuk umum suatu persamaan linear simultan dengan tiga variabel (x1, x2, dan x3) adalah sebagai berikut : a11.x1 + a12.x2 + a13.x3 = b1 a21.x1 + a22.x2 + a23.x3 = b2 a31.x1 + a23.x2 + a33.x3 = b3 Bentuk umum diatas dapat diterjemahkan menjadi bentuk matriks sebagai berikut : [ a11 a12 a13 ] [ x1 ] [ b1 ] [ a21 a22 a23 ] [ x2 ] = [ b2 ] [ a31 a32 a33 ] [ x3 ] [ b3 ]

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

Mencari Inverse (kebalikan) Matriks :


Mtriks Inverse A-1 adalah suatu matriks yang apabila dikalikan dengan matriks aslinya A akan menghasilkan identitas I, atau A.A-1 = I Apabila matriks invers ini diandaikan sebagai matriks B, maka persamaan menjadi A.B = I sehingga matriks B bisa diselesaikan dengan metoda eliminasi GaussJordan. [ a11 a12 a13 ] [ b11 b12 b13 ] 11 12 13 [1 0 0] [ a21 a22 a23 ] [ b21 b22 b23 ] = [ 0 1 0 ] [ a31 a32 a33 ] [ b31 b32 b33 ] = [ 0 0 1 ] Pada hakekatnya, apabila diperhatikan maka penyelesaiannya bisa diperoleh dengan melakukan proses eliminasi Gauss-Jordan sebanyak tiga kali, atau sejumlah kolom pada matriks B. Suatu cara lain yang berasal dari proses eliminasi dan telah dibuktikan berhasil adalah dengan membuat matriks A dan matriks I berdampingan. Kemudian, eliminasi Gauss-Jordan diterapkan ke kedua matriks tersebut sehingga matriks A Gauss Jordan pada akhirnya menjadi matriks identitas I, dan pada saat itu matriks I menjadi inverse dari matriks A.

127

[ a11 a12 a13 | 1 [ a21 a22 a23 | 0 [ a31 a23 a33 | 0

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 ]

Maka matriks B adalah Inverse dari matriks A.


Algoritma Balik_Matriks {menerapkan metoda Gauss-Jordan untuk mencari invers dari suatu matriks} Deklarasi real integer i t 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. m; brs=3, klm=3; b 3 kl 3 A[brs][klm], B[brs][klm]; ib, ik, il, faktor;

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.

A[ib][il] + m * A[ik][il]; B[ib][il] + m * B[ik][il];

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

Anda mungkin juga menyukai