MA2251 Komputasi Matematika
Transcript of MA2251 Komputasi Matematika
WD
2010
______________________________________________________________________________________________Warsoma Djohan / Prodi. Matematika FMIPA-ITB / MA2251/2010/ 1
PPrrooppeerrttyy ooff
DDrrss.. WWaarrssoommaa DDjjoohhaann MM..SSii.. JJuurruussaann MMaatteemmaattiikkaa
IInnssttiittuutt TTeekknnoollooggii BBaanndduunngg
No dan nama mata kuliah : MA2251 Komputasi Matematika Buku rujukan : 1. An Introduction to Computer Science An Algorithm Approach Jean-Paul Trembley & Richard B. Bunt Tujuan: Mempelajari teknik-teknik algoritma prosedural & Satu Bahasa Pemrograman
WD
2010
______________________________________________________________________________________________Warsoma Djohan / Prodi. Matematika FMIPA-ITB / MA2251/2010/ 2
MENGAPA MENGGUNAKAN KOMPUTER ?
78403626 45152877 73303981 64775158 49166357
73584068 64407002 84322475 63548373 81143182
72557110 27392580 83231098 84889679 46313323
23089154 85275899 37845237 89358252 52696355
50459049 25668561 58872132 76548944 52622308
58408306 89297464 27855520 62789142 36084136
75244290 82224888 61796553 46845906 67286093
31645556 35192540 56460959 74396318 41668346
84149189 57879565 86775524 50542142 76141380
89628467 22819152 29052750 39141124 31782567
43975931 59814899 83077525 68264729 21246893
74767351 62312366 84223706 77075028 69621147
62881317 47240199 46375555 64010972 58250775
81111032 40456819 56099649 57340322 80961462
77581816 30385754 68560812 58435604 43920344
67464362 23618084 25714987 68641770 64490911
♦ Tentukan bilangan terbesar dan terkecil dari data di atas. ♦ Tentukan banyaknya data yang terletak diantara 40000000 dan
60000000 ♦ Urutkan data di atas dari yang terkecil sampai yang terbesar
WD
2010
______________________________________________________________________________________________Warsoma Djohan / Prodi. Matematika FMIPA-ITB / MA2251/2010/ 3
Sistem Persamaan Linear berukuran besar
505050,5033,5022,5011,50
35050,333,322,311,3
25050,233,222,211,2
15050,133,122,111,1
bxaxaxaxa
bxaxaxaxabxaxaxaxabxaxaxaxa
=++++
=++++=++++=++++
Hampiran Nilai Integral dengan Metode Trapesium
∑∫=
− +++++=n
inn
h xfxfxfxfxfdxxf0
12102
5.3
5.0))()(2)(2)(2)(( )(
WD
2010
______________________________________________________________________________________________Warsoma Djohan / Prodi. Matematika FMIPA-ITB / MA2251/2010/ 4
DATA AKUISISI MESIN TENUN
WD
2010
______________________________________________________________________________________________Warsoma Djohan / Prodi. Matematika FMIPA-ITB / MA2251/2010/ 5
DIAGRAM BLOK SISTEM KOMPUTER Pada diagram di atas, garis putus-putus menyatakan aliran kontrol
sedangkan garis penuh menyatakan aliran data.
CPU
Arithmetic &
Logic Unit
Main Memory Input Device
Output Device
Control Unit
WD
2010
______________________________________________________________________________________________Warsoma Djohan / Prodi. Matematika FMIPA-ITB / MA2251/2010/ 6
Memory a. Internal Memory
Disebut juga main memory / random access memory (RAM). Merupakan rangkaian elektronik berupa sebuah chipset. Wadah untuk menampung semua data yang akan diolah komputer. Bersifat temporer, data akan hilang bila komputer dimatikan. Main memory terbagi atas ruang-ruang kecil yang disebut word. Word merupakan ukuran terkecil untuk satu satuan data / instruksi. Setiap word selalu terurut berdasarkan nomor/address.
Address 0 1 2 3 4 Isi memory 01001101 11010110 10011111 01101110 10101010
b. External Memory
Disebut juga secondary memory. Contoh: Harddisk, disket, magnetik tape, cdrom, cdrw, dan lain-lain. Digunakan untuk merekam / backup data. Bersifat permanen, isi tidak akan berubah bila tidak diubah.
Arithmetic & Logic Unit (ALU) Merupakan otak dari komputer. Berfungsi untuk melakukan semua operasi aljabar dan logika. Perhitungan dilakukan dalam suatu wadah yang disebut accumulator.
Input Device / Alat Masukan Interface untuk memasukan data ke memory komputer. Contoh: punch card reader, papan ketik, disket, harddisk, tape, dll.
Output Device / Alat Keluaran Interface untuk mengeluarkan data dari memory komputer. Contoh: layar, printer, disket, harddisk, tape, dll.
Control Unit Bagian yang mengatur semua aliran data di dalam komputer. Control unit bersama-sama ALU disebut Central Processing Unit
(CPU)
WD
2010
______________________________________________________________________________________________Warsoma Djohan / Prodi. Matematika FMIPA-ITB / MA2251/2010/ 7
BAHASA PEMROGRAMAN KOMPUTER
Bahasa mesin merupakan bahasa yang secara langsung dapat dijalankan oleh komputer. Instruksinya berupa rangkaian digit/angka biner.
Bahasa asembli mempunyai fungsi yang sama dengan bahasa mesin, tetapi instruksinya menggunakan kata-kata sederhana (mnemonic). Setiap instruksi berkorespondensi 1-1 dengan instruksi mesin. Untuk dijalankan pada komputer perlu diterjemahkan dulu ke bahasa mesin. Penterjemahnya disebut Assembler.
Bahasa tingkat tinggi, menggunakan kalimat-kalimat yang mirip bahasa sehari-hari. Penterjemahan ke dalam bahasa mesin dilakukan oleh Compiler. Tiap instruksi umumnya berpadanaan dengan beberapa/banyak instruksi bahasa mesin. Contoh: Fortran, Basic, Pascal, Algol, PL/I, PL/C, ADA, C dll.
Catatan: Program yang ditulis dalam bahasa mesin dan asembli mempunyai waktu komputasi yang jauh lebih cepat, relatif terhadap program sama yang ditulis dalam bahasa tingkat tinggi.
Bahasa Mesin . . . . 1001 01011000 11100101 00110101
11111001 11001001 11101110 . . . .
Bahasa Asembli MOV AH, FF7 ADD AH, AL STR 8, A73 MOV DH, CL JMP AL, F5
INT 27, AH Bahasa Pascal For i := 1 to 100 Do Begin a := a + b; c := c * b – 100; b := b – 1; End; s := s + a; Repeat s := s – 1; Writeln (s:10:5); Until s <= -3;
Bahasa Basic 10 a = 10 20 b = 20 30 For i = 1 to 1000 step 5 40 a = a -1 50 b = b + 0.5 60 Next i 70 Print a, b
WD
2010
______________________________________________________________________________________________Warsoma Djohan / Prodi. Matematika FMIPA-ITB / MA2251/2010/ 8
SISTEM KOMPUTER DENGAN BAHASA MESIN
Word 0
Word 1
. . .
Word 31
SPESIFIKASI CPU : 1 accumulator
Memory : 32 word 1 word 8 bit
Instruksi/perintah: word 0 – word 24
Data: word 25 – word 31
Kode operasi Operand Arti Perintah
000 xxxxx Load: Mengcopy isi address yang ditunjuk oleh operand ke accumulator
001 xxxxx Store: Mengcopy isi accumulator ke address yang ditunjuk oleh operand
010 xxxxx Add: Menambahkan isi accumulator dengan isi address yang ditunjuk operand dan hasilnya disimpan di accumulator
011 xxxxx Substract: Mengurangkan isi accumulator dengan isi address yang ditunjuk operand dan hasilnya disimpan di accumulator.
100 xxxxx Move: Mengisi accumulator dengan nilai operand 101 xxxxx Branch if not zero: bila isi accumulator tidak sama
dengan nol, instruksi melompat pada address yang ditunjuk operand
111 xxxxx Stop: Menghentikan proses komputasi
Format instruksi:
Operation Code Operand
WD
2010
______________________________________________________________________________________________Warsoma Djohan / Prodi. Matematika FMIPA-ITB / MA2251/2010/ 9
CONTOH-CONTOH PROGRAM DALAM INSTRUKSI MESIN
Contoh 1
word 0 100 00010 Isi accumulator dengan angka 2
word 1 001 11111 Copy isi accumulator ke address 31
word 2 100 00101 Isi accumulator dengan angka 5
word 3 010 11111 Tambahkan isi address 31 ke isi accumulator
word 4 001 11110 Copy isi accumulator ke address 30
word 5 111 00000 stop
Contoh 2
word 0 100 10000
word 1 001 11111
word 2 100 01001
word 3 001 11110
word 4 000 11111
word 5 011 11110
word 6 001 11101
word 7 111 11111
Contoh 3
word 0 100 01010
word 1 001 11111
word 2 100 00001
word 3 001 11110
word 4 100 00000
word 5 001 11001
word 6 000 11111
word 7 010 11001
word 8 001 11001
word 9 000 11111
word 10 011 11110
word 11 001 11111
word 12 101 00110
word 13 111 11001
Pelajari setiap contoh di atas
dan tabelkan setiap perubahan
isi accumulator dan address data
WD
2010
______________________________________________________________________________________________Warsoma Djohan / Prodi. Matematika FMIPA-ITB / MA2251/2010/ 10
TIPE-TIPE DATA STANDARD
Integer / Bilangan bulat. • Terdiri dari rangkaian angka/digit 0 sampai 9 • Penulisan bilangan bulat negatif diawali dengan simbol minus
Real • Terdiri dari rangkaian digit 0 sampai 9, dilengkapi dengan satu buah
titik desimal diantara rangkaian digit tersebut. • Penulisan bilangan real negatif diawali dengan simbol minus • Notasi penulisan: fixed point dan floating point.
String / Character • Terdiri dari satu/beberapa rangkaian karakter/simbol • Penulisan dengan diapit tanda petik/apostrophe tunggal • Simbol-simbol yang dapat digunakan diatur tabel kode ASCII /
EBCDIC
Boolean / Logical • Hanya bernilai true atau false • Umumnya diperoleh dari operasi pembandingan dua nilai
Pointer • Belum dapat dijelaskan sekarang, akan dibicarakan dibelakang
Catatan: Setiap data numerik/string memiliki batas minimum dan maksimum. Lebih lanjut, panjang mantisa sebuah bilangan real juga terbatas.
-63
492 7830
200 -68342
123.45
34982.
-72.341 0.364E04
'347'
'W' 'MatEmaTiKa'
'As245W_# ?@' true false
WD
2010
______________________________________________________________________________________________Warsoma Djohan / Prodi. Matematika FMIPA-ITB / MA2251/2010/ 11
EKSPRESI
• Rangkaian operasi / hitungan yang menghasilkan sebuah nilai. • Operand-operand dalam suatu ekspresi harus bertipe sama, kecuali
operand integer dan real dapat dicampur (hasilnya real) • Berdasarkan jenis hasil operasinya, suatu ekspresi diberi istilah ekspresi
integer, ekspresi real, ekspresi string dan ekspresi logika. • Operator-operator untuk ekspresi numerik (integer dan real):
Jenis Operasi Simbol Operator Hirarki Pangkat ^ 1
Kali * 2 Bagi / 2
tambah + 3 Kurang - 3
Dua buah operator dengan hirarki sama akan dievaluasi dari kiri ke kanan kecuali untuk operator pangkat, dievaluasi dari kanan ke kiri.
• Tanda kurung dapat dipakai untuk memprioritaskan suatu sub-ekspresi
-18 – 128
-18 – 2 * 64
-4 / 2 * 3 ^ 2 – 2 * 2 ^ 2 ^ 3
-4 / 2 * 9 – 2 * 2 ^ 2 ^ 3
-4 / 2 * 9 – 2 * 64
-2 * 9 – 2 * 64
-4 / 2 * 9 – 2 * 2 ^ 8
-146
10 – 4 * 2 + 3
10 – 8 + 3
2 + 3
6
10 – 4 * 2 + 3
-4 / 2 * 3 ^ 2 – 2 * 2 ^ 2 ^ 3
34527
WD
2010
______________________________________________________________________________________________Warsoma Djohan / Prodi. Matematika FMIPA-ITB / MA2251/2010/ 12
VARIABEL dan PENUGASAN
• Variabel merupakan kotak memori yang digunakan untuk menyimpan
data.
• Atribut sebuah variabel: nama, tipe/jenis dan isi/nilai nama variabel : pengenal antara pemrogram dengan komputer. tipe/jenis variabel: mencirikan tipe data yang disimpannya. isi/nilai variabel: nilai data yang disimpan oleh variabel.
• Aturan nama variabel: Terdiri dari rangkaian karakter-karakter dengan panjang minimum satu. Karakter pertama harus huruf, diikuti dengan huruf / angka / underscore. Huruf kapital dan huruf kecil tidak dibedakan (dianggap sama).
• Proses pengisian sebuah variabel melalui sebuah ekspresi disebut penugasan/assignment. Format penugasan adalah sbb:
<nama-variabel> := <ekspresi>
• Isi sebuah variabel dapat diganti-ganti setiap saat dan yang disimpan adalah data pada pengisisan terakhir
A B C
10 20 2 ^ 3 + A + 3 * B
R1
1.2345
R2
0.1E+2
R2
’M281’
VI
345
A := 10
B := 20
C := 2 ^ 3 + A + 3 * B
WD
2010
______________________________________________________________________________________________Warsoma Djohan / Prodi. Matematika FMIPA-ITB / MA2251/2010/ 13
FUNGSI PUSTAKA
♦ Fungsi Pustaka, disebut juga built-in function / intrinsic function, adalah
fungsi-fungsi khusus yang telah disediakan oleh komputer. ♦ Fungsi pustaka dapat langsung dipakai dalam suatu ekspresi. ♦ Parameter untuk fungsi-fungsi trigonometri adalah radian. ♦ Contoh: ♦ Latihan: Tuliskan ekspresi berikut dengan benar
Nama fungsi Keterangan ABS (x) Menghitung nilai mutlak dari x SQRT (x) Akar pangkat dua dari x TRUNC (x) Bilangan bulat terbesar yang lebih kecil atau sama
dengan x ROUND (x) Bilangan bulat terbesar yang lebih kecil atau sama
dengan (x + 0.5) LN (x) Logaritma natural dari x (basis e) EXP (x) exp (x), ex SIN (x) sinus dari x COS (x) cosinus dari x TAN (x) tangen dari x
A := 10.0 B := 3.14159 C := sin (A) + 3 * sin (B) B := round (C) – exp (A-B)
)(exp1
513)4.23(ln19
116532
5.2
3
+
++
++
WD
2010
______________________________________________________________________________________________Warsoma Djohan / Prodi. Matematika FMIPA-ITB / MA2251/2010/ 14
A L G O R I T M A
Algoritma adalah rangkaian terurut instruksi-instruksi yang disusun untuk menyelesaikan suatu masalah dan mempunyai karakteristik: a. Setiap instruksi dalam algoritma harus jelas dan bermakna
unik/tunggal. b. Seluruh rangkaian instruksi harus selesai dalam waktu yang
berhingga. c. Bersifat umum, artinya dapat dipakai menyelesaikan berbagai
masalah yang tipenya serupa tanpa perlu dimodifikasi.
Komponen-komponen sebuah algoritma: a. Masukan / Input b. Langkah-langkah c. Keluaran / Output
Penulisan algoritma: a. Diagram Alir / Flow Chart. b. Kode Semu / Pseudo Code
Cara langsung (sukar)
Penyelesaian dalam bentuk algoritma
Problem
Implementasi pada komputer
WD
2010
______________________________________________________________________________________________Warsoma Djohan / Prodi. Matematika FMIPA-ITB / MA2251/2010/ 15
ALGORITMA MENGGANTI LAMPU PIJAR
Versi 1.
1. Lepaskan lampu yang putus. 2. Pasangkan lampu yang baru.
Versi 2.
1. Ambil tangga dan posisikan di bawah lampu yang putus. 2. Ambil lampu baru dengan daya (watt) yang sama. 3. Panjat tangga tersebut sampai lampu dapat diraih. 4. Putar lampu dengan arah berlawanan putaran jarum jam sampai
terlepas. 5. Posisikan lampu-baru pada soketnya. 6. Putar lampu searah dengan putaran jarum jam sampai kencang. 7. Turun dari tangga.
Versi 3.
1. Ambil tangga dan posisikan di bawah lampu yang putus. 2. Ambil sebuah lampu pijar dari kotak. 3. Jika daya dari lampu yang diambil tidak cocok maka
ulangi proses berikut sampai diperoleh lampu yang dikehendaki Kembalikan lampu pijar yang diambil ke dalam kotak. Ambil lampu pijar yang lain dari dalam kotak.
4. Ulangi sampai lampu pada langit-langit terjangkau naiki tangga sebanyak satu step.
5. Ulangi proses sampai lampu terlepas dari soketnya putar lampu dengan arah berlawanan putaran jarum jam.
6. Posisikan lampu-baru pada soketnya. 7. Ulangi sampai kedudukan lampu-baru kencang
Putar lampu searah dengan putaran jarum jam. 8. Turun dari tangga.
WD
2010
______________________________________________________________________________________________Warsoma Djohan / Prodi. Matematika FMIPA-ITB / MA2251/2010/ 16
DIAGRAM ALIR
Penulisan algoritma dilakukan dengan menggunakan diagram-diagram. Setiap diagram mewakili satu instruksi / perintah tertentu. Urutan perintah dalam suatu algoritma digambarkan dengan anak panah
(dari suatu diagram ke diagram yang lain). Tidak cocok untuk penulisan algoritma yang panjang karena
menimbulkan kerumitan. Dari segi struktur pemrograman tidak dianjurkan untuk dipakai karena
bentuk penulisannya jauh berbeda dengan implementasinya pada bahasa pemrograman tertentu.
Sejak era tahun 1980-an penulisan dengan diagram alir mulai ditinggalkan, kecuali untuk menuliskan langkah-langkah global sebuah algoritma.
Penugasan Keputusan
Input / Masukan Output / Keluaran Start dan Stop
Pengulangan / loop
WD
2010
______________________________________________________________________________________________Warsoma Djohan / Prodi. Matematika FMIPA-ITB / MA2251/2010/ 17
Diagram alir untuk menentukan kelulusan seorang mahasiswa.
Pada sebuah pelajaran, dilakukan test sebanyak 4 kali dengan skala nilai 100. Algoritma berikut menghitung rata-rata dari keempat test tersebut dengan bobot sama. Bila nilai rata-ratanya < 50, maka mahasiswa tersebut gagal.
NR < 50 T
Y
‘Anda lulus’, ‘nilai: ‘, NR
‘Anda tidak lulus’, ‘nilai : ‘, NR
Selesai
Mulai
Test_1, Test_2, Test_3, Test_4
NR := (Test_1 + Test_2 + Test_3 + Test_4) / 4.0
• Pelajari diagram alir di atas dan gunakan data test untuk mengujinya.
WD
2010
______________________________________________________________________________________________Warsoma Djohan / Prodi. Matematika FMIPA-ITB / MA2251/2010/ 18
KODE SEMU / PSEUDO CODE
Penulisan menggunakan deskripsi kata-kata biasa. Bahasa yang
digunakan bebas, asalkan deskripsinya jelas.
Pola penulisan sudah menyerupai bahasa pemrograman.
Penulisan harus bersifat umum, artinya tidak terkonsentrasi pada bahasa pemrograman tertentu.
Setiap langkah diawali dengan komentar singkat yang dituliskan dalam kurung siku. Bila tujuan dari langkah tersebut sudah jelas, komentar ini boleh dihilangkan.
Banyak digunakan secara luas karena mempunyai struktur yang lebih baik dibandingkan dengan diagram alir dan penulisannya lebih sederhana.
1. [masukan / input berupa kedua sisi siku-siku] Read (Siku_1, Siku_2)
2. [menghitung kuadrat dari masing-masing sisi siku-siku] SQ1 := Siku_1 ^ 2 SQ2 := Siku_2 ^ 2
3. [menghitung panjang sisi miring] Hypotenusa := SQRT (SQ1 + SQ2)
4. [keluaran / output] Write ('panjang sisi miring = ', Hypotenusa)
5. [mengakhiri algoritma] Exit
22 ba +
b
a
WD
2010
______________________________________________________________________________________________Warsoma Djohan / Prodi. Matematika FMIPA-ITB / MA2251/2010/ 19
Pelacakan Algoritma / Algorithm Tracing
Pelacakan Algoritma adalah proses menjalankan algoritma tersebut lang-kah demi langkah secara detail sesuai dengan urut-urutannya.
Tujuan: untuk memeriksa aliran logika dan mencari kesalahan di dalam algoritma tersebut.
Pelacakan dilakukan dengan memberikan data uji pada bagian masukan.
Proses pelacakan perlu dilakukan beberapa kali dengan data uji yang ber-beda-beda. Data dipilih agar seluruh instruksi pada algoritma terlewati. Bila memungkinkan dipilih data uji yang jawabnya mudah/diketahui.
Proses pelacakan tidak pernah membuktikan bahwa sebuah algoritma su-dah benar. Hasil maksimal hanyalah memberikan kesimpulan bahwa kita tidak menemukan kesalahan pada algoritma tersebut.
Diskusi: Apakah algoritma Pythagoras sudah sempurna ? Bagaimana bila pada bagian masukan diberi data negatif ? Bagaimana caranya agar algoritma mampu menolak data negatif ?
Pelacakan algoritma Pythagoras
Langkah Siku_1 Siku_2 SQ1 SQ2 Hypo-tenusa
Output
1 3 4 ? ? ?
2 3 4 9 16 ?
3 3 4 9 16 5
4 3 4 9 16 5
panjang sisi miring = 5
WD
2010
______________________________________________________________________________________________Warsoma Djohan / Prodi. Matematika FMIPA-ITB / MA2251/2010/ 20
ALGORITMA GRADES
Algoritma ini membaca 4 buah nilai ujian (disimpan dalam variabel Test1, Test2, Test3 dan Test4) lalu menghitung rata-ratanya, disimpan pada variabel Rata_2. Hasilnya dicetak dengan disertai keterangan. Semua variabel diasumsikan bertipe real.
ALGORITMA REPORT
Diberikan data nama mahasiswa dan 3 buah nilainya, yaitu nilai praktikum, mid-test dan test-akhir. Bobot masing-masing nilai adalah 20%, 30% dan 50%. Algoritma ini menghitung nilai akhir dari data tersebut dan mencetaknya.
1. [membaca data masukan] Read (Test1, Test2, Test3, Test4]
2. [menghitung nilai rata-rata] Rata_2 := (Test1 + Test2 + Test3 + Test4) / 4
3. [mencetak hasil] Write ('Nilai akhir = ', Rata_2)
4. [mengakhiri algoritma] Exit
1. [masukan data] Read (Nama, Prak, MidTest, TAkhir)
2. [menghitung nilai akhir] NA := 0.2 * Prak + 0.3 * MidTest + 0.5 * TAkhir
3. [mencetak hasil] Write ('Nama mahasiswa :', Nama) Write ('Nilai praktikum :', Prak) Write ('Nilai MidTest :', MidTest); Write ('Nilai ujian akhir :', TAkhir) Write ('Nilai akhir :', NA)
4. [mengakhiri algoritma] Exit
WD
2010
______________________________________________________________________________________________Warsoma Djohan / Prodi. Matematika FMIPA-ITB / MA2251/2010/ 21
SOAL-SOAL LATIHAN 1
1. Buat algoritma untuk membaca dua buah bilangan bulat A dan B, lalu me-nukarkan isinya dan mencetak nilai dari A dan B tersebut.
2. Diberikan tiga buah bilangan bulat A, B dan C. Buat algoritma untuk melakukan permutasi isinya (isi A pindah ke B, isi B pindah ke C dan isi C pindah ke A). dan cetak hasilnya. Algoritma tidak boleh menggunakan variabel tambahan.
3. Dari sebuah percobaan diperoleh lima buah data .,,, 521 xxx Buat algoritma untuk menghitung nilai rata-rata dan standard deviasinya.
Rumus standard deviasi: ∑ −= 51
241 )( xxiσ , x adalah nilai rata-
ratanya.
4. Diberikan koefisien dari persamaan kuadrat Buat algorit-ma untuk menghitung diskriminan dari persamaan tersebut, lalu hitung akar-akarnya. Gunakan data uji sehingga nilai diskriminan tak negatif.
5. Gaji seorang sales mobil pada P.T. Libom adalah sebagai berikut: Gaji tetap Rp. 1.000.000,00 + komisi Rp 100.000,00 untuk setiap mobil yang terjual + 5% dari total harga mobil yang berhasil dijual. Buat sebuah algoritma yang membaca; nama sales, jumlah mobil yang terjual dan harga total penjualan mobil; lalu hitunglah gaji total sales tersebut serta cetak hasilnya.
6. Perhatikan sistem persamaan linear (SPL) 2 x 2 beserta rumus untuk men-cari solusinya
Buat algoritma untuk membaca koefisien serta menghitung dan mencetak solusinya.
7. Seekor kura-kura berlari dari garis start dengan kecepatan V1 cm/detik. k detik kemudian seekor kancil mulai berlari dari garis start dengan kece-patan V2 cm/detik. Buat algoritma untuk menentukan waktu yang diper-lukan kancil untuk menyusul kura-kura dan berapa jaraknya dari garis start. Ujilah algoritma tersebut dengan data-data berikut
a. V1= 3, V2=7 dan k=10. b. V1= 3, V2=3.1 dan k=10.
c. V1= 3, V2=3 dan k=10. d. V1=3, V2=2.5 dan k=10.
bdaebfcex
−−
=
⎩⎨⎧
==
++
fc
eyby
dxax
bdaecdafy
−−
=
.02 =++ cxbxa
fba ,,,
WD
2010
______________________________________________________________________________________________Warsoma Djohan / Prodi. Matematika FMIPA-ITB / MA2251/2010/ 22
BAHASA PASCAL
Pencipta:
Prof. Niklaus Wirth Eidgenossiche Technische Hochschule
Switzerland
1960
Keunggulan: Bahasa pemrograman prosedural dengan struktur paling baik
Mempunyai berbagai dialek Microsoft Pascal Waterloo Pascal
UCSD Pascal Turbo Pascal
Borland Pascal
WD
2010
______________________________________________________________________________________________Warsoma Djohan / Prodi. Matematika FMIPA-ITB / MA2251/2010/ 23
KERANGKA PROGRAM TURBO / BORLAND PASCAL
Huruf kapital dan huruf kecil dianggap sama.
Program pascal tidak terikat baris, akhir perintah ditandai dengan delimiter.
<Nama program> : Terdiri dari untaian karakter, maksimum 255 buah. Karakter pertama huruf. Karakter berikutnya: huruf / angka / underscore.
Deklarasi-deklarasi bersifat optional, artinya boleh tidak ada. Urutan / posisi penulisan deklarasi bebas, disesuaikan dengan keperluan.
Bagian Program utama diisi dengan instruksi-instruksi pascal.
Catatan: Setiap identifier / nama yang dideklarasikan / didefinisikan oleh pem-rogram mempunyai aturan yang sama dengan aturan pemberian nama program. Identifier-identifier tersebut antara lain: nama variabel, nama tipe, nama konstanta, nama fungsi, nama prosedur dan lain-lain.
Program <nama program>; Uses Dos, Crt ;
[ Deklarasi Konstanta ] [ Deklarasi Tipe ] [ Deklarasi Variabel ] [ Deklarasi Fungsi ] [ Deklarasi Prosedur ]
Begin End.
Program utama ( Main program )
Program nihil_1; Uses Dos, Crt ; Begin (* ini komentar *) End.
Program nihil_1; Uses
Dos,
Crt ; Begin (*
ini komentar *) End.
WD
2010
______________________________________________________________________________________________Warsoma Djohan / Prodi. Matematika FMIPA-ITB / MA2251/2010/ 24
TIPE-TIPE DATA PADA BORLAND PASCAL 7
Tipe-tipe bilangan real dapat mengalami overflow dan underflow
Overflow : nilai absolut bilangan terlampau besar melewati batas.
Underflow : nilai absolut bilangan terlampau kecil, akan dianggap nol.
Tipe data Range bilangan Ketelitian
(digit / angka)
Real ± (2.9E-39 ... 1.7E38) 11 – 12 Single ± (1.5E-45 ...3.4E38) 7 – 8 Double ± (5.0E-324 ... 1.7E308) 15 – 16 Extended ± (3.4E-4932 ... 1.1E4932) 19 – 20 Comp -9.2E18 ... 9.2E18 19 – 20
Tipe data Range angka Byte 0 ... 255 Word 0 ... 65535 ShortInt -128 ... 127 Integer -32768 ... 32767 LongInt -2147483648 ... 2147483647
'Matematika ITB'
'3456'
'US $ 500 # A @' 'MA-281'
String
True False
Boolean
'W' '$'
'_'
'&' '+'
Char
WD
2010
______________________________________________________________________________________________Warsoma Djohan / Prodi. Matematika FMIPA-ITB / MA2251/2010/ 25
V A R I A B E L
Format deklarasi / pemesanan variabel:
Bagian Keterangan hanya untuk menjelaskan fungsi dari variabel yang digunakan. Bila tidak diperlukan, tidak perlu ada.
Setiap variabel yang dipakai pada Pascal harus dipesan terlebih dahulu.
Aturan nama-variabel sama dengan aturan pada nama-program.
Dua buah / lebih variabel dengan tipe sama dapat ditulis dalam baris yang sama dengan dipisah koma.
Contoh-contoh:
Var <nama variabel 1> : <tipe data> ; (* keterangan 1 *) <nama variabel 2> : <tipe data> ; (* keterangan 2 *) <nama variabel 3> : <tipe data> ; (* keterangan 3 *) . . . <nama variabel n> : <tipe data> ; (* keterangan n *)
Var
Nama : String ; (* nama mahasiswa *) Test_1 : Real ; (* nilai test ke satu *) Test_2 : Real ; (* nilai test ke dua *) NR : Real ; (* nilai rata-rata *)
Var
k : Integer ; a, b, c : Real ; nama : String ; c1, c2 : Char ;
WD
2010
______________________________________________________________________________________________Warsoma Djohan / Prodi. Matematika FMIPA-ITB / MA2251/2010/ 26
O P E R A T O R – O P E R A T O R
• Pada Pascal tidak ada operator untuk pangkat.
• Penggunaan operator relasional dan logika akan dibahas di belakang. • Tentukan hasil dari ekspresi-ekspresi berikut:
Operator Aritmatika
Operator Fungsi Hirarki+ - tambah & kurang 2 * / kali & bagi-real 1 div mod bagi-integer & sisa pembagian-integer 1
Operator Relasional
Operator Fungsi Hirarki= <> sama dengan & tidak sama dengan 3 > >= lebih besar & lebih besar atau sama dengan 3 < <= lebih kecil & lebih kecil atau sama dengan 3
Operator Logika
Operator Fungsi Hirarki AND logika AND 4 OR logika OR 4
NOT logika NOT 4 XOR logika XOR 4
7 / 3 7 div 3 7 mod 3 17 div 3 mod 2 / 3
WD
2010
______________________________________________________________________________________________Warsoma Djohan / Prodi. Matematika FMIPA-ITB / MA2251/2010/ 27
BEBERAPA FUNGSI & PROSEDUR PUSTAKA PADA BORLAND PASCAL
Nama Fungsi Keterangan
Abs Returns the absolute value of the argument.
ArcTan Returns the arc tangent of the argument.
Chr Returns a character with a specified ordinal number.
Copy Returns a substring of a string.
Cos Returns the cosine of the argument (x is an angle, in radians).
Exp Returns the exponential of the argument.
Frac Returns the fractional part of the argument.
Length Returns the dynamic length of a string.
Ln Returns the natural logarithm of the argument.
Ord Returns the ordinal number of an ordinal-type value.
Pi Returns the value of Pi.
Pos Searches for a substring in a string.
Random Returns a random number.
Readkey Reads a character from the keyboard.
Round Reads a character from the keyboard.
Sin Returns the sine of the argument.
Sqr Returns the square of the argument.
Sqrt Returns the square root of the argument.
Trunc Truncates a real-type value to an Integer-type value
Nama Prosedur Keterangan
ClrScr Clears the screen and returns the cursor to the upper left corner.
Str Converts a numeric value to a string.
Val Converts a string value to its numeric representation.
WD
2010
______________________________________________________________________________________________Warsoma Djohan / Prodi. Matematika FMIPA-ITB / MA2251/2010/ 28
READ / READLN dan WRITE / WRITELN
Read / Readln
• Membaca data dan menyimpannya ke variabel. • Sumber data : papan ketik, data dari disket / harddisk. • Pada perintah Readln, setelah membaca lalu pindah baris.
Write / Writeln
• Mencetak hasil suatu ekspresi. • Target pencetakan : layar, printer, data file di disket / harddisk.
• Pada perintah Writeln, setelah mencetak lalu pindah baris.
Format:
Read (var1, var2, ..., varn); Readln (var1, var2, ..., varn); Write (ekspr1, ekspr2, ..., eksprn); Writeln (ekspr1, ekspr2, ..., eksprn);
Contoh 1 . . .
Write ('Masukan nilai A : '); Readln (A); Write ('Masukan nilai B : '); Readln (B); Write (A); Writeln (A+B, ' ', A-B); Write (B); . . .
Contoh 2 . . .
Write ('Masukan nilai A dan B: '); Readln (A, B); R := B / A; T := B mod A; Q := A * B + R; . . .
WD
2010
______________________________________________________________________________________________Warsoma Djohan / Prodi. Matematika FMIPA-ITB / MA2251/2010/ 29
FORMAT PENCETAKAN PADA BORLAND PASCAL
Program Format; Uses Dos, Crt; Var i : Integer; r1, r2 : Real; ch : Char; s : String; b : Boolean; Begin i := 317; r1 := 123.45; r2 := r1; ch := 'W'; s := 'Matematika'; b := r1 < i; Writeln (i:5); Writeln (r1:10:3, ' ', r2:15); Writeln (ch:5, ' ', s:15); Writeln (b:8); End.
11 22 33 44 55 66 77 88 99 00 11 22 33 44 55 66 77 88 99 00 11 22 33 44 55 66
33 11 77
11 22 33 .. 44 55 00 11 .. 22 33 44 55 00 00 00 00 00 EE ++ 00 22
WW MM aa tt ee mm aa tt ii kk aa
tt rr uu ee
WD
2010
______________________________________________________________________________________________Warsoma Djohan / Prodi. Matematika FMIPA-ITB / MA2251/2010/ 30
EDITOR BORLAND PASCAL
Catatan: Library CRT pada Borland Pascal mengandung error (bug) sehingga program yang telah di-kompilasi tidak dapat dijalankan pada komputer mikro yang berbasis processor Celeron / Pentium II dan Pentium III. Untuk mengatasinya, beberapa orang telah memebuat program patch –nya.
Beberapa perintah pada editor Borland Pascal yang sering digunakan <AlT> F - C mengubah directory yang aktif <F3> membuka / open file atau membuat file baru <F2> merekam / save file <Alt> <F3> menutup file yang aktif
<Alt> <F9> meng-kompilasi file yang aktif <Ctrl> <F9> menjalankan / run program
WD
2010
______________________________________________________________________________________________Warsoma Djohan / Prodi. Matematika FMIPA-ITB / MA2251/2010/ 31
INSTRUKSI KONDISIONAL
Instruksi kondisional digunakan bila terdapat bagian instruksi pada sebuah algoritma yang baru dijalankan bila suatu kriteria/kondisi tertentu dipenuhi.
Kriteria/kondisi yang diuji umumnya berupa ekspresi boolean, yaitu ekspresi yang nilainya true atau false.
Bentuk ekspresi boolean berupa pembandingan dua buah nilai. Contoh: 2 > 3, A > 10, B = 5+A, C <> 7+3*B
Catatan: Kesamaan dua buah ekspresi real, r1 dan r2, tidak pernah di-bandingkan dengan simbol 'sama dengan', tetapi menggunakan kriteria |r1 – r2| < eps dengan eps bilangan positif yang kecil.
ekspresi boolean
blok instruksi 1
blok instruksi 2
Y
T
ekspresi boolean
blok instruksi 1
Y
T
If <ekspresi boolean> Then blok
instruksi 1
If <ekspresi boolean> Then Else
blok instruksi 1
blok instruksi 2
WD
2010
______________________________________________________________________________________________Warsoma Djohan / Prodi. Matematika FMIPA-ITB / MA2251/2010/ 32
CONTOH PENGGUNAAN INSTRUKSI KONDISIONAL
Lakukan pelacakan pada algoritma display dengan menggunakan data berikut ini: (a) V1=10, V2=20 (b) V1=20, V2=10 (c) V1=10, V2=10
Lakukan pelacakan pada algoritma max_3. dengan menggunakan data berikut ini: (a) A=10, B=20, C=30 (b) A=20, B=30, C=10
(c) A=30, B=10, C=20 (d) A=20, B=20, C=10
(e) A=30, B=20, C=30 (f) A=20, B=20, C=20
Algoritma Display. Algoritma ini membaca dua buah bilangan bulat V1 dan V2, kemudian mencetak yang terbesar. 1. Read (V1, V2) 2. If v1 > V2 Then max := V1 Write ('bilangan pertama terbesar') Else max := V2 Write ('bilangan kedua terbesar') 3. Write ('nilai maksimumnya : ', max) 4. Exit
Algoritma Max_3. Algoritma ini membaca tiga buah bilangan bulat A, B, dan C, kemu-dian mencetak yang terbesar. 1. Read (A, B, C) 2. If A > B Then If A > C Then max := A Else max := C Else If B > C Then max := B Else max := C 3. Write ('bilangan terbesar bernilai : ', max) 4. Exit
WD
2010
______________________________________________________________________________________________Warsoma Djohan / Prodi. Matematika FMIPA-ITB / MA2251/2010/ 33
INSTRUKSI KONDISIONAL PADA BORLAND PASCAL
'blok instruksi 1' dan 'blok instruksi 2' dapat memuat blok instruksi kon-disional yang lain (nested).
Bila blok instruksi hanya terdiri dari satu perintah maka kata kunci 'Begin' dan 'End' boleh dihilangkan.
Instruksi If ... Then ... If <ekspresi boolean> Then Begin End;
blok instruksi 1
Instruksi If ... Then ... Else ... If <ekspresi boolean> Then Begin End Else Begin End;
blok instruksi 1
blok instruksi 2
Program Display; Uses Dos, Crt;
Var v1, v2 : Integer; max : Integer;
Begin ClrScr; Write ('Masukan dua buah bilangan bulat:'); Readln (v1, v2); If v1 > v2 Then Begin max := v1; Writeln ('bilangan pertama terbesar'); End Else max := v2; Writeln ('bilangan kedua terbesar'); End; Writeln ('bilangan terbesar bernilai : ', max);End.
WD
2010
______________________________________________________________________________________________Warsoma Djohan / Prodi. Matematika FMIPA-ITB / MA2251/2010/ 34
SOAL-SOAL LATIHAN 2 (Instruksi IF)
1. Diberikan koefisien dari persamaan kuadrat Buat algo-ritma untuk menghitung akar-akar realnya (bila ada).
2. Diberikan koefisien dari persamaan kuadrat Buat algo-ritma untuk menghitung semua akar-akarnya.
3. Diberikan tiga buah bilangan bulat A, B dan C. Buat algoritma untuk mencetak nilai maksimum dan minimumnya.
4. Sebuah perusahaan akan memberikan bonus pada pegawainya. Kriteria yang digunakan didasarkan pada tabel berikut:
Buat algoritma untuk membaca nama karyawan, jumlah jam lembur dan jumlah jam absennya, lalu menentukan dan mencetak jumlah bonusnya.
5. Perhatikan soal nomor 6 dari 'soal-soal latihan 1'. Modifikasilah algoritma tersebut agar menguji apakah 0=−bdae . Bila hal ini terjadi maka proses perhitungan solusi tidak perlu dilakukan.
6. Perhatikan soal nomor 7 dari soal-soal latihan 1. Modifikasilah algoritma tersebut agar menguji semua data masukan positif dan nilai V1 < V2.
7. Buat algoritma untuk membaca ketiga sisi dari sebuah segitiga (S1, S2, S3) dan menentukan jenis dari segitiga tersebut berdasarkan kriteria berikut: misalkan A nilai terbesar dari ketiga sisi tersebut dan B, C adalah sisi-sisi lainnya.
Jika A >= B + C maka segitiga tidak ada Jika A^2 = B^2 + C^2 maka segitiga siku-siku Jika A^2 > B^2 + C^2 maka segitiga tumpul Jika A^2 < B^2 + C^2 maka segitiga lancip
8. Buat algoritma untuk membaca sebuah bilangan bulat, lalu menentukan apakah bilangan tersebut kelipatan 8.
.02 =++ cxbxa
jumlah jam lembur – 2/3 * jam absen Bonus > 40 jam Rp. 1.000.000,00 > 30 jam tetapi <= 40jam Rp. 750.000,00 > 20 jam tetapi <= 30 jam Rp. 500.000,00 > 10 jam tetapi <= 20 jam Rp. 250.000,00 <= 10 jam Rp. 50.000,00
.02 =++ cxbxa
WD
2010
______________________________________________________________________________________________Warsoma Djohan / Prodi. Matematika FMIPA-ITB / MA2251/2010/ 35
INSTRUKSI PENGULANGAN (LOOP)
Pengulangan diperlukan untuk memproses sekumpulan instruksi yang ben-tuknya serupa dan perlu dilakukan beberapa kali. Ilustrasi: Pemrosesan data mahasiswa
menghitung Komponen-komponen pengulangan: Inisialisasi, blok instruksi, terrminasi.
Pengulangan For digunakan bila banyaknya blok yang diulang-ulang sudah diketahui. penghentian iterasi didasarkan pada nilai indeks terakhir. perubahan nilai indeks ditentukan dua suku pertama (indeks boleh turun).
Pengulangan While digunakan bila jumlah pengulangan belum diketahui. penghentian iterasi didasarkan pada hasil ekspresi boolean.
i := 1, 2, ..., n
Blok Instruksi
ekspresi boolean
Blok Instruksi
For i := 1, 2, ..., n
Blok Instruksi
While <ekspr. Boolean>
Blok Instruksi
n321n! ⋅⋅⋅⋅=
Y
T
WD
2010
______________________________________________________________________________________________Warsoma Djohan / Prodi. Matematika FMIPA-ITB / MA2251/2010/ 36
PENGULANGAN TUNGGAL DAN BERSARANG
Pengulangan bersarang / nested adalah sebuah pengulangan yang memuat pengulangan lain. Pada pengulangan bersarang, pengulangan yang satu harus seluruhnya terletak di dalam pengulangan yang lain. Indeks / counter yang digunakan oleh dua pengulangan yang bersarang harus berbeda. Sebuah pengulangan bersarang boleh berangkap lebih dari dua.
A := 0 B := 0 For i := -2,-1,...,10 A := A + i B := B + 1
i A B 0 0
-2 -2 1 -1 -3 2 0 -3 3 1 -2 4 2 0 5 3 3 6 4 7 7 5 12 8 6 18 9 7 25 10 8 33 11 9 42 12
10 52 13
A := 0 For i := 1,2,...,3 A := A + i^2 For j := 9,10,...,11 A := A + j
i j A 0
1 1 1 9 10 1 10 20 1 11 31 2 35 2 9 44 2 10 54 2 11 65 3 74 3 9 83 3 10 93 3 11 104
WD
2010
______________________________________________________________________________________________Warsoma Djohan / Prodi. Matematika FMIPA-ITB / MA2251/2010/ 37
CONTOH PENGGUNAAN PERINTAH PENGULANGAN
• Dapatkah algoritma Faktorial1 dan Faktorial2 dibuat lebih efisien ? • Lakukan pelacakan terhadap algoritma Faktorial1 dan Faktorial2 dengan
data: (a) n=4, (b) n=0, (c) n= -2 • Dapatkah algoritma yang menggunakan instruksi 'For' digantikan dengan
instruksi 'While' ? Bagaimana sebaliknya ? Mana yang lebih umum ?
Algoritma FAKTORIAL2 Algoritma ini membaca bilangan bulat n dan menghitung nilai faktorialnya.
1. Read (n) 2. Fak := 0; 3. i := 1; 4. While i <= n Fak := Fak * i i := i + 1; 5. Exit
Algoritma FAKTORIAL1 Algoritma ini membaca bilangan bulat n dan menghitung nilai faktorialnya.
1. Read (n) 2. Fak := 0; 3. For i := 1, 2, ..., n Fak := Fak * i 4. Exit
Ubahlah algoritma berikut dalam bentuk pengulangan For
1. i := 1 2. sum := 0; 3. While sum <= 100 sum := sum + 1.0/i i := i + 1 4. Write (sum)
Ubahlah algoritma berikut dalam bentuk pengulangan While
1. n := 10 2. sum := 0; 3. For i := 1, 2, ..., n
sum := sum + i 4. Write (sum)
WD
2010
______________________________________________________________________________________________Warsoma Djohan / Prodi. Matematika FMIPA-ITB / MA2251/2010/ 38
INSTRUKSI PENGULANGAN PADA BORLAND PASCAL
Instruksi Pengulangan FOR
For <counter> := <n> DownTo
To <m> Do
Begin End;
Blok Instruksi
Instruksi Pengulangan WHILE While <ekspresi boolean> Do Begin End;
Blok Instruksi
Instruksi Pengulangan REPEAT Repeat Until <ekspresi boolean> ;
Blok Instruksi
• counter, n dan m : data skalar • gunakan To bila indeks naik • gunakan DownTo bila indeks
turun.
• • •
Fak := 1; For i := 1 to n Do Begin Fak := Fak * i; End;
• • •
• • •
Fak := 1; i := 1; Repeat Fak := Fak * i; i := i + 1; Until i>n;
• • •
• • •
Fak := 1; i := 1; While i<=n Do Begin Fak := Fak * i; i := i + 1; End;
• • •
WD
2010
______________________________________________________________________________________________Warsoma Djohan / Prodi. Matematika FMIPA-ITB / MA2251/2010/ 39
SOAL-SOAL LATIHAN 3 (Instruksi PENGULANGAN)
1. Buat algoritma untuk menghitung 1 + 3 + 5 + ... + 99
2. Buat algoritma untuk menghitung 1 + 2 + 4 + 7 + 11 + ... + n, n<100
3. Buat algoritma untuk menghitung 1 * 3 * 5 * ... * 99
4. Buat algoritma untuk menghitung 1 * 2 * 4 * 7 * 11 * ... * n, n<100
5. Diketahui suatu deret Fibonacci sebagai berikut:
Buat algoritma untuk membaca nilai n lalu menghitung nilai Sn (Buat dua buah, dengan instruksi For dan While).
6. Akar sebuah bilangan real a dapat dihitung dengan cara menjalankan barisan sebagai berikut: S1 = 1, Sn+1 = ½ (Sn + a / Sn) untuk n>=1. Buat algoritma untuk menghitung akar dari 2. Proses dihentikan bila selisih dua suku yang berturutan dari barisan tersebut kecil dari 1.0E-6.
7. Perhatikan 'algoritma Report' yang telah dibahas di depan. Modifikasilah algoritma tersebut agar dapat dipakai memproses n buah mahasiswa. (n dibaca saat algoritma dijalankan).
8. Modifikasilah algoritma Report agar memproses terus menerus sampai nama mahasiswa yang dimasukan bernama 'END'.
9. Buat algoritma untuk membaca bilangan bulat n dan mengujinya apakah kelipatan delapan. Proses diulangi terus selama bilangannya bukan 0.
10. Modifikasilah 'algoritma Faktorial1' agar melakukan proses berulang-ulang sampai data yang dimasukan (n) bernilai 0.
11. Buat algoritma untuk membaca bilangan bulat n, kemudian menguji apa-kah bilangan tersebut bilangan prima atau bukan.
12. Suatu string disebut palindrome bila mempunyai struktur yang sama bila dibaca dari kanan maupun kiri. Contohnya: 'ABBA'. Buat algoritma untuk menguji apakah suatu string termasuk palindrome. Catatan: untuk mendapatkan panjang string, gunakan fungsi Length,
dan untuk mengakses elemen ke i dari string T, gunakan T[ i ].
Dari soal-soal di atas, tentukanlah yang tidak dapat dibuat dengan instruksi 'For'
3,1,1 2121 ≥+=== −− nSSSSS nnn
WD
2010
______________________________________________________________________________________________Warsoma Djohan / Prodi. Matematika FMIPA-ITB / MA2251/2010/ 40
INSTRUKSI KONDISIONAL MAJEMUK
Instruksi kondisional majemuk digunakan untuk mengevaluasi sebuah ekspresi yang terdiri dari dua buah / lebih ekspresi boolean.
Contoh:
Bandingkan algoritma Max_3 dan Max_3_Revisi1. Apakah kedua algoritma tersebut selalu memberikan hasil yang sama ?
Mana yang lebih efisien dari segi eksekusi di komputer ? Bolehkah tanda '>' dan '<' pada keduanya diganti '>=' dan '<=' ?
Tabel logika AND
c1 c2 c1 AND c2 true true true true false false false true false false false false
Tabel logika OR
c1 c2 c1 OR c2 true true true true false true false true true false false false
Tabel logika XOR
c1 c2 c1 XOR c2 true true false true false true false true true false false false
Tabel logika NOT
c1 NOT c1 true true false false
c1 dan c2 merupakan ekspresi boolean
Algoritma Max_3_Revisi1. Algoritma ini membaca tiga buah bilangan bulat A, B, dan C, kemudian mencetak yang terbesar.
1. Read (A, B, C) 2. If (A>B) AND (A>C) Then max := A 3. If (B>A) AND (B>C) Then max := B 4. If (C>A) AND (C>B) Then max := C 5. Write ('bilangan terbesar bernilai : ', max) 6. Exit
WD
2010
______________________________________________________________________________________________Warsoma Djohan / Prodi. Matematika FMIPA-ITB / MA2251/2010/ 41
DATA PRIMITIF DAN TAK-PRIMITIF
Data primitif adalah data yang strukturnya dapat dimanipulasi / diolah secara langsung oleh komputer / bahasa pemrograman. contoh: real, integer, string, boolean. Data tak-primitif adalah data yang tidak dapat secara langsung dimanipulasi oleh komputer / bahasa pemrograman. contoh: bilangan kompleks, vektor, matriks, record.
Catatan: Dua buah bahasa pemrograman yang berbeda ada ke-mungkinan memiliki data primitif yang berbeda. Sebagai contoh, pada bahasa Fortran, bilangan kompleks terma-suk data primitif, tetapi pada bahasa Pascal tidak.
p := 10.0 q := 20.0 r1 := p + q r2 := p – q r3 := p * q r4 := p / q
u := x + y i v := a + b i u + v := (x+a) + (y+b) i u – v := (x-a) + (y-b) i u * v := (x*a – y*b) + (x*b + y*a) i u / v := ((x*a + y*b) + (y*a – x*b) i) / (a*a + b*b)
),,,( 21 nxxxx =
⎥⎥⎥⎥
⎦
⎤
⎢⎢⎢⎢
⎣
⎡
=
44434241
34333231
24232221
14131211
aaaaaaaaaaaaaaaa
A
WD
2010
______________________________________________________________________________________________Warsoma Djohan / Prodi. Matematika FMIPA-ITB / MA2251/2010/ 42
ARRAY, MENGAPA DIPERLUKAN ?
Dapatkah algoritma di atas dimodifikasi untuk memproses kelas yang jumlah siswanya besar, misalkan 100 siswa ? Bagaimana jika jumlah siswa tidak diketahui dengan pasti, te-tapi hanya diberi ciri bahwa siswa terakhir bernama ’Pono’?
Algoritma Class_Stat Diberikan daftar lima orang siswa, masing-masing terdiri dari nama dan nilai ujiannya. Algoritma berikut menghitung nilai rata-ratanya dan mencetak nama-nama siswa yang nilainya diatas nilai rata-rata. 1. Read (nama1, nilai1, nama2, nilai2, nama3, nilai3, nama4, nilai4, nama5, nilai5) 2. Rata_2 := (nilai1 + nilai2 + nilai3 + nilai4 +
nilai5) / 5.0 3. If nilai1 > rata_2 Then Write (nama1) 4. If nilai2 > rata_2 Then Write (nama2) 5. If nilai3 > rata_2 Then Write (nama3) 6. If nilai4 > rata_2 Then Write (nama4) 7. If nilai5 > rata_2 Then Write (nama5) 8. Exit
nama1 Nia nilai1 48 nama2 Tuti nilai2 82 nama3 Ani nilai3 78 nama4 Nani nilai4 62 nama5 Irma nilai5 92 Rata_2 ? 72.4 Output Tuti Ani Irma
WD
2010
______________________________________________________________________________________________Warsoma Djohan / Prodi. Matematika FMIPA-ITB / MA2251/2010/ 43
DATA TERSTRUKTUR ARRAY
Array adalah data terstruktur yang terdiri dari satu nama, tetapi mempu-nyai beberapa kotak memori.
Setiap kotak memori pada array berfungsi sebagai sebuah variabel. Semua data pada kotak memori sebuah array harus bertipe sama. Elemen-elemen sebuah array diakses dengan menggunakan kurung siku. Contoh: A[1] := 10 i := 6
A[i] := a[i-1] + 3
B[2,5] := -213
B[i-3, i+1] := A[i] + B[i-1, 3]
Indeks awal suatu array tidak harus dimulai dari satu, boleh bebas.
Array dengan dengan satu indeks dinamakan vektor.
Array dengan dua indeks (dua dimensi) dinamakan matriks
A 17 56 837 451 -192 4 -3 24 31
1 2 3 4 5 6 7 8 9
B 1 17 56 837 451 -192 4 -3 24 31
2 45 12 -421 217 58 90 37 46 -652
3 66 34 45 -48 23 10 -2 24 61
4 -23 44 61 73 25 84 32 33 29
5 46 -57 -213 -38 -41 75 49 92 3
1 2 3 4 5 6 7 8 9
WD
2010
______________________________________________________________________________________________Warsoma Djohan / Prodi. Matematika FMIPA-ITB / MA2251/2010/ 44
Perubahan apa yang harus dilakukan bila siswa yang diproses berjumlah 100.
Algoritma Class_Stat_REV1 Diberikan daftar lima orang siswa, masing-masing terdiri dari nama dan nilai ujiannya. Algoritma berikut menghitung nilai rata-ratanya dan mencetak nama-nama siswa yang nilainya di atas nilai rata-rata. 1. For i := 1,2,...,5 Read (nama[i], nilai[i])
2. Rata_2 := 0 3. For i := 1,2,...,5 Rata_2 := Rata_2 + nilai[i]
4. Rata_2 := Rata_2 / 5 5. For i := 1,2,...,5 If nilai[i] > Rata_2 Then Write (nama[i])
6. Exit
i nama[i] nilai[i] Rata_2 Output 1 Nia 48 ? 2 Tuti 82 ? 3 Ani 78 ? 4 Nani 62 ? 5 Irma 92 ? 0 1 48 2 130 3 208 4 270 5 362
i nama[i] nilai[i] Rata_2 Output 72.4 1 2 Tuti 3 Ani 4 5 Irma
WD
2010
______________________________________________________________________________________________Warsoma Djohan / Prodi. Matematika FMIPA-ITB / MA2251/2010/ 45
Modifikasilah algoritma Class_Stat_Rev3 agar data siswa dibaca secara terus menerus dan berhenti bila yang dibaca bernama "Pono". Petunjuk: gunakan instruksi pengulangan while.
Algoritma Class_Stat_REV2 Diberikan daftar lima orang siswa, masing-masing terdiri dari nama dan nilai ujiannya. Algoritma berikut menghitung nilai rata-ratanya dan mencetak nama-nama siswa yang nilainya di atas nilai rata-rata. 1. n := 5 2. For i := 1,2,...,n Read (nama[i], nilai[i])
3. Rata_2 := 0 For i := 1,2,...,n Rata_2 := Rata_2 + nilai[i]
4. Rata_2 := Rata_2 / n 5. For i := 1,2,...,n If nilai[i] > Rata_2 Then Write (nama[i])
6. Exit
Algoritma Class_Stat_REV3 Diberikan daftar n siswa (n dibaca), masing-masing terdiri dari nama dan nilai ujiannya. Algoritma berikut menghitung nilai rata-ratanya dan mencetak nama-nama siswa yang nilainya di atas nilai rata-rata. 1. Read (n) 2. For i := 1,2,...,n Read (nama[i], nilai[i])
3. Rata_2 := 0 For i := 1,2,...,n Rata_2 := Rata_2 + nilai[i]
4. Rata_2 := Rata_2 / n 5. For i := 1,2,...,n If nilai[i] > Rata_2 Then Write (nama[i])
6. Exit
WD
2010
______________________________________________________________________________________________Warsoma Djohan / Prodi. Matematika FMIPA-ITB / MA2251/2010/ 46
ARRAY 1 DIMENSI PADA BORLAND PASCAL
Format Pendeklarasian Var <nama array> : Array [<n> <m>] of <tipe-data>; <n> dan <m> : data skalar. <tipe-data> : tipe-tipe data primitif / tipe-tipe data baru yang sudah dideklarasikan.
Program Class_Stat_Rev3;(* implementasi algoritma Class_Stat_Rev3 pada pascal *)Uses Dos, Crt;
Var n : Integer; (* banyaknya siswa yang diproses *) nama : Array [1..100] Of String; (* nama-2 siswa *) nilai : Array [1..100] Of Real; (* nilai-2 siswa *) Rata_2: Real; (* nilai rata-rata *) i : Integer; (* counter loop *)
Begin (* membaca banyaknya siswa *) Write(’Masukan jumlah siswa : ’); Readln(n); (* memasukan nama dan nilai siswa sebanyak n buah *) For i := 1 to n Do Begin Write(’Masukan nama dan nilai siswa ke ’, i, ’: ’); Readln(nama[i], nilai[i]); End; (* menghitung nilai rata-rata *) Rata_2 := 0; For i := 1 to n Do Rata_2 := Rata_2 + nilai[i]; Rata_2 := Rata_2 / n; (* mencetak nama siswa yang nilainya diatas rata_2 *) For i := 1 to n Do Begin If nilai[i] > Rata_2 Then Writeln(nama[i]); End; End.
WD
2010
______________________________________________________________________________________________Warsoma Djohan / Prodi. Matematika FMIPA-ITB / MA2251/2010/ 47
SOAL-SOAL LATIHAN 4 (Array 1 dimensi : VEKTOR)
1. Diberikan sebuah vektor integer dengan n elemen, )a,,a ,(a a n21= .
Buat algoritma untuk menghitung dan
2. Gunakan variabel vektor untuk menghitung nilai suku ke 50 dari deret Fibonacci (lihat soal latihan 3).
3. Ujian MA-281 Pemrograman komputer diikuti oleh n mahasiswa dan nilainya disimpan pada vektor (a1, a2,
...,an). Buat algoritma untuk meng-hitung nilai rata-rata dan standard deviasinya. Rumus standard deviasi:
4. Diberikan sebuah vektor integer dengan n elemen, )a,,a ,(a a n21= dan bilangan bulat b. Buat algoritma untuk mencetak indeks-indeks dari a yang nilainya sama dengan b.
5. Diketahui sebuah vektor integer a dengan n elemen. Buat algoritma un-tuk menentukan indeks yang nilai mutlaknya terbesar.
6. Diketahui sebuah vektor integer a dengan n elemen. Buat algoritma untuk menghitung nilai || 111 iini
aa −+−≤≤max
7. Diketahui sebuah vektor integer a dengan n elemen. Buat algoritma untuk mencetak elemen-elemennya dengan mengabaikan dua elemen yang sama (dua atau lebih elemen yang sama hanya dicetak satu kali).
8. Diberikan sebuah vektor huruf kapital (vektor yang isinya huruf-huruf) dengan n elemen. Buat algoritma untuk mencetak angka-angka sebagai berikut. Pada setiap huruf yang berbeda dari vektor tersebut dicetak angka nol. Bila ada dua/lebih huruf yang sama maka huruf kedua/lebih tersebut diganti dengan salah satu digit 1,2,...,9 yang mere-presentasikan jarak/posisi terhadap huruf sebelumnya (yang sama). Diasumsikan jarak antara dua huruf yang berbeda tidak melebihi 9.
∑=
n
iia
1
∑=
−−
n
ii aa
n 1
2)(1
1
Ilustrasi: a= (15, 31, 23, 15, 75, 23, 41, 15, 31, 85) Output: 15 31 23 75 41 85
∏=
n
iia
1
Ilustrasi: a= ('A', 'A', 'B', 'C', 'D', 'B', 'E', 'F', 'F', 'E', 'A', 'B', 'G', 'B', 'W', 'B') Output: 0100030013960202
WD
2010
______________________________________________________________________________________________Warsoma Djohan / Prodi. Matematika FMIPA-ITB / MA2251/2010/ 48
SELECTION SORT
a1 73
a2 65
a3 52
a4 24
a5 83
a6 17
a7 35
a8 96
a9 41
a10 9
Sebuah vektor numerik a dengan n elemen, akan diurutkan mulai dari yang terkecil sampai yang terbesar. Proses akan menggunakan metode selection. Berikut ini disajikan langkah-langkah globalnya. Pada tahap pertama (pass 1), dicari elemen a yang paling kecil, lalu elemen ini di-copy-kan ke elemen pertama x . Se-lanjutnya elemen minimum dari a tersebut diganti dengan angka 9999. Di sini diasumsikan elemen terbesar dari a tidak melebihi 9999. Pada tahap kedua (pass 2), dicari lagi elemen terkecil dari a , (elemen minimum ke dua). Selanjutnya elemen ini di-copy-kan pada posisi kedua dari x , dan elemen minimum dari a tersebut diganti dengan 9999. Bila proses ini dilakukan terus untuk pass 1, pass2, sampai dengan pass n, maka seluruh isi a akan ter-copy ke x dengan urutan mulai elemen terkecil sampai terbesar
Pass
1 2 3 4 5 6 7 8 9 10
1 73 73 73 73 73 73 73 73 9999 9999
2 65 65 65 65 65 65 65 9999 9999 9999
3 52 52 52 52 52 52 9999 9999 9999 9999
4 24 24 24 9999 9999 9999 9999 9999 9999 9999
5 83 83 83 83 83 83 83 83 83 9999
6 17 17 9999 9999 9999 9999 9999 9999 9999 9999
7 35 35 35 35 9999 9999 9999 9999 9999 9999
8 96 96 96 96 96 96 96 96 96 96
9 41 41 41 41 41 9999 9999 9999 9999 9999
10 9 9999 9999 9999 9999 9999 9999 9999 9999 9999
WD
2010
______________________________________________________________________________________________Warsoma Djohan / Prodi. Matematika FMIPA-ITB / MA2251/2010/ 49
Pass 1
MinIdx := 1
For i := 1,2, ,n
If a[i] < a[MinIdx] Then MinIdx := i
x[1] := a[MinIdx]
a[MinIdx] := 9999
Pass 2
MinIdx := 1
For i := 1,2, ,n
If a[i] < a[MinIdx] Then MinIdx := i
x[2] := a[MinIdx]
a[MinIdx] := 9999
Pass j
MinIdx := 1
For i := 1,2, ,n
If a[i] < a[MinIdx] Then MinIdx := i
x[j] := a[MinIdx]
a[MinIdx] := 9999
Pass n
MinIdx := 1
For i := 1,2, ,n
If a[i] < a[MinIdx] Then MinIdx := i
x[n] := a[MinIdx]
a[MinIdx] := 9999
WD
2010
______________________________________________________________________________________________Warsoma Djohan / Prodi. Matematika FMIPA-ITB / MA2251/2010/ 50
Algoritma Selection_Sort Diberikan vektor numerik a dengan n elemen, algoritma ini mengurutkan isinya secara asending. Vektor x digunakan untuk menyalin isi vektor a dalam bentuk terurut, yaitu x[1] ≤ x[2] ≤ ≤ x[n]. Variabel Pass digunakan untuk menyatakan indeks dari 'pass'. Variabel MinIdx digunakan untuk menunjukan posisi elemen terkecil dari vektor a. Pada algoritma ini seluruh elemen vektor a diasumsikan lebih kecil dari 9999.
Bila vektor a mempunyai dua buah elemen yang sama, apakah algoritma di atas masih benar ?
Bila pengurutan data ingin secara desending, jelaskan bagian yang harus diubah pada algoritma di atas.
Modifikasi apakah yang harus dilakukan supaya proses peng-urutan tersebut tidak menggunakan vektor tambahan x.
1. [Membaca banyaknya elemen dari vektor a] Read (n)
2. [Membaca elemen-elemen vektor a] For i := 1,2, ,n
Read (a[i])
3. [Proses pengurutan data] For Pass := 1,2, ,n
MinIdx := 1
For i := 2,3, ,n
If a[i] < a[MinIdx] Then MinIdx := i
x[Pass] := a[MinIdx]
a[MinIdx] := 9999
4. [Mencetak isi vektor x] For i := 1,2, ,n
Write (x[i])
5. Exit
WD
2010
______________________________________________________________________________________________Warsoma Djohan / Prodi. Matematika FMIPA-ITB / MA2251/2010/ 51
Ketidakefisienan metode Selection Sort: Pemakaian memori tidak efisien sebab memerlukan array tambahan. Pada setiap kali proses ’pass’ seluruh isi array harus dibandingkan. Pengisian data ’9999’ pada a dapat menimbulkan masalah, mengapa ?
Metode Selection Sort Revisi 1 Pada metode ini proses pengurutan tidak menggunakan vektor tambahan. Tekniknya adalah dengan menukar-nukarkan isi dari a supaya terurut dari yang terkecil sampai yang terbesar. Prosedurnya dijelaskan berikut ini.
Pada pass 1, dicari indeks pada a , mulai posisi pertama, yang elemennya ter-kecil. Selanjutnya elemen ini ditukarkan dengan elemen pertama. Dengan de-mikian elemen terkecil sudah berada pada posisi pertama.
Pada pass 2, dicari indeks pada a , mulai posisisi kedua, yang elemennya ter-kecil. Selanjutnya elemen ini ditukarkan dengan elemen kedua. Dengan de-mikian elemen terkecil kedua sudah berada pada posisi kedua.
Pada pass i, dicari indeks pada a , mulai posisi ke-i, yang elemennya terkecil. Selanjutnya elemen ini ditukarkan dengan elemen ke-i. Dengan demikian ele-men ke i tersebut sudah berada pada posisi ke-i.
Untuk mengurutkan semua data diperlukan proses sebanyak …… pass.
Pass
1 2 3 4 5 6 7 8 9 10
1 73 9 9 9 9 9 9 9 9 9
2 65 65 17 17 17 17 17 17 17 17
3 52 52 52 24 24 24 24 24 24 24
4 24 24 24 52 35 35 35 35 35 35
5 83 83 83 83 83 41 41 41 41 41
6 17 17 65 65 65 65 52 52 52 52
7 35 35 35 35 52 52 65 65 65 65
8 96 96 96 96 96 96 96 96 73 73
9 41 41 41 41 41 83 83 83 83 83
10 9 73 73 73 73 73 73 73 96 96
WD
2010
______________________________________________________________________________________________Warsoma Djohan / Prodi. Matematika FMIPA-ITB / MA2251/2010/ 52
LANGKAH-LANGKAH PADA METODE SELECTION SORT REVISI 1
Pass 1
MinIdx := 1
For i := 2,3, ,n
If a[i] < a[MinIdx] Then MinIdx := i
If MinIdx <> 1 Then a[1] ↔ a[MinIdx]
Pass 2
MinIdx := 2
For i := 3,4, ,n
If a[i] < a[MinIdx] Then MinIdx := i
If MinIdx <> 2 Then a[2] ↔ a[MinIdx]
Pass j
MinIdx := j
For i := j+1,j+2, ,n
If a[i] < a[MinIdx] Then MinIdx := i
If MinIdx <> j Then a[j] ↔ a[MinIdx]
Pass n-1
MinIdx := n-1
For i := n,n
If a[i] < a[MinIdx] Then MinIdx := i
If MinIdx <> n-1 Then x[n-1] ↔ a[MinIdx]
WD
2010
______________________________________________________________________________________________Warsoma Djohan / Prodi. Matematika FMIPA-ITB / MA2251/2010/ 53
Algoritma Selection_Sort_Rev1
Diberikan vektor numerik a dengan n elemen, algoritma ini menukar-nukarkan isinya sehingga terurut asending, yaitu a[1] ≤ a[2] ≤ ≤ a[n]. Variabel Pass digunakan untuk menyatakan counter dari proses. Variabel MinIdx digunakan untuk menunjukan posisi elemen terkecil dari vektor a pada setiap ‘pass’.
Jumlah operasi pembandingan pada metode Selection Sort = n2 sedang-kan pada metode selection sort revisi 1 adalah n(n-1)/2, Buktikan !
Ilustrasi, misalkan banyaknya data yang diurutkan n=100000 dan satu ope-rasi pembandingan membutuhkan waktu 10-6 detik. Waktu yang dibutuh-kan oleh metode selection sort adalah 10000 detik (sekitar 3 jam) se-dangkan dengan metode selection sort revisi 1 dibutuhkan waktu sekitar 5000 detik (sekitar 1½ jam).
Catatan: Untuk pembahasan selanjutnya yang dimaksudkan dengan metode selection sort adalah metode selection sort revisi 1.
1. [Membaca banyaknya elemen dari vektor a] Read (n)
2. [Membaca elemen-elemen vektor a] For i := 1,2, ,n
Read (a[i])
3. [Proses pengurutan data] For Pass := 1,2, ,n - 1
MinIdx := Pass
For i := Pass+1,Pass+2, ,n
If a[i] < a[MinIdx] Then MinIdx := i
If MinIdx <> Pass Then a[Pass] ↔ a[MinIdx]
4. [Mencetak isi vektor x] For i := 1,2, ,n
Write (a[i])
5. Exit
WD
2010
______________________________________________________________________________________________Warsoma Djohan / Prodi. Matematika FMIPA-ITB / MA2251/2010/ 54
BASIC SEARCHING
Pada kondisi terburuk, di mana data yang dicari berada pada posisi ter-akhir, jumlah operasi pembandingan: ⇒ Algoritma Linear_Search1 : …… kali
⇒ Algoritma Linear_Search2 : …… kali
Algoritma Linear_Search2 Diberikan vektor a, dengan n elemen. Algoritma berikut ini mencari elemen pada vektor tersebut yang nilainya x. Sebelum proses, x dicopykan ke a[n+1]. 1. Read (n) 2. For i := 1, 2, ..., n Read (a[i]) 3. Read (x) 4. a[n+1] := x 5. i := 1 6. While (a[i] <> x) i := i + 1 7. If i<=n Then Write ('Data ', x, ' ada diposisi ke', i) Else Write ('Data yang dicari tidak ketemu') 8. Exit
Algoritma Linear_Search1 Diberikan vektor a, dengan n elemen. Algoritma berikut ini mencari elemen pada vektor tersebut yang nilainya x. 1. Read (n) 2. For i := 1, 2, ..., n Read (a[i]) 3. Read (x) 4. i := 1 5. While (i <= n) AND (a[i] <> x) i := i + 1 6. If i<=n Then Write ('Data ', x, ' ada diposisi ke', i) Else Write ('Data yang dicari tidak ketemu') 7. Exit
a 73 65 52 24 83 17 35 96 41 9
WD
2010
______________________________________________________________________________________________Warsoma Djohan / Prodi. Matematika FMIPA-ITB / MA2251/2010/ 55
BINARY SEARCH
Algoritma Binary_Search Diberikan vektor a yang terurut asending, dengan n elemen. Algoritma berikut ini mencari elemen pada vektor tersebut yang nilainya x. 1. Read (n) 2. For i := 1, 2, ..., n Read (a[i]) 3. Read (x) 4. Low := 1 5. High := n 6. ketemu := false 7. While (Not ketemu) AND (Low <= High) Middle := (Low + High) / 2 If x < a[Middle] Then High := Middle – 1 Else If x > a[Middle] Then Low := Middle + 1 Else ketemu := true 8. If ketemu Then Write ('Data ', x, ' ada diposisi ke', middle) Else Write ('Data yang dicari tidak ketemu') 9. Exit
a1 100 a2 150 a3 200 a4 250 a5 300 a6 350 a7 400 a8 450 a9 500 a10 550 a11 600 a12 650 a13 700 a14 750 a15 800
Algoritma Binary Search hanya dapat digunakan pada data yang sudah terurut.
Algoritma di atas hanya berlaku bila ukuran vektor n = 2m-1. Bila ukuran vektor a sebarang, maka pada langkah 7, perhitungan variabel Middle harus dimodifikasi jadi:
Middle := Trunc((Low + High) / 2)
Pada kondisi terburuk, jumlah proses pengulangan pada langkah ke 7 adalah ………… kali
Lakukan pelacakan dengan data vektor a di samping kiri untuk mencari elemen 550 dan 675.
Linear Search
Binary Search
time
n
WD
2010
______________________________________________________________________________________________Warsoma Djohan / Prodi. Matematika FMIPA-ITB / MA2251/2010/ 56
PELACAKAN ALGORITMA BINARY SEARCH
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
100 150 200 250 300 350 400 450 500 550 600 650 700 750 800
100 150 200 250 300 350 400 450 500 550 600 650 700 750 800
100 150 200 250 300 350 400 450 500 550 600 650 700 750 800
Pelacakan Binary Search Untuk Pencarian Data 550 iterasi Low High Middle a [Middle] ketemu
1 1 15 8 450 false 2 9 15 12 650 false 3 9 11 10 550 true
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
100 150 200 250 300 350 400 450 500 550 600 650 700 750 800
100 150 200 250 300 350 400 450 500 550 600 650 700 750 800
100 150 200 250 300 350 400 450 500 550 600 650 700 750 800
100 150 200 250 300 350 400 450 500 550 600 650 700 750 800
100 150 200 250 300 350 400 450 500 550 600 650 700 750 800
Pelacakan Binary Search Untuk Pencarian Data 675 iterasi Low High Middle a [Middle] ketemu
1 1 15 8 450 false 2 9 15 12 650 false 3 13 15 14 750 false 4 13 13 13 750 false 5 13 12 false
WD
2010
______________________________________________________________________________________________Warsoma Djohan / Prodi. Matematika FMIPA-ITB / MA2251/2010/ 57
MERGING
Merging adalah proses menggabungkan dua atau lebih vektor yang telah ter-urut menjadi sebuah vektor baru yang juga terurut.
c 10 15 20 25 30 35 40 45 50 55 60 65 70 75
a 20 30 35 55 65 b 10 15 25 40 45 50 60 70 75
Algoritma Simple_Merge Diberikan vektor a dan b dengan n dan m elemen yang telah terurut asending. Algoritma berikut ini menggabungkannya menjadi satu vektor c yang juga ter-urut asending. Variabel i, j dan k berfungsi sebagai indeks pada elemen vektor a, b dan c yang sedang diproses. Bagian masukan dan keluaran tidak diser-takan pada algoritma ini (silakan dilengkapi sendiri). 1. i := 1 2. j := 1 3. k := 1 4. [proses merging sampai salah satu vektor a atau b habis] While (i <= n) AND (j <= m) If a[i] <= b[j] Then c[k] := a[i] i := i + 1 Else c[k] := b[j] j := j + 1 k := k + 1 5. [copy sisa vektor yang belum habis ke vektor c] If i > n Then For r := j,j+1,...,m c[k] := b[r] k := k + 1 Else For r := i,i+1,...,m c[k] := a[r] k := k + 1 6. Exit
a1 a2 … an b1 b2 … bm c1 c2 … cn+m
i j k
WD
2010
______________________________________________________________________________________________Warsoma Djohan / Prodi. Matematika FMIPA-ITB / MA2251/2010/ 58
PELACAKAN ALGORITMA SIMPLE MERGE
1 2 3 4 5 1 2 3 4 5 6 7 8 9 a 20 30 35 55 65 b 10 15 25 40 45 50 60 70 75
iter i j k a[i] b[j] a[i] ≤ b[j] c[k]
1 1 1 1 20 10 false 10
2 1 2 2 20 15 false 15
3 1 3 3 20 25 true 20
4 2 3 4 30 25 false 25
5 2 4 5 30 40 true 30
6 3 4 6 35 40 true 35
7 4 4 7 55 40 false 40
8 4 5 8 55 45 false 45
9 4 6 9 55 50 false 50
10 4 7 10 55 60 true 55
11 5 7 11 65 60 false 60
12 5 8 12 65 70 true 65
13 6 proses pengulangan pada langkah 4 berhenti karena elemen a sudah habis (i=6 > n=5)
a 20 30 35 55 65 b 10 15 25 40 45 50 60 70 75
a 20 30 35 55 65 b 10 15 25 40 45 50 60 70 75
a 20 30 35 55 65 b 10 15 25 40 45 50 60 70 75
a 20 30 35 55 65 b 10 15 25 40 45 50 60 70 75
WD
2010
______________________________________________________________________________________________Warsoma Djohan / Prodi. Matematika FMIPA-ITB / MA2251/2010/ 59
MERGE SORT
Diketahui vektor a dengan n=2m elemen. Vektor ini akan diurutkan secara asen-ding melalui serangkaian operasi merge. Berikut ini disajikan langkah-langkahnya.
Pada pass 1, tiap 1=20 elemen dari vektor a dipandang sebagai sub-vektor. Pada tiap pasang (dua buah) sub-vektor dilakukan proses merging. Hasilnya adalah sub-vektor terurut dengan 2=21 elemen, sebanyak n/21 buah.
Pada pass 2, tiap 2=21 elemen dari vektor a dipandang sebagai suatu sub-vektor. Pada tiap pasang sub-vektor dilakukan lagi proses merging. Hasilnya adalah sub-vektor terurut dengan 4=22 elemen, sebanyak n/22 buah.
Pada pass 3, tiap 4=22 elemen dari vektor a dipandang sebagai suatu sub-vektor. Pada tiap pasang sub-vektor dilakukan lagi proses merging. Hasilnya adalah sub-vektor terurut dengan 8=23 elemen, sebanyak n/23 buah.
Pada pass k, tiap 2k-1 elemen dari vektor a dipandang sebagai suatu sub-vektor. Pada tiap pasang sub-vektor dilakukan lagi proses merging. Hasilnya adalah sub-vektor terurut dengan 2k elemen, sebanyak n/2k buah.
Secara umum, untuk menyelesaikan proses pengurutan sebanyak n=2m elemen diperlukan langkah sebanyak ………… pass
73 65 52 24 83 17 35 96
65 73 24 52 17 83 35 96
24 52 65 73 17 35 83 96
17 24 35 52 65 73 83 96
Pass 1
Pass 2
Pass 3
WD
2010
______________________________________________________________________________________________Warsoma Djohan / Prodi. Matematika FMIPA-ITB / MA2251/2010/ 60
KERANGKA ALGORITMA MERGE SORT
Untuk implementasi algoritma Merge Sort, diperlukan sebuah vektor tam-bahan untuk proses merging. Pada pembahasan di sini akan digunakan vektor b. Selanjutnya pada setiap proses merge, isi dari vektor a dan b akan di-copy-kan secara bergantian. Pada pass ganjil, isi a akan di-copy ke b sedangkan pada pass yang genap terjadi sebaliknya (lihat ilustrasi).
Misalkan ukuran vektor a adalah n. Variabel-variabel utama yang diper-lukan untuk mengontrol proses pada langkah ke 'pass' adalah: • size = 2pass-1 : ukuran sub-vektor yang akan di-merge.
• subpass = n / (2pass) : banyaknya pasangan sub-vektor yang di-merge.
• p, q : menunjukan posisi awal dari sub-vektor yang sedang di-merge.
a 73 65 52 24 83 17 35 96
b 65 73 24 52 17 83 35 96
a 24 52 65 73 17 35 83 96
b 17 24 35 52 65 73 83 96
Pass 1 Pass 2 Pass 3
p
↓ q
↓
↑ i
↑ j
Keadaan awal pada saat pass 2, subpass 1 (merging)
p
↓
q
↓
T e l a h t e r u r u t
↑ i
↑ j
Keadaan awal pada saat pass 2, subpass 2 (merging)
WD
2010
______________________________________________________________________________________________Warsoma Djohan / Prodi. Matematika FMIPA-ITB / MA2251/2010/ 61
ALGORITMA MERGE SORTDiberikan vektor a dengan n=2m elemen. Algoritma berikut ini mengurutkan vektor tersebut secara asending. Vektor b digunakan sebagai perantara selama proses pengurutan. Hasil akhir pengurutan akan dikembalikan pada vektor a. Variabel pass, size, subpass, p dan q berfungsi seperti pada penjelasan sebelumnya. Variabel s berfungsi sebagai counter subpass. Variabel i, j dan t berfungsi sebagai indeks terhadap data yang sedang di-urut. Bagian masukan dan keluaran tidak disertakan pada algoritma ini 1. For pass := 1,2,…, log2n size := 2^(pass-1) ; p := 1 ; q := p + pass subpass := n/(2^pass) For s := 1,2,…,subpass i := p ; j := q ; t := p While (i <= p+size-1) AND (j <= q+size-1) If Trunc(pass/2)*2 <> pass [pass ganjil] Then If a[i] <= a[j] Then b[t] := a[i] i := i + 1 Else b[t] := a[j] j := j + 1; Else If b[i] <= b[j] [pass genap] Then a[t] := b[i] i := i + 1 Else a[t] := b[j] j := j + 1 t := t + 1; If (i > p+size-1) Then If Trunc(pass/2)*2 <> pass [pass ganjil] Then For r := j,j+1,…,q+size-1 b[t] := a[r] t := t + 1 Else For r := j,j+1,…,q+size-1 a[t] := b[r] t := t + 1 Else If Trunc(pass/2)*2 <> pass [pass ganjil] Then For r := i,i+1,…,p+size-1 b[t] := a[r] t := t + 1 Else For r := i,i+1,…,p+size-1 a[t] := b[r] t := t + 1 p := q + size q := p + size
2. If Trunc(log2n / 2) * 2 <> log2n [jumlah pass ganjil] Then For i := 1,2,…, n a[i] := b[i] 3. Exit
WD
2010
______________________________________________________________________________________________Warsoma Djohan / Prodi. Matematika FMIPA-ITB / MA2251/2010/ 62
ARRAY 2 DIMENSI (MATRIKS)
Array dua dimensi / Matriks digunakan untuk merepresentasikan data yang memerlukan dua indeks/subscript.
Indeks dituliskan dalam kurung siku. Penulisan indeks pertama (baris) dan indeks kedua (kolom) dipisahkan dengan simbol koma.
Akses array dilakukan per-elemen
Ilustrasi:
⎥⎥⎥⎥⎥⎥
⎦
⎤
⎢⎢⎢⎢⎢⎢
⎣
⎡
=
mnm3m2mn
3n333231
2n232221
1n131211
aaaa
aaaaaaaaaaaa
a
73 42 … 52 86 23 … 31 … 92 17 … 35
a11 a12 … a1n a21 a22 … a2n … am1 am2 … amn
Representasi lojik array dua dimensi
Representasi fisik array dua dimensi
a[1,1] := 10a[5,2] := 20 i := 4; a[i,3] := a[4,1] + b – a[2,8] a[i+1,j] := 2*a – a[i+1,3] For t := 1 to 5 a[t,t+1] := t^2
WD
2010
______________________________________________________________________________________________Warsoma Djohan / Prodi. Matematika FMIPA-ITB / MA2251/2010/ 63
CONTOH PENGGUNAAN ARRAY DUA DIMENSI
ARRAY DUA DIMENSI PADA BORLAND PASCAL
Algoritma Jumlah_Baris Diberikan sebuah matriks A dengan ukuran m x n. Algoritma ini menjumlah-kan elemen-elemen pada tiap baris dan menyimpan hasilnya pada vektor c. Variabel i dan j digunakan sebagai counter-loop.
1. [Membaca ukuran matriks] Read (m, n) 2. For q := 1,2,…,m For t := 1,2,…,n Read(A[q,t]) 3. For i := 1,2,…,m c[i] := 0 For j := 1,2,…,n c[i] := c[i] + A[i,j] 4. For i := 1,2,…,m Write ('Jumlah elemen pada baris ke ', i, '=', c[i]) 5. Exit
Format Pendeklarasian Var <nama array> : Array [n m, p q] of <tipe-data>; n, m, p, q : data skalar. <tipe-data> : tipe-tipe data primitif / tipe-tipe data baru yang sudah dideklarasikan. Contoh:
Var m : Array[1..5, -2..4] Of Integer; Begin m[2,-1] := 7; For i := 1 to 5 Do m[i,-1] := i*i;
WD
2010
______________________________________________________________________________________________Warsoma Djohan / Prodi. Matematika FMIPA-ITB / MA2251/2010/ 64
SOAL-SOAL LATIHAN 5 Sorting, Searching dan Array 2 dimensi
1. Modifikasilah algoritma Selection Sort (revisi 1) agar pengurutan dilakukan
dengan mencari elemen terbesar lalu meletakannya pada akhir vektor.
2. Diberikan sebuah vektor a dengan n elemen. Buat algoritma untuk menyusun elemen-elemen vektor tersebut agar tersusun sebagai berikut: a1 terbesar, a2 terkecil, a3 terbesar kedua, a4 terkecil kedua, dan seterusnya.
3. Bubble Sort adalah salah satu metode pengurutan yang cukup populer. Pada pass=1, metode ini membandingkan elemen-elemen ke i dan ke i+1 (i:=1,2,...,n-1). Bila pada saat pembandingan urutan elemen tersebut tidak benar maka langsung ditukar (lihat ilustrasi)
Susunlah algoritma Bubble Sort agar mengurutkan seluruh isi array secara asending. Perhatikan: bila pada pass tertentu tidak terjadi proses penukaran elemen maka vektor tersebut telah terurut, sehingga pass berikutnya tidak perlu dilakukan.
4. Modifikasilah algoritma Bubble Sort untuk mengurutkan secara asending, tetapi prosesnya dengan cara menempatkan elemen-elemen terkecil terlebih dahulu pada bagian awal vektor.
Proses Bubble Sort Pada Pass 1
1 → 73 65 65 65 65 65 65 65 65 65
2 → 65 → 73 52 52 52 52 52 52 52 52
3 52 → 52 → 73 24 24 24 24 24 24 24
4 24 24 → 24 → 73 73 73 73 73 73 73
5 83 83 83 → 83 → 83 17 17 17 17 17
6 17 17 17 17 → 17 → 83 35 35 35 35
7 35 35 35 35 35 → 35 → 83 83 83 83
8 96 96 96 96 96 96 → 96 → 96 41 41
9 41 41 41 41 41 41 41 → 41 → 96 9
10 9 9 9 9 9 9 9 9 → 9 96
WD
2010
______________________________________________________________________________________________Warsoma Djohan / Prodi. Matematika FMIPA-ITB / MA2251/2010/ 65
5. Modifikasilah metode Merge-Sort agar dapat dipakai mengurutkan vektor dengan ukuran sebarang. Berikut ini disajikan prosedur teknisnya
6. Diberikan sebuah matriks A ukuran n×m. Buat algoritma untuk menentukan matriks transposenya dan simpan hasilnya di matriks B.
7. Diberikan sebuah matriks A ukuran n×m. Buat algoritma untuk menentukan indeks matriks tersebut yang nilai mutlaknya paling besar.
8. Diberikan sebuah matriks A ukuran n×m. Buat algoritma untuk menukarkan isi baris ke 2 dengan baris ke 4. Setelah itu tukarkan isi kolom ke 1 dengan kolom ke 3.
9. Diberikan sebuah matriks bujur sangkar A ukuran n. Buat algoritma untuk menguji apakah matriks tersebut bersifat dominan secara diagonal, artinya:
10. Diberikan dua buah matriks A dan B, masing-masing ukuran n×m. Buat algoritma untuk menjumlahkan kedua matriks tersebut dan menyimpan hasilnya pada matriks C.
11. Diberikan sebuah matriks A ukuran n×m dan sebuah vektor b ukuran m. Buat algoritma untuk mengalikan A dengan c dan hasilnya simpan di vektor k.
12. Buat algoritma untuk mengalikan sebuah matriks A ukuran n×m dengan matriks B ukuran m×p. Hasilnya simpan di matriks C.
73 65 52 24 83 17 35 96 41 9
65 73 24 52 17 83 35 96 9 41
24 52 65 73 17 35 83 96 9 41
17 24 35 52 65 73 83 96 9 41
9 17 24 35 41 52 65 73 83 96
niaan
ijjjiii ,,2,1:||||
,1
=> ∑≠=
WD
2010
______________________________________________________________________________________________Warsoma Djohan / Prodi. Matematika FMIPA-ITB / MA2251/2010/ 66
SUBALGORITMA / SUBPROGRAM / SUBROUTINE F u n c t i o n d a n P r o c e d u r e
It has been estimated that the cost of producing a standard automobile if every part had to be constructed from basic units would exceed $100,000. Automobile Assembly lines take full advantage of stocks of prefabricated components to reduce the cost as well as the time required to produce a car.
Situasi yang sama dengan masalah pembuatan mobil di atas terjadi pada banyak disiplin lain, termasuk masalah pemrograman komputer. Proses pemrograman komputer akan jauh lebih mudah bila kita dapat meman-faatkan komponen-komponen program yang sudah tersedia. Yang dimak-sudkan dengan komponen-komponen di sini adalah program-program apli-kasi yang telah dikompilasi untuk keperluan-keperluan tertentu dan disebut sebagai subprogram / subroutine.
Contoh-contoh subroutine: • subroutine untuk masalah komputasi numerik (pada Fortran: IMSL) • subroutine untuk aplikasi basis data (database).
Dengan memanfaatkan subprogram yang telah tersedia, seorang pem-rogram dapat lebih mem-focus-kan pekerjaanya pada pemecahan problem yang dihadapi ketimbang memikirkan detail dari algoritma-algoritma yang harus dibuat. Sebagai ilustrasi, misalkan akan dibuat program komputer untuk pemrosesan data mahasiswa. Komponen-komponen yang diperlukan diantaranya adalah: rutin pembacaan data, rutin pemrosesan data, rutin peng-edit-an data, dan rutin pencetakan data. Disamping itu untuk menentukan ranking, diperlukan rutin pengurutan data. Bila rutin-rutin tersebut telah tersedia, pemrogram dapat mengkonsentrasikan pekerjaannya pada aliran proses yang harus dilakukan, tanpa harus memikirkan detail pembuatan rutin-rutin tersebut.
WD
2010
______________________________________________________________________________________________Warsoma Djohan / Prodi. Matematika FMIPA-ITB / MA2251/2010/ 67
ILUSTRASI PEMROSESAN DATA MAHASISWA
Program Utama berfungsi untuk mengatur urutan pemrosesan yang harus dilakukan.
PROGRAM UTAMA
PEMROSESAN DATA MAHASISWA
SUBROUTINE PEMASUKAN
DATA SUBROUTINE PEMROSESAN
DATA
SUBROUTINE PENCETAKAN
DATA
SUBROUTINE PENAMBAHAN
DATA
SUBROUTINE PENGHAPUSAN
DATA
SUBROUTINE PERBAIKAN
DATA
SUBROUTINE PENGURUTAN
DATA
WD
2010
______________________________________________________________________________________________Warsoma Djohan / Prodi. Matematika FMIPA-ITB / MA2251/2010/ 68
FUNCTION
Untuk memudahkan pembuatan program komputer, bahasa-bahasa pemrograman tingkat tinggi pada umumnya telah dilengkapi dengan fungsi-fungsi dasar. Fungsi-fungsi dasar tersebut antara lain adalah fungsi-fungsi trigonometri, fungsi logaritma, fungsi nilai mutlak, fungsi-fungsi untuk operasi string dan lain-lain. Fungsi-fungsi demikian disebut built-in function (fungsi pustaka / fungsi intrinsic).
Fungsi-fungsi pustaka dapat kita gunakan secara langsung di dalam suatau ekspresi. Sebagai contoh, perintah:
akan mengevaluasi penjumlahan dari sinus sudut 1θ ditambah dengan cosinus dari sudut 2θ dan hasilnya disimpan ke variabel k . Perhatikan bahwa fungsi sinus dan cosinus digunakan pada ekspresi seperti penggunaan variabel biasa, hanya di sini dilengkapi dengan argumen yang dinamakan parameter yaitu 1θ dan 2θ . Banyaknya parameter yang diperlukan pada sebuah fungsi tergantung dari pendefinisian fungsi itu sendiri. Penjelasan tentang parameter-parameter suatu fungsi pada bahasa pemrograman tertentu biasanya dicantumkan pada manual dari bahasa tersebut.
Diagram di bawah ini menggambarkan aliran algoritma yang menggunakan fungsi.
)cos()sin(: 21 θθ +=k
4
3
2
1 Main Program ⋅ ⋅ ⋅ ⋅ ⋅
)cos()sin(: 21 θθ +=k
⋅ ⋅ ⋅ ⋅ ⋅
Function SIN
Function COS
1. Control transfer to function SIN 2. Return from Function SIN 3. Control transfer to function COS 4. Return from Function COS
WD
2010
______________________________________________________________________________________________Warsoma Djohan / Prodi. Matematika FMIPA-ITB / MA2251/2010/ 69
USER DEFINED FUNCTION
Walaupun sebuah bahasa pemrograman telah menyediakan fungsi-fungsi dasar yang cukup lengkap, tetapi dalam suatu aplikasi seringkali diperlukan fungsi baru. Sebagai contoh, misalkan kita ingin membuat tabel dari sebuah fungsi dua peubah )sin(),( yxyxf ⋅= . Fungsi seperti ini tidak termasuk sebagai fungsi pustaka.
Selain itu, dengan keterbatasan memori komputer, tidak mungkin semua fungsi disimpan sebagai fungsi pustaka. Sebagai alternatif, pemrogram disediakan fasilitas untuk mendefinisikan fungsi baru.
Berikut ini disajikan tatacara penulisan fungsi dalam bahasa algoritma serta penggunaannya dalam sebuah program.
1. Function digunakan untuk mengevaluasi suatu ekspresi yang meng-hasilkan sebuah nilai.
2. Nama parameter pada sebuah function saling bebas dengan nama parameter pada pemanggil fungsi. Bahkan parameter pada pemanggil fungsi dapat berupa ekspresi.
Function Average (value1, value2, value3)
1. [menghitung rata-rata] av := (value1 + value2 + value3) / 3.0
2. Return (av)
Algoritma Test_Average Algoritma ini mengilustrasikan penggunaan fungsi Average dengan berbagai parameter. 1. A := 2.0 2. B := 6.1 3. C := 7.5 4. D := Average (A, B, C) 5. Write (D) 6. E := Average (C, A, B) + Average (B, 3.2, A+7) 7. Write (E) 8. Exit
WD
2010
______________________________________________________________________________________________Warsoma Djohan / Prodi. Matematika FMIPA-ITB / MA2251/2010/ 70
PROCEDURE
Fungsi merupakan alat yang sangat berguna dalam proses pemrograman, akan tetapi fasilitas fungsi mempunyai keterbatasan. Fungsi hanya menggantikan sebuah ekspresi tertentu yang digunakan dalam sebuah program komputer dan menghasilkan satu buah nilai.
Banyak permasalahan pada pemrograman yang tidak dapat direalisasikan dengan fungsi, misalnya rutin untuk pengurutan data, rutin untuk menyelesaikan sistem persamaan linear, rutin untuk menyelesaikan masalah persamaan diferensial dan lain-lain.
Untuk mengatasi hal ini, di dalam pemrograman disediakan bentuk kedua dari subalgoritma yang dinamakan procedure. Bentuk sebuah procedure mirip dengan function. Perbedaannya terletak pada:
a. Sebuah procedure dijalankan dengan perintah khusus yang disebut perintah pemanggilan (call statement). Bila langkah di dalam sebuah algoritma sampai pada perintah pemanggilan procedure, maka eksekusi program akan berpindah ke dalam procedure yang dipanggil. Bila procedure telah selesai dijalankan maka eksekusi akan dilanjutkan dengan baris berikutnya setelah pemanggilan procedure.
b. Banyaknya nilai yang dihasilkan oleh sebuah procedure bisa lebih dari satu. Nilai ini dihasilkan melalui parameter dari procedure tersebut.
Berikut ini disajikan contoh procedure
Procedure DIVIDE (X, Y, Hsl, Sisa) 1. Hsl := x / y 2. Sisa := x – Hsl * Y 3. Return
Algoritma Test_Divide 1. A := 5 2. B := 3 3. Call DIVIDE (A, B, X, Y) 4. Write (X, Y) 5. Call DIVIDE (A*B-1, B+1, V, W) 6. Write (V, W) 7. Exit
WD
2010
______________________________________________________________________________________________Warsoma Djohan / Prodi. Matematika FMIPA-ITB / MA2251/2010/ 71
Procedure Tukar (x, y)[menukarkan isi parameter x dengan y]
1. temp := x 2. x := y 3. y := x 4. Return
Algoritma Sort_3 Algoritma ini membaca tiga buah bilangan a, b dan c, lalu meng-urutkannya secara asending. Proses penukaran isi variabel dilakukan menggunakan prosecure Tukar. 1. Read (a, b, c) 2. If a > b Then Tukar (a,b) 3. If b > c Then Tukar (b,c) 4. If a > b Then Tukar (a,b) 5. Write (a, b, c) 6. Exit
Pelacakan algoritma Sort_3
Kasus a b c Output
1 3 7 5
3 7 5
3 5 7
3 5 7 3 5 7
2 9 6 2
6 9 2
6 2 9
2 6 9 2 6 9
WD
2010
______________________________________________________________________________________________Warsoma Djohan / Prodi. Matematika FMIPA-ITB / MA2251/2010/ 72
SOAL-SOAL LATIHAN 6 : FUNCTION
1. Definisikan sebuah dengan sebuah fungsi dengan sebuah parameter x )0( ≠x untuk menghitung nilai
2. Definisikan sebuah fungsi dengan parameter x dan n untuk menghitung
⎟⎠
⎞⎜⎝
⎛ − 1
1432.1
5
xex