Anda di halaman 1dari 53

MODUL : algoritma dan pemrograman 1

Modul I
PENDAHULUAN

Algoritma dan Bahasa Pemrograman


Algoritma =>Algorism =>proses menghitung
Oleh Abu Jafar Muhammad ibnu Musa Al-Khuwarizmi => uzbekistan, ahli matematika
(770-840)

Algoritma adalah langkah-langkah yang logis dan terperinci dalam menyelesaikan


suatu tugas atau masalah. Ada beberapa cara yang dapat dilakukan dalam menuliskan
algoritma program antara lain :
- Flow chart (Bagan Alir)
- Pseudo code (mirip kode/perintah pemrograman)
- Warrior/Diagram Orr
- Hirarchi chart (bagan bertingkat)
Bentuk - bentuk dasar algoritma yang sudah lazim digunakan :
1. Bentuk berurutan (sequence), yaitu setiap perintah dijalankan secara urut dari awal sampai
akhir.
2. Bentuk pencabangan (branching/selection), yaitu bentuk yang memilih satu alternatif
diantara beberapa alternatif yang ada.
3. Bentuk perulangan (looping/iteration), yaitu mengulang sekumpulan perintah sesuai dengan
kondisi yang diberikan.

Program adalah satu set instruksi atau perintah yang diberikan kepada komputer
dalam menyelesaikan suatu tugas atau masalah sesuai dengan persyaratan dan keperluan
tertentu. Program yang baik memiliki kriteria, antara lain :
1. Menghasilkan keluaran (output) yang sesuai dan benar
2. Memiliki kompleksitas algoritma yang minimal
3. Memiliki kecocokan dengan peruntukan bahasa pemrogramannya
4. Memiliki batas akhir penyelesaian

Pemrograman adalah kegiatan-kegiatan yang dilakukan dalam membuat program


komputer. Secara garis besar langkah-langkah dalam membuat program adalah :
1. Memahami masalah/problem yang akan diselesaikan

1
Marsono, S.Kom, M.Kom UNTUK KALANGAN SENDIRI
MODUL : algoritma dan pemrograman 1

2. Analisis, meliputi penentuan I/O, dan batasan atau informasi tambahan


3. Perancangan, yaitu membuat algoritma program
4. Menterjemahkan algoritma menjadi instruksi/perintah dalam bahasa pemrograman
5. Menyimpan perintah/instruksi kedalam komputer
6. Compile
7. Uji coba program menggunakan contoh data
8. Dokumentasi program

BAHASA PEMROGRAMAN TURBO PASCAL

Sekilas Tentang Pascal


Pascal adalah salah satu bahasa pemrograman tingkat tinggi (high level language). Nama
Pascal diambil sebagai penghargaan terhadap Blaise Pascal, ahli matematik dan philosophi
terkenal dari Perancis yang banyak berjasa pada ilmu pengetahuan.
Pascal pertama kali dirancang oleh Niklaus Wirth dari Swiss yang merupakan bahasa
terstruktur yang dikembangkan dari bahasa ALGOL pada tahun 1970. Perkembangan Pascal
hingga kini sudah sangat jauh dari versi pertama Pascal tersebut, apalagi setelah munculnya
standart Pascal pada tahun 1974 yang kemudian dikembangkan lagi oleh Borland International
pada komputer PC yang beroperasi dibawah sistem operasi DOS. Produk Borland tersebut diberi
nama Turbo Pascal.

Struktur Program Pascal


Secara umum struktur program Pascal adalah :
program JUDUL_PROGRAM; {nama program}
uses ............... {deklarasi piranti}
label .............. {deklarasi label}
const .............. {deklarasi constanta}
type ................ {deklarasi type data}
var .................. {deklarasi variabel}
procedure SATU;
procedure DUA;
function TAMBAH;
begin {awal program utama}
end. { akhir program utama}

2
Marsono, S.Kom, M.Kom UNTUK KALANGAN SENDIRI
MODUL : algoritma dan pemrograman 1

Program Contoh_Program1;
Uses Crt;
Const Harga = 1000;
var
Jumlah : Integer;
HasilX : Real;
Begin
Jumlah := 10;
HasilX := Jumlah * Harga;
WriteLn(‘Hasil perkaliannya adalah :’,HasilX:10:2);
ReadLn;
End.

Identifier
Identifier adalah nama simbol yang digunakan dalam sebuah bahasa pemrograman.
Biasanya digunakan untuk nama variabel, konstanta, fungsi atau objek lain yang
diidentifikasikan oleh pemrogram.
Syarat :
- Terdiri dari huruf (a s/d z, A s/d Z), angka (0 s/d 9) dan tanda garis bawah ( _ ).
- Diawali dengan huruf / garis bawah
- Panjang maksimum 33 karakter
- Tidak mengandung spasi
- Bukan reserved word / standart identifier
Reserved Word adalah sebuah kata yang mempunyai arti khusus dalam sebuah bahasa
pemrograman.
Tipe data
Tipe data yang dikenal dalam bahasa pemrograman Turbo Pascal :
1. Tipe data standard (standard type data), tipe data ini meliputi :
integer, real, char, string, boolean.
2. Tipe data terstruktur (Structured type data)
array, record, file, set
3. Tipe data penunjuk (pointer type data)

Cara kerja pascal.


1. membuka pascal dari layar tampilan windows.
- klick 2 X icon pascal pada layar komputer / dekstop anda
- layar kerja paskal sebagai berikut:

3
Marsono, S.Kom, M.Kom UNTUK KALANGAN SENDIRI
MODUL : algoritma dan pemrograman 1

2. membuat File baru


- Klick File New
3. mengkompile Program Pascal.
- Klick Compile lalu tekan enter
4. menjalankan Program pascal
- Klick Run kemudian tekan Enter
5. Meyimpan Program
- klick file save
contoh : latihan.pas

4
Marsono, S.Kom, M.Kom UNTUK KALANGAN SENDIRI
MODUL : algoritma dan pemrograman 1

PERINTAH INPUT / OUTPUT


1. Write dan Writeln
Berfungsi untuk menampilkan pesan atau hasil variabel ke layar komputer. Write akan
menampilkan pesan tanpa pindah baris dan tampilan berikutnya akan disambungkan dalam
baris yang sama. Sedangkan Writeln berfungsi menampilkan pesan atau nilai variabel
perbaris dan tampilan berikutnya akan berganti baris.
contoh :
program Tampil;
Uses Crt;
var
Nama : string[20];
Begin
Nama := ’Siapa saja’;
Write(‘ Nama : ‘);
Writeln(Nama);
Readln;
End.
Untuk mengatur format tampilan dengan perintah Write atau Writeln dapat dipergunakan
parameter jumlah digit keseluruhan dan parameter jumlah digit desimal.
2. Read dan Readln
Berfungsi untuk pemassukan data dengan cara mengetikkannya dari keyboard. Perbedaan
antara Read dan Readln adalah Read tidak menerima masukan Enter, sedangkan Readln
akan menerima masukan Enter.
contoh program :
Program Masukan;
Uses Crt;
Var
Bil : Integer;
Begin
Clrscr;
Write(’Masukkan bilangan sembarang : ’);
Readln(Bil);
Writeln(’Angka yang anda masukkan adalah : ’,Bil);
End.
3. Komentar
Komentar adalah bagian program yang tidak akan diproses oleh Turbo Pascal, komentar ini

5
Marsono, S.Kom, M.Kom UNTUK KALANGAN SENDIRI
MODUL : algoritma dan pemrograman 1

hanya berfungsi sebagai dokumentasi saja. Didalam penulisannya komentar harus diapit
oleh tanda { dan }.

4. Readkey
Readkey berfungsi untuk menerima masukan hanya satu karakter masukan saja. Jenis
variabel yang dapat diinput oleh Readkey yaitu jenis variabel Karakter.
contoh program :
Program RKey;
Uses Crt;
Var
Kar : Char;
Begin
Writeln(’Tekan sembarang karakter !.’);
Kar:=Readkey;
Writeln(’Karakter yang anda tekan adalah : ’,Kar);
End.
5. Clrscr
Berfungsi untuk membersihkan layar dari tampilan sebelumnya dan meletakkan kursor
pada posisi kiri atas dari layar monitor.
6. GotoXY
Berfungsi untuk menampilkan pada posisi tertentu. Bentuk penulisan GotoXY adalah :
GotoXY(PosisiX,PosisiY);
7. WhereX dan WhereY
Berfungsi untuk mencari letak posisi kursor pada layar. Hasil WhereX dan WhereY
merupakan suatu bilangan integer.
8. Textbackground
Berfungsi untuk mewarnai layar. Cara penulisan Textbackground adalah :
Textbackground(warna);
Tabel warna
Warna Konstanta Nilai
Hitam Black 0
Biru Blue 1
Hijau Green 2
Cyan Cyan 3
Merah Red 4
Magenta Magenta 5
Coklat Brown 6
Coklat Muda Light Gray 7

6
Marsono, S.Kom, M.Kom UNTUK KALANGAN SENDIRI
MODUL : algoritma dan pemrograman 1

