DASAR ALGORITMA DAN PEMROGRAMAN

ITENAS
Institut Teknologi Nasional
Jurusan Teknik Informatika

DASAR
ALGORITMA DAN
PEMROGRAMAN
Disusun Oleh
Uung Ungkawa, Ir. MT

Bandung
2016
1

Pendahuluan
Dalam kuliah ini akan dipaparkan pengenalan (dasar) bahasa pemrograman untuk
menyamakan persepsi di antara mahasiswa baru. Topik yang akan disajikan adalah:


Pemrograman




Algoritma



Flowchart



Bahasa Algoritmik



Bahasa Pemrograman: Pascal



Type Data




Input/Output



Runtunan



Pemilihan



Pengulangan



Pemrograman Modular


Sejarah Pemrograman
Ilmu pengetahuan dan teknologi tidaklah lahir begitu saja dari tidak ada ke ada. Tidak
kecuali pemrograman dan komputer, mengalami sejarah yang bersamaan dengan
matematika dan mekanika/elektronika. Berikut ini garis besar sejarah penemuan
komputer dan pemrograman:


2400 SM: Abacus di Babilonia



1115 SM: Differential gear



500 SM: bil nol



300 SM: sistem bilangan biner




87 SM: analog computer



60 (M): Dasar Robotik



724: Jam mekanik di Cina



820: Algoritma oleh Alkhawarizmi



850: Kriptografi oleh AlKindi




850: Musik yang bisa diprogram



996 Jam mekanik roda gigi: Al Biruni



1000: Komputer analog: Al Biruni



1015: Analog komputer untuk menentukan posisi bulan, matahari dan planet –
Al Zarkali




1206: orang-orangan yang diprogram (robot) – Al Jazari

2



1492: Klkulator mekanik – Leonardo da Vinci



1588: Logaritma natural – Joost Buerghi



1642: Kalkulator mekanik – Pascal



1811: tenun otomatis -




1822: Komputer mekanik – Babbage



1834: Analytical Engine: Program yang disimpan - Babbage



1848: Aljabar Boole – George Boole

Joseph-Marie Jacquard

Pemrograman Komputer
Komputer merupakan mesin yang canggih yang dapat digunakan untuk berbagai
keperluan kita. Sebelum digunakan, komputer harus diprogram agar dapat bekerja
sesuai dengan kebutuhan kita.
Dahulu mesin diprogram secara perangkat keras, artinya bagian tertentu dari mesin
diubah-ubah sedemikian sehingga cara kerjanya berubah sesuai kehendak kita. Dalam

pemrograman sekarang, bagian mesin tidak berubah tetapi yang diubah kumpulan
perintah yang berupa perangkat lunak. Kumpulan perintah demikian disebut program
komputer.
Kumpulan perintah yang disebut program itu berupa kode-kode yang kita buat,
misalnya kode demikian akan menjumlahkan dua angka berikutnya. Kode yang
demikian lagi akan loncat ke instruksi berikutnya dan seterusnya. Kode-kode tersebut
disebut bahasa mesin. Bahasa ini bebas ambigu (bermakna ganda) karena
menterjemahkan dari satu ke satu (satu istilah bahasa asembli ke satu kode bahasa
mesin)
Dalam perkembangan selanjutnya, bahasa mesin ini sangat rumit untuk diingat
manusia. Maka dibuatlah bahas rakitan (assembly) yakni bahasa mirip bahasa
manusia yang melambangkan bahasa mesin, seperti menjumlahkan dua angka seperti
di atas dengan add. Tentu saja bukan add ini yang dimengerti atau dieksekusi oleh
mesin tetapi tetap mesin itu menjalankan program dalam bahasa mesin. Di sinilah
maka perlu penterjemahan bahasa rekitan ini ke dalam bahasa mesin. Dalam hal ini
diperlukan perangkat uyang disebut assembler yang berfungsi menterjemahkan
bahasa rakitan ke bahasa mesin.
Kebutuhan akan penerapan komputer makin berkembang. Oleh karena itu program
yang kita buat akan semakin rumit jika hanya dibuat dengan bahasa rakitan. Para ahli
kemudian memikirkan bagaimana membuat bahasa pemrograman atau bahasa

