modul mata kuliah

advertisement
MODUL MATA KULIAH
ALGORITMA DAN PEMROGRAMAN 2
STIMIK EL RAHMA
JOGJAKARTA 2015
JURUSAN : SISTEM INFORMASI
SEMESTER GENAP 2015
MATA KULIAH
: LOGIKA DAN ALGORITMA
REVIEW
DESKRIPSI SINGKAT MATA KULIAH
Mata Kuliah ini bermaksud untuk mempelajari dasar dari langkah-langkah dalam membuat
design/rancangan pemecahan masalah secara terstruktur. Rancangan pemecahan masalah ini lebih dikenal
dengan nama Algoritma. Yang selanjutnya selanjutnya algoritma ini bisa diimplementasikan pada program,
tidak bergantung bahasa pemrograman yang akan akan digunakan.
MATERI MATA KULIAH
1. Pendahuluan ( Pengenalan Algoritma)
2. Struktur dasar Algoritma (Notasi, Kondisi, Aksi), nama dan harga
3. Tipe data dasar (Boolean, Integer, Real, Char, String)
4. Tipe Bentukan (Record, Procedure, Fungsi).
5. Pengkondisian (if_endif, if_else_endif, case_endcase)
6. Perintah Pengulangan (while_endwhile), (repeat_until) dan (for_endfor)
7. Procedure (variabel global dan lokal) dan parameter input, output dan input/output
8. Function (parameter input dan output)
9. Array (larik)
DAFTAR PUSTAKA
1. Inggriani Liem , ”Algoritma dan Pemrograman”, ITB,1992
2. Knuth, “Fundamental of Algorithm”, Addison Wisley, 1978
3. Mewati Ayub, Ir “Dasar-Dasar Pemrograman”, DCI, 1994
4. Niklause Wirth, “Algorithms + Data Structures = Programs”, Prentice Hall, 1991
5. Antony Pranata, “Algoritma dan Pemrograman”,Graha Ilmu, Yogyakarta, 2005
6. Rinaldi Munir, “Algoritma dan Pemrograman dalam Bahasa Pascal dan C”, Informatika, 2005
MATERI 4
NOTASI PENGKONDISIAN/PENCABANGAN
Struktur runtunan hanya terdapat pada program sederhana. Pada umumnya masalah yang akan diselesaikan
memiliki beberapa alternatif pelaksanaan aksi. Suatu aksi hanya dilakukan bila persyaratan atau kondisi
tertentu dipenuhi.
Pernyataan (statement) ataupun instruksi pada program, seringkali tidak hanya dilaksanakan sekali jalan
saja, atau tanpa kondisi,akan tetapi :
 Pada bagian penting, perlu mempertimbangkan kondisi dan persyaratan agar dapat menempuh
kelanjutan keputusan yang tepat.
 Tidak jarang menghadapi berbagai alternatif, dan harus menentukan pilihan yang memberikan
penyelesaian dengan tepat.
Struktur Kontrol Pertimbangan Kondisi dan Keputusan (Pencabangan)
Adakalanya dalam kehidupan sehari-hari kita dihadapkan pada sebuah kondisi atau lebih, dimana kita harus
memilih salah satunya. Begitu pula dengan program, pada suatu saat kita perlu membuat suatu aturan untuk
melakukan pemilihan terhadap suatu kondisi, yang memungkinkan kita untuk membuat deretan instruksi
yang sama, namun menghasilkan eksekusi yang berbeda-beda.
Notasi Pencabangan adalah notasi yang pada umumnya akan menyelesaikan suatu kasus dengan beberapa
alternatif pelaksanaan aksi.
Mengapa dibutuhkan?
 Untuk membantu dalam menentukan alternatif solusi pelaksanaan aksi yang akan dilakukan