9. Textcolor
Berfungsi untuk mewarnai tulisan. Cara penulisan Textcolor adalah :
Textcolor(warna);
Warna yang digunakan sesuai tabel warna diatas ditambah dengan tabel berikut :
Warna Konstanta Nilai
Coklat Hitam Dark Gray 8
Biru Muda Light Blue 9
Hijau Muda Light Green 10
Cyan Muda Light Cyan 11
Merah Muda Light Red 12
Magenta Muda Light Magenta 13
Kurnig Yellow 14
Putih White 15

10. Window
Berfungsi untuk membatasi daerah kerja program pada layar. Cara penulisan Window :
Window(X1, Y1, X2, Y2);

OPERATOR, EKSPRESI DAN FUNGSI MATEMATIKA


1. Operator Matematika
Lambang Fungsi
() Pengelompokan

7
Marsono, S.Kom, M.Kom UNTUK KALANGAN SENDIRI
MODUL : algoritma dan pemrograman 1

*, / Perkalian, Pembagi
+, - Penjumlahan, Pengurangan
:= Sama dengan

2. Operator pembanding
Lambang Fungsi
= Sama dengan
> Lebih besar
< Lebih kecil
>= Lebih besar Sama dengan
<= Lebih kecil Sama dengan
<> Tidak sama dengan

3. Operator kondisi
Or dan And berfungsi untuk menghubungkan dua kondisi.

4. Fungsi matematika
 Div, fungsinya untuk melakukan pembagian integer. Bentuk penulisan : var_hsl := bil_bagi
Div bil_pbagi;
 Mod, fungsinya untuk mengetahui sisa pembagi. Bentuk penulisan : var_hsl := bil_bagi Mod
bil_pbagi;
 Inc, fungsinya untuk melakukan penambahan dengan satu. Bentuk penulisan : Inc(var_bil);
 Dec, fungsinya untuk melakukan pengurangan dengan satu. Bentuk penulisan :
Dec(var_bil);
 Trunc, fungsinya untuk melakukan pembulatan kebawah. Bentuk penulisan : var_hsl :=
Trunc(var_bil);
 Round, fungsinya untuk melakukan pembulatan keatas jika bilangan dibelakang koma =>
0,5 dan akan dibulatkan kebawah jika bilangan dibelakang koma < 0,5. Bentuk penulisan :
var_hsl := Round(var_bil);
 Abs, fungsinya untuk mencari harga mutlak. Bentuk penulisan : var_hsl := Abs(var_bil);
 Sqr, fungsinya untuk melakukan perpangkatan dua. Bentuk penulisan : var_hsl :=
Sqr(var_bil);
 Sqrt, fungsinya untuk mencari akar pangkat dua. Bentuk penulisan : var_hsl :=
Sqrt(var_bil);

8
Marsono, S.Kom, M.Kom UNTUK KALANGAN SENDIRI
MODUL : algoritma dan pemrograman 1

 Ln, fungsinya untuk mencari logaritma. Bentuk penulisan : var_hsl := Ln(var_bil);


 Exp, fungsinya untuk mencari exponensial (antilog). Bentuk penulisan : var_hsl :=
Exp(var_bil);

Contoh Program :
Program FungsiMM;
Uses Crt;
Var
Bil1, HDiv, HMod, HAbs : Integer;
BIl2, HTrunc, HRound, HSqr, HSqrt : Real;
Begin
clrscr;
Write('Input Sembarang Bilangan Bulat : ');
Readln(Bil1);
HDiv:=Bil1 Div 2;
HMod:=Bil1 Mod 2;
HAbs:=Abs(Bil1);
Writeln('Hasil Div 2 nya : ',HDiv);
Writeln('Hasil Mod 2 nya : ',HMod);
Inc(Bil1);
Writeln('Hasil Inc nya : ',Bil1);
Dec(Bil1);
Writeln('Hasil Dec nya : ',Bil1);
Writeln('Hasil Abs nya : ',HAbs);
Writeln;
Write('Input Sembarang Bilangan Real : ');
Readln(Bil2);
HTrunc:=Trunc(Bil2);
HRound:=Round(Bil2);
HSqr:=Sqr(Bil2);
HSqrt:=Sqrt(Bil2);
Writeln('Hasil Trunc nya : ',HTrunc:5:0);
Writeln('Hasil Round nya : ',HRound:5:0);
Writeln('Hasil Sqr nya : ',HSqr:5:0);

9
Marsono, S.Kom, M.Kom UNTUK KALANGAN SENDIRI
MODUL : algoritma dan pemrograman 1

Writeln('Hasil Sqrt nya : ',HSqrt:5:0);


Readln;
End.

MODUL II
PENYAJIAN ALGORITMA

Pada Bab ini akan kita bahas secara khusus tentang penyajian algoritma yaitu:
Dalam bentuk gambar dan tulisan.
1. Dalam bentuk gambar

10
Marsono, S.Kom, M.Kom UNTUK KALANGAN SENDIRI
MODUL : algoritma dan pemrograman 1

Flowchart
2. Dalam Bentuk Tulisan
Pseudo code (mirip kode/perintah pemrograman)
Ad1. Flowchart Program

Simbol flowchart ANSI


1. start dan stop

2. persiapan

3. Proses

4. input dan output

5. Decision / pengujian

6. sub program

7 penghubung satu halaman

8. Penghubung kehalaman berikutnya

9. Database /penyimpanan

10. Arah Proses

Latihan 1: Buatlah Sebuah Program Pascal untuk Menghitung Luas Persegi Panjang kemudian
Buatlah algoritma dan flowchart.
Contoh program runtunan.
Langkah Algoritma.

11
Marsono, S.Kom, M.Kom UNTUK KALANGAN SENDIRI
MODUL : algoritma dan pemrograman 1

1.START
2. Persipan variabel / baca variabel
Luas, panjang, lebar : integer;
3. Persiapan input:
input panjang dan Lebar dari keyboard
4. Proses
Luas:= Panjang * Lebar
5. Cetak
cetak luas persegi panjang
5. STOP
Langkah Pembuatan Program
Program Persegi_Panjang;
Uses crt;
Var Luas, panjang, Lebar : integer ;
Begin
Clrscr;
Write(’input Panjang: ’); readln(panjang);
Write(’input lebar : ’); readln(lebar);
Luas := Panjang * Lebar;
Writeln( ’luas Persegi panjang adalah: ’,luas);
Readln;
End.

Langkah Pembuatan Flowchart:

1. start

12
Marsono, S.Kom, M.Kom UNTUK KALANGAN SENDIRI
MODUL : algoritma dan pemrograman 1

2. Luas = 0, panjang =0,


Lebar = 0,

Input panjang =’’


,Lebar =’’
3.

4. Luas := panjang * lebar

5. Cetak luas=’ ‘

6. stop

MODUL III
TIPE DASAR DATA

Ada beberapa tipe data dalam pascal yaitu:

13
Marsono, S.Kom, M.Kom UNTUK KALANGAN SENDIRI
MODUL : algoritma dan pemrograman 1

1. Bilangan Logika(biner)
2. Bilangan Bulat
3. Bilangan Riil
4. Karakter
5. String.

Ad1. Bilangan Logika => Bilangan logika adalah bilangan yang terdiri dari 2 buah nilai yaitu 0
dan 1 . 1= true(benar) dan 0 = false(salah)

Tipe data : boolean


Operasi logika dengan 4 operator yaitu:
Not , And, Or dan Xor
Jika a dan b adalah peubah bertipe boolean maka hasil operasi a dan b dengan 4 operator adalah
Sbb:
A Not A
True False
False True

A B A and B A or B A xor B
True T T T F
True F F T T
False T F T T
False F F F F

TABEL KEBENARAN
KETERANGAN

1. Operator Not => menghasilkan nilai yang berlawanan dengan nilai awal.
2. Operator And => bernilai true bila kedua operand bernilai true.
3. Operator Or => bernilai false bila kedua operand bernilai false.
4. Operator Xor => bernilai true bila kedua operand saling berlawanan nilainya.

Contoh: X bernilai true


Y bernilai false dan Z bernilai true

14
Marsono, S.Kom, M.Kom UNTUK KALANGAN SENDIRI
MODUL : algoritma dan pemrograman 1

Operand Logika hasil


(x and y) or z true
x and (y or z) true
not (x and z) false
(y xor z) and y false

Ad2. Bilangan Bulat => bilangan yang tidak mengandung pecahan


Tipe data = integer, byte, shortint, word, longint

Tipe Rentang nilai format


Byte 0..255 unsigned 8-bit
Shortint -128..127 signed 8-bit
Word 0..65535 unsigned 16-bit
Integer -32768..32767 signed 16-bit
Longint -2147483648..2147483647 signed 32-bit

Operasi aritmatik
+ tambah contoh
- kurang 10 div 3 hasil : 3
* kali 10 mod 3 hasil : 1
div bagi
mod sisa hasil bagi

operasi perbandingan
< lebih kecil contoh
<= lebih kecil sama dengan 3 < 4 (true)
> lebih besar 9 <= 9 (true)
>= lebih besar sama dengan (24 div 3) >= 9 (false)
= sama dengan
<> tidak sama dengan

ad3 Bilangan Riil