komputer yang lebih mudah difahami manusia. Dari sini kemudian lahir bahasa
Fortran (Formula translation) yang dimanfaatkan dalam pengolahan data numerik dan
perhitungan sain. Bahasa demikian termasuk bahasa tingkat tinggi (high level
language). Semakin lama penerapan komputer semakin berkembang, permasalahan
dalam pemrograman sebelumnya dikenal dan dicari solusinya. Dari sisi bahasa
pemrograman memang dirasakan masih banyak kekurangan, maka dibuatlah bahasa
tingkat tinggi yang lebih baik seperti Bahasa Pascal, C, dan lainnya hingga bahasa
Java.
Bahasa tingkat tinggi seperti diuraikan tadi tidak diterjemahkan secara langsung satu
per satu tetapi diterjemahkan secara tingkat tinggi. Program penterjemah bahasa
3

tingkat tinggi ini ada dua: interpreter dan kompiler. Interpreter melakukan terjemahan
langsung satu kalimat (statement) demi statement dan hasilnya langsung disajikan ke
pengguna melalui layar monitor sedangkan kompiler melakukan penterjemahan
sekaligus. Setelah menjadi bahasa mesin, baru program dapat digunakan.
Bagaimana program dijalankan komputer? Pemeran utama dalam komputer adalah
prosesor. Pertama prosesor memuat program ke memori. Dari memori ini komputer
membaca dan menjalankan program satu perintah, satu demi satu sampai selesai.
Biasanya program disipan dulu di tempat penyimpanan (disk). Dari disk ini dimuat ke

memori oleh prosesor.
Lalu apa bedanya program dengan software, secara sederhana, software merupakan
kumpulan program. Apkah software itu kecil atau besar.

Pemrograman adalah Solusi
Kita sekarang dihadapkan pada berbagai produk canggih yang serba digital, angka.
Kita sekarang berada di dalam abad digital. Selain komputer, kita melihat produk
canggih lain seperti HP, ATM, pengendali pesawat, pengendali reaktor nuklir, internet
dan lainnya. Semua itu perlu diprogram agar semua alat canggih itu bisa bekerja
sesuai dengan kebutuhan kita seperti


Bagaimana Mesin ATM bekerja?



Bagaimana HP Bekerja?




Bagaimana komputer pengendali pesawat bekerja?



Bagaimana komputer pengendali reaktor nuklir bekerja?



Bagaimana internet bekerja?



dsb dsb

Pemrograman adalah penterjemahan solusi yang ada pada kita untuk disalin ke dalam
bahasa komputer. Dengan kata lain pemrograman adalah merumuskan solusi yang ada
di dalam pikiran kita untuk dapat dikerjakan komputer. Seringkali kita tahu solusinya
tetapi kita sulit menterjemahkannya (menjabarkannya) ke dalam bahasa mesin.
Program bisa dipandang sebagai proses yang mengolah input menjadi output:
Input

Output
Proses

4

Algoritma dan Diagram Alir
Algoritma merupakan sekumpulan perintah (instruksi) yang disusun secara berurutan,
untuk dapat menghasilkan pengaruh yang sesuai dengan kebutuhan. Algoritma
merupakan kumpulan tugas yang jika dikerjakan pada kondisi tertentu dengan proses
tertentu akan dihasilkan kondisi tertentu pula. Sebagai ilustrasi, kita perhatikan
algoritma untuk menanak nasi:
Asumsi awal, semua bahan dan alat tersedia.
-

Pertama ambil beras dengan jumlah tertentu.

-

Cuci beras sampai bersih.

-

Masak air secukupnya.

-

Tunggu sampai mendidih.

-

Jika air sudah mendidih, masukkan beras.

-

Tunggu lagi sampai mendidih.

-

Kecilkan apinya agar tidak gosong.

-

Biarkan sampai airnya habis.

-

Kecilkan lagi apinya.

-

Tunggu sampai matang

-

Nasi sudah matang (kondisi akhir).

