Anda di halaman 1dari 72

Property of

WD2010

Drs. Warsoma Djohan M.Si.


Jurusan Matematika
Institut Teknologi Bandung

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

______________________________________________________________________________________________
Warsoma Djohan / Prodi. Matematika FMIPA-ITB / MA2251/2010/ 1

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

84149189

57879565

86775524

50542142

89628467

22819152

29052750

39141124

43975931

59814899

83077525

68264729

74767351

62312366

84223706

77075028

62881317

47240199

46375555

64010972

81111032

40456819

56099649

57340322

77581816

30385754

68560812

58435604

WD2010

MENGAPA MENGGUNAKAN KOMPUTER ?

67464362

23618084

25714987

68641770

64490911

41668346
76141380
31782567
21246893
69621147
58250775
80961462
43920344

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

______________________________________________________________________________________________
Warsoma Djohan / Prodi. Matematika FMIPA-ITB / MA2251/2010/ 2

Sistem Persamaan Linear berukuran besar

a 1,1 x1 + a 1,2 x2 + a 1,3 x3 + " + a 1,50 x50 = b1


a 2,1 x1 + a 2,2 x2 + a 2,3 x3 + " + a 2,50 x50 = b2
a 3,1 x1 + a 3,2 x2 + a 3,3 x3 + " + a 3,50 x50 = b3
#

WD2010

a50,1 x1 + a 50,2 x2 + a 50,3 x3 + " + a 50,50 x50

#
= b50

Hampiran Nilai Integral dengan Metode Trapesium

3.5

0.5

i =0

h
f ( x) dx = 2 ( f ( x0 ) + 2 f ( x1 ) + 2 f ( x2 ) + " + 2 f ( xn 1 ) + f ( xn ))

______________________________________________________________________________________________
Warsoma Djohan / Prodi. Matematika FMIPA-ITB / MA2251/2010/ 3

WD2010

DATA AKUISISI MESIN TENUN

______________________________________________________________________________________________
Warsoma Djohan / Prodi. Matematika FMIPA-ITB / MA2251/2010/ 4

DIAGRAM BLOK SISTEM KOMPUTER

CPU

Arithmetic
&
Logic Unit

Input

WD2010

Control Unit

Output

Main Memory

Device

Device

Pada diagram di atas, garis putus-putus menyatakan aliran kontrol


sedangkan garis penuh menyatakan aliran data.

______________________________________________________________________________________________
Warsoma Djohan / Prodi. Matematika FMIPA-ITB / MA2251/2010/ 5

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
Isi memory 01001101 11010110 10011111

3
4
01101110 10101010

Arithmetic & Logic Unit (ALU)

WD2010

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.

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)

______________________________________________________________________________________________
Warsoma Djohan / Prodi. Matematika FMIPA-ITB / MA2251/2010/ 6

BAHASA PEMROGRAMAN KOMPUTER

Bahasa Mesin

Bahasa Asembli
MOV
ADD
STR
MOV
JMP

. . . . 1001 01011000 11100101 00110101


11111001 11001001 11101110 . . . .

AH, FF7
AH, AL
8, A73
DH, CL
AL, F5
#

INT

Bahasa Pascal

27, AH

Bahasa Basic
#

10
20
30
40
50
60
70

WD2010

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;

a = 10
b = 20
For i = 1 to 1000 step 5
a = a -1
b = b + 0.5
Next i
Print a, b
#

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.

______________________________________________________________________________________________
Warsoma Djohan / Prodi. Matematika FMIPA-ITB / MA2251/2010/ 7

SISTEM KOMPUTER DENGAN BAHASA MESIN

Word 0

SPESIFIKASI

Word 1

CPU
.
.
.

: 1 accumulator

Memory : 32 word
1 word 8 bit
Instruksi/perintah:
word 0 word 24

Word 31

Kode
Operand
operasi

Arti Perintah

WD2010

Data: word 25 word 31

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

______________________________________________________________________________________________
Warsoma Djohan / Prodi. Matematika FMIPA-ITB / MA2251/2010/ 8

CONTOH-CONTOH PROGRAM DALAM INSTRUKSI MESIN

Contoh 1

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

Contoh 3

WD2010

word 0

word 0

100 10000

word 0

100 01010

word 1

001 11111

word 1

001 11111

word 2

100 01001

word 2

100 00001

word 3

001 11110

word 3

001 11110

word 4

000 11111

word 4

100 00000

word 5

011 11110

word 5

001 11001

word 6

001 11101

word 6

000 11111

word 7

111 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

______________________________________________________________________________________________
Warsoma Djohan / Prodi. Matematika FMIPA-ITB / MA2251/2010/ 9

TIPE-TIPE DATA STANDARD

7830

492
-63
200

'W'

34982.

123.45
-68342

-72.341
0.364E04

'MatEmaTiKa'
true
'347'

false

WD2010

'As245W_# ?@'

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.

______________________________________________________________________________________________
Warsoma Djohan / Prodi. Matematika FMIPA-ITB / MA2251/2010/ 10

EKSPRESI
-4 / 2 * 3 ^ 2 2 * 2 ^ 2 ^ 3
10 4 * 2 + 3
-4 / 2 * 3 ^ 2 2 * 2 ^ 2 ^ 3
34527

-4 / 2 *

2*2^2^3

-4 / 2 *

2*2 ^ 8

-4 / 2 *

2 * 64

-2 *

2*

64

-18

2*

64

-18

128

10 4 * 2 + 3

+3
+3
6

WD2010

10 8

-146

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
Pangkat
Kali
Bagi
tambah
Kurang

Simbol Operator
^
*
/
+
-

Hirarki
1
2
2
3
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

______________________________________________________________________________________________
Warsoma Djohan / Prodi. Matematika FMIPA-ITB / MA2251/2010/ 11

VARIABEL dan PENUGASAN

1.2345

0.1E+2

R1

R2

345

M281
R2

VI

2^3+A+3*B

20

10

B := 20
C := 2 ^ 3 + A + 3 * B
A

WD2010

A := 10

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

______________________________________________________________________________________________
Warsoma Djohan / Prodi. Matematika FMIPA-ITB / MA2251/2010/ 12