adalah : bilangan yang mengandung pecahan
tipe data: rentang nilai format
real 6 byte
single 4 byte
double 8 byte
extended 10 byte

operasi aritmatik contoh


+ 10 / 3 = 3.333...
-
*

15
Marsono, S.Kom, M.Kom UNTUK KALANGAN SENDIRI
MODUL : algoritma dan pemrograman 1

operasi perbandingan
contoh
3.3 < 3.5 hasil true

ad4 karakter
adalah : huruf, tanda baca, angka, karakter khusus yang berada dalam dua tanda petik
tipe data : char
contoh
’a’
operasi perbandingan
’a’ = ’A’ hasil false
’b’ = ’c’ hasil true

ad5 String
adalah: kumpulan atau deretan karakter yang berada dalam dua tanda petik
tipe data : string
contoh:
’Stmik Triguna Dharma’

a.operasi penyambungan
operator : +

contoh: ’stmik’ +’triguna’=’stmiktriguna’

b. operasi perbandingan

’abcde’=’abcd’ hasil false


’abc’ = ’ABC’ hasil true

LECTURE IV
STRUKTUR PEMILIHAN

16
Marsono, S.Kom, M.Kom UNTUK KALANGAN SENDIRI
MODUL : algoritma dan pemrograman 1

Pencabangan pada bahasa Pemrograman Turbo Pascal


Untuk meyeleksi suatu kondisi, di dalam Turbo Pascal dapat dipergunakan perintah
If...Then, If...Then...Else, Case...Of, dan Case...Of...Else.
Ad1. If...Then
Bentuk penulisan : If kondisi then
perintah
Contoh program :4.1
Program IfThen;
Uses Crt;
Var
Nilai : Integer;
Keterangan : String[15];
Begin
Clrscr;
Keterangan:=’Tidak Lulus’;
Write(‘Input Nilai Anda :’);
Readln(Nilai);
If Nilai>=60 Then
Keterangan:=’Lulus’;
Writeln(‘Anda dinyatakan :’,Keterangan);
Readln;
End.
Ad2. If...Then...Else
Bentuk penulisan : If kondisi then
perintah1
Else
perintah2;
Contoh program:4.2

Program IfThenElse;
Uses Crt;
Var
Nilai : Integer;
Kete : String[15];

17
Marsono, S.Kom, M.Kom UNTUK KALANGAN SENDIRI
MODUL : algoritma dan pemrograman 1

Begin
Clrscr;
Write(‘Input Nilai Anda :’);
Readln(Nilai);
If Nilai>=60 Then
Kete:=’Lulus’
Else
Kete:=’Tidak Lulus’;
Writeln(‘Anda dinyatakan :’,Kete);
Readln;
End.

Ad3. Case...Of
Bentuk penulisan : Case ungkapan Of
nilai_case1 : perintah1;
nilai_case2 : perintah2;
............... : .............;
nilai_casen : perintahn;
End;
Contoh program :4.3
Program CaseOf;
Uses Crt;
Var
NilAng : Integer;
NilHur : string[1];
Begin
Clrscr;
Write('Input Nilai Angka :');
Readln(NilAng);
Case NilAng Of
81..100 : NilHur:='A';
71..80 : NilHur:='B';
61..70 : NilHur:='C';
51..60 : NilHur:='D';

18
Marsono, S.Kom, M.Kom UNTUK KALANGAN SENDIRI
MODUL : algoritma dan pemrograman 1

41..50 : NilHur:='E';
End;
Write('Nilai Huruf :',NilHur);
Readln;
End.
Ad4. CASE...OF...ELSE
Bentuk penulisan : Case ungkapan Of
nilai_case1 : perintah1;
nilai_case2 : perintah2;
............... : .............;
Else perintah_bagian_Else;
End;
Contoh program :4.4

Program CaseOfElse;
Uses Crt;
Var
NilAng : Integer;
NilHur : string[1];
Begin
Clrscr;
Write('Input Nilai Angka :');
Readln(NilAng);
Case NilAng Of
81..100 : NilHur:='A';
71..80 : NilHur:='B';
61..70 : NilHur:='C';
51..60 : NilHur:='D';
41..50 : NilHur:='E';
Else NilHur:='K';
End;
Write('Nilai Huruf :',NilHur);
Readln;
End.

19
Marsono, S.Kom, M.Kom UNTUK KALANGAN SENDIRI
MODUL : algoritma dan pemrograman 1

Latihan : Buatlah sebuah Program untuk Menentukan nilai seorang mahasiswa dengan
menggunakan statement if kemudian buatlah flowchart dan algoritmanya.
Dengan ketentuan sbb:
1. mulai
2. persipan variabel
nim, nama, jurusan, semester : string
nilai_angka : integer;
nilai_huruf : char
3. nim,nama,jurusan,semester dan nilai_angka di input dari keyboard.
4. jika nilai_angka >= 80 dan nilai_angka <=100 maka nilai_huruf = A
jika nilai_angka >= 70 dan nilai_angka <=79 maka nilai_huruf = B
jika nilai_angka >= 60 dan nilai_angka <=69 maka nilai_huruf = C
selain itu maka nilai_huruf = D
5. cetak nilai huruf
6. stop
CONTOH PROGRAM NILAI
program menentukan_nilai_mhs;
USES CRT;
VAR NIM,NAMA,JURUSAN, SEMESTER: STRING;
NILAI_HURUF :CHAR;
NILAI_ANGKA :INTEGER;
BEGIN
CLRSCR;
WRITE('MASUKKAN NIM MAHASISWA : ');READLN(NIM);
WRITE('MASUKKAN NAMA MAHASISWA : ');READLN(NAMA);
WRITE('MASUKKAN JURUSAN MAHASISWA : ');READLN(JURUSAN);
WRITE('MASUKKAN SEMESTER MAHASISWA : ');READLN(SEMESTER);
WRITE('MASUKKAN NILAI UJIAN MAHASISWA : ');READLN(NILAI_ANGKA);
IF (NILAI_ANGKA >=80) AND (NILAI_ANGKA <=100) THEN NILAI_HURUF :='A'
ELSE IF (NILAI_ANGKA >=70 ) AND (NILAI_ANGKA <= 79)
THEN NILAI_HURUF :='B'
ELSE IF (NILAI_ANGKA > =60 ) AND (NILAI_ANGKA<]0]-P=69)

20
Marsono, S.Kom, M.Kom UNTUK KALANGAN SENDIRI
MODUL : algoritma dan pemrograman 1

THEN NILAI_HURUF :='C'


ELSE NILAI_HURUF:='D' ;
WRITELN('NILAI : ',NILAI_HURUF);
readln;
END.

Lecture V

Perulangan / loop pada bahasa Pemrograman Turbo Pascal


Struktur perulangan adalah struktur program yang digunakan untuk melaksanakan suatu
/sekelompok pernyataan secara berulang-ulang. Turbo Pascal mengenal tiga macam
perulangan, yaitu For, While ...Do dan Repeat... Until.
Perulangan menggunakan for
Perulangan for melakukan sejumlah perulangan sesuai dengan jumlah yang telah ditetapkan.
Format :
For Var_Int := Nil_Awal To/Downto Nil_Akhir Do
Pernyataan_yangdiulang;
Keterangan :
Nil_Awal adalah nilai awal yang akan diisikan ke dalam variabel Var_Int. Nil_Awal ini
akan bertambah atau berkurang satu setiap kali program melaksanakan proses. Bila Nil_Awal
telah sama dengan Nil_Akhir, proses For akan selesai dan program akan melaksanakan proses
berikutnya.
Bila daerah yang akan diproses lebih dari satu pernyataan, anda harus membuat suatu
blok yang dimulai dengan kata Begin dan diakhiri dengan End;

21
Marsono, S.Kom, M.Kom UNTUK KALANGAN SENDIRI
MODUL : algoritma dan pemrograman 1

Contoh program :
Program Perulangan_For;
Uses Crt;
Var
I : Integer;
Begin
Clrscr;
For I := 1 To 5 Do
Begin
Write(I);
Writeln(‘Pascal’);
End;
Readln;
End.
Perulangan menggunakan While ... Do
Perulangan While ... Do digunakan untuk melakukan perulangan terus menerus selama kondisi
logika pada While masih bernilai benar.
Format : While kondisi Do
pernyataan_yang diulang;

Program Perulangan_WhileDo;
Uses Crt;
Var
I : Integer;
Begin
I := 1;
While I <= 10 Do
Begin
Writeln(‘Nilai I adalah : ‘,I);
Inc(I);
End;
Readln;
End.

22
Marsono, S.Kom, M.Kom UNTUK KALANGAN SENDIRI
MODUL : algoritma dan pemrograman 1

Perulangan menggunakan Repeat ... Until


Perulangan Repeat ... Until digunakan untuk mengulang pernyataan sampai (until) kondisi yang
diseleksi Until tidak terpenuhi.
Format : Repeat
pernyataan_yangdiulang;
Until kondisi;
Program Perulangan_RepeatUntil;
Uses Crt;
Var
I : Integer;
Begin
I := 0;
Repeat
Inc(I);
Writeln(‘Nilai I adalah : ‘,I)
Until I = 10;
Readln;
End.

HASIL PROGRAM

