MA2251 Komputasi Matematika

72
WD2010 ______________________________________________________________________________________________ Warsoma Djohan / Prodi. Matematika FMIPA-ITB / MA2251/2010/ 1 P P r r o o p p e e r r t t y y o o f f D Dr r s s . . W Wa a r r s s o o m ma a D Dj j o o h h a a n n M M. . S S i i . . J J u u r r u u s s a a n n M Ma a t t e e m ma a t t i i k k a a I I n n s s t t i i t t u u t t T T e e k k n n o o l l o o g g i i B B a a n n d d u u n n g g 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

Transcript of MA2251 Komputasi Matematika

Page 1: 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

Page 2: MA2251 Komputasi Matematika

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

Page 3: MA2251 Komputasi Matematika

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

Page 4: MA2251 Komputasi Matematika

WD

2010

______________________________________________________________________________________________Warsoma Djohan / Prodi. Matematika FMIPA-ITB / MA2251/2010/ 4

DATA AKUISISI MESIN TENUN

Page 5: MA2251 Komputasi Matematika

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

Page 6: MA2251 Komputasi Matematika

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)

Page 7: MA2251 Komputasi Matematika

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

Page 8: MA2251 Komputasi Matematika

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

Page 9: MA2251 Komputasi Matematika

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

Page 10: MA2251 Komputasi Matematika

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

Page 11: MA2251 Komputasi Matematika

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

Page 12: MA2251 Komputasi Matematika

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

Page 13: MA2251 Komputasi Matematika

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

+

++

++

Page 14: MA2251 Komputasi Matematika

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

Page 15: MA2251 Komputasi Matematika

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.

Page 16: MA2251 Komputasi Matematika

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

Page 17: MA2251 Komputasi Matematika

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.

Page 18: MA2251 Komputasi Matematika

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

Page 19: MA2251 Komputasi Matematika

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

Page 20: MA2251 Komputasi Matematika

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

Page 21: MA2251 Komputasi Matematika

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 ,,,

Page 22: MA2251 Komputasi Matematika

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

Page 23: MA2251 Komputasi Matematika

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.

Page 24: MA2251 Komputasi Matematika

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

Page 25: MA2251 Komputasi Matematika

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 ;

Page 26: MA2251 Komputasi Matematika

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

Page 27: MA2251 Komputasi Matematika

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.

Page 28: MA2251 Komputasi Matematika

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

Page 29: MA2251 Komputasi Matematika

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

Page 30: MA2251 Komputasi Matematika

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

Page 31: MA2251 Komputasi Matematika

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

Page 32: MA2251 Komputasi Matematika

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

Page 33: MA2251 Komputasi Matematika

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.

Page 34: MA2251 Komputasi Matematika

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

Page 35: MA2251 Komputasi Matematika

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

Page 36: MA2251 Komputasi Matematika

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

Page 37: MA2251 Komputasi Matematika

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)

Page 38: MA2251 Komputasi Matematika

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;

• • •

Page 39: MA2251 Komputasi Matematika

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

Page 40: MA2251 Komputasi Matematika

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

Page 41: MA2251 Komputasi Matematika

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

Page 42: MA2251 Komputasi Matematika

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

Page 43: MA2251 Komputasi Matematika

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

Page 44: MA2251 Komputasi Matematika

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

Page 45: MA2251 Komputasi Matematika

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

Page 46: MA2251 Komputasi Matematika

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.

Page 47: MA2251 Komputasi Matematika

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

Page 48: MA2251 Komputasi Matematika

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

Page 49: MA2251 Komputasi Matematika

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

Page 50: MA2251 Komputasi Matematika

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

Page 51: MA2251 Komputasi Matematika

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

Page 52: MA2251 Komputasi Matematika

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]

Page 53: MA2251 Komputasi Matematika

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

Page 54: MA2251 Komputasi Matematika

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

Page 55: MA2251 Komputasi Matematika

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

Page 56: MA2251 Komputasi Matematika

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

Page 57: MA2251 Komputasi Matematika

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

Page 58: MA2251 Komputasi Matematika

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

Page 59: MA2251 Komputasi Matematika

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

Page 60: MA2251 Komputasi Matematika

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)

Page 61: MA2251 Komputasi Matematika

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

Page 62: MA2251 Komputasi Matematika

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

Page 63: MA2251 Komputasi Matematika

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;

Page 64: MA2251 Komputasi Matematika

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

Page 65: MA2251 Komputasi Matematika

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

=> ∑≠=

Page 66: MA2251 Komputasi Matematika

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.

Page 67: MA2251 Komputasi Matematika

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

Page 68: MA2251 Komputasi Matematika

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

Page 69: MA2251 Komputasi Matematika

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

Page 70: MA2251 Komputasi Matematika

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

Page 71: MA2251 Komputasi Matematika

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

Page 72: MA2251 Komputasi Matematika

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