berdasarkan kondisi yang telah ditentukan
Penentuan kondisi dan aksi yang dilakukan bergantung pada jumlah kasus yang terdapat pada suatu
masalah tersebut : satu kasus, dua kasus, atau bahkan lebih.
Algoritma Notasi Pencabangan dibagi berdasarkan kasus:
Satu Kasus (IF - THEN)
Dua Kasus (IF – THEN - ELSE)
Tiga Kasus atau lebih (IF – THEN – ELSE, CASE)
4.1 SATU KASUS (IF - THEN)
Notasi algoritma untuk analisis dengan satu kasus adalah dengan menggunakan konstruksi IF – THEN
(jika-maka) dalam bentuk :
IF
kondisi_dipenuhi (true) THEN
Laksanakan_aksi
EndIf
Ket : Kondisi → berupa ekspresi yang menghasilkan true atau false
Aksi → instruksi/pernyataan yang akan dilaksanakan jika kondisi yang dipasangkan
dengan aksi yang bersangkutan dipenuhi/bernilai benar (true). Bila kondisi
bernilai
salah
(false), tidak ada pernyataan apapun yang dikerjakan.
Kata endif sengaja ditambahkan untuk
mempertegas awal dan akhir struktur IF-THEN.
Notasi Pascal :
if
kondisi_dipenuhi (true) then
Laksanakan_aksi
Jika Aksi lebih dari satu buah, maka :
if
kondisi_dipenuhi (true) then
begin
Laksanakan_aksi
end;
contoh-contoh:
(a)
if x > 100 then
x :=x+1
endif
(b)
if kar = ‘*’ then
stop:=true
endif
(c)
if max >10 then
max:=x
endif
Contoh Satu Kasus:
Tulis algoritma yang membaca sebuah bilangan bulat dari suatu piranti masukan. Diminta mencetak
pesan ”Bilangan genap” jika bilangan tersebut genap.Bilangan genap adalah bilangan yang habis dibagi 2.
Program Genap
Deklarasi :
Bil : integer
Algoritma :
Write (’Masukan Bilangan :’)
Read (Bil)
If Bil mod 2 =0 Then
Write (’Bilangan Genap’)
Endif
Pascal :
Program Genap;
Var
Bil : integer;
Begin
Write (’Masukan Bilangan :’);
Read (Bil);
If Bil mod 2 =0 Then
Write (’Bilangan Genap’);
End.
4.2 DUA KASUS (IF – THEN - ELSE)
Notasi algoritma untuk analisis dengan dua kasus adalah dengan menggunakan konstruksi IF – THEN ELSE (jika-maka-kalau-tidak) dalam bentuk:
IF
kondisi_dipenuhi (true) THEN
Laksanakan_aksi1
Else
{kondisi_tidak dipenuhi (false)}
Laksanakan_aksi2
EndIf
Notasi Pascal :
if
kondisi_dipenuhi (true) then
Laksanakan_aksi1
else
{kondisi_tidak dipenuhi
(false)}
Laksanakan_aksi2;
Keterangan :
Aksi1 dilaksanakan jika kondisi bernilai benar, sebaliknya jika kondisi bernilai salah maka
Aksi2 akan dilaksanakan, bisa diperhatikan bahwa else menyatakan ingkaran (negation) dari kondisi.
Contoh-contoh:
(a)
if a>0 then
write(’bilangan positif’)
else
write(’bukan bilangan positif’)
endif
(b)
if (k mod 2 = 0) then
write(’bilangan genap’)
else
write(’bilangan ganjil’)
endif
Contoh Dua Kasus:
Tulislah program yang membaca sebuah bilangan bulat dari suatu piranti masukan. Diminta mencetak
pesan ”Bilangan genap” jika bilangan tersebut adalah genap, atau ”Bilangan ganjil” jika bilangan
tersebut adalah ganjil.
Program Genap_Ganjil
Deklarasi :
Bil : integer
Algoritma :
Write (’Masukan Bilangan :’)
Read (Bil)
If Bil mod 2 =0 Then
Write (’Bilangan Genap’)
Else
Write (’Bilangan Ganjil’)
Endif
Pascal :
Program Genap_Ganjil;
Var
Bil : integer;
Begin
Write (’Masukan Bilangan :’);
Read (Bil);
If Bil mod 2 =0 Then
Write (’Bilangan Genap’)
Else
Write (’Bilangan Ganjil’);
end.
4.3 TIGA KASUS Atau Lebih
Notasi algoritma untuk analisis dengan tiga kasus atau lebih adalah dengan menggunakan
konstruksi IF – THEN - ELSE bertingkat-tingkat dalam bentuk :
IF
kondisi1_dipenuhi (true) THEN
Laksanakan_aksi1
Else
IF
kondisi2_dipenuhi THEN
Laksanakan_aksi2
Else
IF
kondisiN_dipenuhi THEN
Laksanakan_aksiN
Else
Laksanakan_aksi_lain
EndIf
EndIf
EndIf
Contoh Tiga Kasus Atau Lebih:
Tulislah program yang membaca sebuah bilangan bulat, lalu menentukan apakah bilangan tersebut positif,
negatif, atau nol.
Program Cek_Bilangan
Deklarasi :
Bil : integer
Algoritma :
Write (’Masukan Bilangan :’)
Read (Bil)
If Bil > 0 Then
Write (’Bilangan Positif’)
Else
If Bil < 0 Then
Write (’Bilangan Negatif’)
Else
Write (’Bilangan Nol’)
Endif
Endif
Pascal :
Program Cek_Bilangan;
Var
Bil : integer;
Begin
Write (’Masukan Bilangan :’);
Readln (Bil);
If Bil > 0 Then
Write (’Bilangan Positif’)
Else
If Bil < 0 Then
Write (’Bilangan Negatif’)
Else
Write (’Bilangan Nol’);
end.
4.4 Struktur Kontrol Pemilihan Alternatif (Case )
Untuk masalah dengan dua kasus atau lebih, struktur CASE, dapat menyederhanakan penulisan
if_then_else.
CASE... OF... merupakan struktur kontrol pemilihan alternatif, dimana dapat dipilih salah satu pelaksanaan
aksi diantara sejumlah alternatif kondisi yang disajikan.
Notasi Algoritmik :
CASE
<ekspresi>
OF
Alternatif_Kondisi1 : laksanakan_aksi1
Alternatif_Kondisi2 : laksanakan_aksi2
Alternatif_KondisiN : laksanakan_aksiN
Otherwise
Laksanakan_aksi_lain
EndCase
Ket :
Ekspresi adalah sembarang ekspresi (aritmetika atau Boolean)
yang menghasilkan suatu
nilai (Konstanta). CASE memeriksa apakah nilai dari ekspresi tersebut sama dengan salah satu dari :
Alternatif_Kondisi1, Alternatif_Kondisi2,….Alternatif_KondisiN
Jika nilai ekspresi sama dengan alternatif kondisik, maka laksanakan_aksik
Jika tidak ada satupun nilai ekspresi yang cocok, maka pernyataan sesudah Otherwise dikerjakan.
Otherwise bersifat opsional, artinya boleh ditulis atau tidak didalam konstruksi CASE.
Notasi Pascal :
case
<ekspresi> of
Alternatif_Kondisi1 : laksanakan_aksi1
Alternatif_Kondisi2 : laksanakan_aksi2
Alternatif_KondisiN : laksanakan_aksiN
else
Laksanakan_aksi_lain
end;
Keterangan : Alternatif_Kondisi1, Alternatif_Kondisi2,….Alternatif_KondisiN
adalah
nilai yang bertipe integer, char, atau boolean.
Contoh:
Tulislah Algoritma yang membaca seluruh bilangan bulat yang nilainya terletak antara 1 sampai 4, lalu
menuliskannya ke piranti keluaran. Misalnya : input =1, maka output=’satu’
Solusi
STRUKTUR IF-THEN-ELSE
PROGRAM KonversiAngka Teks
{mencetak kata untuk angka 1 sampai 4}
DEKLARASI:
angka:integer
ALGORITMA
read(angka)
if angka=1 then
write (’satu’)
else
if angka=2 then
write(’dua’)
else
if angka=3 then
write(’tiga’)
else
if angka=4 then
write(’empat’)
else
write(’angka yang dimasukan salah’)
endif
endif
endif
endif
Solusi
STRUKTUR CASE...OF…
Program Angka
Deklarasi :
A: integer
Algoritma :
Write (’Masukan Angka 1-4 :’)
Read (A)
Case A Of
1 : Write (’Satu’)
2 : Write (’Dua’)
3 : Write (’Tiga’)
4 : Write (’Empat’)
Otherwise
Write (’Angka
salah!’)
EndCase
yang
anda
masukan
Pascal :
Program
Var
Angka;
A : integer;
Begin
Write (’Masukan Angka 1-4 :’);
Readln (A);
Case A Of
1 : Write (’Satu’);
2 : Write (’Dua’);
3 : Write (’Tiga’);
4 : Write (’Empat’);
Else
Write (’Angka yang anda masukan
salah!’);
end;
end.
LATIHAN
1.
Buatlah algoritma untuk membaca sebuah karakter dan menentukan karakter yang dimasukan
adalah karakter ’A’ atau bukan!
2.
Buatlah algoritma untuk membaca sebuah bilangan bulat dari suatu papan ketik, lalu
mencetak pesan bahwa ”Bilangan tersebut lebih besar dari 100” jika bilangan tersebut adalah
lebih besar dari 100!
3.
Buatlah algoritma yang membaca angka tahun masehi dari papan ketik, lalu menentukan
apakah tahun tersebut merupakan tahun kabisat!
4.
Buatlah algoritma untuk menentukan bilangan yang dimasukan adalah habis dibagi 5, jika
bilangan tersebut habis dibagi 5 maka pesan tertulis ’bilangan habis dibagi 5’ jika
tidak ’bilangan tidak habis dibagi 5’!
5.
Buat Algoritma untuk membaca temperature air T (dalam satuan derajat celcius) pada tekanan
normal, lalu menentukan apakah wujud air tersebut dalam keadaan padat (T  0 C) , Cair (0
C < T <100 C) atau Gas ( T  100 C)
6.
Buat algoritma untuk menghitung Nilai Akhir :
- Input : Nilai UTS,UAS,Quiz,Tugas
- Nilai= Tugas* 0.1 + Quiz*0.2 + UTS*0.3+ UAS*0.4
- Dengan IF then Else tentukan Nilai akhir dimana :
80  Nilai  100 → Indeks A
70  Nilai < 80
→ Indeks B
55  Nilai < 70
→ Indeks C
40  Nilai < 55
→ Indeks D
0  Nilai < 40 → Indeks E
- Output : Tugas, Quiz, UTS, UAS, Nilai, Nilai_Akhir
7.
PT XYZ membutuhkan suatu program untuk perhitungan gaji pegawai dengan ketentuan
sebagai berikut:
Gol
I
II
III
IV
GajiPokok
1000000
850000
750000
500000
UpahLembur
20000
15000
12000
10000
Tunjangan
50% * Gaji Pokok
40% * Gaji Pokok
30% * Gaji Pokok
20% * Gaji Pokok
Ppn
5%
3%
2%
1%
Potongan pajak adalah ppn * GajiPokok
Para pegawai bekerja selama 150 jam, bila melebihi jam tersebut maka dihitung lembur,
kemudian pegawai yang sudah menikah mendapatkan Tunjangan sebesar 15% dari GajiPokok
Berdasarkan ketentuan tersebut, buatlah Algoritma untuk menyelesaikan permasalah tersebut!
Output yang diminta yaitu : NIK, Nama, Gol dan Gaji Bersih
Rumus :
1. GajiBersih := (GajiPokok+Tunjangan) – Potongan
2. GajiBersih := ((GajiPokok+Tunjangan)+(JamLembur*UpahLembur))-Potongan
MATERI 5
NOTASI PENGULANGAN
Salah satu kelebihan komputer dibandingkan dengan manusia adalah kemampuannya untuk mengulang
suatu instruksi, bahkan aksi, secara berulang-ulang dengan performansi yang sama. Berbeda dengan
manusia yang cenderung melakukan kesalahan jika melakukan hal yang sama karena lelah atau bosan.
Struktur pengulangan secara umum terdiri dari dua bagian :
1. Kondisi pengulangan, yaitu ekspresi boolean yang harus dipenuhi untuk melaksanakan pengulangan.
Kondisi ini ada yang dinyatakan secara ekplisit oleh pemrogram atau dikelola sendiri oleh komputer
(implisit).
2. Badan pengulangan, yaitu aksi/pernyataan yang harus diulang selama kondisi yang ditentukan untuk
pengulangan masih dipenuhi.
Disamping itu, struktur pengulangan biasanya disertai dengan bagian :
1. Inisialisasi, yaitu aksi yang dilakukan sebelum pengulangan dilakukan pertama kali.
2. Terminasi, yaitu aksi yang dilakukan setelah pengulangan selesai dilaksanakan.
Insialisasi dan terminasi tidak selalu harus ada, namun pada berbagai kasus inisisalisasi umumnya
diperlukan.
Struktur pengulangan secara umum :
<inisialisasi>
awal pengulangan
badan pengulangan
akhir pengulangan
<terminasi>
Pengulangan harus berhenti, ini yang harus dijamin oleh pemrogram. Karena algoritma yang tidak pernah
berhenti/pengulangan yang terus menerus (looping) adalah algoritma yang salah.
Struktur Kontrol pengulangan terdiri dari :
a. Pernyataan FOR
b. Pernyataan WHILE
a. Pernyataan REPEAT
5.1 Pernyataan FOR
Adalah pengulangan yang paling sederhana. Pengulangan ini dipakai jika kita mengetahui berapa kali
pengulangan akan dilakukan.
Bentuk umum pernyataan FOR ada dua macam, yaitu menaik (ascending) atau menurun
(descending).
FOR menaik
Bentuk umum struktur kontrol FOR menaik
ini, dapat dirumuskan dengan :
Notasi Algoritmik :
FOR
(nama_pencacahnilai_awal) TO (nilai_akhir)
(aksi/pernyataan)
EndFor
DO
Keterangan:
 Aksi/pernyataan adalah satu atau lebih instruksi yang diulang.