Prosedur Dan Fungsi


Prosedur

23
Marsono, S.Kom, M.Kom UNTUK KALANGAN SENDIRI
MODUL : algoritma dan pemrograman 1

Prosedur merupakan bagian potongan program yang berdiri sendiri. Prosedur dibuat bila
mana program akan dibagi-bagi menjadi beberapa blok-blok modul. Letak prosedur pada
program adalah setelah bagian deklarasi dan sebelum bagian program utama. Kata cadangan
PROCEDURE digunakan sebagai pengenal suatu prosedur, diikuti oleh indetifier yang
merupakan nama prosedurnya dan secara optional dapat diikuti oleh kumpulan parameter yang
diiakhiri dengan titik koma. Contoh deklarasi prosedur :

PROCEDURE Hitung (X, Y : Integer);

Contoh program :
Program Contoh_Prosedur;
Uses Crt;
Var
X, Y, Z : Integer;
Procedure Inp_Bil(A, B : Integer);
Begin
Write('Input Bilangan I : ');Readln(X);
Write('Input Bilangan II : ');Readln(Y);
End;
Procedure Tam_Bil(A, B : Integer; var C : Integer);
Begin
C:=A+B;
End;
{ Program Utama }
Begin
Clrscr;
Inp_Bil(X, Y);
Tam_Bil(X,Y,Z);
Write('Hasil dari : ',X,' + ',Y,' = ',Z);
Readln;
End.
Fungsi
Fungsi merupakan potongan program yang tidak dapat berdiri sendiri, karena
memberikan suatu nilai, fungsi tidak dapat berdiri sendiri melainkan memerlukan suatu tempat

24
Marsono, S.Kom, M.Kom UNTUK KALANGAN SENDIRI
MODUL : algoritma dan pemrograman 1

untuk menampung nilai tersebut. Kata cadangan FUNCTION mengawali bagian deklarasi fungsi
diikuti oleh identifier yang merupakan nama dari fungsinya dan secara optional dapat diikuti
oleh kumpulan parameter, tipe dari fungsinya dan diakhiri dengan titik koma. Contoh deklarasi
fungsi :
FUNCTION Pangkat (X, Y : real) : Real;

Contoh dalam program :


Program Contoh_Prosedur;
Uses Crt;
Var
X, Y, Z : Integer;
Procedure Inp_Bil(A, B : Integer);
Begin
Write('Input Bilangan I : ');Readln(X);
Write('Input Bilangan II : ');Readln(Y);
End;
Function Tam_Bil(A, B : Integer) : Integer;
Begin
Tam_Bil:=A+B;
End;
{ Program Utama }
Begin
Clrscr;
Inp_Bil(X, Y);
Write('Hasil dari : ',X,' + ',Y,' = ',Tam_bil(X, Y));
Readln;
End.

TIPE DATA STANDARTD

Tipe Integer
Ada 5 tipe yang termasuk dalam kelompok ini, yaitu :
Tipe Batas nilai Ukuran dalam byte
byte 0 s/d 255 1
shortint -128 s/d 127 1

25
Marsono, S.Kom, M.Kom UNTUK KALANGAN SENDIRI
MODUL : algoritma dan pemrograman 1

integer -32768 s/d 32767 2


word 0 s/d 65535 2
longint -2147483648 s/d 2147483647 4
Deklarasi variabel
var b1, b2 : integer;

Operasi dasar
- Penjumlahan (+)
- Pengurangan (-)
- Perkalian (*)
- Pembagian (div)
- Sisa pembagian (mod)

Tipe data real


Nilai tipe data real berkisar dari 2.9 x 10E-39 s/d 1.7 x 10E38 dengan angka signifikan sampai
dengan 11 digit, E menunjukkan nilai 10 pangkat dan menempati memori sebesar 6 byte.

Deklarasi variabel :
var r1, r2 : real;
Operasi dasar :
- Penjumlahan (+)
- Pengurangan (-)
- Perkalian (*)
- Pembagian (/)
- Fungsi pangkat 2 (sqr)
- Fungsi akar (sqrt)

Tipe Data Karakter dan String


Deklarasi variabel
var a, b : char;
Nama : string[20];
Alamat :string;

Operasi pada tipe karakter

26
Marsono, S.Kom, M.Kom UNTUK KALANGAN SENDIRI
MODUL : algoritma dan pemrograman 1

- Upcase. Merubah menjadi karakter kapital. Contoh : upcase(’a’), = A


- Ord. Menentukan nilai kode ASCII. Contoh : ord(’A’), = 65
- Chr. Menghasilkan karakter ASCII. Contoh : chr(65), = ’A’
- dll

Operasi pada tipe string


- Str. Untuk mengkonversikan data numeric menjadi data bertipe string. Contoh : str(10,
varstr)
- Val. Untuk mengkonversi data string menjadi data numeris. Contoh : val(‘2005’, varnum)
- Copy. Untuk mengambil sejumlah karakter dari suatu string. Contoh : Copy(varstr, pos, jlh)
- Length. Untuk mengetahui panjang suatu string. Contoh : Length(string)
- dll.

Tipe Data Boolean


Tipe data boolean mempunyai dua nilai, yaitu benar dan salah. Dengan menggunakan operator
and, or atau not dapat dibentuk ungkapan boolean yang lebih rumit. Nilai boolean sangat
penting untuk pengambilan keputusan dalam suatu program. Tipe data ini tidak dapat di input.
Deklarasi variabel
var a, b, c : boolean;

Operasi pada tipe boolean :


- Operasi and
- Operasi or
- Operasi not

program charstring;
uses crt;
var k1,k2 : char;
s : string;
b1,b2 : boolean;

procedure backar;

27
Marsono, S.Kom, M.Kom UNTUK KALANGAN SENDIRI
MODUL : algoritma dan pemrograman 1

begin
write ('Input karakter 1 : '); readln(k1);
write ('Input karakter 2 : '); readln(k2);
end;
procedure tamkar;
begin
s:=k1+k2;
writeln('Karakter setelah : ',k1,' adalah = ',succ(k1));
writeln('Karakter sebelum : ',k1,' adalah = ',pred(k1));
writeln('Nilai kode ASCII dari : ',k1,' adalah = ',ord(k1));
writeln('Huruf kapital dari : ',k1,' adalah = ',upcase(k1));
writeln('Karakter ',k1,' + ',k2,' adalah = ',s);
end;

procedure bacboo;
begin
writeln;
b1:=true;
b2:=false;
writeln('Nilai data 1 = ',b1);
writeln('Nilai data 2 = ',b2);
end;
procedure tamboo;
begin
writeln('Operasi and ');
writeln(b1,' and ',b2,' = ',b1 and b2);
writeln('Operasi or ');
writeln(b1,' or ',b2,' = ',b1 or b2);
writeln('Operasi not ');
writeln('not ',b1,' = ',not(b1));
writeln('not ',b2,' = ',not(b2));
end;
begin
clrscr;

28
Marsono, S.Kom, M.Kom UNTUK KALANGAN SENDIRI
MODUL : algoritma dan pemrograman 1

backar;
tamkar;
bacboo;
tamboo;
readln;
end.

Tugas :
- Kembangkan contoh program di atas untuk tipe data string yang mempunyai kemampuan
untuk operasi : merubah data nilai ke string, merubah data string ke nilai, menggabung dua
kalimat dan menghitung panjang (jumlah karakter) suatu kalimat.
- Kembangkan contoh program di atas untuk operasi boolean berikut :
o B1 and B2 or B3
o B1 and B2 and B3
o B1 or B2 or B3
o not(B1) and B2 or B3
o B1 and not(B2) or B3

TIPE DATA ARRAY


Array adalah salah satu bentuk struktur data yang bersifat linier (kontinu). Variabel
array digunakan untuk menyimpan sejumlah data yang bertipe sama sehingga dapat
menghemat jumlah variabel yang digunakan. Penunjukan kepada setiap lokasi atau elemen
array menggunakan nama variabel dan subscrip (index), nilai subscrip selalu dimulai dengan 1
(satu).
Contoh :
a = 10
a=a+5
a = 515
Maka dimemori komputer nilai data dari variabel a adalah 5. Nilai data a yang 10 (baris
pertama), dan 15 (baris kedua) akan terhapus oleh nilai data a yang 5 (baris ketiga). Masalah

29
Marsono, S.Kom, M.Kom UNTUK KALANGAN SENDIRI
MODUL : algoritma dan pemrograman 1

yang muncul adalah bila semua nilai a tersebut sangat dibutuhkan, bagaimana caranya ?.
Jawabnya gunakan variabel array.
Ilustrasi :
lokasi / elemen data

Nama Array
Subscrip/index
1 2 3 4 5 6 7 8

Deklarasi variabel :
Var
V_Array_SatuD : Array[1..4] of tipe_data;
V_Array_DuaD : Array[1..4, 1..2] of tipe_data;
atau
const max = 50;
type larik = array[1..max] of real
var
X : larik;
Operasi pada tipe data array
1. Proses isi data array
2. Proses tampil data array
3. Proses urutkan data array
4. Proses cari data array

PENCARIAN DATA DALAM ARRAY