FUNGSI PUSTAKA

ROUND (x)
LN (x)
EXP (x)
SIN (x)
COS (x)
TAN (x)

Keterangan
Menghitung nilai mutlak dari x
Akar pangkat dua dari x
Bilangan bulat terbesar yang lebih kecil atau sama
dengan x
Bilangan bulat terbesar yang lebih kecil atau sama
dengan (x + 0.5)
Logaritma natural dari x (basis e)
exp (x), ex
sinus dari x
cosinus dari x
tangen dari x

WD2010

Nama fungsi
ABS (x)
SQRT (x)
TRUNC (x)

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:

A := 10.0
B := 3.14159
C := sin (A) + 3 * sin (B)
B := round (C) exp (A-B)

Latihan: Tuliskan ekspresi berikut dengan benar

193 + ln (23.4)
1 + 23
+
13 + 52.5
exp( 6+511 )

______________________________________________________________________________________________
Warsoma Djohan / Prodi. Matematika FMIPA-ITB / MA2251/2010/ 13

ALGORITMA

Cara langsung (sukar)

Penyelesaian dalam
bentuk algoritma

Implementasi
pada komputer

WD2010

Problem

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

______________________________________________________________________________________________
Warsoma Djohan / Prodi. Matematika FMIPA-ITB / MA2251/2010/ 14

ALGORITMA MENGGANTI LAMPU PIJAR

Versi 1.
1. Lepaskan lampu yang putus.
2. Pasangkan lampu yang baru.

Versi 2.
Ambil tangga dan posisikan di bawah lampu yang putus.
Ambil lampu baru dengan daya (watt) yang sama.
Panjat tangga tersebut sampai lampu dapat diraih.
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.

WD2010

1.
2.
3.
4.

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.

______________________________________________________________________________________________
Warsoma Djohan / Prodi. Matematika FMIPA-ITB / MA2251/2010/ 15

DIAGRAM ALIR

Input / Masukan

Keputusan

Output / Keluaran

Pengulangan / loop

WD2010

Penugasan

Start dan Stop

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
bahasa pemrograman tertentu.

implementasinya pada

Sejak era tahun 1980-an penulisan dengan diagram alir mulai


ditinggalkan, kecuali untuk menuliskan langkah-langkah global sebuah
algoritma.

______________________________________________________________________________________________
Warsoma Djohan / Prodi. Matematika FMIPA-ITB / MA2251/2010/ 16

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.

Mulai

WD2010

Test_1, Test_2,
Test_3, Test_4

NR := (Test_1 + Test_2 +
Test_3 + Test_4) / 4.0

NR < 50

Y
Anda tidak lulus,
nilai : , NR

Anda lulus,
nilai: , NR

Selesai

Pelajari diagram alir di atas dan gunakan data test untuk mengujinya.
______________________________________________________________________________________________
Warsoma Djohan / Prodi. Matematika FMIPA-ITB / MA2251/2010/ 17

KODE SEMU / PSEUDO CODE

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)

a2 + b2

4. [keluaran / output]
5. [mengakhiri algoritma]
Exit

WD2010

Write ('panjang sisi miring = ', Hypotenusa)

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.

______________________________________________________________________________________________
Warsoma Djohan / Prodi. Matematika FMIPA-ITB / MA2251/2010/ 18

Pelacakan Algoritma / Algorithm Tracing

Pelacakan algoritma Pythagoras


Siku_1

Siku_2

SQ1

SQ2

Hypotenusa

16

16

16

Output

WD2010

Langkah

panjang sisi miring = 5

Pelacakan Algoritma adalah proses menjalankan algoritma tersebut langkah 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 ?

______________________________________________________________________________________________
Warsoma Djohan / Prodi. Matematika FMIPA-ITB / MA2251/2010/ 19

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.
1. [membaca data masukan]
Read (Test1, Test2, Test3, Test4]
2. [menghitung nilai rata-rata]
Rata_2 := (Test1 + Test2 + Test3 + Test4) / 4

4. [mengakhiri algoritma]
Exit

ALGORITMA REPORT

WD2010