Keterangan:
 Nilai_awal dan nilai_akhir pada umumnya bilangan integer atau karakter, asal nilai_akhir ≥
nilai_awal
 Pengulangan dilaksanakan berulang-ulang tanpa kondisi atau syarat apapun dengan jumlah
ulangan= nilai_akhir – nilai_awal + 1
 Pada awalnya, pencacah diinisialisasi dengan nilai_awal. Nilai pencacah secara otomatis
bertambah satu setiap kali badan pengulangan dimasuki, sampai akhirnya nilai pencacah =
nilai_akhir.
Notasi Pascal :
for (nama_pencacah:=nilai_awal) to (nilai_akhir) do
begin
(aksi/pernyataan)
End;
Contoh :
Misalkan
adalah :
kita
ingin
mencetak
angka
1
sampai
10,
maka
algoritma
Algoritmik :
Program Tulis_nomor
Deklarasi :
nomor: integer
Algoritma :
FOR nomor1 To 10 DO
write(nomor)
EndFor
Pascal :
Program
Var
Tulis_nomor;
nomor : integer;
Begin
for nomor:= 1 to 10 do
writeln(nomor);
end.
FOR menurun
Bentuk umum struktur kontrol FOR menurun
ini, dapat dirumuskan dengan :
dan
programnya
Notasi Algoritmik :
(nama_pencacahnilai_awal) DOWNTO (nilai_akhir)
FOR
DO
(aksi/pernyataan)
EndFor
Keterangan:
 Aksi/pernyataan adalah satu atau lebih instruksi yang diulang.
 Nilai_awal dan nilai_akhir pada umumnya bilangan integer atau karakter, asal nilai_awal ≥
nilai_akhir
 Pengulangan dilaksanakan berulang-ulang tanpa kondisi atau syarat apapun dengan jumlah
ulangan= nilai_awal – nilai_akhir + 1.
 Pada awalnya, pencacah diinisialisasi dengan nilai_awal. Nilai pencacah secara otomatis
berkurang satu setiap kali badan pengulangan dimasuki, sampai akhirnya nilai pencacah =
nilai_akhir.
Notasi Pascal :
for (nama_pencacah:=nilai_awal) downto (nilai_akhir) do
begin
(aksi/pernyataan)
end;
Contoh :
Misalkan kita ingin meghitung mundur angka dari
Algoritmik :
10 sampai 1, maka algoritma dan programnya adalah :
Program hitung_mundur
Deklarasi :
nomor: integer
Algoritma :
FOR nomor10 Downto 1 DO
write(nomor)
EndFor
Pascal :
Program
Var
Hitung_mundur;
nomor : integer;
Begin
for nomor:= 10 downto 1 do
writeln(nomor);
end.
5.2
Pernyataan WHILE
Bentuk umum struktur kontrol WHILE dapat dirumuskan dengan :
WHILE
(kondisi_pengulangan) DO
(aksi/pernyataan)
EndWhile
Keterangan:
 Pengulangan bisa tidak dilakukan , jika pada saat awal, kondisi_pengulangan tidak terpenuhi
(false).
 Tidak mengetahui berapa kali pengulangan akan dikerjakan
 Kondisi pengulangan akan diperiksa sebelum masuk ke aksi / pernyataan.
 Pengulangan akan dilaksanakan berulang-ulang jika kondisi_pengulangan dipenuhi (true).
 Di dalam pernyataan, harus ada instruksi yang mengubah nilai kondisi agar pengulangan berhenti.
Notasi Pascal :
while (kondisi_pengulangan) do
begin
(aksi/pernyataan)
end;
Contoh :
Buat algoritma/program untuk menampilkan angka sesuai dengan angka yang di-input dari keyboard.
Program akan berhenti jika user meng-input angka 0 ;
Algoritmik :
Program CetakAngka
Deklarasi :
i,angka: integer
Algoritma :
write('Masukan angkanya: ')
read(angka)
i1
While (angka ≠ 0) do
write(‘Angka yang anda input:’, angka)
write('Masukan angkanya: ')
read(angka)
ii+1
EndWhile
Pascal :
Program
Var
CetakAngka;
i, angka : integer;
Begin
write('Masukan angkanya: ');
readln(angka);
i:=1;
While (angka <> 0) do
Begin
writeln(‘Angka yang anda input:’, angka);
write('Masukan angkanya: ');
readln(angka);
ii+1;
end
end.
5.3
Pernyataan REPEAT
Bentuk umum struktur kontrol REPEAT dapat dirumuskan dengan :
REPEAT
(aksi/pernyataan)
UNTIL (kondisi_berhenti)
Keterangan:
 Aksi / pernyataan akan dikerjakan minimal satu kali , karena pernyataan dilaksanakan terlebih
dahulu kemudian baru diperiksa kondisi berhenti.
 Aksi / pernyataan akan dikerjakan berulang-ulang dan akan berhenti jika kondisi berhenti
terpenuhi
 Tidak mengetahui berapa kali pengulangan akan dikerjakan
 Di dalam pernyataan, harus ada instruksi yang mengubah nilai kondisi agar pengulangan berhenti..
Notasi Pascal :
repeat
begin
(aksi/pernyataan)
end;
until (kondisi_berhenti)
Contoh :
Buat algoritma/program untuk menampilkan menu masakan sebagai berikut :
Menu Masakan
1. Ayam Goreng
2. Ayam Tulang Lunak
3. Ayam Bakar
4. Keluar
Dan membaca nomor pilihan menu yang diinput oleh user. Kemudian tampilkan pesan
nomor menu yang di-input.
Misalnya : input : 1
Output : ”Anda memilih Ayam Goreng”
Algoritmik :
sesuai dengan
Program Memilih_Menu
Deklarasi :
pilihan : char
Algoritma :
Repeat
write(‘Menu Masakan’)
write(‘1.Ayam Goreng’)
write(‘2. Ayam Tulang Lunak’)
write(‘3. Ayam Bakar’)
write(‘4. Keluar’)
write(‘Masukan pilihan anda:’)
read (pilihan)
case pilihan of
’1’ : write (‘Anda memilih Ayam Goreng’)
’2’ : write (‘Anda memilih Ayam Tulang lunak’)
’3’ : write (‘Anda memilih Ayam Bakar’)
’4’ : exit
else (‘Menu yang anda pilih salah’)
endcase
Until (pilihan=’4’)
Pascal :
Program
Var
MemilihMenu;
pilihan : char;
Begin
Repeat
writeln(‘Menu Masakan’);
writeln(‘1.Ayam Goreng’);
writeln(‘2. Ayam Tulang Lunak’);
writeln(‘3. Ayam Bakar’);
writeln(‘4. Keluar’);
write(‘Masukan pilihan anda:’);
readln (pilihan);
case pilihan of
’1’ : writeln (‘Anda memilih Ayam Goreng’);
’2’ : writeln (‘Anda memilih Ayam Tulang lunak’);
’3’ : writeln (‘Anda memilih Ayam Bakar’);
’4’ : exit;
else
writeln(‘Menu yang anda pilih salah’);
end;
Until (pilihan=’4’);
end.
Kesimpulan :
 FOR digunakan untuk proses pengulangan yang jumlah pengulangannya dapat diketahui diawal.
 WHILE fungsinya sama seperti FOR, tetapi WHILE juga dapat digunakan untuk proses yang jumlah
pengulangannya tidak dapat ditentukan sebelum eksekusi.
 REPEAT fungsinya sama seperti WHILE, kita dapat menggunakan WHILE