Diagram Alir
Diagram alir dapat dipandang sebagai visualisasi algoritma. Dengan diagram alir kita
dapat lebih mudah memahami algoritma. Dengan demikian diagram alir ini dapat
digunakan untuk mengkomunikasikan algoritma yang kita buat kepada pihak lain
dengan lebih baik dan juga untuk dokumentasi algoritma agar kelak kita mudah
memahami kembali algoritma yang telah kita buat.
Berikut ini beberapa bentuk umum diagram alir yang paling sering digunakan:

Terminator:
Mulai/Selesai
Proses

Keputusan/Pilihan

Data input/Output

5

Penghubung dalam halaman yang sama. Diberi nomor
pada bagian yang disambung
Penghubung dalam halaman yang lain. Beri nomor
pada bagian yang bersambung

Mulai

1

Ambil Beras
dan Cuci

Tunggu sampai
mendidih

Masak air
Mendidih?

Tidak

Tunggu sampai
mendidih
Kecilkan apinya
Mendidih?

Tidak
Tunggu sampai
nasi masak

Masukkan
Beras
masak?

Tidak

1

Selesai

6

Notasi Algoritmik
Notasi

Arti

write(x, y)

tuliskan nilai x dan y

ab

isikan nilai b ke a

ab

apakah a lebih besar b?

+, -, *, /

tambah, kurang, kali, bagi

Tugas
Buatlah algoritma, diagram alir dan notasi algoritmik untuk tugas berikut:
1. Menjumlahkan kedua bilangan?
2. Menghitung rata-rata 5 buah bilangan?

7

Pengantar Bahasa Pascal
Sejarah Bahasa Pascal
Pascal dikembangkan pada tahun 1970 oleh Niklaus Wirth sebagai bahasa yang
ringkas dan efisien. Bahasa ini dirancang untuk pemrograman modular, pemrograman
terstruktur dan struktur data.
Pascal diturunkan dari bahasa Algol dan nama Pascal diambil untuk menghormati
matematikawan dan filosof Perancis Blaise Pascal. Mulanya Pascal digunakan untuk
mengajarkan pemrograman terstruktur kepada para mahasiswa.
Pada era pemrograman berorientasi objek, Pascal menjadi Object Pascal atau Delphi.

Karakteristik
Bahasa pemrograman Pascal merupakan bahasa tingkat tinggi. Karakteristik lain
adalah:


General purpose: Bahasa ini digunakan untuk berbagai jenis keperluan dan
terapan.



Terstruktur: Program dipandang sebagai suatu tugas yang kemudian dibagi
(dirinci) menjadi beberapa tugas. Setiap tugas bisa dibagi (dirinci) lagi
menjadi beberapa tugas yang lain



Bertype: Data dideklarasikan dalam jenis tertentu



Imperatif: tersusun dari sekumpulan perintah tertentu yang harus dilaksanakan.



Sekuensial: berurutan; perubahan urutan akan mengubah hasil.



Tidak case-sensitif (case-insensitif): tidak membedakan huruf besar/kapital
dan kecil

Struktur Program
Program Pascal terdiri dari:
Header
Blok
Deklarasi
Label
Konstanta
Definisi Jenis
Variabel
Prosedur dan Fungsi
Pernyataan

8

Contoh Program Pascal
Program HitLuasLing; {header atau kepala}
Var

{deklarasi}
jari2, luas : real; {Minta alokasi tempat di memori}

Begin

{blok Pernyataan program}
readln(jari2); {input}
luas := 3.14 * sqr(jari2); {Proses}
writeln(‘Luas : ‘, luas) {Output}