Apabila suatu array sudah diisi data maka dapat dilakukan pencarian data tertentu
didalam array dengan kemungkinan :
 Data yang dicari tidak ada didalam array
 Data ditemukan, selanjutnya perlu dipastikan subscrip lokasi tempat data itu berada.
Permasalahan :
Deklarasikan satu array numerik dengan subscrip 10, kemudian input data kdalam semua array
tersebut. Selanjutnya diinput data numerik sembarang oleh operator untuk dicari didalam array
tersebut. Output yang diminta adalah 1 diantara 2 kemungkinan yaitu :
 Jika ditemukan tampilkan dan pada subscrip ke berapa
 Data tidak ditemukan.
Buatlah algoritma untuk keperluan tersebut.

30
Marsono, S.Kom, M.Kom UNTUK KALANGAN SENDIRI
MODUL : algoritma dan pemrograman 1

Pemahaman :
 Output : Satu diantara dua kemungkinan, yaitu :
- Data ditemukan pada subscrip yang ke berapa
- Data tidak ditemukan
 Input : - 10 data numerik
- 1 data numerik
 Analisis : - Deklarasikan array dengan subscrip 10 dengan perintah array.
- Input data kedalam array dengan proses perulangan
- Input 1 data numerik yang akan dicari ke array
- Cari data didalam array dengan prsoses peruulangan
- Dalam setiap perulangan dilakukan pembandingan data yang dicari
- Jika sama berarti data ditemukan dan proses perulangan dihentikan
- Jika sampai ke subscrip akhir tidak ada yang sama berarti data tidak
ditemukan
 Algoritma : .........

Mengurutkan Data Dalam Array


Dalam banyak hal perlu data dalam keadaan berurutan. Pengurutan data ada dua macam ,
yaitu :
1. Ascending atau urutan menaik
2. Descending atau urutan menurun
Untuk menghasilkan data berurutan proses dasar yang dilakukan adalah mebandingkan
dua data yang berdekatan. Untuk mengetahui harga data yang lebih besar atau yang lebih
kecil, dilakukan operasi pembanding. Kemudian jika posisi kedua dta itu tidak sesuai dengan
urutan yang diinginkan, maka dilakukan pertukaran tempat. Sedangkan jika sesuai dengan
urutan yang diinginkan tentu tidak perlu proses apapun.
Algortima untuk pengurutan data ini dikembangkan menurut logika untuk memperoleh
proses yang seefisien mungkin sehingga dapat meminimalkan kegiatan dan waktu proses.
Beberapa macam algoritma pengurutan data yang selama ini dikenal, antaralain :
1. Model Bubble / Exchange Sort
Membandingkan elemen yang sekarang dengan elemen yang berikutnya, jika elemen
sekarang > elemen berikutnya, maka dilakukan pertukaran.
2. Model Selection Sort

31
Marsono, S.Kom, M.Kom UNTUK KALANGAN SENDIRI
MODUL : algoritma dan pemrograman 1

Membandingkan elemen sekarang dengan elemen yang berikutnya sampai dengan


terakhir.
3. Model Insertion Sort
Pengurutan dilakukan dengan cara membandingkan data ke-i (dimana i dimulai dari data
ke-2 sampai dengan terakhir) dengan data berikutnya. Jika ditemukan data yang lebih kecil
maka data tersebut disisipkan ke depan sesuai dengan posisi yang seharusnya.
4. Model Quick Sort
Membandingkan suatu elemen (disebut pivot) dengan elemen yang lain dan menyusunnya
sedemikian rupa sehingga elemen-elemen lain yang lebih kecil dari pada pivot tersebut
terletak disebelah kirinya dan elemen-elemen lain yang lebih besar dari pada pivot terletak
disebelah kanannya.

Contoh Program array 1 dimensi


1.
program mencari_hari_lahir;
type
x = string[7];
const
faktorBLN : array[1..12] of byte =(0,3,3,6,1,4,6,2,5,0,3,5);
hari : array[0..8] of x = ('Minggu','Senin','Selasa',' ','Rabu','Kamis',
' ','jumat','Sabtu');

var
i: word;
nama :string[255];
j1,j2,j3,j4 :integer;
tanggal,Bulan, Tahun : integer;
begin
writeln('PROGRAM MENCARI HARI KELAHIRAN ABAD 20');
WRITELN('Tahun input dari 1900 s/d 2000');
WRITELN('****************************** ');
write('MASUKKAN TANGGAL YANG DICARI: '); READLN(Tanggal);
write('MASUKKAN BULANNYA : ');READLN(Bulan);
write('MASUKKAN TAHUNNYA JUGA : ');READLN(Tahun);
if tahun > 2009 then tahun := tahun - 2009;
j1 := trunc(tahun * 365.25);
j2 := j1 + faktorBLN[Bulan];
if (tahun/4 = int(tahun/4)) and (Bulan < 3) then J2 := j2-1;
j3 := j2 + tanggal;
j4 := trunc(frac(j3/7)*10);
writeln;

32
Marsono, S.Kom, M.Kom UNTUK KALANGAN SENDIRI
MODUL : algoritma dan pemrograman 1

writeln('HARI TERSEBUT ADALAH HARI: ',HARI[J4]);


readln;
end.
Hasil program

PROGRAM MENCARI HARI KELAHIRAN ABAD 20


Tahun input dari 2000 s/d 2000
******************************
MASUKKAN TANGGAL YANG DICARI: 21
MASUKKAN BULANNYA : 11
MASUKKAN TAHUNNYA JUGA : 09

HARI TERSEBUT ADALAH HARI: Sabtu

2. array multi dimensi

program isi_matrik;
uses crt;
var
matA : array[1..100, 1..100] of integer;
i,j : integer;
bar, kol :integer;
begin
write('banyak baris = ');readln(bar);
write('banyak kolom = ');readln(kol);
writeln;
for i:=1 to bar do
begin
clrscr;
for j:=1 to kol do
begin
write('MatA[',i,',',j,'] = ');
readln(MatA[i,j]);
end;
end;
writeln;
writeln('isi MatA: ');
for i:=1 to bar do
begin
for j:=1 to kol do
write(MatA[i,j]:3);
writeln;
end;
readln;
end.
Hasil program array 2 dimensi
banyak baris = 2

33
Marsono, S.Kom, M.Kom UNTUK KALANGAN SENDIRI
MODUL : algoritma dan pemrograman 1

banyak kolom = 4

MatA[1,1] = 3
MatA[1,2] = 4
MatA[1,3] = 5
MatA[1,4] = 6
MatA[2,1] = 4
MatA[2,2] = 5
MatA[2,3] = 6
MatA[2,4] = 7

isi MatA:
3 4 5 6
4 5 6 7

SORT

Definisi Sort
Sort adalah proses pengurutan data yang sebelumnya disusun secara acak sehingga menjadi
tersusun secara teratur menurut suatu aturan tertentu.
Pada umumnya terdapat 2 jenis pengurutan :
 Ascending (Naik)
 Descending (Turun)
Contoh :
Data Acak : 5 6 8 1 3 25 10

34
Marsono, S.Kom, M.Kom UNTUK KALANGAN SENDIRI
MODUL : algoritma dan pemrograman 1

Terurut Ascending : 1 3 5 6 8 10 25
Terurut Descending : 25 10 8 6 5 3 1
Untuk melakukan proses pengurutan tersebut dapat digunakan berbagai macam cara / metoda.
Beberapa metoda diantaranya :
a) Buble / Exchange Sort
b) Selection Sort
c) Insertion Sort
d) Quick Sort
e) Shell sort

Bubble / Exchange Sort


Memindahkan elemen yang sekarang dengan elemen yang berikutnya, jika elemen sekarang >
elemen berikutnya, maka tukar
Proses :
Langkah 1 :
22 10 15 3 8 2 Pengecekan dapat dimulai dari data paling awal atau paling akhir. Pada
contoh di samping ini pengecekan di mulai dari data yang paling akhir.
22 10 15 3 2 8
Data paling akhir dibandingkan dengan data di depannya, jika ternyata
22 10 15 2 3 8
lebih kecil maka tukar. Dan pengecekan yang sama dilakukan terhadap
22 10 2 15 3 8 data yang selanjutnya sampai dengan data yang paling awal.

22 2 10 15 3 8

2 22 10 15 3 8

Langkah 2 :
2 22 10 15 3 8 Kembalinya data paling akhir dibandingkan dengan data didepannya
jika ternyata lebih kecil maka tukar, tetapi kali ini pengecekan tidak
2 22 10 15 3 8
dilakukan sampai dengan data paling awal yaitu 2 karena data
2 22 10 3 15 8

2 22 3 10 15 8
35
Marsono,
2 3 22 S.Kom, M.Kom
10 15 8 UNTUK KALANGAN SENDIRI
MODUL : algoritma dan pemrograman 1

tersebut pasti merupakan data terkecil (didapatkan dari hasil


pengurutan pada langkah 1).

Langkah 3 : Langkah 4 :

2 3 22 10 15 8 2 3 8 22 10 15

2 3 22 10 8 15 2 3 8 22 10 15

2 3 22 8 10 15 2 3 8 10 22 15

2 3 8 22 10 15

Proses pengecekan pada langkaj 3 dst. Sama dengan langkah sebelumnya.