maupun REPEAT
untuk masalah-masalah tertentu. Tetapi, pada beberapa masalah, pemilihan WHILE atau REPEAT
bergantung kepada persoalannya. Ini artinya, ada masalah yang hanya benar bila menggunakan struktur
WHILE, tetapi bisa fatal bila menggunakan REPEAT.
Untuk mengetahui struktur mana yang lebih tepat, kita harus mengetahui
perbedaannya, yaitu :
 Pada Konstruksi REPEAT, kondisi pengulangan diperiksa pada akhir pengulangan. Jadi instruksi
di dalam badan pengulangan dilaksanakan dulu, baru pemeriksaan kondisi dilakukan.
Konsekuensinya badan pengulangan dilaksanakan paling sedikit satu kali.
 Pada konstruksi WHILE, kondisi pengulangan diperiksa di awal pengulangan. Jadi instruksi
didalam badan pengulangan hanya dapat dilaksanakan jika pemeriksaan kondisi menghasilkan
nilai true. Konsekuensinya badan pengulangan mungkin tidak akan pernah dilaksanakan, bila
kondisi pengulangan pertama kali bernilai false.
Jadi :
→ Gunakan konstruksi WHILE pada kasus yang mengharuskan terlebih dahulu
pemeriksaan kondisi objek sebelum objek tersebut dimanipulasi
→ Gunakan konstruksi REPEAT pada kasus yang terlebih dahulu memanipulasi
objek, baru kemudian memeriksa kondisi objek tersebut.
Latihan
1.
2.
3.
4.
5.
6.
7.
5.4
Tuliskanlah algoritma untuk menentukan nilai terkecil dari N buah data integer yang dibaca dari papan
ketik. Nilai N dibaca terlebih dahulu (N>0)
Buat algoritma/program untuk menampilkan kata “Saya sedang belajar pemrograman” sebanyak 50
kali.
Buat algoritma/program untuk menulis angka deret tambah mulai dari angka 0 hingga 100 dengan
pertambahan 10.
Sehingga tampilan output di layar :
0
10 20 30 40 50 60 70 80 90 100
(dengan selang 2 spasi diantara angka-angka itu).
Buat algoritma/program untuk menampilkan jumlah angka 20 bilangan asli pertama. Bilangan asli
adalah bilangan bulat dimulai dari 1,2,3,….
Buat algoritma/program untuk membuat Daftar telepon. Daftar Telepon berisi Nama dan No.Telp.
Pertama kali dibaca berapa jumlah data Nama dan No.Telp yang akan diinput, kemudian masukan data
Nama dan No.Telp sesuai dengan jumlah data yang dibaca dari keyboard.
Buat algoritma/program untuk menghitung nilai rata-rata dari N buah data bilangan bulat yang dibaca
dari keyboard. Nilai rata-rata adalah jumlah seluruh data dibagi dengan banyaknya data.
Misalnya, jika N=5 dan data bilangan yang dibaca berturut-turut adalah 2,5,3,4,2 maka nilai
rata-ratanya adalah (2+5+3+4+2)/5=16/5=3.2.
Buat algoritma untuk memeriksa apakah password dari suatu kartu ATM diterima atau ditolak.
Pakailah flag Ok bertipe Boolean. Buatlah password sebagai konstanta= ‘100107’. Pemasukan
password boleh diulang sampai 3x.
Jika password benar, Output : ‘PIN benar, lanjutkan proses’
Jika password salah, Output : ‘PIN salah, ulangi lagi’
Jika password 3x salah, Output : ‘Kartu ditolak!’
MESIN ABSTRAK
Mesin abstrak menggambarkan dalam suatu mesin terdapat pita yang bertipe karakter dan tipe numerik.
Jika Pita bertipe karakter maka akhir dari pita tersebut ditandai dengan ’ . ’ atau ’ * ’
Jika Pita bertipe numerik maka diakhiri dari pita tersebut ditandai dengan 9999
Jika Pita hanya berisi akhiran ’ . ’ , ’ * ’ dan 9999 berarti pita kosong
Contoh : Pita Karakter
S
A
Y
A
*
Arah pembacaannya
Read (Baca)
Notasi Algoritma
Pita bertipe karakter
Pita bertipe numerik
{inisialisasi}
read(x)
while x ≠ ’ * ’ do
aksi
read(x) {dibaca kembali isi mesin karakter}
endwhile
{terminasi}
{inisialisasi}
read(x)
while x ≠ 9999 do
aksi
read(x) {dibaca kembali isi mesin numerik}
endwhile
{terminasi}
Contoh Kasus untuk Mesin Karakter
Contoh 1:
Didalam pita karakter terdapat sederatan karakter yang diakhiri dengan tanda ’ * ’, tuliskan algoritma untuk
menampilkan deretan karakter tersebut!
illustrasi
S
A
Y
A
*
PROGRAM MenampilkanKarakter
{Menghitung jumlah karakter yang dimasukan}
DEKLARASI
x
: char
{data character yang dibaca dari papan ketik}
ALGORITMA
read(x) {baca data character}
while x ≠ ‘ * ’ do
write(x)
read(x)
endwhile
{x = ’*’} {kondisi setelah pengulangan berhenti}
Contoh 2:
Didalam pita karakter terdapat sederatan karakter yang diakhiri dengan tanda ’ * ’, tuliskan algoritma untuk
menghitung jumlah karakter yang dimasukan!
illustrasi
S
A
Y
A
*
Jumlah karakter adalah : 4
PROGRAM HitungJumlahKarakter
{Menghitung jumlah karakter yang dimasukan}
DEKLARASI
x
: char
{data character yang dibaca dari papan ketik}
jumlah
: integer
ALGORITMA
read(x) {baca data character}
jumlah  0 {inisialisasi}
while x ≠ ‘ * ’ do
jumlah  jumlah + 1
read(x)
endwhile
{x = ’*’} {kondisi setelah pengulangan berhenti}
write(jumlah)
Contoh Kasus untuk Mesin Numerik
Contoh 1:
Diberikan mesin bertipe integer yang terdapat sederetan angka numerik yang dimasukan dan diakhiri
dengan tanda 9999. tuliskan algoritma untuk menghitung jumlah seluruh angka tersebut!
illustrasi
1
3
4
2
9999
Jumlah seluruh angka tersebut adalah : 10
PROGRAM HitungJumlahAngka
{Menghitung jumlah seluruh bilangan yang dimasukan}
DEKLARASI
x
: integer
{data integer yang dibaca dari papan ketik}
jumlah
: integer
ALGORITMA
read(x) {baca data integer}
jumlah  0 {inisialisasi}
while x ≠ 9999 do
jumlah  jumlah + x
read(x)
endwhile
{x = 9999} {kondisi setelah pengulangan berhenti}
write(jumlah)
Contoh 2:
Diberikan mesin bertipe integer yang terdapat sederetan angka numerik yang dimasukan dan diakhiri
dengan tanda 9999. tuliskan algoritma untuk menghitung banyaknya angka positif dari deretan angka
tersebut!
illustrasi
1
-3
4
-2
-9
9999
Jumlah angka positif adalah : 2
PROGRAM BanyaknyaAngkaPositif
{Menghitung jumlah bilangan positif yang dimasukan}
DEKLARASI
x
: integer {data integer yang dibaca dari papan ketik}
jumlah
: integer
ALGORITMA
read(x) {baca data integer}
jumlah  0 {inisialisasi}
while x ≠ 9999 do
if x > 0 then
jumlah  jumlah + 1
endif
read(x)
endwhile
{x = 9999} {kondisi setelah pengulangan berhenti}
write(jumlah)
LATIHAN
Mesin Karakter
1.
Diberikan mesin bertipe karakter yang terdapat sederetan karakter yang dimasukan dan diakhiri
tanda ’ * ’. Tuliskan algoritma untuk menghitung karakter ’A’ yang dimasukan!
Ilustrasi
M
A
K
A
N
*
Jumlah karakter A : 2
2.
Tuliskan algoritma untuk menghitung jumlah kemunculan pasangan huruf ’an’ di dalam mesin
karakter. Misalkan pada contoh dibawah ini jumlah ’an’ ada 3 buah (ditandai dengan arsiran.)
Ilustrasi
P
A
N
D
A
N
G
A
N
*
Jumlah ’an’ adalah : 3
3.
Tuliskan Algoritma untuk menghitung banyaknya kata di dalam pita karakter. Kata adalah deretan
karakter bukan spasi yang diakhiri dengan spasi atau titik.
Ilustrasi
H
A
R
I
I
N
I
H
U
J
A
N
.
*
Jumlah Kata adalah : 3
Mesin Integer
1.
Diberikan mesin bertipe integer yang terdapat sederetan angka numerik yang dimasukan dan
diakhiri dengan tanda 9999. tuliskan algoritma untuk menghitung nilai rata-rata angka tersebut!
illustrasi
1
2.
3
5
6
10
9999
Diberikan mesin bertipe integer yang terdapat sederetan angka numerik yang dimasukan dan
diakhiri dengan tanda 9999. tuliskan algoritma untuk menghitung jumlah bilangan genap saja!
illustrasi
1
3.
3
5
6
10
9999
Diberikan mesin bertipe integer yang terdapat sederetan angka numerik yang dimasukan dan
diakhiri dengan tanda 9999. tuliskan algoritma untuk menghitung jumlah angka 10 saja!
illustrasi
1
10
5
6
10
9999
MATERI 6
PROCEDURE DAN FUNCTION
Program yang besar lebih sulit dimengerti dan lebih sulit lagi dalam melakukan pelacakan
kesalahan (Jika ada). Oleh karena itu, program sebaiknya dipecah menjadi beberapa sub program yang
lebih kecil. Setiap sub program melakukan komputasi yang spesifik. Sub program yang baik adalah sub
program yang independent dari program utama, sehingga programnya dapat dirancang tanpa
mempermasalahkan bagaimana sub program tersebut dilakukan, tetapi cukup memikirkan apa yang ia
lakukan. Sub program yang bagus menyembunyikan detil operasi dari bagian program yang tidak perlu
tahu tentang sub-program tersebut. Teknik pemecahan program menjadi sejumlah sub program dinamakan
teknik pemrograman modular. Modular artinya penyelesaian seluruh masalah dapat dipecah-pecahkan
dengan unsur-unsur langkah penyelesaian spesifik berbentuk modul yang berwujud prosedur (procedure)
dan fungsi (function).
Keuntungan Pemrograman Modular
 Untuk aktivitas yang harus dilakukan lebih dari satu kali, modularisasi menghindari penulisan teks
