Modul Algoritma Dan Pemrograman
Modul Algoritma Dan Pemrograman
Definisi Algoritma
Bila data yang digunakan benar, maka alagoritma akan selalu berhenti dengan
memberikan nilai yang Benar.
1 START 2 START
END
END
Jika WNI dan status TIDAK MENIKAH dan UMUR > 17 TAHUN maka
proses pemilih
Jika WNI dan status TIDAK MENIKAH dan UMUR TIDAK > 17 TAHUN
maka prose bukan pemilih
Read(Status
)
TIDAK
Status’WNI
’?
YA
TIDAK
MENIKAH Umur > 17
TAHUN? TIDAK
?
YA
BUKAN
PEMILIH PEMILIH
END
program Calon_pemilih;
Min X
Notasi “” berarti mengisi (assign) peubah (variable) Min dengan nilai perubah
X.
Translasi notasi “” ke dalam bahasa PASCAL adalah “: =”, dalam bahasa C
adalah “=”, dalam bahasa BASIC adalah “=” dan dalam bahasa FORTRAN adalah
“=”.
Perhatikan bahwa setiap bahasa pemrograman mempunyai aturan sendiri.
2.1 Teks Algoritma
Teks algoritma disusun oleh tiga bagian (blok); bagian kepala (header) algoritma,
deklarasi, dan deskripsi. Setiap bagian dengan komentar untuk memperjelas teks
yang dituliskan. Komentar adalah kalimat yang diapit oleh pasangan tanda kurung
kurawal (‘{‘ dan ‘}’).
2.3 Deklarasi
Deklarasi nama adalah bagian untuk mendefinisikan semua nama yang dipakai di
dalam algoritma. Nama tersebut dapat berupa tetapan (Const), peubah (Var), tipe
(Type), Label, prosedur (Procedure), dan fungsi (Function).
Contoh pendefinisian nama di dalam bagian deklarasi misalnya :
DEKLARASI :
{nama tetapan}
const NPeg = 100 {jumlah pegawai}
const phi = 3.14 {nilai }
{nama tipe}
type Titik : record
< x : integer,
Algoritma dan Pemrograman by Ova Nurisma Putra, S.T., M.Kom. 5
y : integer
>
{nama peubah}
c : char
Q : Titik
Ketemu : boolean
2.4 Deskripsi
Bagian ini berisi uraian langkah-langkah penyelesaian masalah. Langkah-langkah
ini dituliskan dengan notasi Write untuk mencetak data/informasi, Read untuk
mebaca data.
Contoh :
DESKRIPSI :
read (c,d)
If c < d then
ea+b
else
ea–b
endif
write (e)
Contoh :
Algoritma MENGHITUNG_NILAI_RATA_RATA
{Menghitung nilai rata-rata sekumpulan bilangan bulat yang dibaca dari pirnati
keluaran}
DEKLARASI
X : integer { peubah data bilangan bulat }
N : integer { banyaknya data bilangan bulat, N > 0 }
K : integer { pencacah jumlah pengulangan }
Jumlah : integer { jumlah seluruh data bilangan bulat }
Rata : real { rata-rata data bilangan bulat }
DESKRIPSI
Read (N) {baca banyak data}
Algoritma dan Pemrograman by Ova Nurisma Putra, S.T., M.Kom. 6
K1 {mulai dari data pertama}
Jumlah 0
While K N do
Read (X)
Jumlah Jumlah + X
KK+1 {cacah pengulangan selanjutnya}
EndWhile
{K > N}
Rata Jumlah/N {rata-rata data bilangan bulat}
Write (Rata)
Program MENGHITUNG_NILAI_RATA_RATA;
{Menghitung nilai rata-rata sekumpulan bilangan bulat yang dibaca dari pirnati
keluaran}
{* DEKLARASI *}
Var
X : integer; { peubah data bilangan bulat }
N : integer; { banyaknya data bilangan bulat, N > 0 }
K : integer; { pencacah jumlah pengulangan }
Jumlah : integer; { jumlah seluruh data bilangan bulat }
Rata : real; { rata-rata data bilangan bulat }
{* DESKRIPSI *}
Begin
Write(‘ Masukkan jumlah data : ‘); Readln (N); {baca banyak data}
K := 1; {mulai dari data
pertama}
Jumlah := 0;
While K <= N do
Begin
Write(‘X = ‘); Readln (X);
Jumlah := Jumlah + X;
K := K + 1; {cacah pengulangan selanjutnya}
End;
{K > N}
Rata := Jumlah/N; {rata-rata data bilangan bulat}
Writeln (‘Rata-rata seluruh data = ‘, Rata);
End.
Ranah Nilai
Bilangan logik hanya mengenal dua buah nilai: benar (true) atau salah (false). Istilah
“bilangan” pada “bilangan logik” muncul karena kita dapat menyatakan “benar”
dengan angka 1 dan “salah” dengan angka 0 (atau sebaliknya).
Tetapan
Karena ranah nilai tipe boolean hanya beranggotakan dua buah nilai, maka tetapan
(constant) yang terdapar pada tipe ini adalah true dan false.
Operasi
Operasi-operasi yang dilakukan terhadap tipe boolean dikenal dengan operasi logika.
Operasi logika menghasilkan nilai dalam ranah nilai tipe boolean (yaitu true atau
false). Operator logika yang dapat digunakan untuk operasi logika adalah: not, and,
or, dan xor.
Jika a dan b adalah peubah (variable) yang bertipe boolean, maka hasil operasi a dan b
dengan operator boolean tersebut diberikan oleh tabel kebenaran berikut:
a not a
true false
false true
A B a and b a or b a xor b
True true true false false
True false false true true
False true false true true
False false false true false
3.1.2 Bilangan Bulat
Algoritma dan Pemrograman by Ova Nurisma Putra, S.T., M.Kom. 8
Tipe sudah dikenal dalam kehidupan sehari-hari. Bilangan bulat adalah bilangan yang
tidak mengandung pecahan desimal, misalnya 34, 8, 1203, 0, -17, dan sebagainya.
Nama Tipe
Nama tipe bilangan bulat adalah integer.
Ranah Nilai
Dalam implementasi, tipe integer mempunyai rentang nilai yang terbatas. Pada
kompilator Turbo Pascal misalnya, tipe integer dapat direpresentasikan ke dalam
empat macam tipe, yaitu byte, shortint, word, integer, dan longint. Rentang nilai untuk
kelima tipe tersebut adalah:
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
Tipe bilangan bulat adalah tipe yang memiliki keterurutan. Ini artinya, bila sebuah
nilai bilangan bulat diketahui, nilai sebelumnya (predecessor) dan nilai sesudahnya
(successor) dapat ditentukan. Contohnya, predecessor dari 8 adalah 7, sedangkan
successor-nya adalah 9. Secara formal keterurutan itu didefinisikan sebagai berikut:
jika a adalah peubah bertipe bilangan bulat, maka predecessor(a) = a-1, dan
successor(a) = a+1.
Tetapan
Tetapan untuk nilai bertipe bilangan bulat harus ditulis tanpa mengandung titik
desimal. Contoh tetapan bertipe bilangan bulat adalah:
78 -14 7654 0 5 99991
Operasi
Operasi yang dilakukan terhadap bilangan bulat ada dua macam, yaitu operasi
aritmatik dan operasi perbandingan. Operator yang digunakan pada masing-masing
operasi disebut operator aritmetika dan operator perbandingan (atau operator
relasional).
a. Operasi Aritmetika
Operator aritmetika yang berlaku pada bilangan bulat adalah:
+ (tambah)
- (kurang)
* (kali)
div (bagi)
mod (sisa hasil bagi)
Tetapan
Tetapan untuk nilai bertipe bilangan riil harus ditulis dengan tanda titik desimal.
Contoh tetapan bertipe bilangan riil adalah:
0.78 -14.2376 7.654000+E8 0.0 -5 99.0
Operasi
Operasi yang dilakukan terhadap bilangan riil ada dua macam, yaitu operasi
aritmetika dan operasi perbandingan. Operator yang digunakan pada masing-masing
operasi tersebut operator aritmetika dan operator perbandingan.
a. Operasi Aritmetika
b. Operasi Perbandingan
Operasi perbandingan terhadap bilangan riil dengan salah satu operator
relasional menghasilkan nilai boolean (true atau false). Operator perbandingan
untuk bilangan riil adalah:
< (lebih kecil)
≤ (lebih kecil atau sama dengan)
> (lebih besar)
≥ (lebih besar atau sama dengan)
≠ (tidak sama dengan)
3.1.4 Karakter
Yang termasuk ke dalam karakter adalah huruf-huruf alfabet, tanda baca, angka ‘0’,
‘1’,.., ‘9’, dan karakter khusus seperti ‘&’, ‘^’, ‘%’, ‘#’, ‘@’, dan sebagainya.
Nama Tipe
Nama tipe untuk karakter adalah char.
Ranah Nilai
Ranah karakter adalah semua huruf di dalam alfabet (‘a’ .. ‘z’, ‘A’ .. ‘Z’), angka
desimal (0..9), tanda baca (‘.’, ‘:’, ‘!’, ‘?’, ‘,’, dan lain-lain), operator arimetik (‘+’, ‘-‘,
‘*’, ‘/’), dan karakter-karakter khusus seperti (‘$’, ‘#’, ‘@’, ‘^’, ‘~’, dan lain-lain).
Daftar karakter baku yang lengkap dapat dilihat di dalam tabel ASCII.
Tetapan
Tetapan untuk data bertipe karakter harus diapit oleh tanda petik tunggal.
Contoh tetapan karakter:
‘h’ ‘Y’ ‘.’ ‘ ‘ ‘p’ ‘+’ ‘9’ ‘0’ ‘$’
Ingatlah bahwa ‘9’ adalah karakter, tetapi 9 adalah integer!
Operasi
3.2.1 String
String adalah deretan karakter dengan panjang tertentu. Contoh-contoh string
misalnya ‘Halo-halo Bandung’, ‘Halo, dunia’, ‘D12345B’, dan sebagainya. Karakter
adalah string dengan panjang 1.
Nama Tipe
Nama tipe string adalah string.
Ranah Nilai
Ranah nilai untuk tipe string adalah deretan karakter yang telah didefinisikan pada
ranah karakter.
Tetapan
Semua tetapan string harus diapit oleh tanda petik tunggal.
Contoh-contoh tetapan string:
‘BANDUNG’
‘ganesha’
‘ABCD765’
‘……………………………’
‘K7685302’
Operasi
b. Operasi Perbandingan
Operator :
≠ (tidak sama dengan)
= (sama dengan)
< (lebih kecil)
> (lebih besar)
≥ (lebih besar atau sama dengan)
≤ (lebih kecil atau sama dengan)
Contoh:
‘abcd’ = ‘abc’ (false)
‘aku < ‘AKU’ (true)
String yang disusun oleh gabungan numerik dan karakter sering dinamakan
alfanumerik. Misalnya ‘K7685302’, ‘D5432AB’, dan sebagainya. Karena tipe string
banyak dipakai dalam pemrograman, maka string dapat diperlakukan sebagai tipe
dasar.
3.2.3 Rekaman
Rekaman disusun oleh satu atau lebih field (Gambar 4.1). Tiap field menyimpan data
dari tipe dasar tertentu atau dari tipe bentukan lain yang sudah didefinisikan
sebelumnya. Nama rekaman ditentukan oleh pemrogram. Karena strukturnya yang
disusun oleh field-field, maka rekaman dinamakan juga tipe terstruktur (structured
type).
Contoh 3.1
Didefinisikan tipe terstruktur yang mewakili tanggal dalam kalender Masehi. Hari
dinyatakan sebagai tanggal (dd), bulan (mm), dan tahun (yy), misalnya 10-8:1999.
Misalkan tipe bentukan tersebut diberi nama TGL.
Dd mm yy
Jika D adalah peubah bertipe Tanggal, maka cara mengacu tiap field.
D.dd
D.mm
D.yy
Tipe Tanggal didefinisikan sebagai berikut:
Nama tipe : Tanggal
Ranah nilai : sesuai ranah masing-masing field
Contoh tetapan: <12, 7, 1997>, <31, 12, 1980>, <29, 2, 1980>
Operasi : operasi aritmetik bilangan bulat terhadap tiap field
operasi perbandingan terhadap masing-masing field
Contoh 3.2
Didefinisikan tipe terstruktur yang mewakili jam. Jam dinyatakan sebagai jam (hh),
menit (mm), dan detik (ss), contohnya 12:45:10 (jam 12 lewat 45 menit lewat 10
detik). Misalkan tipe bentukan tersebut diberi nama JAM.
Hh mm ss
Jika J adalah peubah bertipe JAM, maka cara mengacu tiap field.
J.hh
J.mm
J.ss
Contoh 3.3
NilMhs adalah nama tipe terstruktur yang menyatakan nilai ujian seorang mahasiswa
untuk suatu mata kuliah (MK) yang ia ambil. Data setiap mahasiswa adalah NIM
(Nomor Induk Mahasiswa), nama mahasiswa, mata kuliah yang di ambil, dan nilai
mata kuliah tersebut.
Contoh 3.4
Tipe terstruktur untuk jadwal kereta api. Jadwal keberangkatan kereta api terdiri atas
informasi nomor kereta api (NoKA), kota asal (KotaAsal), kota tujuan (KotaTujuan),
jam berangkat (JamBerangkat), dan jam tiba (JamTiba).
Jika JKA adalah peubah bertipe JADWAL_KA, maka cara mengacu tiap field.
JKA.NoKA
JKA.KotaAsal
JKA.JamBerangkat.hh
JKA.JamBerangkat.mm
JKA.JamBerangkat.ss
JKA.KotaTujuan
JKA.JamTiba.hh
JKA.JamTiba.mm
JKA.JamTiba.ss
Contoh 3.5
Contoh berikut menyajikan struktur bentukan yang cukup kompleks. Misalkan kita
ingin menyimpan data nilai-nilai mata kuliah yang diambil setiap mahasiswa. Data
yang disimpan di dalam struktur rekaman adalah sebagai berikut:
1. NIM (Nomor Induk Mahasiswa)
2. NamaMhs (nama mahasiswa)
3. Mata kuliah yang diambil mahasiswa tersebut, yang terdiri atas:
Kode mata kuliah
Nama mata kuliah
Nilai mata kuliah
A1
A2
A3
A4
A5
Contoh-contoh Runtunan
Algoritma LUAS_SEGITIGA
{Dibaca panjang alas (a) dan tinggi (t) segitiga. Hitunglah luas segitiga tersebut.
Untuk panjang alas dan tinggi tertentu. Luas segitiga dihitung dengan rumus L =
½ at. Nilai L dicetak ke piranti keluaran}
DEKLARASI
a : real {panjang alas segitiga, dalam satuan cm}
t : real {tinggi segitiga, dalam satuan cm}
L : real {luas lingkaran, dalam satuan cm2}
DESKRIPSI
Read (a)
Read (t)
L a * t/2
Write (L)
Program LUAS_SEGITIGA;
{Dibaca panjang alas (a) dan tinggi (t) segitiga. Hitunglah luas segitiga tersebut.
Untuk panjang alas dan tinggi tertentu. Luas segitiga dihitung dengan rumus L =
½ at. Nilai L dicetak ke piranti keluaran}
{* DESKRIPSI *}
Begin
Write (‘Ketikkan panjang alas segitiga : ‘); Readln (a);
Write (‘Ketikkan tinggi segitiga : ‘); Readln (t);
L := a * t/2;
Writeln (‘Luas segitiga = ‘, L:4:2);
End.
Algoritma KOMISI_SALESMAN
{Menghitung besar komisi yang diterima seorang salesman. Besar komisi adalah
10% dari nilai penjualan yang dicapainya. Data masukan adalah nama salesman
dan nilai penjualannya. Keluaran algoritma adalah besar komisi yang diterima
salesman tersebut.}
DEKLARASI
nama_salesman : string
nilai_penjualan : real {nilai penjualan yang dicapai, dalam Rp.}
komisi : real {besar komisi, dalam Rp.}
DESKRIPSI
Read (nama_salesman, nilai_penjualan)
komisi 0.1 * nilai_penjualan
Write (komisi)
Program KOMISI_SALESMAN;
{Menghitung besar komisi yang diterima seorang salesman. Besar komisi adalah
10% dari nilai penjualan yang dicapainya. Data masukan adalah nama salesman
dan nilai penjualannya. Keluaran algoritma adalah besar komisi yang diterima
salesman tersebut.}
{* DEKLARASI *}
Var
nama_salesman : string;
nilai_penjualan : real; {nilai penjualan yang dicapai, dalam Rp.}
komisi : real; {besar komisi, dalam Rp.}
{* DESKRIPSI *}
Begin
Write (‘Ketikkan Nama Salesman : ‘); Readln (nama_salesman);
Write (‘Masukkan Nilai penjualan : ‘); Readln (nilai_penjualan);
komisi := 0.1 * nilai_penjualan;
Writeln (‘Besar komisi yang diterima : ‘, komisi:4:2);
Algoritma dan Pemrograman by Ova Nurisma Putra, S.T., M.Kom. 19
End.
Algoritma GAJI_KARYAWAN
{Menghitung gaji bersih karyawan. Data masukan adalah nama karyawan dan
gaji pokok bulanannya. Gaji bersih = gaji poko + tunjangan – pajak. Tunjangan
adalah 20% dari gaji pokok, sedangkan pajak adalah 15% dari gaji pokok +
tunjangan.}
DEKLARASI
nama_karyawan : string
gaji_pokok, tunjangan, pajak, gaji_bersih : real
DESKRIPSI
Read (nama_karyawan, gaji_pokok)
tunjangan 0.2 * gaji_pokok
pajak 0.15 * (gaji_pokok + tunjangan)
gaji_bersih gaji_pokok + tunjangan – pajak
Write (gaji_bersih)
Program GAJI_KARYAWAN
{Menghitung gaji bersih karyawan. Data masukan adalah nama karyawan dan
gaji pokok bulanannya. Gaji bersih = gaji poko + tunjangan – pajak. Tunjangan
adalah 20% dari gaji pokok, sedangkan pajak adalah 15% dari gaji pokok +
tunjangan.}
{* DEKLARASI *}
Var
nama_karyawan : string;
gaji_pokok, tunjangan, pajak, gaji_bersih : real;
{* DESKRIPSI *}
Begin
Write (‘Masukkan Nama Karyawan : ‘); Readln (nama_karyawan);
Write (‘Masukkan Gaji Pokok : ‘); Readln (gaji_pokok);
tunjangan := 0.2 * gaji_pokok;
pajak := 0.15 * (gaji_pokok + tunjangan);
gaji_bersih := gaji_pokok + tunjangan – pajak;
Writeln (‘Gaji bersih karyawan : ‘, gaji_bersih:4:2);
End.
If kondisi then
{blok perintah 1}
else
{blok perintah 2}
endif
contoh:
1) If Amir memperoleh juara kelas then
Ayah akan membelikannya sepeda
endif
Kondisi biasanya berisi perbandingan (dengan tanda =, < atau >) yang akan
menghasilkan nilai benar atau salah.
Bentuk umum struktur kondisi bersarang;
If kondisi1 then
{blok perintah 1}
else
If kondisi2 then
{blok perintah 2}
else
If kondisi3 then
{blok perintah 3}
Endif
Endif
Endif
.........(dan seterusnya)............... ;
Bentuk umum:
Case <variabel kondisi> of
Case – label 1: statement 1;
Case – label 2: statement 2;
Case – label 3: statement 3;
Case – label 4: statement 4;
.........
.........
Case – label n: statement n;
EndCase {end dari case}
Daftar Case label dapat berupa konstanta, range dari konstanta yang bukan bertipe
real.
Contoh 1:
Algoritma nilai_coba Program nilai_coba;
Deklarasi nilai:char Var nilai: char;
Deskripsi Begin
Read(nilai) Write(‘Nilai Numerik yang didapat :’);
Case nilai of Readln(nilai);
Case ‘A’ : Writeln(‘Sangat Baik’) Case nil of
Case ‘B’ : Writeln(‘Baik’) ‘A’ : Writeln(‘Sangat Baik’);
Case ‘C’ : Writeln(‘Cukup’) ‘B’ : Writeln(‘Baik’);
Case ‘D’ : Writeln(‘Kurang’) ‘C’ : Writeln(‘Cukup’);
Case ‘E’ : Writeln(‘Sangat Kurang’) ‘D’ : Writeln(‘Kurang’);
EndCase ‘E’ : Writeln(‘Sangat Kurang’);
End;
End.
FOR ... DO
Struktur for .. do tidak memerlukan kondisi untuk diuji, yang diperlukan adalah
penentuan batas awal dan batas akhir bagi variabel penghitung pengulangan.
Bentuk umum:
Penjelasan: Berarti statemen I Love Dinda akan diulang sebanyak 5 kali yaitu
dengan menghitung nilai i dari i ke 1 sampai nilai i terakhir yaitu i ke 5.
Contoh3 :
Penggunaan perulangan For dalam blok statement untuk membuat tabel.
Uses crt;
Var a,b,c:integer;
bagi:real;
Begin
Clrscr;
Writeln(‘---------------------------------------------‘);
Writeln(‘ a a*a a*a*a 1/a ‘);
Writeln(‘---------------------------------------------‘);
For a:=1 to 10 do
Begin
b:=a*a;
c:=a*a*a;
bagi:=1/a;
writeln(‘a:4,b:8,c:10,bagi:12:3);
End;
Writeln(‘---------------------------------------------‘);
Readln;
End.
Maka hasilnya:
-----------------------------------------------
a a*a a*a*a 1/a
-----------------------------------------------
1 1 1 1.000
2 4 8 0.500
3 9 27 0.333
4 16 64 0.250
5 25 125 0.200
6 36 216 0.167
7 49 343 0.143
8 64 512 0.125
9 81 729 0.111
10 100 1000 0.100
-----------------------------------------------
Hasil : 10 9 8 7 6 5 4 3 2 1
Contoh :
Hasil :
11 12
21 22
31 32
Bentuk umum :
Tidak
While kondisi Do
{blok perintah} Syarat dipenuhi
endWhile
Ya
Blok perintah
Begin
.
.
Perintah;
.
.
end;
Perintah berikutnya
Contoh1:
Contoh :
Uses crt;
Var a,b:integer;
Begin
Clrcsr;
a:=1;
b:=1;
While a < 4 Do {loop a masih lebih kecil dari 4}
Begin
a:=a+1;
While b < 3 Do {loop selama b masih lebih kecil 3}
Begin
Write(a:3,b:2);
b:=b+1;
End;
End;
Readln;
End.
Hasil : 2 1 2 2
Bentuk umum :
Repeat
{blok perintah} Repeat
Until kondisi; .
.
Contoh1 : perintah;
Var i:integer; .
.
Begin until Tidak
i:= 0;
Repeat
i:=i+1; Ekspresi
writeln(i); boolean
Until i=5; terpenuhi
End. Ya
Hasil : Perintah
berikutnya
1
2
3
4
5
Contoh2 :
Program lingkaran;
Uses crt;
Var luas,kel,jari:real;
Pilihan:char;
Begin
Clrscr;
Writeln(‘menghitung luas dan keliling lingkaran’);
Repeat
Luas:=pi*jari*jari;
Kel:=2*pi*jari;
Writeln(‘Luas lingkaran = ‘,luas:5:3);
Writeln(‘Keliling lingkaran = ‘,kel:5:3);
Writeln(‘ingin hitung lagi [y/t]’);readln(pilihan);
Penyeleksian String
- Dua buah string dinyatakan sama bila nilai string yang pertama sama isi dan
panjangnya dengan nilai string kedua.
Ex2 :
var namabahasa:string[6];
begin
write('Bahasa yang sedang anda pergunakan?');
readln(namabahasa);
if namabahasa='pascal' then
writeln('Benar !')
else
writeln('Salah !');
end.
- Bila dua buah string dibandingkan, maka urutan nilainya akan digunakan
urutan karakter sesuai dengan kode ASCII. Jadi karakter ‘A’ lebih kecil
dibanding ‘B’ dan seterusnya.
Ex3 :
var namaAnda,namaTeman:string[30];
begin
write('Nama Anda ?');readln(namaAnda);
write('Nama Teman ?');readln(namaTeman);
if namaAnda=namaTeman then
if namaAnda<namaTeman then
writeln('Nama Anda urutannya lebih kecil dari Nama Teman');
if namaAnda>namaTeman then
writeln('Nama Anda urutannya lebih besar dari Nama Teman');
end.
Insert
Bentuk umum:
Insert (source:string; {menyisipkan suatu string}
var s:string; {ke nilai string yang lainnya}
index:integer); {mulai dari posisi yang ditunjukkan}
Ex5 :
var nama:string[15];
begin
nama:='Abdul Hakim SH';
writeln(nama);
insert('.',nama,14);
writeln(nama);
end.
Val
Bentuk umum:
Val (s:string; v; varcode);
Ex8 :
{nilai string siubah menjadi '123.A5'}
var nilaistring:string[6];
nilaireal:real;
Hasilnya : EFG
CDEFGHIJKL
ConCat
Bentuk umum:
ConCat (s1[, s2,...,sn]:string):string;
- Merangkai beberapa nilai string ditunjukkan oleh nilai string s1, s2,..,sn.
Ex10 :
const
nama='Pascal';
dll='dan keluarga';
begin
writeln(concat('Bahasa',' ',nama,' ','untuk Anda',dll));
end.
Pos
Bentuk umum:
- Digunakan untuk mencari posisi letak dari suatu nilai string (substr).
- Yang ada didalam nilai string yang lain (ditunjukkan oleh s).
- Nilai yang dihasilkan berupa nilai byte yang menunjukkan letaknya.
- Bila bernilai nol berarti nilai string yang dicari tidak ada.
Ex11:
const
alphabetik='ABCDEFGHIJKLM';
kar1='CDE';
kar2='3';
kar3='JUGA';
begin
writeln(alphabetik);
writeln;
writeln(kar1,' ','ada posisi ke',' ',pos(kar1,alphabetik));
writeln(kar2,' ','ada posisi ke',' ',pos(kar2,alphabetik));
writeln(kar3,' ','ada posisi ke',' ',pos(kar3,alphabetik));
end.
Length
Bentuk umum:
Length (s:string):integer;
- Suatu program terpisah dalam blok sendiri yang berfungsi sebagai subprogram
(program bagian).
- Prosedur diawali dengan kata cadangan procedure.
- Prosedure dipanggil dan digunkan di dalam blok program yang lainnya dengan
menyebutkan judul prosedurnya.
Begin
Deskripsi ….call judul_procedure;
….call judul_procedure ….
…. End.
Ex1 :
# Supaya nilai-nilai variabel dapat digunakan di modul lainnya, maka dapat dilakukan
beberapa cara :
1) Dibuat bersifat global
Maka variabel-variabel harus dideklarasikan di atas modul yang akan
menggunakannya.
Ex3 :
var A,B,C:integer;
procedure hitung2;
var X,Y,Z:integer;
begin
write('nilai X = ');readln(X);
write('nilai Y = ');readln(Y);
Z:=X+Y;
writeln('nilai Z = ',Z);
end;
{program utama}
begin
hitung2;
end.
Ex4 :
var A,B,C:integer;
procedure hitung3;
begin
write('nilai A = ');readln(A);
write('nilai B = ');readln(B);
C:=A+B;
writeln('nilai C = ',C);
end;
Algoritma dan Pemrograman by Ova Nurisma Putra, S.T., M.Kom. 38
{program utama}
begin
hitung3;
end.
Parameter formal
Procedure hitung(A,B:integer);
Tipe parameter
Hitung(X,Y);
Parameter nyata
- Hubungan dari :
Procedure hitung6(var A,B,C:integer);
Hitung(X,Y,Z);
{program utama}
var x:integer;
begin
x:=5;
pro2(x);
end.
# Prosedur tersarang
Ex9 :
procedure kesatu;
procedure kedua;
begin
writeln('prosedure ke-2 di proc.ke-1');
end;
procedure ketiga;
begin
writeln('prosedure ke-3 di proc.ke-1');
end;
begin
writeln('ini prosedur ke satu');
writeln;
kedua;
ketiga;
end;
{program utama}
begin
writeln('ini di modul utama');
writeln;
kesatu;
end.
Note : Procedure yang lebih dalam dikerjakan terlebih dahulu.
LATIHAN SOAL :
1) Buatlah program dengan prosedur menggunakan (procedure tanpa
parameter, parameter masukan, parameter keluaran, dan parameter masukan dan
keluaran), untuk menghitung:
a. Luas segitiga
b. Luas dan Keliling persegipanjang
c. Luas dan keliling lingkaran
d. Rata-rata bilangan bulat
e. Nilai maksimum dari dua variabel x dan y
SYNTAX Algoritma:
Function Nama (deklarasi variabel):tipe_data_hasil
Deskripsi
...
...
pernyataan
...
...
SYNTAX Program:
Contoh:
Function ADD_TWO (nilai1,nilai2:integer):integer;
Begin
ADD_TWO:=nilai1 + nilai2;
end;
Maka, ketika ADD_TWO dieksekusi, dia menghitung nilai yang terdapat di dalamnya
(dalam hal ini 30), yaitu hasil akhirnya.
Algoritma dan Pemrograman by Ova Nurisma Putra, S.T., M.Kom. 44
Contoh:
Program contoh_fungsi;
Uses crt;
Var angka,jawaban:integer;
Function kubik(x:integer):integer;
Begin
Kubik:=x*x*x;
End;
Begin
Writeln(‘Masukkan angka : ‘);
Readln(angka);
Jawaban:=kubik(angka);
Writeln(‘Hasil pangkat tiga dari ‘,angka,’ adalah ‘, jawaban);
End.
Contoh:
Program faktorial_fungsi;
Uses crt;
Var x:integer;
Function faktorial(n:integer):integer;
Begin
If n<2 then
Faktorial:=1
Else
Faktorial:=n*faktorial(n-1);
End;
{program utama}
Begin
Writeln(‘Masukkan nilai : ‘);readln(x);
Writeln(x, ‘! Adalah ‘,faktorial(x));
End.
Contoh:
function pangkat(a:real;b:integer):real;
var i:integer;
hasil:real;
begin
hasil:=1;
for i:=1 to abs(b) do
hasil:=hasil*a;
if b<0 then hasil:=1/hasil;
pangkat:=hasil;
writeln('Hasil = ',hasil:4:0);
end;
var x:real;
y:integer;
Algoritma dan Pemrograman by Ova Nurisma Putra, S.T., M.Kom. 45
begin
write('masukkan nilai x = ');readln(x);
write('masukkan nilai y = ');readln(y);
pangkat(x,y);
end.
Contoh:
uses crt;
var der,tangen:real;
function tan(var x:real):real;
begin
tangen:=(sin(x/57.2985)) / (cos(x/57.2985));
end;
{program utama}
begin
clrscr;
write('masukkan besar sudut yang diukur = ');readln(der);
tan(der);
writeln('nilai tangen dari ',der:2:2,' derajat adalah ',tangen:4:3);
readln;
end.
SET
- Adalah suatu kumpulan dari objek yang mempunyai urutan dan dianggap
sebagai satu kesatuan.
- Anggota dari Set berbentuk tipe sederhana yaitu tipe ordinal (integer, boolean,
cnvbcchtyhhgfdsahar, skalar kecuali real).
- Jumlah maksimum dari elemen di dalam Set adalah 256, bernilai dari 0 – 255.
Pembentukan Set
Terdiri dari satu atau lebih elemen atau jangkauan dari elemen yang dipisahkan
dengan koma dan diletakkan di antara kurung bracket atau siku [ & ].
Contoh :
{penggunaan set}
uses crt;
type bilangan=set of byte;
var union,irisan,kurang,a,b,op1,op2,op3:bilangan;
j:byte;
begin
clrscr;
a:=[1,2,3,4];
b:=[3,4,5,6,7];
union:=a+b;
irisan:=a*b;
kurang:=a-b;
op1:=union;
op2:=irisan;
op3:=kurang;
write('A = { ');
for j:=0 to 57 do
if a*[j]=[j] then
write(j,' ');
writeln('}');
writeln;
writeln;
write('B = { ');
for j:=0 to 57 do
if b*[j]=[j] then
write(j,' ');
writeln('}');
writeln;
writeln;
write('Union = { ');
for j:=0 to 57 do
if op1*[j]=[j] then
write(j,' ');
writeln('}');
writeln;
writeln;
write('Irisan = { ');
for j:=0 to 57 do
if op2*[j]=[j] then
write(j,' ');
Algoritma dan Pemrograman by Ova Nurisma Putra, S.T., M.Kom. 47
writeln('}');
writeln;
writeln;
write('Kurang = { ');
for j:=0 to 57 do
if op3*[j]=[j] then
write(j,' ');
writeln('}');
readln;
end.
RECORD
- Kumpulan elemen-elemen data yang digabungkan menjadi satu kesatuan.
- Elemen data tersebut disebut dengan field.
- Field data dapat memiliki tipe data yang sama atau berbeda.
Misalnya:
Record mahasiswa yang terdiri dari field-field NIM, Nama, Alamat, IPK.
Deklarasi Record
Bentuk umum:
Type <nama record> = record
<data field1>:<tipe1>
<data field2>:<tipe2>
............
<data fieldN>:<tipeN>
end;
var
<nama variabel>: <nama record>;
Pemakaian Record
Pengenal-record.pengenal-field[pengena-file]
Harus ditulis nama record beserta dengan fieldnya yang dipisahkan dengan tanda titik
(.).
Misalnya: Ingin menulis Nim seorang mahasiswa ke layar maka penulisannya,
Write(mahasiswa.NIM);
With mahasiswa do
Write(NIM);
Contoh2:
{penggunaan record}
{Record data mahasiswa menggunakan With}
program contoh2;
uses crt;
type mahasiswa=record
Nama:string[30];
NIM:string[10];
Alamat:string[50];
IPK:real;
end;
var mhs:mahasiswa;
begin
clrscr;
with mhs do
begin
write('Nama : ');readln(Nama);
write('NIM : ');readln(NIM);
write('Alamat : ');readln(Alamat);
write('IPK : ');readln(IPK);
writeln;
writeln('------------------------------');
writeln('Nama : ',Nama);
writeln('NIM : ',NIM);
writeln('Alamat : ',Alamat);
writeln('IPK : ',IPK:3:1);
end;
end.
Contoh4:
{penggunaan record}
{menghitung luas dan keliling lingkaran}
program contoh4;
uses crt;
type hasil=record
jari:real;
kel:real;
luas:real;
end;
var lingkaran:hasil;
begin
clrscr;
with lingkaran do
begin
write('Masukkan jari-jari lingkaran : ');readln(jari);
luas:=pi *jari*jari;
kel:=2 * pi*jari;
writeln('Luas = ',luas:4:1);
writeln('Keliling = ',kel:4:1);
end;
end.
1. Pendahuluan
Suatu array adalah sebuah struktur data yang terdiri atas banyak variabel dengan
tipe data sama, dimana masing-masing elemen variabel mempunyai nilai indeks.
Setiap elemen array mampu untuk menyimpan satu jenis data (yaitu: variabel). Suatu
array dinyatakan dengan type, sehingga variabel yang bekerja akan dinyatakan
dengan:
Contoh type
A = array [1..10] of integer;
1 2 3 4 5 6 7 8 9 10
atau
Sekumpulan data bertipe sama yang diakses berdasarkan indeksnya.
data_nilai
1 2 3 4
Contoh:
Array Satu Dimensi
Algoritma NilaiMahasiswa
Deklarasi
Nama : array[1..3] of string
Nilai : array[1..3] of integer
Deskripsi
Nama[1] 'Ani'
Nama[2] 'Ana'
Nama[3] 'Edi'
Nilai[1] 80
Algoritma dan Pemrograman by Ova Nurisma Putra, S.T., M.Kom. 51
Nilai[2] 90
Nilai[3] 100
Write(Nama[1],Nilai[1])
Write(Nama[2],Nilai[2])
Algoritma SimpanData
Deklarasi
Data : array[1..5] of integer
i : integer
Deskripsi i Data[i] Write(Data[i])
1 Data[1]10 10
For i1 to 5 do
2 Data[2]9 9
Read(Data[i]) 3 11
Data[3]11
Endfor 4 Data[4]13 13
5 Data[5]17 17
For i1 to 5 do
Write(i, Data[i])
Endfor
Algoritma Jumlah_bilangan
Deklarasi
Bilangan : array[1..5] of integer
Jumlah, i : integer
Deskripsi
Jumlah 0
For i1 to 5 do
Read(Bilangan[i])
Jumlah Jumlah+Bilangan[i]
Endfor
Write('Jumlah bilangan = ',Jumlah)
4. Buat algoritma dengan menggunakan array untuk menghitung nilai rata-rata dari
1+2+3+4+5=15
Algoritma Rata_bilangan
Deklarasi
Bilangan : array[1..5] of integer
Jumlah, i : integer
Rata : real
Deskripsi
Jumlah 0
For i1 to 5 do
Read(Bilangan[i])
Algoritma dan Pemrograman by Ova Nurisma Putra, S.T., M.Kom. 52
Jumlah Jumlah+Bilangan[i]
Rata Jumlah/i
Endfor
Write('Rata-rata bilangan = ',Rata:4:2)
5. Buatlah algoritma dengan menggunakan array untuk menghitung Nilai Akhir tiap
mahasiswa sebanyak 5 kali.
Algoritma HitungNA
Deklarasi
NIM : array[1..5] of integer
Nama : array[1..5] of string
UTS, UAS, Tugas : array[1..5] of string
N_Akhir : array[1..5] of real
i : integer
Deskripsi
For i1 to 5 do
Read(NIM[i], Nama[i], UTS[i], UAS[i],Tugas[i])
N_Akhir[i] (0.35*UTS[i])+ (0.45*UAS[i])+ (0.20*Tugas[i])
Write((NIM[i], Nama[i], UTS[i], UAS[i],Tugas[i], N_Akhir[i])
Endfor
{Utama}
Deskripsi
Read(N)
InputData(N)
HitRata(N)
Tampil(N)
1. Buatlah algoritma dalam bentuk array dua dimensi untuk mencari penjumlahan
matrik berikut, serta tunjukkan berapa hasilnya?
6 7 9 3 0 1
0 3 5 + 9 18 2 = ?
10 4 0 6 5 12
A B C
B[1,1]3
B[1,2]0
B[1,3]1
B[2,1]9
B[2,2]18
B[2,3]2
B[3,1]6
B[3,2]5
B[3,3]12
Write(C[1,1],C[1,2],C[1,3])
Write(C[2,1],C[2,2],C[2,3])
Write(C[3,1],C[3,2],C[3,3])
SORTING
{Menggunakan pengurutan secara BubleSort}
Program UrutData;
uses crt;
var a:array[1..10] of integer;
c:integer;
i,j:integer;
begin
a[1]:=50;
a[2]:=70;
a[3]:=80;
a[4]:=60;
a[5]:=30;
clrscr;
for i:=1 to 4 do
begin
for j:=i+1 to 5 do
begin
if a[i] > a[j] then
begin
c:=a[i];
a[i]:=a[j];
a[j]:=c;
end;
end;
end;
for i:=1 to 5 do
begin
writeln(a[i]);
end;
readln;
end.
program sort_ascending;
uses crt;
var x,i,j,temp:integer;
data:array[1..100] of integer;
begin
clrscr;
writeln('input banyak data untuk diurutkan : ');
readln(x);
clrscr;
input(x);
clrscr;
sort_asc(x);
writeln('Hasil setelah diurutkan:');
for i:=1 to x do
begin
writeln(data[i]);
end;
readln;
end.
- EOF : menerima argumen nama file dan menghasilkan nilai true jika sudah tidak
ada data yang bisa dibaca lagi.
- EOLN : menerima argumen nama file dan menghasilkan nilai true jika sudah tidak
ada lagi data yang bisa lagi dalam satu baris.
F adalah sembarang variable file teks dan readme adalah nama file teks yang akan dibaca,
pertama kita harus memanggilnya dengan fungsi :
assign(F, ‘README’);
reset (F);
Kita bisa membaca file baris demi baris, misalkan dengan menyatakan suatu variabel
s sebagai string:
readln (F, s);
Program baca_file_teks;
Uses crt;
Var
F : text;
Nama_file : string;
S : string;
Begin
Clrscr;
Write(‘NAMA FILE YANG DIBACA :’);
Readln(nama_file); {menuliskan nama file ‘D:\file1.txt’}
Assign(F, nama_file); {memanggil file}
Reset(F); {membuka file}
While not EOF(F) do {menampilkan seluruh isi file}
Begin
Readln(F,s);
Writeln(s);
End;
Close(F); {menutup file}
End.
Kemudian : Gunakan readln(F,s) untuk membaca file yang akan dikopi dan
writeln(F,s) untuk menulis ke file tujuan.
Contoh 1.. (missal kita punya suatu file dengan path ‘D:\file1.txt’) dan kita akan
mengkopinya ke file dengan path ‘D:\file1.txt’)
Program baca_tulisfile_teks;
Uses crt;
Var
F, F1 : text;
Nama_file : string;
s : string;
Begin
Clrscr;
Write(‘NAMA FILE YANG DIBACA : ‘);
Readln(nama_file); {menuliskan nama file ‘D:\file1.txt’}
Assign(F, nama_file); {memanggil nama file}
Reset(F); {membuka file}
Assign(F1, ‘D:\file2.txt’); {memanggil file}
Rewrite(F1);
While not EOF (F) do
Begin
Readln(F,s); {membaca seluruh isi file}
Writeln(F1,s); {mengkopi isi file1.txt ke file2.txt}
End;
Close(F); {menutup file file1.txt}
Close(F1); {menutup file file1.txt}
End.
Catatan : statement rewrite(variable_teks) apabila diterapkan pada file yang sudah ada
akan menyebabkan isi file terhapus dan mulai membuat yang baru, maka untuk
menambahkan teks pada file yang sudah ada digunakan kata kunci
append(variable_teks)
Error dapat di deteksi dengan memanggil fungsi IOResult. Jika IOResult adalah 0,
maka tidak terjadi error.
Contoh :
Program coba_error;
Uses crt;
Var
F : text;
S : string;
Begin
Clrscr;
Write(‘Input file name to read : ‘); readln(s);
Assign(F,s);
{$SI - }
Reset(F);
{$SI + }
If IOResult <> 0 then
Begin
Writeln(‘terjadi kesalahan pada pembacaan file’, s);
Algoritma dan Pemrograman by Ova Nurisma Putra, S.T., M.Kom. 60
Halt;
End;
While not EOF (F) do
Begin
Readln(F,s);
Writeln(s);
End;
Close(F);
End.
:
{$SI - }
Reset (F);
{$SI + }
n:=IOResult;
If n<>0 then
Begin
Writeln(‘terjadi kesalahan pada pembacaan file’, s);
Case n of
2: writeln (‘File tidak ketemu’);
3: writeln (‘lokasi tidak ketemu’);
4: writeln (‘terlalu banyak file yang dibuka’);
5: writeln (‘akses file ditolak’);
100: writeln (‘salah membaca disk’);
101: writeln (‘salah menulis disk’);
150: writeln (‘Disk diproteksi’);
152: writeln (‘drive tidak ada’);
154: writeln (‘CRC error di data’);
156: writeln (‘pencarian disk salah’);
157: writeln (‘media tidak dikenal’);
162: writeln (‘kerusakan hardware’);
Else writeln (‘pokoknya salah’);
End;
Halt;
End.
5. Buatlah program pascal untuk menentukan nilai rata-rata kelas untuk mata
kuliah Pascal, bagi mahasiswa sejumlah 50 orang ?
6. Sebuah akademi militer mengadakan saringan pertama dalam penerimaan
calon mahasiswa baru. Syarat yang harus dipenuhi adalah :
a. untuk pria : - tinggi min. 165 cm
- umur min. 18 tahun
b. untuk wanita : - tinggi min. 160 cm
- umur min. 17 tahun
Buatlah algoritma beserta program pascalnya untuk menentukan apakah seseorang
calon mahasiswa diterima atau ditolak.
7. Dibaca N buah bilangan bulat. Buatlah program untuk menghitung jumlah
nilai bilangan yang genapnya saja.
8. Buatlah program untuk menghitung nilai ab dengan menggunakan function ?
9. Buatlah program untuk menampilkan anggota irisan dan gabungan dari
himpunan SET berikut :
A=[2,3,6,7,8,9]; B=[7,8,3,10,13,11]
Algoritma dan Pemrograman by Ova Nurisma Putra, S.T., M.Kom. 62
10. Buatlah program untuk mencatat dan menampilkan data buku perpustakaan.
Yang fieldnya terdiri dari nomor buku, jenis buku, nama buku, judul buku, nama
pengarang, penerbit, tahun terbit. Dengan ketentuan :
Jika jenis buku ‘A001’ maka nama buku ‘SEJARAH’
Jika jenis buku ‘A002’ maka nama buku ‘EKONOMI’
Jika jenis buku ‘A003’ maka nama buku ‘KOMPUTER’
Jika jenis buku ‘A004’ maka nama buku ‘GRAFIS’
Jika jenis buku ‘A005’ maka nama buku ‘MATEMATIKA’
11. Buatlah program untuk mengurutkan data berikut : 70 30 20 40 60 90
12. Buatlah program pascal untuk menghitung nilai rata-rata n buah bilangan
dengan menggunakan struktur perulangan yang Anda ketahui ?
13. Studi kasus :
Sekolah ‘XYZ’ merencanakan untuk menghitung nilai akhir untuk menghitung
masing-masing siswa yang jumlahnya 10 orang.
Input : Nim, Nama, Alamat, Kehadiran, Tugas, Quiz, UTS, UAS
Algoritma :
- Untuk menghitung nilai akhir (NA) yang rumus :
NA = ((Kehadiran + ((Tugas + Quiz)/2))*20%) + (UTS*35%) + (UAS*45%)
- Untuk menentukan huruf mutu (HM) dengan formula sebagai berikut:
HM = A -> 85 – 100
HM = B -> 70 – 84
HM = C -> 60 – 69
HM = D -> 50 – 59
HM = E <- 50
PASCAL:
Buatlah programnya dari algoritma diatas dan tampilkan outputnya sesuai
dengan tabel berikut :
No Nama Siswa Nilai Akhir Huruf Mutu
1 ......................... ......................... .........................
2 ......................... ......................... .........................
3 ......................... ......................... .........................
. . . .
. . . .
10 . . .
Asumsi:
- Untuk Kehadiran, nilai yang diinputkan berkisar 1..10
Jika 1 x kehadiran dihitung untuk nilai kehadirannya 10
Jika 2 x kehadiran dihitung untuk nilai kehadirannya 20
14. Buatlah program pascal untuk menampilkan deret berikut :
(1 – 2) + (2 – 3) + (3 – 4) + (4 – 5) + ... (sebanyak 10 data)
15. Buatlah program pascal dengan spesifikasi berikut:
Input : Nip, Nama, Gol, Status, Jml_anak (sebanyak 10 data)
Proses :
Gol = A, gaji=20000
Gol = B, gaji=30000
Gol = C, gaji=40000
Status = K, mendapat tunjangan 10% dari gaji
Status = T, tidak mendapat tunjangan
Algoritma dan Pemrograman by Ova Nurisma Putra, S.T., M.Kom. 63
Setiap anak mendapat tunjangan 1% dari gaji
Pajak 5%
Total = (gaji + tunjangan + tunjangan_anak) – pajak
Output : Tampilkan kembali seluruh karyawan yang pernah diinputkan dari total
gaji keseluruhan pegawai.