Langkah 5 : Terurut :

2 3 8 10 22 15
2 3 8 10 15 22
2 3 8 10 15 22

Proses di atas adalah pengurutan data dengan metoda bubble ascending.


Untuk yang descending adalah kebalikan dari proses diatas.
Berikut penggalan listing program Procedure TukarData dan Procedure Bubble Sort.
Procedure TukarData
Procedure TukarData(var a,b : word);
Var c : word;
Begin
c:=a;
a:=b;
b:=c;
end;
Procedure Bubble Sort Ascending
Procedure Asc_Bubble(var data:array; jmldata:integer);
Var i,j : integer;
Begin
For i:= 2 to jmldata do
For j:= jmldata downto I do
If data[j] < data[j-1] then
Tukardata (data[j], data[j-1]);

36
Marsono, S.Kom, M.Kom UNTUK KALANGAN SENDIRI
MODUL : algoritma dan pemrograman 1

end;

Untuk pengurutan secara descending anda hanya perlu menggantikan baris ke-6 dengan berikut
ini :
If data[j] > data[j-1] then

Selection Sort
Membandingkan elemen yang sekarang dengan elemen yang berikutnya sampai dengan elemen
yang terakhir. Jika ditemukan elemen lain yang lebih kecil dari elemen sekarang maka dicatat
posisinya dan kemudian ditukar. Dan begitu seterusnya.
Proses :
Langkah 1: Langkah 2 :

i=1 2 3 4 5 6 i=1 2 3 4 5 6
22 10 15 3 8 2 2 10 15 3 8 22

pembanding Posisi pembanding Posisi


22 > 10 2 10 < 15 2
10 < 15 2 10 > 3 4
10 > 3 4 3 <8 4
3 <8 4 3 < 22 4
3 >2 6
Posisi data ke-1(22) = 6 Posisi data ke-2(10) = 4
Tukar data ke-1 dengan data ke-6 Tukar data ke-2 dengan data ke-4

2 10 15 3 8 22 2 3 15 10 8 22

Langkah 3 : Langkah 4 :

i=1 2 3 4 5 6 i=1 2 3 4 5 6
2 3 15 10 8 22 2 3 8 10 15 22
pembanding Posisi
pembanding Posisi 10 < 15 4
15 > 10 4 10 < 22 4
10 > 8 5
8 < 22 5 Posisi data ke-4 tetap
Pada posisinya = 4 (tidak berubah)
Posisi data ke-3(15) = 5
Tukar data ke-3 dengan data ke-5 2 3 8 10 15 22
2 3 8 10 15 22

37
Marsono, S.Kom, M.Kom UNTUK KALANGAN SENDIRI
MODUL : algoritma dan pemrograman 1

Langkah 5 : Terurut :
i=1 2 3 4 5 6 2 3 8 10 15 22
2 3 8 10 15 22

pembanding Posisi
15 < 20 5
posisi data ke-5 tetap
pada posisinya = 5 (tidak berubah)

Proses pengurutan di atas adalah dengan metoda selection Ascending. Untuk descending hanyalah
kebalikan dari proses di atas. Berikut penggalan listing program Procedure Selection Sort secara
ascending

Procedure Selection Sort Ascending


Procedure Asc_Selection;
Var min, pos : byte;
Begin
For i:= 1 to max-1 do
Begin
Pos:=i;
For j:= i+1 to max do
If data[j] < data[pos] then pos:=j;
If i <> pos then tukardata(data[i],data[pos]);
end;
end;

untuk pngurutan secara desending, anda hanya perlu mengganti baris ke-8 sbb :
if data[pos] < data[j] then pos:=j;
Insertion Sort
Pengurutan dilakukan dengan cara membandingkan data ke-I (dimana I dimulai dari data ke-2
sampai dengan data terakhir) dengan data berikutnya. Jika ditemukan data yang lebih kecil maka
data tersebut disisipkan ke depan sesuai posisi yang seharusnya.
Proses :
Langkah 1: Langkah 2 :

i= 1 2 3 4 5 6 i= 1 2 3 4 5 6
22 10 15 3 8 2 10 22 15 3 8 2

temp cek geser temp cek geser


10 temp<22 data ke-1 posisi 2 15 temp<22 data ke-2 posisi 3
temp>10 38
Marsono, S.Kom,posisi
temp menempati M.Kom ke-1. UNTUK KALANGAN SENDIRI
temp menempati posisi ke-2.
10 22 15 3 8 2
10 15 22 3 8 2
MODUL : algoritma dan pemrograman 1

Langkah 3 : Langkah 4:

i= 1 2 3 4 5 6 i= 1 2 3 4 5 6
10 15 22 3 8 2 3 10 15 22 8 2

temp cek geser temp cek geser


8 temp < 22 data ke-4posisi 5
3 temp < 22 data ke-3 posisi 4
temp < 15 data ke-3posisi 4
temp < 15 data ke-2 posisi 3 temp < 10 data ke-2posisi 3
temp < 10 data ke-1posisi 2 temp > 3

temp menempati posisi ke-1. temp menempati posisi ke-2.

3 10 15 22 8 2 3 8 10 15 22 2

Langkah 5 : Langkah 6 :

i= 1 2 3 4 5 6 2 3 8 10 15 22
3 8 10 15 22 2

temp cek geser


2 temp < 22 data ke-5posisi 6
temp < 15 data ke-4posisi 5
temp < 10 data ke-3posisi 4
temp < 8 Insertion
Procedure data ke-2posisi 3
Sort Ascending
temp < 3 data ke-1posisi 2
Procedure Asc_Insert;
temp menempati posisi
Var i , j , temp ke-1.
: byte;
Begin
For i := 2 to max do
Begin
Temp :=data[i];
j := i-1;
while (data[j] > temp) and (j>0) do
begin
data[j+1] := data[j];
dec(j);
end;
data[j+1]:=temp;
end;
end;

39
Marsono, S.Kom, M.Kom UNTUK KALANGAN SENDIRI
MODUL : algoritma dan pemrograman 1

Untuk pengurutan secara descending anda tinggal mengganti baris ke 8 dengan baris berikut ini :
While(data[j]<temp)and(j>0)do

QUICK SORT
Membandingkan suatu elemen (disebut pivot) dengan elemen yang lain dan menyusunnya
sedemikian rupa sehingga elemen- elemen lain yang lebih kecil daripada pivot tersebut terletak di
sebelah kirinya dan elemen-elemen lain yang lebih besar daripada pivot tersebut terletak di
sebelah kanannya. Sehingga dengan demikian telah terbntuk dua sublist, yang terletak di sebelah
kiri dan kanan dari pivot. Lalu pada sublist kiri dan sublist kanan kita anggap sebuah list baru dan
kita kerjakan proses yang sama seperti sebelumnya. Demikian seterusnya sampai tidak terdapat
sublist lagi. Sehingga didalamnya telah terjadi proses Rekursif.

Proses :
Bilangan yang di dalam kurung merupakan pivot
Persegi panjang yang digambarkan dengan garis terputus-putus menunjukkan sublist.
i bergerak dari sudut kiri ke kanan sampai mendapatkan nilai yang >= pivot.
j bergerak dari sudut kanan ke kiri sampai menemukan nilai yang < pivot.

Langkah 1 :
Index = 1 2 3 4 5 6
j

22 10 1 3 8 2
i 5

i berhenti pada index ke-1 karena langsung mendapatkan nilai yang > dari pivot (15).
j Berhenti pada index ke-6 karena juga langsung mendapatkan nilai yang < dari pivot.
Karena i < j maka data yang ditunjuk olh I ditukar dengan data yang ditunjuk oleh j sehingga
menjadi :
2 10 15 3 8 22
Langkah 2 :
Index = 1 2 3 4 5 6
j

2 10 1 3 8 22
5 i

40
Marsono, S.Kom, M.Kom UNTUK KALANGAN SENDIRI
MODUL : algoritma dan pemrograman 1

i berhenti pada index ke-3 (pivot) karena tidak menemukan bilangan yang > dari pivot.
j berhenti pada index k-5 menunjuk pada nilai yang < dari pivot.
Karena i < j maka data yang ditunjuk oleh i (pivot) ditukar dengan data yang ditunjuk oleh j
sehingga menjadi :
2 10 8 3 15 22

Langkah 3 :

Index = 1 2 3 4 5 6

2 10 8 3 15 22

Proses yang sama seperti sebelumnya dilakukan terhadap 2 buah sublist yang baru (ditandai
dengan persegi panjang dengan garis terputus-putus).

2 3 8 10 15 22

Atau dapat juga digambarkan dalam bentuk tree seperti di bawah ini dengan pivot yang ditandai
dengan huruf tebal. Kemudian setelah terurut dibaca inorder.

22 10 15 3 8 2

10 3 8 2 15 22

2 3 10 8

8 10

Procedure Quisort dengan nilai paling kiri sebagai pembanding (pivot).


Procedure Asc_Quick(L,R : Integer);
Var i, j:integer;
Begin
If L<R then
Begin

41
Marsono, S.Kom, M.Kom UNTUK KALANGAN SENDIRI
MODUL : algoritma dan pemrograman 1