program yang sama secara berulangkali. Disini sub-program cukup ditulis sekali saja, lalu sub-program
dapat dipanggil dari bagian lain di dalam program. Disini, penggunaan sub-program dapat mengurangi
panjang program.
 Kemudahan menulis dan menemukan kesalahan (debug) program. Kemudahan menulis akan sangat
berguna pada masalah besar yang dikerjakan oleh satu tim pemrogram yang beranggotakan beberapa
orang. Masalah yang akan diprogram dipecah menjadi beberapa masalah yang lebih kecil. Setiap
masalah yang lebih kecil tesebut ditulis kedalam modul yang spesifik dan dikerjakan oleh orang yang
berbeda. Satu modul bisa berisi dari satu atau lebih sub-program. Seluruh modul diintegrasikan menjadi
satu buah program yang lengkap.Program yang modular menjadi lebih mudah untuk dibaca dan
dimengerti. Program yang tidak modular sulit dipahami, khususnya kalau program tersebut panjang atau
terdiri dari puluhan, ratusan, atau ribuan baris instruksi.
Karena setiap sub-program melakukan aktivitas spesifik, maka apabila terdapat kesalahan di dalam
program, kesalahan tersebut cukup dilokalisir di dalam sub-program yang bersangkutan. Kebanyakan
program komputer ditulis modular, meskipun program tersebut tidak melibatkan ekseskusi yang berulang
dari aktivitas yang sama. Pemecahan program menjadi modul-modul yang lebih kecil umumnya dianggap
sebagai praktik pemrograman yang baik dan terstruktur.
Terdapat 2 bentuk sub-program, yaitu prosedur (procedure) dan fungsi (function). Dimana struktur setiap
sub-program tersebut pada hakikatnya sama dengan struktur program biasa, yaitu ada bagian judul (header)
yang berisi nama modul, bagian deklarasi, dan badan (body) program yang berisi instruksi yang akan
dilaksanakan.
Variabel Global dan Variabel Lokal
Variabel global adalah variabel yang dapat dipakai diseluruh program, di program utama atau di dalam
procedure atau function.
Variabel lokal hanya dapat dipakai di tempat pendefinisiannya. Jika variabel lokal didefinisikan didalam
procedure, maka hanya procedure tersebut yang mengenalnya.
Suatu variabel atau peubah akan dideklarasikan global atau local tergantung kepada penggunaan nama
tersebut. Jika suatu variabel digunakan di seluruh bagian program (termasuk di dalam prosedur), maka
variabel tersebut harus dideklarasikan global. Sebaliknya, jika variabel tersebut hanya digunakan di dalam
prosedur/function saja, maka nama variabel “sebaiknya” dideklarasikan sebagai variabel lokal saja,
meskipun bila dideklarasikan global pun masih tetap benar.
Usahakanlah menggunakan variabel global sesedikit mungkin. Penggunaan variabel lokal akan
memberikan keuntungan, sebab variabel lokal membuat program lebih elegan, dan dapat meminimumkan
usaha pencarian kesalahan yang disebabkan oleh nama tersebut, karena variabel lokal hanya dipakai di
dalam lingkup procedure atau function saja.
Procedure/function yang baik adalah yang independen dari program pemanggilnya. Pernyataan ini
menyiratkan bahwa procedure/function yang baik tidak menggunakan variabel-varibel global di dalam
badan procedur / function-nya. Jika program utama perlu mengkomunikasikan nilai variabel global ke
dalam procedure/fucntion, maka ada satu cara untuk melakukannya yaitu dengan menggunakan parameter.
Karena parameter dapat mengurangi kebutuhan penggunaan variabel global.
6.1 Parameter
Kebanyakan program memerlukan informasi antara procedure ( atau fungsi) dimana ia dipanggil.
Penggunaan parameter menawarkan mekanisme pertukaran informasi tersebut. Tiap item data ditransfer
antara parameter actual dan parameter formal yang bersesuaian. Parameter actual adalah parameter yang
disertakan pada waktu pemanggilan, sedangkan parameter formal adalah parameter yang dideklarasikan
didalam bagian header procedure/function itu sendiri. Ketika procedure/function dipanggil, parameter
actual menggantikan parameter formal. Tiap-tiap parameter actual berpasangan dengan parameter formal
yang bersesuaian.
Berdasarkan maksud penggunaannya, terdapat tiga jenis parameter formal yang disertakan didalam
procedure/function, yaitu :
a. Parameter masukan (input) → parameter yang nilainya berlaku sebagai masukan untuk
procedure/function.
b.Parameter keluaran (output)→parameter yang menampung keluaran yang dihasilkan oleh procedure.
c.Parameter masukan/keluaran (input/output parameter)→ parameter yang berfungsi sebagai masukan
sekaligus keluaran bagi procedure tersebut.
Dalam function hanya ada parameter masukan saja.
Bila procedure menghasilkan keluaran yang digunakan oleh program pemanggil, gunakan parameter
keluaran untuk menampung keluaran tersebut. Sebaliknya, bila procedure tidak menghasilkan keluaran,
atau kalaupun menghasilkan keluaran dan ternyata keluaran tersebut hanya digunakan di dalam procedure
itu saja, gunakan parameter masukan. Bila procedure menerima masukan sekaligus keluaran pada
parameter yang sama, gunakan parameter masukan/keluaran.
Aturan penting yang harus diamati dalam korespondensi satu-satu antara parameter actual dan parameter
formal adalah :
a. Jumlah parameter actual pada pemanggilan procedure/function harus sama dengan jumlah parameter
formal pada deklarasi procedure/function-nya.
b. Tiap parameter actual harus bertipe sama dengan tipe parameter formal yang bersesuaian.
6.2 PROCEDURE (PROSEDUR)
Procedure adalah modul program yang mengerjakan tugas/aktivitas yang spesifik dan menghasilkan
suatu efek netto. Pada beberapa bahasa pemrograman, procedure dikenal dengan nama subroutine. Atau
lebih jelasnya, procedure merupakan sekumpulan instruksi yang dibungkus yang akan dipakai / dipanggil
dalam program utama. Ini berarti, instruksi-instruksi didalam procedure baru dapat dilaksanakan hanya bila
procedure tersebut diakses.
Struktur Procedure :
Notasi Algoritmik :
Procedure NamaProcedure(deklarasi parameter,jika ada)
{Spesifikasi procedure, berisi penjelasan tentang apa yang dilakukan oleh prosedur ini,
keadaan sebelum prosedur dijalankan dan setelah prosedur dijalankan}
Deklarasi :
{Semua nama yang dipakai dalam prosedur didefinisikan disini dan hanya
berlaku lokal di dalam prosedur}
Algoritma :
{Badan prosedur, berisi kumpulan instruksi}
Notasi Pascal :
Procedure NamaProcedure(deklarasi parameter,jika ada);
{Spesifikasi procedure, berisi penjelasan tentang apa yang dilakukan oleh prosedur ini,
keadaan sebelum prosedur dijalankan dan setelah prosedur dijalankan}
(* Deklarasi *)
var
{Semua nama yang dipakai dalam prosedur didefinisikan disini dan hanya
berlaku lokal di dalam prosedur}
(*Algoritma*)
begin
{Badan prosedur, berisi kumpulan instruksi}
end;
Keterangan :
 Dalam bahasa Pascal, pendefinisian prosedur ditulis bersatu di dalam program utama, kecuali jika