end. {Akhir program}
Struktur Program di atas terdiri dari nama program yaitu HitLuasLing yang berarti
program untuk menghitung luas lingkaran. Kurung kurawal merupakan tanda untuk
komentar, untuk memberi catatan ketika membuat program. Bagian ini tidak diproses
oleh kompilator. Baris kedua ada bagian deklarasi variabel yang ditandai dengan Var,
digunakan untuk memberi tahu komputer (kompilator) agar menyediakan ruang di
memori (alokasi) untuk variabel sebanyak yang dibutuhkan (tergeantung jenisnya). Di
sini ada dua jenis variabel real yaitu jari2 dan luas.
Bagian yang diawali begin dan diakhiri end merupakan bagian utama (tubuh)
program. Program terdiri dari input, proses dan output. Di sini input berupa jari-jari
yang dilambangkan dengan variabel jari2 dan diberi nilai melalui operasi readln yang
berarti membaca data dari piranti input (di sini layar monitor). Setelah operasi readln,
variabel jari2 yang semula tidak tertentu nilainya, sekarang mengandung data jari-jari.
Prosesnya berupa menghitung luas yang dilambangkan variabel luas. Fungsi sqr()
adalah fungsi di dalam Pascal untuk menghitung pangkat dua (square) karena luas
merupakan pi dikali kuadrat jari-jari. Nilai pi didekati dengan 3,14. Tanda *
merupakan perkalian di dalam Pascal dan tanda := berarti hasil perhitungan diberikan
ke sisi kiri (di sini variabel luas). Variabel luas yang semula tidak diketahui (tidak
tentu) nilainya sekarang bernilai luas lingkaran. Outputnya berupa menampilkan isi
variabel luas melalui writeln ke piranti output (di sini monitor juga).

Latihan
1. Ubah program di atas agar pengguna tahu bahwa dia harus memberikan nilai jarijari ke komputer
2. Ubah program di atas untuk bisa menghitung luas dan keliling lingkaran sekaligus,
serta tampilkan keduanya
2. Menukar nilai dua buah variabel.
Buatkan program yang memasukkan nilai integer ke dua buah variabel misalnya a
dan b. Kemudian prosesnya adalah menukar isi variabel a dengan variabel b. Untuk
itu harus ada variabel antara, yang menyimpan sementara nilai salah satu variabel
agar bisa menerima nilai yang baru. Variabel yang nilainya dititipkan tadi
kemudian mendapat nilai virabel yang lain. Dan variabel kedua ini mendapat nilai
variabel yang pertama yang sedang dititipkan tadi. Tampilkan melalui writeln.

9

Bagian-Bagian Program
Komentar
Komentar digunakan untuk memberi catatan pada program dan tidak diproses oleh
kompiler. Komentar diawali { atau (* dan diakhiri } atau *).

Pengenal
Pengenal (identifier) digunakan untuk memberi nama pada unsur program seperti
label, konstanta, variabel dan lainnya.
Pengenal terdiri dari huruf, angka, dalam susunan apa saja kecuali yang pertama harus
huruf.
Huruf besar atau kecil diperbolehkan dan tidak dibedakan.
Pengenal tidak boleh sama dengan kata yang dicadangkan (reserved words) untuk
bahasa Pascal.
Label
Label digunakan untuk menomori baris program (pernyataan), digunakan untuk
perintah goto. Harus dideklarasikan sebelumnya.
Contoh:
Label 10, selesai

10 : read(a);

Goto 10;

Goto selesai

Selasai: …

Konstanta
Konstanta adalah pengenal yang digunakan untuk nilai yang tetap.
Contoh:
CONST

pecahan = 0,166667;

Deklarasi Jenis
Digunakan untuk deklarasi jenis baru yang kita buat sendiri:
Contoh:
Type hari_kerja = (Senin, Selasa, Rabu, Kamis, Jumat):
10

Variabel
Pengenal untuk variabel, nilai yang bisa berubah.
Contoh deklarasi:
Var
nomor : integer;

Jenis Data
Jenis data sederhana terdiri dari:
Standard:
Integer: bilangan bulat
Real: bilangan real
Char: karakter
Boolean: nilai boolean (benar/salah)
user-defined (bentukan)
enumerated (terbilang)
subrange
Jenis data yang lain adalah yang terstruktur yang terdiri dari:
array
record
set
file
Pointer

Operasi Data Sederhana


Operator


biner: a+b



uner: not(a)

Operasi Integer:
Operator

Arti

Operan

Hasil

+

penjumlahan

integer

integer

-

pengurangan

integer

integer

*

perkalian

integer

integer

/

pembagian

integer

real

11

DIV

Pembagian terpotong

integer

integer

Mod

Sisa pembagian

integer

integer



Contoh operasi integer:



Misal a = 13, b = 5

a+b

= 18

a-b

=8

a*b = 65
a div b = 2
a mod b = 3
a/b = 2.6