i := L; j := R+1;
repeat
repeat inc(i) until data[i] >= data[1];
repeat dec(j) until data[j] <= data[1];
if i < j then tukardata (data[i], data[j]);
until i > j;
tukardata (data[1], data[j]);
Asc_Quick(L,j-1);
Asc_Quick(j+1,R);
End;
End;

Untuk pengurutan secara descending anda tinggal mengganti tanda aritmatik pada baris k 8 dan 9
sehingga menjadi seperti baris berikut :
repeat inc(i) until data[i] >= data[l];
repeat dec(j) until data[j] <= data[l];

Procedure Quick Sort dengan nilai tengah sebagai pembanding (pivot).


Procedure Asc_Quick(L,R : Integer);
Var
mid, i, j : integer;
begin
i:= L;j:=R mid := data[(L+R) div 2];
repeat
while data[i] < mid do inc(i);
while data[j] > mid do dec(j);
if i < j then
begin
change(data[i],data[j]);
inc(i); dec(j);
end;
until i > j;
if L < j then Asc_Quick(L , j);
if i > R then Asc_Quick(i , R);
end;

42
Marsono, S.Kom, M.Kom UNTUK KALANGAN SENDIRI
MODUL : algoritma dan pemrograman 1

Untuk pengurutan secara descending, anda hanya perlu mengganti baris ke-6 & 7 sbb :
while data[j] < mid do inc(j);
while data[k] > mid do dec(k);

Latihan Soal beserta jawaban (Listing program) dan penjelasan.


Anda diminta membuat sbuah program sorting dengan metode bubl sort. Mintalah user untuk
memasukkan 10 angka. Lalu tampilkan angka-angka trsebut setelah disort baik secara ascending
maupun descendeing
Layar 1 :
Masukkan 10 data
==========
Data ke-1 = 5 Data ke-6 = 45
Data ke-2 = 2 Data ke-7 = 8
Data ke-3 = 67 Data ke-8 = 23
Data ke-4 = 43 Data ke-9 = 39
Data ke-5 = 90 Data ke-10 = 7

{ket : tampilan ketika mengiput 10 angka}

Layar 2 :
5 2 67 43 90 45 8 23 39 7
Data yang telah diurutkan :
**************
Ascending : 2 5 7 8 23 39 43 45 67 90
Descending : 90 67 45 43 39 23 8 7 5 2

{ket : tampilan setelah dilakukan bubble sort}


jawaban :
contoh:11.1 sortin buble.
uses crt;
const max = 10;
Type arr = array[1..max] of byte;
Var i : byte;
Data : arr;

43
Marsono, S.Kom, M.Kom UNTUK KALANGAN SENDIRI
MODUL : algoritma dan pemrograman 1

Procedure Input;
begin
Clrscr;
Writeln (‘Masukkan 10 data’);
Writeln (‘= = = = = = = = = =’);
For i := 1 to max do {input 10 data}
begin
write(‘Data ke-‘, i ,’=’); readln(data[i]);
end;
Clrscr;
For i := 1 to max do
Write(data[i],’ ‘);
Writeln;
Writeln (‘ * * * * * * * * * * * * * * *);
Writeln (‘Data yang telah diurutkan :’);
end;
Procedure Change (var a,b :byte); {procedure untuk menukar data}
Var c : byte;
Begin
c := a; a := b; b := c;
end;
Procedure Asc_Buble; {pengurutan secara ascending}
Var p,q : byte;
flaq : boolean;
begin
flaq:=false;
p:=2;
while (p<max) and (not flaq) do
begin
flaq:=true;
for q := max downto p do
if data[q] < data[q-1] then
begin
change (data[q], data[q-1]);
flaq:=false;
end;

44
Marsono, S.Kom, M.Kom UNTUK KALANGAN SENDIRI
MODUL : algoritma dan pemrograman 1

inc(i);
end;
write(‘Ascending :’);
end;
Procedure Desc_Buble; {pengurutan secara descending}
Var p, q : byte;
Flaq : boolean;
Begin
flaq:=false;
p:=2;
while (p<max) and (not flaq) do
begin
flaq:=true;
for q := max downto p do
if data[q] < data[q-1] then
begin
change (data[q], data[q-1]);
flaq:=false;
end;
inc(i);
end;
write(‘Descending :’);
end;
Procedure Output;
Begin
For i := 1 to max do
Write(data[i],’’);
Writeln;
end;
Begin {program utama}
Input;
Asc_buble; output;
Desc_buble; output;
Readkey;
end.

45
Marsono, S.Kom, M.Kom UNTUK KALANGAN SENDIRI
MODUL : algoritma dan pemrograman 1

Contoh 11.2 Program sort


PROGRAM SORTING_BUBLE;
USES CRT;
VAR DERET : array[1..100] of integer;
loop,nested,banyak, tampung : integer;
begin
clrscr;
write('Masukan berapa bilangan yang anda inginkan: ');
readln(banyak);
for loop :=1 to banyak do begin
write('bilangan ke', loop:3,'=');
readln(deret[loop]);
end; {proses pengurutan ascending}
for loop := 1 to banyak -1 do
for nested :=loop + 1 to banyak do
if(deret[nested]<deret[loop]) then begin
tampung := deret[nested];
deret[nested] :=deret [loop];
deret[loop] :=tampung;
end;
{cetak hasil secara ascending}
writeln;
writeln('hasil sort secara Ascending');
for loop := 1 to banyak do
writeln('Data Ke: ',loop:3, '= ', deret[loop]);
{cetak hasil Descending}
writeln('Hasil sort secara Descending');
for loop := banyak downto 1 do
writeln('Data Ke: ',(banyak-loop+1):3, '= ', deret[loop]);
readkey;
end.
Contoh :11.3 Program selection Sort Max
PROGRAM Pilihmaks;
USES CRT;
VAR DERET : array[1..100] of integer;
loop,nested,banyak, tampung,imaks : integer;
begin
clrscr;
writeln('METODE SELECTION SORT MAKSIMUM');
write('Masukan berapa bilangan yang anda inginkan: ');
readln(banyak);
for loop := 1 to banyak do begin
write('bilangan ke', loop:3,'=');
readln(deret[loop]);
end;
{proses pengurutan ascending}
for loop := banyak downto 2 do begin
imaks:=1;
for nested := 2 to loop do

46
Marsono, S.Kom, M.Kom UNTUK KALANGAN SENDIRI
MODUL : algoritma dan pemrograman 1

if(deret[nested] > deret[imaks]) then


imaks:=nested;
tampung := deret[imaks];
deret[imaks] := deret [loop];
deret[loop] :=tampung;
end;
{cetak hasil secara ascending}
writeln;
writeln('hasil sort secara Ascending');
for loop := 1 to banyak do
writeln('Data Ke: ',loop:3, '= ', deret[loop]);
WRITELN('=====================================');
{cetak hasil Descending}
writeln('Hasil sort secara Descending');
for loop := banyak downto 1 do
writeln('Data Ke: ',(banyak-loop+1):3, '= ', deret[loop]);
WRITELN('=====================================');
WRITELN('THANKS FOR YOU');
readln;
end.
Program 11.4 Insert sort
PROGRAM Insertion_Sort;
USES CRT;
VAR Larik : array[1..100] of integer;
i,j,N, X : integer;
ketemu : boolean;
begin
clrscr;
writeln('Metode Pengurutan sisip max dan min');
writeln('===================================');
write('Masukan Banyak Data: ');
readln(N);
for i :=1 to N do begin
write('bilangan ke', i:3,'=');
readln(Larik[i]);
end;
{proses pengurutan ascending}
for I := 2 to N do begin
X := Larik[I];
J := I -1;
ketemu :=false;
while (J >= 1) and (not ketemu) do begin
if X < Larik[J] then begin
Larik[J + 1] := Larik[J];
J := J - 1;
end
else ketemu := true;
end;

47
Marsono, S.Kom, M.Kom UNTUK KALANGAN SENDIRI
MODUL : algoritma dan pemrograman 1

Larik[J+1] := X;
end;
{cetak hasil secara ascending}
writeln;
writeln('hasil sort secara Ascending');
writeln('vvvvvvvvvvvvvvvvvvvvvvvvvvv');
for i := 1 to N do
writeln('Data Ke: ',i:3, '= ', Larik[i]);
writeln;
{cetak hasil Descending}
writeln('Hasil sort secara Descending');
writeln('VVVVVVVVVVVVVVVVVVVVVVVVVVVV');
for i := N downto 1 do
writeln('Data Ke: ',(N - i + 1):3, '= ', Larik[i ]);
readln;
end.

SEARCH

SEARCHING  adalah suatu proses untuk menemukan informasi dari sejumlah


data yang ada .

ada beberapa metode search, akan tetapi pada bab ini kita akan membahas 2 metode yaitu:
1. Metode Sequential search
2. Metode Binary search

Ad1. Metode Squential search


Suatu metode pencarian data dengan cara membandingkan setiap elemen satu persatu
secara beruntun, mulai dari elemen pertama hingga elemen yang di cari di temukan, atau seluruh
elemen sudah di periksa.
Contoh:

13 16 14 21 76 15
1 2 3 4 5 6