direalisasikan sebagai unit. Prosedur diletakkan dibawah kata var.
 Bahasa Pascal memungkinkan prosedur mempunyai parameter masukan, parameter keluaran, dan
parameter masukan/keluaran. Parameter formal yang bertipe keluaran atau masukan/keluaran harus
diawali dengan kata kunci var, sedangkan untuk parameter formal yang bertipe masukan tidak
diawali dengan kata kunci var.
 Argumen parameter aktual dilewatkan ke parameter formal bertipe masukan sebagai “by value”,
sedangkan bila parameter formalnya bertipe keluaran atau masukan/keluaran, maka argumen
parameter aktual dilewatkan sebagai “By reference”
Contoh procedure :
Algoritmik:
Procedure Luas_Segitiga
{Procedure tanpa parameter)
Deklarasi :
{Variabel Lokal}
alas,tinggi,luas: real
Algoritma :
write('Masukan alas segitiga: ')
read(alas)
write('Masukan tinggi segitiga: ')
read(tinggi)
luas (alas*tinggi)/2
write('luas segitiga: ',luas)
Procedure Tukar1 ( input A,B :integer)
{Procedure dengan 2 parameter input)
Deklarasi :
Temp:integer
Algoritma :
Temp  A
A B
B  Temp
Procedure Maksimum ( input A,B:integer; output Maks:integer)
{Procedure dengan 2 parameter input dan 1 parameter output)
Algoritma :
if A>B then
maks  A
else
maks  B
endif
Procedure Tukar2 ( input /output A,B :integer)
{Procedure dengan 2 parameter input/output)
Deklarasi :
Algoritma :
Temp:integer
Temp  A
A B
B  Temp
Program Contoh_Prosedur
Deklarasi :
x,y,maksi:integer
Procedure Luas_Segitiga
Procedure Tukar1 ( input A,B :integer)
Procedure Maksimum ( input A,B:integer; output
Procedure Tukar2 ( input /output A,B :integer)
Maks:integer)
Algoritma :
{Program Utama}
Luas_Segitiga
write('Masukan Angka ke-1: ')
read(X)
write('Masukan Angka ke-2: ')
read(Y)
Maksimum(X,Y,maksi)
write('Angka ke-1: ',x,' ','Angka ke-2: ',Y,' ','Nilai Maksimum: ',maksi)
Tukar1(X,Y)
Write('Angka ke-1 sekarang nilainya: ',X)
Write('Angka ke-2 sekarang nilainya: ',Y)
Tukar2(X,Y)
Write('Angka ke-1 sekarang nilainya: ',X)
Write('Angka ke-2 sekarang nilainya: ',Y)
Pascal:
Program Contoh_prosedur;
var
X,Y,maksi:integer;
procedure luas_segitiga;
var
alas,tinggi,luas:real;
begin
write('masukan alas segitiga: ');
readln(alas);
write('masukan tinggi segitiga: ');
readln(tinggi);
luas:=(alas*tinggi)/2;
write('Luas segitiga:',luas);
end;
procedure tukar1 (a,b:integer);
var
temp:integer;
begin
temp:=a;
a:=b;
b:=temp;
end;
procedure maksimum(a,b:integer;var maks:integer);
begin
if a>b then
maks:=a
else
maks:=b
end;
procedure tukar2 (var a,b:integer);
var
temp:integer;
begin
temp:=a;
a:=b;
b:=temp;
end;
{Program Utama}
begin
luas_segitiga;
write ('Masukan angka ke-1:');
readln(X);
write ('Masukan angka ke-2:');
readln(Y);
maksimum(X,Y,maksi);
writeln('Angka ke-1:',x,' ','Angka ke-2:',Y,' ','Nilai maksimum: ',maksi);
tukar1(x,y);
writeln('Angka ke-1 sekarang nilainya:',X);
writeln('Angka ke-2 sekarang nilainya:',Y);
tukar2(x,y);
writeln('Angka ke-1 sekarang nilainya:',X);
writeln('Angka ke-2 sekarang nilainya:',Y);
end.
6.3 Function (Fungsi)
Function adalah modul program yang memberikan/mengembalikan (return) sebuah nilai dan tipe tertentu.
Sebagaimana halnya dengan procedure, function diakses dengan memanggil namanya. Selain itu, fungsi
juga dapat mengandung daftar parameter formal. Parameter pada fungsi sama seperti didalam prosedur,
tetapi hanya ada parameter masukan saja jika ada. Function hanya dapat mengembalikan nilai bertipe
sederhana. Karena itu, tipe hasil dari fungsi haruslah dari tipe sederhana.
Struktur Function :
Notasi Algoritmik :
Function NamaFunction(deklarasi parameter,jika ada):tipe
{Spesifikasi function, berisi penjelasan tentang apa yang dilakukan dan yang dikembalikan oleh function}
Deklarasi :
{Semua nama yang dipakai dalam function didefinisikan disini dan hanya
berlaku lokal di dalam function }
Algoritma :
{Badan function, berisi kumpulan instruksi-instruksi untuk menghasilkan nilai yang
akan dikembalikan oleh function}
Notasi Pascal :
function NamaFunction(deklarasi parameter,jika ada):tipe
{Spesifikasi function , berisi penjelasan tentang apa yang dilakukan
dan yang dikembalikan oleh function}
(* Deklarasi *)
var
{Semua nama yang dipakai dalam function didefinisikan disini dan hanya
berlaku lokal di dalam function }
(*Algoritma*)
begin
{Badan function, berisi kumpulan instruksi-instruksi untuk menghasilkan nilai yang
akan dikembalikan oleh function}
NamaFunction:= ekspresi; {pengembalian nilai yang dihasilkan fungsi}
end;
Keterangan :
 Dalam bahasa Pascal, function hanya dapat mengembalikan nilai bertipe sederhana (integer, real,
boolean, char, dan string). Karena itu, tipe hasil dari fungsi haruslah dari tipe sederhana.
 Apabila function tidak memiliki daftar parameter formal, maka tanda ‘( )’ tidak ditulis.
 Function dideklarasikan sekaligus didefinisikan di dalam blok program utama pemanggil (sesudah
kata kunci var).
Cara memanggil function:
Function diakses dengan cara memanggil namanya dari program pemanggil, diikuti dengan daftar
parameter actual (bila ada). Karena fungsi menghasilkan nilai, maka nilai tersebut ditampung dalam
sebuah peubah yang bertipe sama dengan tipe fungsi.
peubah  namafunction(daftar parameter actual)
atau nilai yang dikembalikan oleh function dapat langsung dimanipulasi seperti contoh-contoh
berikut:
 write (Namafunction(daftar parameter actual))
 if (Namafunction(daftar parameter actual)) < 0 then ……..
 z2* (Namafunction(daftar parameter actual))-x+y