3. [mencetak hasil]
Write ('Nilai akhir = ', Rata_2)

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. [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
Write ('Nilai praktikum
Write ('Nilai MidTest
Write ('Nilai ujian akhir
Write ('Nilai akhir

:', Nama)
:', Prak)
:', MidTest);
:', TAkhir)
:', NA)

4. [mengakhiri algoritma]
Exit

______________________________________________________________________________________________
Warsoma Djohan / Prodi. Matematika FMIPA-ITB / MA2251/2010/ 20

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 x1, x2, ", x5.
Buat algoritma untuk menghitung nilai rata-rata dan standard deviasinya.
Rumus standard deviasi:
ratanya.

1
4

5
1 ( xi x) 2 , x adalah

nilai rata-

a x 2 + b x + c = 0.

WD2010

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

ax + by = c

dx + ey = f

x=

ce bf
ae bd

Buat algoritma untuk membaca koefisien


dan mencetak solusinya.

y=

af cd
ae bd

a , b , " , f serta menghitung

7. Seekor kura-kura berlari dari garis start dengan kecepatan V1 cm/detik.


k detik kemudian seekor kancil mulai berlari dari garis start dengan kecepatan V2 cm/detik. Buat algoritma untuk menentukan waktu yang diperlukan 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.

______________________________________________________________________________________________
Warsoma Djohan / Prodi. Matematika FMIPA-ITB / MA2251/2010/ 21

BAHASA PASCAL

Pencipta:
Prof. Niklaus Wirth
Eidgenossiche Technische Hochschule
Switzerland
1960

WD2010

Keunggulan:
Bahasa pemrograman prosedural dengan struktur paling baik

Mempunyai berbagai dialek


Microsoft Pascal
Waterloo Pascal
UCSD Pascal
Turbo Pascal
Borland Pascal

______________________________________________________________________________________________
Warsoma Djohan / Prodi. Matematika FMIPA-ITB / MA2251/2010/ 22

KERANGKA PROGRAM TURBO / BORLAND PASCAL

Program nihil_1;
Uses Dos, Crt ;

[ Deklarasi Konstanta ]
[ Deklarasi Tipe ]
[ Deklarasi Variabel ]
[ Deklarasi Fungsi ]
[ Deklarasi Prosedur ]

Begin
(* ini komentar *)
End.

Begin

Program nihil_1; Uses

Program utama
( Main program )

Dos,
Crt ;

WD2010

Program <nama program>;


Uses Dos, Crt ;

Begin (*

ini komentar *) End.

End.

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.

______________________________________________________________________________________________
Warsoma Djohan / Prodi. Matematika FMIPA-ITB / MA2251/2010/ 23

TIPE-TIPE DATA PADA BORLAND PASCAL 7

Range bilangan

Real
Single
Double
Extended
Comp
Tipe data

(2.9E-39 ... 1.7E38)


(1.5E-45 ...3.4E38)
(5.0E-324 ... 1.7E308)
(3.4E-4932 ... 1.1E4932)

19 20

-9.2E18 ... 9.2E18

19 20

Range angka
0 ... 255

Word

0 ... 65535

ShortInt

-128 ... 127

Integer

-32768 ... 32767

LongInt

-2147483648 ... 2147483647

'W'
'+'

'_'
'&'

78
15 16

False

True

String
'$'

11 12

Boolean

Byte

Char

Ketelitian
(digit / angka)

WD2010

Tipe data

'3456'

'Matematika ITB'

'MA-281'

'US $ 500 # A @'

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.

______________________________________________________________________________________________
Warsoma Djohan / Prodi. Matematika FMIPA-ITB / MA2251/2010/ 24

VARIABEL
Format deklarasi / pemesanan variabel:

: <tipe data> ; (* keterangan 1 *)


: <tipe data> ; (* keterangan 2 *)
: <tipe data> ; (* keterangan 3 *)
: <tipe data> ; (* keterangan n *)

WD2010

Var
<nama variabel 1>
<nama variabel 2>
<nama variabel 3>
.
.
.
<nama variabel n>

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

Var
: String ; (* nama mahasiswa *)

: Integer ;

Test_1 : Real ;

(* nilai test ke satu *)

a, b, c : Real ;

Test_2 : Real ;

(* nilai test ke dua *)

nama

NR

(* nilai rata-rata *)

c1, c2 : Char ;

: Real ;

: String ;

______________________________________________________________________________________________
Warsoma Djohan / Prodi. Matematika FMIPA-ITB / MA2251/2010/ 25

OPERATOROPERATOR
Operator Aritmatika
Operator
+ -

Fungsi
tambah & kurang

kali & bagi-real

bagi-integer & sisa pembagian-integer

div

mod

Hirarki

Operator Relasional
Fungsi

Hirarki

sama dengan & tidak sama dengan

>

>=

lebih besar & lebih besar atau sama dengan

<

<=

lebih kecil & lebih kecil atau sama dengan

Operator Logika
Operator

Fungsi

Hirarki

AND

logika AND

OR

logika OR

NOT

logika NOT

XOR

logika XOR

WD2010

Operator
= <>

Pada Pascal tidak ada operator untuk pangkat.

Penggunaan operator relasional dan logika akan dibahas di belakang.


Tentukan hasil dari ekspresi-ekspresi berikut:
7/3

7 div 3

7 mod 3

17 div 3 mod 2 / 3

______________________________________________________________________________________________
Warsoma Djohan / Prodi. Matematika FMIPA-ITB / MA2251/2010/ 26

BEBERAPA FUNGSI & PROSEDUR PUSTAKA


PADA BORLAND PASCAL
Nama Fungsi
Abs
ArcTan
Chr

Keterangan
Returns the absolute value of the argument.
Returns the arc tangent of the argument.
Returns a character with a specified ordinal number.
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.

WD2010

Copy

Ln

Returns the natural logarithm of the argument.

Ord

Returns the ordinal number of an ordinal-type value.

Pi
Pos

Returns the value of Pi.


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.

______________________________________________________________________________________________
Warsoma Djohan / Prodi. Matematika FMIPA-ITB / MA2251/2010/ 27

READ / READLN dan WRITE / WRITELN

Format:
Read
(var1, var2, ..., varn);
Readln (var1, var2, ..., varn);
Write
(ekspr1, ekspr2, ..., eksprn);
Writeln (ekspr1, ekspr2, ..., eksprn);

Contoh 2
.
.
.
Write ('Masukan nilai A dan B: ');
Readln (A, B);
R := B / A;
T := B mod A;
Q := A * B + R;
.
.
.

Read / Readln

WD2010

Contoh 1
.
.
.
Write ('Masukan nilai A : ');
Readln (A);
Write ('Masukan nilai B : ');
Readln (B);
Write (A);
Writeln (A+B, ' ', A-B);
Write (B);
.
.
.

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.

______________________________________________________________________________________________
Warsoma Djohan / Prodi. Matematika FMIPA-ITB / MA2251/2010/ 28

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.

WD2010

FORMAT PENCETAKAN PADA BORLAND PASCAL

1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6
3 1 7
1 2 3 . 4 5 0
W

1 . 2 3 4 5 0 0 0 0 0 E + 0 2
M a t e m a t i k a

t r u e

______________________________________________________________________________________________
Warsoma Djohan / Prodi. Matematika FMIPA-ITB / MA2251/2010/ 29

WD2010

EDITOR BORLAND PASCAL

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

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.

______________________________________________________________________________________________
Warsoma Djohan / Prodi. Matematika FMIPA-ITB / MA2251/2010/ 30

INSTRUKSI KONDISIONAL

ekspresi
boolean
Y

Y
blok
instruksi 1

If <ekspresi boolean>
Then
blok
instruksi 1

blok
instruksi 1

blok
instruksi 2

WD2010

ekspresi
boolean

If <ekspresi boolean>
Then
blok
instruksi 1
Else

blok
instruksi 2

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 dibandingkan dengan simbol 'sama dengan', tetapi menggunakan
kriteria |r1 r2| < eps dengan eps bilangan positif yang kecil.

______________________________________________________________________________________________
Warsoma Djohan / Prodi. Matematika FMIPA-ITB / MA2251/2010/ 31

CONTOH PENGGUNAAN INSTRUKSI KONDISIONAL

Algoritma Display.
Algoritma ini membaca dua buah bilangan bulat V1 dan V2,
kemudian mencetak yang terbesar.

WD2010

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, kemudian mencetak yang terbesar.
1. Read (A, B, C)
2. If A > B
Then If A > C
Then max :=
Else max :=
Else If B > C
Then max :=
Else max :=
3. Write ('bilangan
4. Exit

A
C

B
C
terbesar bernilai : ', max)

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

______________________________________________________________________________________________
Warsoma Djohan / Prodi. Matematika FMIPA-ITB / MA2251/2010/ 32

INSTRUKSI KONDISIONAL PADA BORLAND PASCAL

Instruksi If ... Then ...

Instruksi If ... Then ... Else ...

If <ekspresi boolean> Then


Begin

If <ekspresi boolean> Then


Begin

blok
instruksi 1
End;

blok
instruksi 1
End Else
Begin

End;

WD2010

blok
instruksi 2

'blok instruksi 1' dan 'blok instruksi 2' dapat memuat blok instruksi kondisional yang lain (nested).
Bila blok instruksi hanya terdiri dari satu perintah maka kata kunci 'Begin'
dan 'End' boleh dihilangkan.
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.
______________________________________________________________________________________________
Warsoma Djohan / Prodi. Matematika FMIPA-ITB / MA2251/2010/ 33

SOAL-SOAL LATIHAN 2 (Instruksi IF)


1. Diberikan koefisien dari persamaan kuadrat a x + b x + c = 0.
algo-ritma untuk menghitung akar-akar realnya (bila ada).

Buat

2. Diberikan koefisien dari persamaan kuadrat a x + b x + c = 0.


algo-ritma untuk menghitung semua akar-akarnya.

Buat

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:
Bonus
Rp. 1.000.000,00
Rp. 750.000,00
Rp. 500.000,00
Rp. 250.000,00
Rp.
50.000,00

WD2010

jumlah jam lembur 2/3 * jam absen


> 40 jam
> 30 jam tetapi <= 40jam
> 20 jam tetapi <= 30 jam
> 10 jam tetapi <= 20 jam
<= 10 jam

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 aebd = 0 . 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.

______________________________________________________________________________________________
Warsoma Djohan / Prodi. Matematika FMIPA-ITB / MA2251/2010/ 34

INSTRUKSI PENGULANGAN (LOOP)

ekspresi
boolean

i := 1, 2, ..., n

Y
Blok
Instruksi

Blok
Instruksi

WD2010

For i := 1, 2, ..., n

Blok
Instruksi

While <ekspr. Boolean>


Blok
Instruksi

Pengulangan diperlukan untuk memproses sekumpulan instruksi yang


ben-tuknya serupa dan perlu dilakukan beberapa kali.
Ilustrasi: Pemrosesan data mahasiswa
menghitung n! = 1 2 3 " n

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.

______________________________________________________________________________________________
Warsoma Djohan / Prodi. Matematika FMIPA-ITB / MA2251/2010/ 35

PENGULANGAN TUNGGAL DAN BERSARANG

i
-2
-1
0
1
2
3
4
5
6
7
8
9
10

A
0
-2
-3
-3
-2
0
3
7
12
18
25
33
42
52

B
0
1
2
3
4
5
6
7
8
9
10
11
12
13

A := 0
For i := 1,2,...,3
A := A + i^2
For j := 9,10,...,11
A := A + j

i
1
1
1
1
2
2
2
2
3
3
3
3

9
10
11
9
10
11
9
10
11

A
0
1
10
20
31
35
44
54
65
74
83
93
104

WD2010

A := 0
B := 0
For i := -2,-1,...,10
A := A + i
B := B + 1

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.

______________________________________________________________________________________________
Warsoma Djohan / Prodi. Matematika FMIPA-ITB / MA2251/2010/ 36

CONTOH PENGGUNAAN PERINTAH PENGULANGAN

Algoritma FAKTORIAL2
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

1. Read (n)
2. Fak := 0;
3. i := 1;
4. While i <= n
Fak := Fak * i
i := i + 1;
5. Exit

WD2010

Algoritma FAKTORIAL1
Algoritma ini membaca bilangan
bulat n dan menghitung nilai
faktorialnya.

Ubahlah algoritma berikut dalam


bentuk pengulangan While

Ubahlah algoritma berikut dalam


bentuk pengulangan For

1. n := 10
2. sum := 0;
3. For i := 1, 2, ..., n
sum := sum + i
4. Write (sum)

1. i := 1
2. sum := 0;
3. While sum <= 100
sum := sum + 1.0/i
i := i + 1
4. Write (sum)

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 ?

______________________________________________________________________________________________
Warsoma Djohan / Prodi. Matematika FMIPA-ITB / MA2251/2010/ 37

INSTRUKSI PENGULANGAN PADA BORLAND PASCAL


Instruksi Pengulangan FOR
For <counter> := <n>

To
<m> Do
DownTo

Begin

counter, n dan m : data skalar


gunakan To bila indeks naik
gunakan DownTo bila indeks

Blok
Instruksi

Instruksi Pengulangan REPEAT

Instruksi Pengulangan WHILE

Repeat

While <ekspresi boolean> Do


Begin

Blok
Instruksi

Blok
Instruksi

Until <ekspresi boolean> ;


End;

Fak := 1;
For i := 1 to n Do
Begin
Fak := Fak * i;
End;

WD2010

turun.

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;

______________________________________________________________________________________________
Warsoma Djohan / Prodi. Matematika FMIPA-ITB / MA2251/2010/ 38

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:

S1 = 1, S2 = 1, Sn = Sn1 + Sn2 n 3
Buat algoritma untuk membaca nilai n lalu menghitung nilai Sn
(Buat dua buah, dengan instruksi For dan While).

WD2010

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 berulangulang 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'

______________________________________________________________________________________________
Warsoma Djohan / Prodi. Matematika FMIPA-ITB / MA2251/2010/ 39

INSTRUKSI KONDISIONAL MAJEMUK


Tabel logika AND
c2
true
false
true
false

c1 AND c2
true
false
false
false

Tabel logika XOR


c1
true
true
false
false

c2
true
false
true
false

c1 XOR c2
false
true
true
false

c1
true
true
false
false

c2
true
false
true
false

c1 OR c2
true
true
true
false

Tabel logika NOT


c1
true
false

NOT c1
true
false

WD2010

c1
true
true
false
false

Tabel logika OR

c1 dan c2 merupakan ekspresi boolean

Instruksi kondisional majemuk digunakan untuk mengevaluasi sebuah


ekspresi yang terdiri dari dua buah / lebih ekspresi boolean.
Contoh:

Algoritma Max_3_Revisi1.
Algoritma ini membaca tiga buah bilangan bulat A, B, dan C,
kemudian mencetak yang terbesar.
1.
2.
3.
4.
5.
6.

Read (A, B, C)
If (A>B) AND (A>C) Then max := A
If (B>A) AND (B>C) Then max := B
If (C>A) AND (C>B) Then max := C
Write ('bilangan terbesar bernilai : ', max)
Exit

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 '<=' ?

______________________________________________________________________________________________
Warsoma Djohan / Prodi. Matematika FMIPA-ITB / MA2251/2010/ 40

DATA PRIMITIF DAN TAK-PRIMITIF

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)

p := 10.0
q := 20.0
r1 := p + q
r2 := p q
r3 := p * q
r4 := p / q

a11
a
A = 21
a31

a41

a12

a13

a22
a32

a23
a33

a42

a43

a14
a24

a34

a44

WD2010

K
x = ( x1 , x2 ," , xn )

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 kemungkinan memiliki data primitif yang berbeda. Sebagai
contoh, pada bahasa Fortran, bilangan kompleks termasuk data primitif, tetapi pada bahasa Pascal tidak.

______________________________________________________________________________________________
Warsoma Djohan / Prodi. Matematika FMIPA-ITB / MA2251/2010/ 41

ARRAY, MENGAPA DIPERLUKAN ?


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.

nama1

Nia

nilai1
nama2

48
Tuti

nilai2
nama3

82
Ani

nilai3
nama4

78
Nani

nilai4
nama5

62
Irma

nilai5
Rata_2
Output

WD2010

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

92
?

72.4
Tuti

Ani

Irma

Dapatkah algoritma di atas dimodifikasi untuk memproses kelas


yang jumlah siswanya besar, misalkan 100 siswa ?
Bagaimana jika jumlah siswa tidak diketahui dengan pasti, tetapi hanya diberi ciri bahwa siswa terakhir bernama Pono?
______________________________________________________________________________________________
Warsoma Djohan / Prodi. Matematika FMIPA-ITB / MA2251/2010/ 42

DATA TERSTRUKTUR ARRAY

17

56

837

451 -192

-3

24

31

B 1

17

56

837

-3

24

31

45

12

-421 217

58

90

37

46

-652

66

34

45

-48

23

10

-2

24

61

-23

44

61

73

25

84

32

33

29

46

-57

-213

-38

-41

75

49

92

451 -192

WD2010

Array adalah data terstruktur yang terdiri dari satu nama, tetapi mempunyai 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

______________________________________________________________________________________________
Warsoma Djohan / Prodi. Matematika FMIPA-ITB / MA2251/2010/ 43

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

nama[i] nilai[i] Rata_2 Output

Nia

48

Tuti

82

Ani

78

Nani

62

Irma

92

48

130

208

270

362

WD2010

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.

nama[i] nilai[i] Rata_2 Output


72.4

Tuti

Ani

Irma

Perubahan apa yang harus dilakukan bila siswa yang diproses berjumlah 100.

______________________________________________________________________________________________
Warsoma Djohan / Prodi. Matematika FMIPA-ITB / MA2251/2010/ 44

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

WD2010

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.

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

Modifikasilah algoritma Class_Stat_Rev3 agar data siswa dibaca secara


terus menerus dan berhenti bila yang dibaca bernama "Pono".
Petunjuk: gunakan instruksi pengulangan while.

______________________________________________________________________________________________
Warsoma Djohan / Prodi. Matematika FMIPA-ITB / MA2251/2010/ 45

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.

Var
n
:
nama :
nilai :
Rata_2:
i
:

WD2010

Program Class_Stat_Rev3;
(* implementasi algoritma Class_Stat_Rev3 pada pascal *)
Uses Dos, Crt;
Integer; (* banyaknya siswa yang diproses *)
Array [1..100] Of String; (* nama-2 siswa *)
Array [1..100] Of Real;
(* nilai-2 siswa *)
Real;
(* nilai rata-rata *)
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.

______________________________________________________________________________________________
Warsoma Djohan / Prodi. Matematika FMIPA-ITB / MA2251/2010/ 46

SOAL-SOAL LATIHAN 4 (Array 1 dimensi : VEKTOR)


G
1. Diberikan sebuah vektor integer dengan n elemen, a = (a1, a2 ,",an ) .
n

Buat algoritma untuk menghitung a i dan a i


i =1
i =1

2. Gunakan variabel vektor untuk menghitung nilai suku ke 50 dari deret


Fibonacci (lihat soal latihan 3).

n
1
(ai a ) 2

n 1 i =1

WD2010

3. Ujian MA-281 Pemrograman komputer diikuti oleh n mahasiswa dan


...
nilainya disimpan pada vektor (a1, a2, ,an). Buat algoritma untuk menghitung nilai rata-rata dan standard deviasinya. Rumus standard deviasi:

G
4. Diberikan sebuah vektor integer dengan n elemen, a = (a1, a2 ,",an ) dan
K
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 untuk menentukan indeks yang nilai mutlaknya terbesar.

6. Diketahui sebuah vektor integer a dengan n elemen. Buat algoritma


untuk menghitung nilai max | ai +1 ai |
1 i n 1

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

Ilustrasi: a = (15, 31, 23, 15, 75, 23, 41, 15, 31, 85)
Output: 15 31 23 75 41 85

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 merepresentasikan jarak/posisi terhadap huruf sebelumnya (yang sama).
Diasumsikan jarak antara dua huruf yang berbeda tidak melebihi 9.

Ilustrasi: a = ('A', 'A', 'B', 'C', 'D', 'B', 'E', 'F', 'F', 'E', 'A', 'B', 'G', 'B', 'W', 'B')
Output: 0100030013960202

______________________________________________________________________________________________
Warsoma Djohan / Prodi. Matematika FMIPA-ITB / MA2251/2010/ 47

SELECTION SORT
K

73

a2

65

a3

52

a4

24

a5

83

a6

17

a7

35

a8

96

a9

41

a10

Pada tahap pertama (pass 1), dicari elemen a yang paling


K
kecil, lalu elemen ini di-copy-kan ke elemen pertama x . SeK
lanjutnya elemen minimum dari a tersebut diganti dengan
K
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
K
K
pada posisi kedua dari x , dan elemen minimum dari a
tersebut diganti dengan 9999.

WD2010

a1

Sebuah vektor numerik a dengan n elemen, akan diurutkan


mulai dari yang terkecil sampai yang terbesar. Proses akan
menggunakan metode selection. Berikut ini disajikan langkahlangkah globalnya.

Bila proses ini dilakukan terus untuk pass 1, pass2, sampai


K
K
dengan pass n, maka seluruh isi a akan ter-copy ke x dengan
urutan mulai elemen terkecil sampai terbesar

Pass
1

10

73

73

73

73

73

73

73

73

9999

9999

65

65

65

65

65

65

65

9999

9999

9999

52

52

52

52

52

52

9999

9999

9999

9999

24

24

24

9999

9999

9999

9999

9999

9999

9999

83

83

83

83

83

83

83

83

83

9999

17

17

9999

9999

9999

9999

9999

9999

9999

9999

35

35

35

35

9999

9999

9999

9999

9999

9999

96

96

96

96

96

96

96

96

96

96

41

41

41

41

41

9999

9999

9999

9999

9999

10

9999

9999

9999

9999

9999

9999

9999

9999

9999

______________________________________________________________________________________________
Warsoma Djohan / Prodi. Matematika FMIPA-ITB / MA2251/2010/ 48

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

WD2010

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

______________________________________________________________________________________________
Warsoma Djohan / Prodi. Matematika FMIPA-ITB / MA2251/2010/ 49

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.
1. [Membaca banyaknya elemen dari vektor a]
Read (n)
2. [Membaca elemen-elemen vektor a]

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

WD2010

For i := 1,2,,n

5. Exit

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 pengurutan tersebut tidak menggunakan vektor tambahan x.
______________________________________________________________________________________________
Warsoma Djohan / Prodi. Matematika FMIPA-ITB / MA2251/2010/ 50

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.
K
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 terkecil. Selanjutnya elemen ini ditukarkan dengan elemen pertama. Dengan demikian elemen terkecil sudah berada pada posisi pertama.

WD2010

Pada pass 2, dicari indeks pada a , mulai posisisi kedua, yang elemennya terkecil. Selanjutnya elemen ini ditukarkan dengan elemen kedua. Dengan demikian 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 elemen ke i tersebut sudah berada pada posisi ke-i.
Untuk mengurutkan semua data diperlukan proses sebanyak pass.

Pass
1

10

73

65

65

17

17

17

17

17

17

17

17

52

52

52

24

24

24

24

24

24

24

24

24

24

52

35

35

35

35

35

35

83

83

83

83

83

41

41

41

41

41

17

17

65

65

65

65

52

52

52

52

35

35

35

35

52

52

65

65

65

65

96

96

96

96

96

96

96

96

73

73

41

41

41

41

41

83

83

83

83

83

10

73

73

73

73

73

73

73

96

96

______________________________________________________________________________________________
Warsoma Djohan / Prodi. Matematika FMIPA-ITB / MA2251/2010/ 51

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]

MinIdx := 2
For i := 3,4,,n

WD2010

Pass 2

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]

______________________________________________________________________________________________
Warsoma Djohan / Prodi. Matematika FMIPA-ITB / MA2251/2010/ 52

Algoritma Selection_Sort_Rev1
Diberikan vektor numerik a dengan n elemen, algoritma ini menukarnukarkan 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.
1. [Membaca banyaknya elemen dari vektor a]
Read (n)
2. [Membaca elemen-elemen vektor a]
For i := 1,2,,n

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

WD2010

Read (a[i])

If MinIdx <> Pass Then a[Pass] a[MinIdx]


4. [Mencetak isi vektor x]
For i := 1,2,,n
Write (a[i])
5. Exit

Jumlah operasi pembandingan pada metode Selection Sort = n2 sedangkan pada metode selection sort revisi 1 adalah n(n-1)/2, Buktikan !
Ilustrasi, misalkan banyaknya data yang diurutkan n=100000 dan satu operasi pembandingan membutuhkan waktu 10-6 detik. Waktu yang dibutuhkan oleh metode selection sort adalah 10000 detik (sekitar 3 jam) sedangkan 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.

______________________________________________________________________________________________
Warsoma Djohan / Prodi. Matematika FMIPA-ITB / MA2251/2010/ 53

BASIC SEARCHING
Algoritma Linear_Search1
Diberikan vektor a, dengan n elemen. Algoritma berikut ini mencari elemen
pada vektor tersebut yang nilainya x.

WD2010

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

73

65

52

24

83

17

35

96

41

Pada kondisi terburuk, di mana data yang dicari berada pada posisi terakhir, jumlah operasi pembandingan:
Algoritma Linear_Search1 : kali
Algoritma Linear_Search2 : kali

______________________________________________________________________________________________
Warsoma Djohan / Prodi. Matematika FMIPA-ITB / MA2251/2010/ 54

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.

a1

100

a2

150

a3

200

a4

250

a5

300

a6

350

a7

400

a8

450

a9

500

WD2010

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

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.

a11

600

a12 650
a13 700

time

a10 550
Linear Search

Binary Search

a14 750
a

800
15
______________________________________________________________________________________________
Warsoma Djohan / Prodi. Matematika FMIPA-ITB / MA2251/2010/ 55

PELACAKAN ALGORITMA BINARY SEARCH


1

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


Low

High

Middle

a [Middle]

ketemu

15

450

false

15

12

650

11

10

550

10

11

12

WD2010

iterasi

false
true

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

15

450

false

15

12

650

false

13

15

14

750

false

13

13

13

750

false

______________________________________________________________________________________________
5
13
12
false
Warsoma Djohan / Prodi. Matematika FMIPA-ITB / MA2251/2010/ 56

MERGING

20

10

30

35

15

55

20

65

25

30

10

15

35

40

45

25

50

40

55

45

50

60

60

65

70

70

75

75

Algoritma Simple_Merge

WD2010

Diberikan vektor a dan b dengan n dan m elemen yang telah terurut asending.
Algoritma berikut ini menggabungkannya menjadi satu vektor c yang juga terurut asending. Variabel i, j dan k berfungsi sebagai indeks pada elemen vektor
a, b dan c yang sedang diproses. Bagian masukan dan keluaran tidak disertakan pada algoritma ini (silakan dilengkapi sendiri).
1.
2.
3.
4.

i := 1
j := 1
k := 1
[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
Merging adalah proses menggabungkan dua atau lebih vektor yang telah terurut menjadi sebuah vektor baru yang juga terurut.
a1
i

a2

an

b1
j

b2

bm

c1

c2

cn+m

______________________________________________________________________________________________
Warsoma Djohan / Prodi. Matematika FMIPA-ITB / MA2251/2010/ 57

PELACAKAN ALGORITMA SIMPLE MERGE


1

20

30

35

55

65

10

15

25

40

45

50

60

70

75

20

30

35

55

65

10

15

25

40

45

50

60

70

75

20

30

35

55

65

10

15

25

40

45

50

60

70

75

20

30

35

55

65

10

15

25

40

45

50

60

70

75

15

25

40

45

50

iter

a[i]

b[j]

a[i] b[j]

c[k]

20

10

false

10

20

15

false

15

20

25

true

20

30

25

false

25

30

40

WD2010

true

30

35

40

true

35

55

40

false

40

55

45

false

45

55

50

false

50

10

10

55

60

true

55

11

11

65

60

false

60

12

12

65

70

true

65

13

20

30

35

55

65

10

60

70

75

proses pengulangan pada langkah 4 berhenti karena


elemen a sudah habis (i=6 > n=5)

______________________________________________________________________________________________
Warsoma Djohan / Prodi. Matematika FMIPA-ITB / MA2251/2010/ 58

MERGE SORT

73

65

52

24

83

17

35

96

17

83

35

96

17

35

83

96

65

73

Pass 1
65

73

24

52
Pass 2

24

52

65

73

17

24

35

52

WD2010

Pass 3
83

96

Diketahui vektor a dengan n=2m elemen. Vektor ini akan diurutkan secara asending 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 subvektor 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 subvektor 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 subvektor terurut dengan 2k elemen, sebanyak n/2k buah.
Secara umum, untuk menyelesaikan proses pengurutan sebanyak n=2m elemen
diperlukan langkah sebanyak pass

______________________________________________________________________________________________
Warsoma Djohan / Prodi. Matematika FMIPA-ITB / MA2251/2010/ 59

KERANGKA ALGORITMA MERGE SORT


Untuk implementasi algoritma Merge Sort, diperlukan sebuah vektor tambahan 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).
b
65
73
24
52
17
83
35
96

Pass 1

a
24
52
65
73
17
35
83
96

Pass 2

b
17
24
35
52
65
73
83
96

Pass 3

WD2010

a
73
65
52
24
83
17
35
96

Misalkan ukuran vektor a adalah n. Variabel-variabel utama yang diperlukan 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.
p

Keadaan awal pada saat pass 2, subpass 1 (merging)

Telah terurut

Keadaan awal pada saat pass 2, subpass 2 (merging)


______________________________________________________________________________________________
Warsoma Djohan / Prodi. Matematika FMIPA-ITB / MA2251/2010/ 60

ALGORITMA MERGE SORT


Diberikan 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 diurut. Bagian masukan dan keluaran tidak disertakan pada algoritma ini

WD2010

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
Then For i := 1,2,, n
a[i] := b[i]
3. Exit

[jumlah pass ganjil]

______________________________________________________________________________________________
Warsoma Djohan / Prodi. Matematika FMIPA-ITB / MA2251/2010/ 61

ARRAY 2 DIMENSI (MATRIKS)

a12

a13

"

a22

a23

"

a32

a33

"

am3

%
"

am2

a1n
a2n
a3n

#
amn

Representasi lojik
array dua dimensi

Representasi fisik
array dua dimensi

WD2010

a11
a
21
a = a31

#
amn

42

52

23

31

92

17

35

a11 a12

a1n a21 a22

a2n

am1 am2

amn

73

86

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:
a[1,1] := 10
a[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
______________________________________________________________________________________________
Warsoma Djohan / Prodi. Matematika FMIPA-ITB / MA2251/2010/ 62

CONTOH PENGGUNAAN ARRAY DUA DIMENSI


Algoritma Jumlah_Baris
Diberikan sebuah matriks A dengan ukuran m x n. Algoritma ini menjumlahkan elemen-elemen pada tiap baris dan menyimpan hasilnya pada vektor c.
Variabel i dan j digunakan sebagai counter-loop.

WD2010

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

ARRAY DUA DIMENSI PADA BORLAND PASCAL


Format Pendeklarasian
Var
<nama array> : Array [nm, pq] of <tipe-data>;
n, m, p, q
<tipe-data>

: data skalar.
: 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;
______________________________________________________________________________________________
Warsoma Djohan / Prodi. Matematika FMIPA-ITB / MA2251/2010/ 63

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

WD2010

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)

Proses Bubble Sort Pada Pass 1


1

73

65

52

65

65

65

65

65

65

65

65

65

73

52

52

52

52

52

52

52

52

52

73

24

24

24

24

24

24

24

24

24

24

73

73

73

73

73

73

73

83

83

83

83

83

17

17

17

17

17

17

17

17

17

17

83

35

35

35

35

35

35

35

35

35

35

83

83

83

83

96

96

96

96

96

96

96

96

41

41

41

41

41

41

41

41

41

41

96

10

96

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.
______________________________________________________________________________________________
Warsoma Djohan / Prodi. Matematika FMIPA-ITB / MA2251/2010/ 64

5. Modifikasilah metode Merge-Sort agar dapat dipakai mengurutkan vektor


dengan ukuran sebarang. Berikut ini disajikan prosedur teknisnya
65

52

24

83

17

35

96

41

65

73

24

52

17

83

35

96

41

24

52

65

73

17

35

83

96

41

17

24

35

52

65

73

83

96

41

17

24

35

41

52

65

73

WD2010

73

83

96

6. Diberikan sebuah matriks A ukuran nm. Buat algoritma untuk menentukan


matriks transposenya dan simpan hasilnya di matriks B.
7. Diberikan sebuah matriks A ukuran nm. Buat algoritma untuk menentukan
indeks matriks tersebut yang nilai mutlaknya paling besar.
8. Diberikan sebuah matriks A ukuran nm. 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:

| a ii | >

|ai j|

i := 1, 2 , " , n

j =1, j i

10. Diberikan dua buah matriks A dan B, masing-masing ukuran nm. Buat
algoritma untuk menjumlahkan kedua matriks tersebut dan menyimpan
hasilnya pada matriks C.
11. Diberikan sebuah matriks A ukuran nm 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 nm dengan
matriks B ukuran mp. Hasilnya simpan di matriks C.
______________________________________________________________________________________________
Warsoma Djohan / Prodi. Matematika FMIPA-ITB / MA2251/2010/ 65

SUBALGORITMA / SUBPROGRAM / SUBROUTINE


Function dan Procedure
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.

WD2010

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 memanfaatkan komponen-komponen program yang sudah tersedia. Yang dimaksudkan dengan komponen-komponen di sini adalah program-program aplikasi 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 pemrogram 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.

______________________________________________________________________________________________
Warsoma Djohan / Prodi. Matematika FMIPA-ITB / MA2251/2010/ 66

ILUSTRASI PEMROSESAN DATA MAHASISWA

PROGRAM UTAMA
PEMROSESAN DATA MAHASISWA

SUBROUTINE

PEMASUKAN

PENCETAKAN

WD2010

SUBROUTINE

DATA

DATA

SUBROUTINE
PEMROSESAN
DATA

SUBROUTINE

SUBROUTINE

PENAMBAHAN

PENGHAPUSAN

DATA

DATA

SUBROUTINE
SUBROUTINE

PERBAIKAN

PENGURUTAN

DATA

DATA

Program Utama berfungsi untuk mengatur urutan pemrosesan yang


harus dilakukan.
______________________________________________________________________________________________
Warsoma Djohan / Prodi. Matematika FMIPA-ITB / MA2251/2010/ 67

FUNCTION
Untuk memudahkan pembuatan program komputer, bahasa-bahasa
pemrograman tingkat tinggi pada umumnya telah dilengkapi dengan fungsifungsi 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:

k := sin(1 ) + cos( 2 )

WD2010

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 parameterparameter suatu fungsi pada bahasa pemrograman tertentu biasanya
dicantumkan pada manual dari bahasa tersebut.
Diagram di bawah ini menggambarkan aliran algoritma yang menggunakan
fungsi.
Main Program

Function SIN
2

k := sin(1 ) + cos( 2 )

Function COS
4
1.
2.
3.
4.

Control transfer to function SIN


Return from Function SIN
Control transfer to function COS
Return from Function COS

______________________________________________________________________________________________
Warsoma Djohan / Prodi. Matematika FMIPA-ITB / MA2251/2010/ 68

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 f ( x, y ) = sin( x y ) . 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.

Function Average (value1, value2, value3)


1. [menghitung rata-rata]
av := (value1 + value2 + value3) / 3.0
2. Return (av)

Algoritma Test_Average

WD2010

Berikut ini disajikan tatacara penulisan fungsi dalam bahasa algoritma serta
penggunaannya dalam sebuah program.

Algoritma ini mengilustrasikan penggunaan fungsi Average dengan


berbagai parameter.
1.
2.
3.
4.
5.
6.
7.
8.

A := 2.0
B := 6.1
C := 7.5
D := Average (A, B, C)
Write (D)
E := Average (C, A, B) + Average (B, 3.2, A+7)
Write (E)
Exit

1.

Function digunakan untuk mengevaluasi suatu ekspresi yang menghasilkan sebuah nilai.

2.

Nama parameter pada sebuah function saling bebas dengan nama


parameter pada pemanggil fungsi. Bahkan parameter pada pemanggil
fungsi dapat berupa ekspresi.

______________________________________________________________________________________________
Warsoma Djohan / Prodi. Matematika FMIPA-ITB / MA2251/2010/ 69

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.

WD2010

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

______________________________________________________________________________________________
Warsoma Djohan / Prodi. Matematika FMIPA-ITB / MA2251/2010/ 70

Procedure Tukar (x, y)


[menukarkan isi parameter x dengan y]
1.
2.
3.
4.

temp := x
x := y
y := x
Return

Algoritma Sort_3

1.
2.
3.
4.
5.
6.

Read (a, b, c)
If a > b Then Tukar (a,b)
If b > c Then Tukar (b,c)
If a > b Then Tukar (a,b)
Write (a, b, c)
Exit
Pelacakan algoritma Sort_3
Kasus

WD2010

Algoritma ini membaca tiga buah bilangan a, b dan c, lalu mengurutkannya secara asending. Proses penukaran isi variabel dilakukan
menggunakan prosecure Tukar.

Output

3 5 7

2 6 9

______________________________________________________________________________________________
Warsoma Djohan / Prodi. Matematika FMIPA-ITB / MA2251/2010/ 71

SOAL-SOAL LATIHAN 6 : FUNCTION


1. Definisikan sebuah dengan sebuah fungsi dengan sebuah parameter
x ( x 0) untuk menghitung nilai
1
e
x5
x

1 . 432

WD2010

2. Definisikan sebuah fungsi dengan parameter x dan n untuk menghitung

______________________________________________________________________________________________
Warsoma Djohan / Prodi. Matematika FMIPA-ITB / MA2251/2010/ 72

Anda mungkin juga menyukai