Real
Operator

Arti

Operan

Hasil

+

penjumlahan

real

real

-

pengurangan

real

real

*

perkalian

real

real

/

pembagian

real

real

Boolean
Operator

Arti

=

Sama dengan?



Tidak sama dengan?

<

Lebih kecil?

>

Lebih besar?

=

Lebih besar atau sama dengan?

and

Benar jika kedua operan benar

or

Benar jika salah satu operan benar

not

Membalik nilai benar/salah

12

Char
chr(65)=‘A’
ord(‘A’) = 65
pred(‘B’) = ‘A’
succ(‘A’)=‘B’

Jenis Enumerated
type hari = (Ahad, Senin, Selasa, Rabu, Kamis, Jum’at, Sabtu)
pred(Ahad) -- run-time error
pred(Senin) = Ahad
ord(Ahad)=0
ord(Selasa)=2
Ahad < Senin = true
write(pred(Senin)); -- compile error.
write(ord(Senin)) tertulis 1

Jenis Subrange:
mengambil sebagian dari rentang data:
type nama = data_pertama .. data_terakhir
Contoh:
type hari = (Ahad, Senin, Selasa, Rabu, Kamis, Jum’at, Sabtu)
harikerja = Senin .. Jum’at;
bulan = 1..12;
tanggal = 1..31;

Fungsi Standard
Fungsi

Arti

jenis

jenis hasil

abs(x)

menghitung nilai mutlak

int, real

seperti x

arctan(x)

arcus tangent x

int, real

real

chr(x)

menentukan karakter dari x int

char

13

cos(x)

menentukan nilai cosinus

int, real

real

exp(x)

menentukan
e=2.718282..

ex. int, real

real

ln(x)

menghitung log natural

int, real

real

odd(x)

menentukan x apakah ganjil int
atau genap

boolean: true jika
ganjil

ord(x)

menentukan nilai untuk repr char
x

integer

pred(x)

menentukan
sebelumnya

round(x)

membulatkan
terdekat

sin(x)

nilai sinus

sqr(x)

menentukan nilai x kuadrat int, real

seperti x

sqrt(x)

menentukan akar x

real

succ(x)

menentukan
sesudahnya

trunc(X)

memotong nilai pecahan

nilai int,
boolean
ke

char, seperti x

nilai real

int

int, real

real

int, real
nilai int,
boolean

char, seperti x

real

Fungsi

Contoh

abs(x)

abs(-0.3)=0.3

chr(x)

chr(65)=‘A’

odd(x)

odd(5) = true

ord(x)

ord(‘A’)=65

pred(x)

pred(3)=2, pred(‘e’)=‘d’, pred(true)=false

round(x)

round(2.3)=2, round(3.7)=4

succ(x)

succ(3)=4, succ(‘e’)=‘f’, succ(true)=false

trunc(X)

trunc(2.3)=2, trunc(3.7)=3

int

Presedensi
Presedensi

Operator

1 (tertinggi)

not

2

* / div mod and

14

3

+ - or

4 (terendah)

= < >=

Ungkapan (Ekspresi)


Ekspresi:

sekumpulan operan (bilangan, konstanta, variabel) yang disatukan oleh operator untuk
membentuk suku seperti aljabar yang mempunyai nilai


Contoh:

(b*b – 4*a*c)/(2*a)

Pernyataan (statement)


Pernyataan: instruksi atau sekumpulan instruksi yang menyebabkan komputer
melakukan suatu tindakan.



Pernyataan:





sederhana (tunggal)



majemuk (compound)

Contoh:

sederhana:
D := (b*b – 4*a*c)
majemuk:
Begin
read (radius);
luas := 3.14159*sqr(radius);
write(radius, luas)
End.

Input dan Output Data
Data input dan output:
a. Dapat disimpan di dalam file yang akan dibaca dan ditulis pada saat
program berjalan
b. Diberikan atau disajikan melalui layar dan keyboard
Contoh:
PROGRAM penggajian(input, output);

15

Read dan Readln
Sintaks:
read(var2_input);
readln(var2_input);
Perbedaan keduanya:
readln menyebabkan read atau readln berikutnya (bukan yang ini) memulai
pembacaan dari baris baru, sedangkan read menyebabkan pembacaan di titik akhir
pembacaan data pada baris yang sama.