Contoh function :
Algoritmik :
Function NilaiRata(a,b,c:integer):real
Deklarasi :
NR:real
Algoritma :
NR (a+b+c)/3
NilaiRataNR
Program Contoh_fungsi
Deklarasi :
Nilai1,Nilai2,Nilai3:integer
RataRata:real
Function NilaiRata(a,b,c:integer):real
Algoritma :
write('Nilai 1 : ')
read(Nilai1)
write('Nilai 2 : ')
read(Nilai2)
write('Nilai 3 : ')
read(Nilai3)
RataRataNilaiRata(Nilai1,Nilai2,Nilai3)
write('Nilai rata-rata adalah ', RataRata)
Perhatikan bagian deklarasi function:
function NilaiRata(a,b,c:integer):real
Function di atas mempunyai 3 parameter nilai,yaitu a,b,c. Ketiga parameter tersebut bertipe integer.Hasil
dari function NilaiRata bertipe real. Di dalam function harus ada pernyataan yang memberi nilai pada
function, pada contoh diatas adalah: NilaiRataNR.
Perhatikan cata pemanggilan function didalam program utama:
NilaiAkhirNilaiRata(Nilai1,Nilai2,Nilai3)
Karena hasil dari function NilaiRata bertipe real,maka NilaiAkhir juga harus bertipe real.
Pascal:
Program Contoh_fungsi;
var
Nilai1,Nilai2,Nilai3:integer;
RataRata : real;
function NilaiRata (a,b,c : integer):real;
var
NR:real;
begin
NR:= (a+b+c)/3;
NilaiRata:=NR;
end;
{Program Utama}
begin
write('Nilai 1 : ');
readln(Nilai1);
write('Nilai 2 : ');
readln(Nilai2);
write('Nilai 3 : ');
readln(Nilai3);
RataRata:=NilaiRata(Nilai1,Nilai2,Nilai3);
write('Nilai rata-rata adalah ', RataRata);
end.
KESIMPULAN
 Fungsi digunakan apabila modul program mengembalikan sebuah nilai.
 Prosedur digunakan bila modul menghasilkan effek netto dari (satu atau) sekumpulan aksi.
 Fungsi dapat dikonversi sebagai prosedur dengan cara menyatakan nilai yang dikembalikan (return value)
oleh fungsi tersebut sebagai parameter keluaran pada prosedur.
 Prosedur yang mempunyai satu buah parameter keluaran dapat ditulis sebagai fungsi dengan cara
menyatakan parameter keluaran sebagai nilai yang dikembalikan oleh fungsi.
Latihan
- Buatlah program untuk menghitung berbagai luas dengan menggunakan procedure dan
- function.
- Buat procedure yang menghasilkan nilai rata-rata sekumpulan data bilangan bulat yang dibaca secara
berulang-ulang dari keyboard (akhir pembacaan adalah 9999). Prosedur ini memiliki parameter keluaran,
yaitu nilai rata-rata yang dihasilkan.
- Buatlah function untuk menentukan bilangan genap dan program utamanya.
- Buat function untuk menghitung fungsi F(X)= 2x2 + 5x +- 8
MATERI 7
ARRAY (LARIK)
Array adalah struktur data statis yang menyimpan sekumpulan elemen yang bertipe sama, dimana setiap
elemen memiliki nilai indeks.
Konsep umum dari array :
1. Indeks array harus suatu type yang mempunyai keterurutan (ada suksesor dan predesesor). Misalnya
integer atau karakter. Kecuali dalam bahasa C indeks array selalu bertipe integer.
2. Banyaknya elemen array harus sudah diketahui sebelum program dieksekusi.
3. Tipe data elemen array dapat berupa tipe sederhana atau tipe bentukan (record.), atau bahkan bertipe array
yang lain.
4. Setiap elemen data dapat diakses secara acak (random), jika indeksnya diketahui
5. Merupakan struktur data yang statis, artinya jumlah elemen yang sudah ditentukan, tidak bisa diubah
selama eksekusi program.
Keuntungan data array / larik :
a. Paling mudah pengoperasiannya
b. Ekonomis dalam pemakaian memori, bila semua elemen terisi
c. Akses ke setiap elemen memerlukan waktu yang sama
Kerugian data array / larik :
Memboroskan tempat jika banyak
elemen yang tidak digunakan.
Penggunaan struktur data array/larik:
Array digunakan bila kita mempunyai sejumlah data yang bertipe sama, dan kita perlu menyimpan
sementara data tersebut, untuk selanjutnya data tersebut dimanipulasi.
Selama pelaksanaan program, array tetap menyimpan nilai. Hal ini bermanfaat bila kita ingin
menggunakan nilai-nilai di dalam array tersebut untuk diproses lebih lanjut di bagian lain di dalam
algoritma.
Dengan menggunakan array, kita dapat menghindari penggunaan nama-nama variabel yang banyak.
Misalnya : kita membutuhkan 10 buah variabel untuk menyimpan nilai-nilai yang sama, misalnya integer.
Otomatis ini akan ada 10 buah pernyataan membaca dan menulis ke layar, dan beberapa ekspresi untuk
memanipulasi nilai-nilai tersebut. Dengan menggunakan array, menyimpan 10 buah variabel nilai hanya
dibutuhkan satu variabel array yang terdiri atas 10 buah elemen. Selain itu, dengan array, instruksi
pembacaan/penulisan seluruh elemen array cukup ditulis satu kali saja di dalam sebuah konstruksi
pengulangan.
Representasi array yang umum dibagi menjadi dua, yaitu :
1. Representasi array 1 dimensi.
A[1]
2.
A[2]
…………………………
A[Nmax]
Representasi array 2 dimensi
A[1,1] A[1,2]
A[1,1]
A[2,1]
A[1,Nmax]
A[1, Nmax]
A[2, Nmax]
A[Nmax,1]
A[Nmax, Nmax]
Keterangan :
Sebenarnya array dapat direpresentasikan dengan dimensi yang tak hingga, tetapi ini tidak umum
digunakan, jadi jumlah dimensi disesuaikan dengan kebutuhan setiap penanganan kasus yang berbeda beda.
PEMROSESAN LARIK