Misalkan nilai yang dicari: X= 21


Elemen yang di bandingkan : 13,16,14,21 (ditemukan)
Indeks larik yang dikembalikan IDX= 4

Misalkan nilai yang dicari: X= 13


Elemen yang di bandingkan : 13 (ditemukan)
Indeks larik yang dikembalikan IDX= 1

Misalkan nilai yang dicari: X= 15


Elemen yang di bandingkan : 13,16,14,21,76,21 (ditemukan)
Indeks larik yang dikembalikan IDX= -1

48
Marsono, S.Kom, M.Kom UNTUK KALANGAN SENDIRI
MODUL : algoritma dan pemrograman 1

Setiap elemen pada larik L akan dibandingkan dengan X mulai dari elemen L[1].
Proses perbandingan akan terus dilakukan selama indeks larik tidak melebehi N (jumlah larik)
dan larik ke [k] tidak sama dengan X
Dan nilai yang dikembalikan adalah peubah boolean yaitu Ketemu = true dan tidak ketemu =
false.

Procedure sequentialsearch1(input L : larik, input n: integer, input x:integer, output ketemu:


integer)
{Mencari keberadaan nilai X di dalam L[1..n].
K.awal: X dan larik L[1..n] sudah terdefenisih nilainya dan K.Akhir ketemu bernilai True jika x
Ditemukan, jika X tidak di temukan maka ketemu =bernilai False}
Deklarasi
K: integer; {indeks larik}
Deskripsi
K1
While (K<n) and (L[K] <> x do
K  K +1
Endwhile
{K = n or L [K]= x}
If L[k] =x then {di temukan}
Ketemu  true
Else
Ketemu  false {tidak ada di dalam larik}
Endif

Ad2. Metode Binary Search


Suatu metode pencarian data dengan cara membagi dua data

Syarat-syarat yang harus di penuhi pada metode ini adalah:

1. Data harus sudah terurut baik ascending atau descending.


2. Bagi dua elemen larik pada elemen tengah
Indeks k=(i+j) div 2
Bagian kiri L[i..j] dan kanan L[k+1..j]
3. Periksa apakah L[ k] = x ,jika ya ketemu pencarian selesai.
Jika tidak tanyakan Apakah L[k] < x jika ya pencarian dilakukan di bagian kiri dan
sebaliknya jika L[k] > x di cari dikanan . hal ini tergantung larik terurut ascending atau
descending.
4. Ulangi langkah 1 sampai x di temukan atau i>j yaitu ukuran larik sudah nol.

Contoh:
Ilustrasi pencarian data . misalkan Larik L dengan 8 buah elemen terurut menurun sbb:
81 76 21 18 16 13 10 7
i=1 2 3 4 5 6 7 8=j

misalkan elemen yang di cari adalah x=18

49
Marsono, S.Kom, M.Kom UNTUK KALANGAN SENDIRI
MODUL : algoritma dan pemrograman 1

Langkah 1.

i= 1 dan j=8

indeks elemen tengah k=(1+8) div 2 = 4(diarsir)

81 76 21 18 16 13 10 7
1 2 3 4 5 6 7 8

Kiri Kanan

Langkah 2:
L[4] =18? Ya ! (X di temukan, Pencarian selesai)

(ii) Misalkan elemen yang di cari adalah X=16.

Langkah 1:

i= 1 dan j=8

indeks elemen tengah k=(1+8) div 2 = 4(diarsir)

81 76 21 18 16 13 10 7
1 2 3 4 5 6 7 8

Kiri Kanan
k
Langkah 2:

L[4] = 16 ? Tidak! Maka akan diputuskan cari di bagian kiri atau bagian kanan.

L[4] > 16 ? Ya! Maka cari dkanan dengan

i= k+1 =5 dan j = 8(tetap)

16 13 10 7
i= 5 6 7 j= 8

Langkah 1:
i=5 dan j= 8

indeks elemen tengah k =(5 + 8) div 2 =6(diarsir)

50
Marsono, S.Kom, M.Kom UNTUK KALANGAN SENDIRI
MODUL : algoritma dan pemrograman 1

16 13 10 7
i= 5 6 7 j= 8

kiri kanan
k

Langkah 2:
L[6]= 16? Tidak
L[6] >16? Tidak maka cari di bagian kiri

i=5 (tetap) dan j=k-1 = 5

16
i= 5

Langkah 1:

i=5 dan j=5


indeks elemn tengah k=( 5+5) div 2 = 5( di arsir)

16

Langkah 2 L[5] = 16 ? ya! (X di temukan, Pencarian selesai)

Contoh 12.1 Program SeQuential search

Contoh 12.2 Program binary search

{* SRTUKTUR DATA BY MARSONO,S.KOM


* program mencari data pada suatu larik
* pencarian dilakukan dengan metode binary search }
PROGRAM PENCARIAN_BINER;
USES CRT;
TYPE LARIK = ARRAY[1..100] OF INTEGER;
VAR VEKTOR : LARIK;
KETEMU : BOOLEAN;
CARI,LOKASI,CACAH, BARIS: INTEGER;
{ PROCEDURE MEMBACA ELEMEN VEKTOR}

51
Marsono, S.Kom, M.Kom UNTUK KALANGAN SENDIRI
MODUL : algoritma dan pemrograman 1

PROCEDURE BACA_VEKTOR(VAR VEKTOR: LARIK; VAR N, BARIS : INTEGER);


VAR I, KOLOM :INTEGER;
BEGIN
KOLOM :=1;
WRITE('BERAPA CACAH ELEMENNYA: '); READLN(N);
WRITELN('MASUKKAN ELEMEN ELEMENNYA(SECARA TERURUT): ');
WRITELN('ASCENDING ATAU DESCENDING');
WRITELN;
FOR I :=1 TO N DO
BEGIN
READLN(VEKTOR[I]);
{ GOTOXY(( I MOD 10) * 6(WHEREY -1)}
writeln(I mod 10)

end
END;
{PROCEDURE UNTUK MENCETAK VEKTOR}
PROCEDURE CETAK_VEKTOR (VEKTOR : LARIK; N: INTEGER);
VAR I : INTEGER;
BEGIN
FOR I := 1 TO N DO
BEGIN
WRITE(VEKTOR[I]:6);
IF I MOD 10 = 0 THEN WRITELN;
END
END;
{PROCEDURE SORT SELEKSI ELEMEN VEKTOR}
PROCEDURE SORTIR(VAR VEKTOR: LARIK; N : INTEGER);
VAR I,J,POSISI,BANTU :INTEGER;
BEGIN
FOR I := 1 TO N-1 DO
BEGIN
POSISI :=I;
FOR J := I+1 TO N DO
IF VEKTOR [POSISI] > VEKTOR[J] THEN POSISI := J;
BANTU := VEKTOR[I];
VEKTOR[I] :=VEKTOR[POSISI];
VEKTOR[POSISI] := BANTU
END
END;
{PROSEDUR UNTUK MENCARI DATA METODE BINARY SEARCH}
PROCEDURE MENCARI_BINER (VAR KETEMU : BOOLEAN; VAR LOKASI : INTEGER;
VAR CARI : INTEGER;
VEKTOR : LARIK; N: INTEGER);
VAR ATAS, BAWAH : INTEGER;
BEGIN
WRITELN; WRITELN;
WRITE('INPUT DATA YANG DI CARI: ');READLN(CARI);
ATAS := N;
BAWAH:= 1;
KETEMU:= FALSE;
WHILE(NOT KETEMU) AND (BAWAH <= ATAS) DO
BEGIN
LOKASI := (ATAS + BAWAH) DIV 2;

52
Marsono, S.Kom, M.Kom UNTUK KALANGAN SENDIRI
MODUL : algoritma dan pemrograman 1

IF CARI = VEKTOR[LOKASI] THEN


KETEMU := TRUE
ELSE IF CARI > VEKTOR[LOKASI] THEN
BAWAH := LOKASI + 1
ELSE
ATAS := LOKASI -1
END
END;
{ PROGRAM UTAMA }
BEGIN
CLRSCR;
BARIS := 8;
WRITELN('MENCARI DATA PADA SUATU VEKTOR DENGAN METODE BINARY
SEARCH');
WRITELN('+++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+');
BACA_VEKTOR(VEKTOR,CACAH,BARIS);
MENCARI_BINER(KETEMU,LOKASI,CARI,VEKTOR,CACAH);
WRITELN; WRITE('VEKTOR DIATAS TELAH DISORTIR');
WRITELN(' MENJADI (DIBACA PERBARIS): ');
CETAK_VEKTOR( VEKTOR, CACAH);
WRITELN;
IF KETEMU THEN
BEGIN
WRITELN('BILANGAN"', CARI:1,'" ADA PADA VEKTOR DI ATAS');
WRITE('YAITU PADA ELEMEN KE " ',LOKASI:1);
WRITELN('"DARI VEKTOR TERSORTIR')
END
ELSE
WRITELN(' BILANGAN" ',CARI:1,'" TIDAK ADA PADA VEKTOR
DIATAS') ;
readln;
END.

Hasil Program

53
Marsono, S.Kom, M.Kom UNTUK KALANGAN SENDIRI

Anda mungkin juga menyukai