16



Contoh 1
VAR p1, p2, p3, p4 : integer;
.
.
read(p1, p2);
read(p3, p4);



Contoh 2
VAR p1, p2, p3, p4 : integer;
.
.
readln(p1, p2);
readln(p3, p4);

file input berisi:
1 2 3 4
5 6 7 8

file input berisi:
1 2 3 4
5 6 7 8

Hasil: p1=1, p2=2, p3=3, p4=4

Hasil: p1=1, p2=2, p3=5, p4=6

Fungsi EOLN dan EOF


eoln

memberi nilai true jika mencapai akhir baris



eof

memberi nilai true jika dijumpai akhir file

Write dan Writeln
Sintaks:
write(data2_output);
writeln(data2_output);
Perbedaan keduanya:
writeln menyebabkan write atau writeln berikutnya menuliskan outpun di baris baru,
sedangkan write tidak demikian
Contoh 1:

Contoh 3:
writeln(‘a ’, ‘b ’);
writeln(‘c ’, ‘d ’);

Hasil:

writeln(‘a ’, ‘b ’);
write(‘c ’, ‘d ’);
Hasil:

ab
cd
Contoh 2:

ab
cd
Contoh 4:

write(‘a ’, ‘b ’);
writeln(‘c ’, ‘d ’);
Hasil:

write(‘a ’, ‘b ’);
write(‘c ’, ‘d ’);
Hasil:

abcd

abcd

17

Output Berformat:


Menentukan lebar medan data

Sintaks:
data : lebar
Contoh:
write(‘Jumlahnya adalah’, j : 4);
jika j=-15
hasilnya adalah
Jumlahnya adalah -15
Contoh:
write(‘Jumlahnya adalah’, j : 3);
jika j=-15
hasilnya adalah
Jumlahnya adalah-15
Contoh:
write(‘Jumlahnya adalah’, j : 4);
jika j = 5
hasilnya adalah
Jumlahnya adalah 5
Contoh:
write(‘Jumlahnya adalah’, j : 3);
jika j=15000
hasilnya adalah
Jumlahnya adalah15000

18

Menentukan Jumlah angka desimal:
data : lebar_medan : jumlah_angka_desimal
Contoh:
Jika j = 12345.678
pernyataan

Hasil

write(‘J =‘, j)

J = 1.2345678E+04

write(‘J =‘, j : 12)

J = 1.23457E+04

write(‘J =‘, j : 18)

J = 1.23456780000E+04

write(‘J =‘, j : 10 : 3)

J = 12345.678

write(‘J =‘, j : 8 : 1)

J = 12345.7

Struktur Kontrol




Loop Bersyarat vs Tidak Bersyarat


Bersyarat: Melakukan pekerjaan berulang, berhenti karena kondisi
tertentu



Tidak Bersyarat: melakukan pekerjaan berulang sampai hitungan
tertentu

Eksekusi Bersyarat


Dieksekusi jika kondisi tertentu terpenuhi

While – Do
loop bersyarat (kondisional)
Sintaks:
While ungkapan_boolean Do pernyataan
Contoh:
kondisi

digit:=1;
while digit 10;

For - Do
loop tidak bersyarat
Sintaks:
for var_kontrol := nilai_1 to nilai_2 Do pernyataan
Contoh:
juml := 0;
for hit := 1 to n Do
Begin
readln(x);
juml:=juml+x
end;
writeln(‘Jumlah = ‘, juml);

Nested (Bersarang)
Bersarang: Struktur kontrol bisa berada di struktur yang lain (embedded).
Struktur dalam tidak harus sama dengan struktur luar
Struktur yang tercakup (embedded) seluruhnya berada dalam struktur luar
Tdk ada overlap: tercakup sebagian
Contoh
For lp := 1 to lpmak Do
Begin


20

repeat

until hit > n;

end

If – then – else
Struktur kontrol bersyarat: tindakan diambil jika kondisi terpenuhi
Sintaks:
If ungkapan_boolean then pernyataan
Contoh:
If hitungan