Pemrosesan beruntun pada larik adalah pemrosesan mulai dari elemen pertama larik.
Yaitu elemen dengan indeks terkecil, berturut-turut pada elemen berikutnya, sampai elemen
terakhir dicapai, yaitu elemen dengan indeks terbesar.
7.1 ARRAY 1 DIMENSI
Cara Pendefinisian Array :
1. Sebagai variabel
Contoh:
Algoritmik
2.
Pascal
C
A : array [1..20] of integer
A : array [1..20] of integer;
int A[20];
NamaBrg : array [‘a’.. ‘z’] of
string
NamaBrg : array [‘a’.. ‘z’] of
string;
char namabrg[30] [20];
/* Artinya namabrg bertipe string
dengan panjang 30 dan merupakan
array yang berisi 21
elemen,
karena di C indeks elemen dimulai
dari 0 */
Sebagai tipe baru dan array bertipe bentukan (record)
Contoh:
Algoritmik :
Type Mhs = record
<NPM: integer,
Nama : string
[20],
Alamat:
[30]>
Type DataMhs =
string
array [1..20] of Mhs
A: DataMhs
Pascal :
Type Mhs = record
NPM: integer;
Nama : string
[20];
Alamat:
[30];
Type
DataMhs =
end;
array [1..20] of Mhs
string
A: DataMhs;
3. Mendefinisikan ukuran maksimum elemen array sebagai konstanta
Contoh:
Algoritmik :
Const Nmaks = 20
Type Huruf = array [1..Nmaks] of char
A : Huruf
Pascal :
Const Nmaks = 20;
Type Huruf = array [1..Nmaks] of char;
Var
A : Huruf;
Contoh Kasus :
Terdapat sebuah data yang berisi deretan angka, sebagai berikut :
5
6
8
1
1
...
...
2
3
4
...
200
Operasi-operasi dasar :
1. Menginisialisasi elemen array
2. Mengisi elemen array
3. Mencetak elemen array
4. Pencarian nilai maksimum pada array
5. Pencarian sebuah bilangan pada array dengan metode sekuensial artinya pemrosesan dilakukan terurut
berdasarkan indeks array.
Maka deklarasinya adalah :
Algoritmik:
Versi 1 :
Versi 2 :
Versi 3 :
Const
Nmax=200
A:array [1..Nmax] of
Type
DeretAngka : array [1.. 200] of
integer
Const
Nmax=200
integer
ATAU
A:array [1..200] of
A:DeretAngka
Type
DeretAngka : array [1..Nmax] of
integer
Integer
A:DeretAngka
Pascal :
Versi 1 :
Versi 2 :
Const
Nmax=200;
VAR
A:array [1..Nmax] of integer;
Type
DeretAngka : array [1.. 200] of
integer;
ATAU
VAR
A:array [1..200] of integer;
1.
VAR
A:DeretAngka;
Versi 3 :
Const
Nmax=200;
Type
DeretAngka : array [1..Nmax] of
integer;
VAR
A:DeretAngka;
Menginisialisasi elemen array
Algoritmik :
Procedure InisialisasiArray (input/output A:deretAngka , input n:integer)
{Procedure ini berfungsi untuk memberikan harga awal untuk n elemen array,dengan nilai 0}
Deklarasi:
i:integer
Algoritma :
for i←1 to n do
A[i]← 0
endfor
Pascal :
Procedure InisialisasiArray (var A:deretAngka ; n:integer);
{Procedure ini berfungsi untuk memberikan harga awal untuk n elemen array, dengan nilai 0}
VAR
i:integer;
Begin
for i:=1 to n do
A[i]:=0;
end;
2.
Mengisi elemen array
Algoritmik:
Procedure IsiArray ( input/output A:deretAngka, input n:integer)
{ Procedure ini berfungsi untuk mengisi elemen array, dengan:
input n =jumlah elemen array yang akan diisi
output A = array yang n elemennya sudah terisi }
Deklarasi :
bil,i:integer
Algoritma :
for i←1 to n do
write('Masukan bilangan:')
read(bil)
A[i]← bil
endfor
Pascal:
Procedure IsiArray ( var A:deretAngka; n:integer);
{ Procedure ini berfungsi untuk mengisi elemen array, dengan:
input n =jumlah elemen array yang akan diisi
output A = array yang n elemennya sudah terisi }
Var
Bil,i:integer;
Begin
for i:=1 to n do
begin
write('Masukan bilangan:');readln(bil);
A[i]:=bil;
end;
end;
3.
Mencetak elemen array
Algoritmik:
Procedure CetakArray (input A:deretAngka, input n:integer)
{ Procedure ini berfungsi untuk mencetak isi dari sebuah array, dengan: input A= array yang sudah berisi
angka , n=jumlah elemen array yang akan dicetak isinya }
Deklarasi :
i :integer
Algoritma :
for i←1 to n do
write('Indeks ke-',i,'berisi angka:',A[i])
endfor
end;
Pascal :
Procedure CetakArray (A:deretAngka; n:integer);
{ Procedure ini berfungsi untuk mencetak isi dari sebuah array, dengan: input A= array yang sudah berisi
angka , n=jumlah elemen array yang akan dicetak isinya }
Var
i :integer;
Begin
for i:=1 to n do
begin
writeln('Indeks ke-',i,'berisi angka:',A[i])
end;
end;
4.
Pencarian nilai maksimum pada array
Algoritmik :
Procedure CariMax (input A:deretAngka, output Maks:integer, input N :integer)
{Procedure ini berfungsi untuk mencari nilai maksimum pada sebuah
array,dengan: input A= array yang sudah berisi angka,
output Maks=nilai maksimun yang dicari pada array}
Deklarasi:
i:integer
Algoritma:
maks← A[1]
for i←2 to N do
if A[i] > maks then
maks←A[i]
endif
endfor
Pascal :
Procedure CariMax (A:deretAngka;var Maks:integer; N:integer);
{Procedure ini berfungsi untuk mencari nilai maksimum pada sebuah array,dengan: input A= array yang
sudah berisi angka, output Maks=nilai maksimun yang dicari pada array}
var
i:integer;
begin
maks:= A[1];
for i:=2 to N do
if A[i] > maks then
maks:=A[i];
end;
5.
Pencarian sebuah bilangan pada array dengan metode sekuensial
Algoritmik :
Procedure CariNilai(input A:DeretAngka;input x:integer)
{Procedure ini berfungsi untuk mencari sebuah nilai pada array, dengan
nilai yang akan dicari}
Deklarasi:
i:integer
Algoritma:
i←1
while (A[i] ≠ x) and (i < 10) do
i←i+1
endwhile
if A[i]=x then
write('Ketemu di indeks ke-',i)
else
write('Tidak ketemu')
endif
Pascal :
Procedure CariNilai(A:DeretAngka;x:integer);
{Procedure ini berfungsi untuk mencari sebuah nilai pada array,
dengan input A= array berisi angka dan x = nilai yang akan dicari}
var
i:integer;
begin
i:=1;
while (A[i] <> x) and (i < 10) do
begin
i:=i+1;
end;
input A= array berisi angka dan x =
if A[i]=x then
writeln('Ketemu di indeks ke-',i)
else
writeln('Tidak ketemu');
end;
Program utama untuk memanggil prosedur-prosedur diatas :
Algoritmik :
Program Contoh_Array
Deklarasi :
Const Nmax=200
Type
DeretAngka : array [1.. Nmax] of integer
Procedure InisialisasiArray (input/output A:deretAngka , input n:integer)
Procedure IsiArray (input/output A:deretAngka, input n:integer)
Procedure CetakArray (input A:deretAngka, input n:integer)
Procedure CariMax (input A:deretAngka,output Maks:integer,N:integer)
Procedure CariNilai(input A:DeretAngka,input x:integer)
B : deretAngka;
jumlah,maksimum,angka : integer;
Algoritma Utama :
write(‘Masukan banyaknya array:’)
read(jumlah)
InisialisasiArray(B,jumlah)
IsiArray(B,jumlah)
CetakArray(B,jumlah)
CariMax(B,maksimum,jumlah)
write(‘Nilai maksimum:’,maksimum)
write(‘Masukan angka yang akan dicari:’)
read(angka)
CariNilai(B,angka)
Pascal :
Program Contoh_Array;
Const Nmax=200;
Type
DeretAngka : array [1.. Nmax] of integer;
Procedure InisialisasiArray (var A:deretAngka ; n:integer);
Procedure IsiArray ( var A:deretAngka; n:integer);
Procedure CetakArray (A:deretAngka; n:integer);
Procedure CariMax (A:deretAngka;var Maks:integer; N:integer);
Procedure CariNilai(A:DeretAngka;x:integer);
Var
B : deretAngka;
jumlah,maksimum,angka : integer;
Begin
write(‘Masukan banyaknya array:’);
readln(jumlah);
InisialisasiArray(B,jumlah);
IsiArray(B,jumlah);
CetakArray(B,jumlah);
CariMax(B,maksimum,jumlah);
writeln(‘Nilai maksimum:’,maksimum);
write(‘Masukan angka yang akan dicari:’);
read(angka);
CariNilai(B,angka);
end.
7.2 ARRAY BERTIPE TERSTRUKTUR
Algortma Array sebelumnya menggunakan tipe data sederhana, Elemen Array juga bisa menggunakan Tipe
data bentukan yaitu Record atau lebih dikenal dengan Tipe Terstruktur.
Misalkan akan melakukan proses pengolahan data 100 orang mahasiswa, Data setiap mahasiswa terdiri dri
NPM (Nomor Pokok Mahasiswa), Nama mahasiswa, dan IPK (Indeks prestasi Kumulatif Siswa).
Struktur Lojiknya sebagai berikut:
1
2
3
.
.
N
NPM
28001
28002
28003
NamaMhs
Dina Rahmayanti
Catur Wulan
Bayu Nisa
IPK
3.57
3.30
3.53
280020
Risma wulandari
3.60
Struktur Array yang dideklarasikan sebagai berikut:
DEKLARASI
const Nmaks = 100
type Mahasiswa : record <NPM: integer,
NamaMhs:String,
IPK : real>
type TabMhs : Array [1…NMaks] of Mahasiswa
Mhs : TabMhs
Algoritma untuk mengisi dan membaca larik Mhs adalah sebagai berikut:
Procedure BacaDataMahasiswa(input N :integer, output Mhs:TabMhs)
Deklarasi
I : integer;
Algoritma :
For i:=1 To N Do
Read(Mhs[i].NIM)
Read(Mhs[i].NamaMhs)
Read(Mhs[i].IPK)
EndFor
Procedure TulisDataMahasiswa(input N:integer, output:Mhs:TabMhs)
Deklarasi
I,j : integer;
Algoritma :
For i:=1 To N Do
Write (Mhs[i].NPM, Mhs[i].NamaMhs, Mhs[i].IPK)
EndFor
LATIHAN
1.
Diketahui sebuah integer array TabInt [1…8], yang telah terisi dengan nilai-nilai ujian mahasiswa
seperti berikut ini:
50
90
80
70
60
100
90
100
Tuliskan Algoritma untuk:
a. Mencari Nilai Maksimum dari Nilai Ujian Tersebut.
b. Menghitung Nilai Rata-rata Nilai Tersebut.
2.
Diketahui sebuah integer array TabInt [1…8], yang telah terisi dengan nilai-nilai berikut ini:
10
90
50
70
60
100
30
Tuliskan Algoritma untuk:
a. Menghitung banyaknya bilangan Genap dan Ganjil.
b. Menghitung banyaknya bilangan positif dan negatif.
100
Download