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