1. Algoritma & Pemrograman Hendra, S.T.
Pengantar Algoritma & Pemrograman Komputer
Program Komputer
Program komputer adalah suatu himpunan dari instruksi yang memberitahukan kepada
komputer apa yang harus dilakukan. Instruksi tersebut mungkin memberitahukan kepada
komputer untuk menambah, membandingkan, dan membuat keputusan berdasarkan
hasilnya.
Bahasa Komputer
Agar suatu komputer dapat mengenali instruksi yang anda berikan, instruksi tersebut perlu
ditulis dalam bahasa yang dimengerti oleh komputer.
HIGH-LEVEL dan LOW-LEVEL
Pada dasarnya orang mengolongkan Bahasa komputer menjadi dua golongan besar yaitu
High-Level dan Low-Level.
Bahasa pemrograman seperti BASIC, PASCAL, FORTRAN dan C, memungkinkan
programmer untuk menulis program yang tidak begitu tergantung pada jenis komputer.
Berdasarkan hal inilah bahasa-bahasa ini dapat dikategorikan sebagai high-level karena
lebih dekat kepada manusia.
Sebaliknya, bahasa assembly dikategorikan sebagai low-level karena mereka sangat dekat
kepada hardware.
Keuntungan utama dari bahwa high-level dibandingkan dengan low level adalah lebih
mudah dibaca, ditulis, dan ditangani. Selanjutnya program yang ditulis dengan bahasa
high-level harus diterjemahkan menjadi bahasa mesin melalui suatu compiler atau
interpreter.
BAHASA MESIN
Sesuatu hal yang harus dipahami bahwa setiap CPU hanya mengerti satu bahasa. Bahasa
ini dikenal sebagai machine language (bahasa mesin).
Indoprog 1
2. Algoritma & Pemrograman Hendra, S.T.
Semua bahasa mesin adalah suatu bahasa numerik, karena memori yang berada didalam
komputer hanya dapat menyimpan data numerik. Walaupun anda bekerja dengan text
[misalnya melihat halaman web] komputer bekerja dengan bilangan binary. Oleh karena
itu menulis dalam bahasa mesin sangat sulit dan membosankan, serta sering terjadi
kesalahan
Setiap keluarga CPU yang berbeda memiliki bahasa mesin yang berbeda pula. Bahasa
mesin untuk Intel Pentium adalah berbeda sama sekali dengan bahasa mesin yang
digunakan pada Power PC ataupun Sun SPARC.
ASSEMBLY LANGUAGE
Bahasa Assembly merupakan suatu lompatan yang besar dari bahasa mesin, tetapi
sebenarnya bukanlah suatu langkah yang besar. Bahasa Assembly adalah suatu mnemonic
sederhana untuk mengantikan bahasa mesin. Dari pada menulis angka 54 24 66 9C FE
C2 84 92 kedalam memori, programmer bahasa assembly dapat menulis LDX 24,
[669C].
Indoprog 2
3. Algoritma & Pemrograman Hendra, S.T.
Berikut ini adalah contoh bahasa assembly dengan bahasa mesin yang berasosiasi
disampingnya.
Beberapa hal yang perlu anda ingat tentang bahasa assembly.
1. Walaupun programmer menjadi lebih produktif, tetapi mereka tetap harus menulis
bahasa assembly untuk setiap perintah bahasa mesin.
• Komputer tidak mengerti bahasa assembly sama sekali, hanya bahasa mesin.
Setelah suatu program assembly dibuat, programmer harus mengkonversi program
tersebut menjadi bahasa mesin dengan suatu program yang dikenal sebagai
assembler, dan baru dapat dijalankan.
Indoprog 3
4. Algoritma & Pemrograman Hendra, S.T.
BAHASA TINGKAT TINGGI
Orang segera menyadari bahwa komputer dapat menterjemahkan bahasa assembly mejadi
kode mesin, dan mereka mudah memikirkan bagaimana jika komputer dapat diprogram
dengan bahasa yang lebih "alamiah" [lebih alamiah untuk manusia], inilah awal dari
bahasa generasi ketiga yaitu High Level Languages.
INTERPRETER dan COMPILER
Ketika anda menggunakan suatu interpreter, ia akan membaca perintah source code baris
perbaris, kemudian menterjemahkannya menjadi perintah mesin yang bersesuaian (kode
mesin) dan menjalankannya seketika. Kode mesin ini tidak disimpan; sehingga ketika
anda mencoba menjalankan program yang sama pada kesempatan berikutnya, anda
membutuhkan source code dan interpreter untuk menjalankannya.
Ketika anda menggunakan suatu compiler, ia akan membaca perintah source code dan
menulis kode mesin. Setelah selesai keseluruhan kode mesin akan disimpan untuk
pemakaian selanjutnya. Ketika anda ingin menjalankan program tersebut, system operasi
akan menjalankan kode mesin yang telah disimpan – dalam hal ini source code tidak
diperlukan lagi. Eksekusi menjadi lebih cepat, dan dapat dijalankan dikomputer lain
(dalam hal ini pada komputer dan system operasi yang sama)
Indoprog 4
5. Algoritma & Pemrograman Hendra, S.T.
KOMPUTER DAN ALGORITMA
Untuk membuat komputer melakukan sesuatu, anda perlu untuk menulis program
komputer. Dalam menulis suatu program komputer, kita perlu memberitahukan kepada
komputer, langkah-langkah persis apa yang harus ia lakukan. Ketika komputer
menjalankan program tersebut, ia akan melakukan setiap langkah secara mesin untuk
mencapai tujuan akhir.
Ketika anda memberitahu kepada komputer apa yang harus dilakukan, anda perlu memilih
bagaimana hal tersebut dilakukan. Dari sinilah Algoritma Komputer muncul. Algoritma
adalah teknik dasar untuk menyelesaikan suatu pekerjaan. Perhatikan contoh berikut untuk
membantu pengertian anda tentang konsep dari algoritma.
Katakanlah misalnya anda mempunyai teman yang baru tiba di airport, dan teman anda
ingin berangkat dari airport ke rumah anda. Berikut ini adalah empat algoritma yang
berbeda yang mungkin dilakukan teman anda:
Algoritma taxi:
Pergi ke pemberhentian taxi.
Masuk ke taxi.
Berikan alamat rumah anda.
Algoritma Telepon untuk dijemput:
Ketempat pemberhentian, telepon ke handphone anda.
Menunggu saja ditempat pengambilan bagasi.
Algoritma Bus:
Keluar dari tempat pengambilan bagasi, naik bus nomor 70.
Turun dan naik bus nomor 14 pada jalan utama.
Turun di jalan pada jalan AB.
Jalan kaki dua blok arah utara ke rumah anda.
Ketiga algoritma diatas memiliki tujuan yang sama, tetapi masing-masing melakukannya
dengan cara yang berbeda. Masing-masing algoritma diatas juga menghabiskan waktu dan
biaya yang berbeda. Naik taxi, adalah contoh yang paling cepat, tetapi paling mahal. Naik
bus mungkin adalah paling hemat, tetapi lambat. Tentu saja anda perlu memilih algortima
sesuai dengan situasi dan kondisi.
Dalam pemrograman komputer, juga terdapat banyak cara algoritma yang berbeda.
Masing-masing algoritma memiliki keuntungan dan kerugian untuk situasi yang berbeda.
Kata algoritma (algorithm) berasal dari nama matematikawan Persia pada abad 9
Abu Abdullah Muhammad bin Musa al-Khwarizmi. Kata aslinya algorism mengacu pada
aturan dari melakukan aritmetika menggunakan bilangan Arab dan berkembang menjadi
algoritma pada abad 18. Kata ini sekarang berevolusi untuk mencantumkan semua
prosedur-prosedur khusus untuk memecahkan masalah atau mengerjakan tugas
Kasus pertama dari algoritma yang ditulis untuk komputer adalah catatan Ada
Byron's notes pada analytical engine yang ditulis pada tahun 1842, yang mana diyakini
Indoprog 5
6. Algoritma & Pemrograman Hendra, S.T.
banyak orang sebagai programmer pertama didunia. Bagaimanapun, sejak Charles
Babbage tidak pernah menyelesaikan analytical engine-nya, dan algoritma tersebut tidak
pernah diimplementasi padanya.
Tahapan Pengembangan Program
Permasalahan dalam pembuatan program yang besar tentu saja berbeda dengan program
yang kecil, pada program yang kecil umumnya dikembangkan untuk sekali pakai dan
meliputi suatu detail yang kecil, sedangkan program yang besar umumnya dikembangkan
atas permintaan dan dipakai oleh orang lain. Oleh karena itu program tersebut harus ditulis
dengan lebih hati-hati untuk mencegah segala bentuk pemakaian yang menyimpang, serta
harus disertai dengan dokumentasi dan petunjuk pemakaian.
Hal lain yang harus dinyakini adalah keterbatasan memori manusia, kebanyakan orang
dengan mudah dapat memahami program dibawah 10 baris dalam beberapa detik, dan
mereka tetap dapat mengingatnya pada saat perubahan dibutuhkan. Pada program yang
besar, programmer harus memiliki semua informasi yang tertulis untuk memahami atau
mengubah program.
Oleh karena itu, penulisan program yang besar adalah tidak mudah, bahkan untuk
programmer yang profesional. Kita sering mendengar bahwa berbagai program besar
memiliki banyak bug maupun menyebabkan crash ketika dioperasikan pada kondisi
tertentu dan beberapa lama setelah dijalankan.
Adalah tidak mungkin untuk menghasilkan program yang bebas dari kesalahan, kita sering
tidak mengetahui dengan persis. Tetapi banyak cara yang dapat kita lakukan untuk
menghasilkan program dengan bug yang lebih sedikit. Salah satunya adalah memahami
langkah-langkah pengembangan suatu program yang besar, langkah-langkah ini dikenal
sebagai Software Development Life Cycle.
Pemrograman dalam pengertian luas meliputi seluruh kegiatan yang tercakup dalam
pembuatan program, termasuk analisis kebutuhan (requirement's analysis) dan
keseluruhan tahapan dalam perencanaan (planning), perancangan (design) dan
pewujudannya (implementation). Dalam pengertian yang lebih sempit, pemrograman
merupakan pengkodean (coding atau program writing = penulisan program) dan
pengujiannya (testing) berdasarkan rancangan tertentu. Pemahaman yang lebih sempit ini
sering digunakan dalam pembuatan program-program terapan komersial yang
membedakan antara system analyst yang bertanggung jawab dalam menganalisa
kebutuhan, perencanaan dan perancangan program dengan pemrogram (programmer) yang
bertugas membuat kode program dan menguji kebenaran program.
Indoprog 6
7. Algoritma & Pemrograman Hendra, S.T.
Gambar : Tahap pengembangan program
1. Batasan Masalah Merencanakan sistim dan spesifikasi program: Siapa yang akan
menggunakan program dan untuk apa? dengan cara:
a. Menentukan tujuan dan hasil yang akan dicapai
b. Menentukan hal-hal yang diperlukan oleh sistim
c. Pengumpulan data
2. Pengembangan Model Pembuatan model dari sistim yang akan kita bangun, model
adalah suatu gambaran sederhana dari sistim yang kita buat. Dengan pembuatan
model akan terlihat dengan jelas hubungan antara objek-objek dalam sistim yang
akan kita bangun. Untuk penyelesaian aritmatik, biasanya model dibuat dalam
bentuk rumus matematik. Contoh: untuk membuat program luas_lingkaran kita
membuat model matematis c = a x b
3. Rancangan algoritma Pembuatan urutan instruksi yang akan ditulis pada program
(dijelaskan lebih lanjut)
4. Pemrograman Implementasi algoritma ke dalam program (algoritma sendiri dalam
komputer adalah merupakan program).
5. Uji dan Validasi Pengujian terhadap program : seperti kesalahan penulisan (syntax
error) , kesalahan saat eksekusi (runtime error) kesalahan logika program (program
berjalan tapi menghasilkan output yang salah- fatal error).
Dokumentasi Pembuatan catatan pada program terutama pada modul-modul yang rumit.
Suatu ilustrasi tentang rumitnya SDLC yang dapat menyebabkan kekacauan berikut ini :
Indoprog 7
8. Algoritma & Pemrograman Hendra, S.T.
How the customers How the Project How the Analyst How the
explained it Leader understood designed it Programmer wrote
it it
How the Business How the project What operations How the customer
Consultant was documented installed was billed
described it
How it was supported What the customer really needed
Indoprog 8
9. Algoritma & Pemrograman Hendra, S.T.
Aturan Penulisan Teks Algoritma
Tidak ada notasi yang baku dalam penulisan teks algoritma. Algoritma bukanlah program
yang harus mengikuti aturan-aturan tertentu. Meski demikian, algoritma dituliskan
mendekati gaya bahasa pemrograman umumnya. Misal, tulis nilai X dan Y, dituliskan
dalam algoritma sebagai write(X,Y). Perhatikan dalam notasi write(X,Y) ini hanya
memerintahkan penyajian nilai X ke piranti keluaran (output). Dalam notasi itu juga tidak
memasalahkan format ataupun bentuk-bentuk tampilan lainnya, seperti dicetak dalam satu
baris X dan Y, pemakaian pemisah antara X dan Y menggunakan koma atau spasi. Hal-hal
yang bersifat teknis ini baru dipikirkan waktu penulisan program. Algoritma adalah bebas
bahasa pemrograman.
Teks Algoritma
Mengikuti alur konsep pemrograman prosedural, suatu teks algoritma disusun dalam tiga
bagian, yaitu:
1. Bagian kepala algoritma,
2. Bagian deklarasi, dan
3. Bagian deskripsi algoritma.
Setiap bagian disertai dengan penjelasan atau dokumentasi tentang maksud pembuatan
teks. Bagian penjelasan diawali dan diakhiri dengan simbol { dan }.
Algoritma NAMA_ALGORITMA { Penjelasan tentang algoritma yang menguraikan
secara singkat hal-hal yang dilakukan oleh algoritma }
DEKLARASI { Semua nama yang digunakan, meliputi nama-nama: tipe, konstanta,
variabel. Juga nama sub-program dinyatakan di sini }
DESKRIPSI { Semua langkah atau aksi algoritma dituliskan di sini }
Contoh:
1). Kepala algoritma: Algoritma Luas_Lingkaran { Menghitung luas lingkaran dengan
ukuran jejari tertentu. Algoritma menerima masukan jejari lingkaran, menghitung luasnya,
dan menyajikan hasilnya ke piranti keluaran } Perhatian, dalam menulis nama-nama
dalam algoritma harus mempunyai makna yang mencerminkan proses, sifat atau identitas
lainnya yang melekat dengan suatu proses, tipe, konstanta, variabel, sub-program dan lain-
lainnya.Nama-nama yang bermakna disebut mnemonic.
2) Deklarasi algoritma:
DEKLARASI { nama konstanta }
const PHI = 3.14; { Nilai phi = 22/7 }
{ nama peubah } var R : real; { input jejari lingkaran bilangan riil }
l_Lingkaran : real; { luas lingkaran bilangan riil }
{ nama sub program }
procedure TUKAR(input/output A:integer, input/output B:integer)
Indoprog 9
10. Algoritma & Pemrograman Hendra, S.T.
{ Mempertukankan nilai A dan B.Parameter A dan B sudah terdefinisi nilainya.Setelah
pertukaran, A berisi nilai B dan B berisi nilai A }
3) Deskripsi algoritma: Bagian ini merupakan bagian inti algoritma yang berisikan
uraian langkah-langkah penyelesaian suatu masalah. Setiap langkah algoritma dibaca dari
atas ke bawah. Urutan penulisan menentukan urutan pelaksanaan perintah.
{ Baca data jejari lingkaran R.Jika R <= 0 tulis pesan data salah, selain itu hitung luas
ingkaran. Tampilkan luas lingkaran. }
baca(R);
jika R <= 0 then tulis("Data salah !")
selain itu l_Lingkaran = PHI x R x R;
tulis(l_Lingkaran);
Flowchart
Flowchart adalah alat untuk menganalisa proses. Hal tersebut memungkinkan anda untuk
memecah proses menjadi kejadian-kejadian individual atau aktifitas untuk menunjukan
secara singkat hubungan diantaranya. Konstruksi flowchart memungkinkan pengertian
yang lebih baik kepada proses, dan pengertian yang lebih baik terhadap proses akan
membawa kepada perbaikan dan pengembangan.
Berbagai jenis flowchart telah dikembangkan pada berbagai bidang seperti pada sistem
produksi, maupun pada sistem design dan pemrograman.
Diagram Alir (Flowchart) Merupakan bentuk grafis/visual dari algoritma Bentuk umum
dari simbol-simbol dalam diagram alir:
Simbol untuk mulai (start) atau akhir (end) program
Simbol untuk pembacaan (read) data atau penulisan hasil
(write) pada layar
Simbol untuk suatu proses terhadap data pada program
Simbol untuk suatu pernyataan pilihan (optional) pada
program.
Simbol untuk penghubung antar aktifitas.
Konektor, Simbol untuk memutus aktivitas karena
keterbatasan media kertas.
Sub program
Indoprog 10
11. Algoritma & Pemrograman Hendra, S.T.
Komentar
Contoh pemakaian flowchart:
Sequential (berurutan)
perhitungan volume dan luas permukaan silinder
Selection/Branching Structure (Struktur pemilihan)
Indoprog 11
14. Algoritma & Pemrograman Hendra, S.T.
Flowchart dahulu digunakan di computer science untuk mengambarkan algoritma, dimana
mereka merupakan blok-blok instruksi untuk suatu rangkaian operasi. Dewasa ini trend
kedepan adalah pemakaian pseudocode untuk mengambarkan algoritma. Tetapi
bagaimanapun flowchart lebih visual dan sering digunakan pada saat presentasi.
Pseudocode
Pseudocode adalah cara generik untuk menerangkan suatu algoritma tanpa menggunakan
tata cara penulisan bahasa pemrograman tertentu. Sebagaimana namanya, pseudo code —
tidak dapat dieksekusi langsung pada komputer, tetapi merupakan model dan harus diubah
menjadi kode pemrograman yang sebenarnya, dan ditulis sama detailnya.
Pseudocode, secara alamiah dapat terdiri dari berbagai bentuk, walaupun banyak
meminjam tata cara penulisan dari bahasa pemrograman popular (seperti C, Lisp, atau
Fortran). Bahasa natural digunakan pada bagian detail yang kurang penting.
Textbook computer science sering menggunakan pseudocode pada contoh sehingga semua
programmer dapat memahaminya, walaupun mereka tidak menggunakan bahasa
pemrograman yang sama. Karena bentuk pseudocode bervairasi dari pengarang yang satu
dengan pengarang yang lain, tetapi bentuk yang sering digunakan untuk pengenalan
adalah sebagai berikut :
Indoprog 14
15. Algoritma & Pemrograman Hendra, S.T.
BEGIN { mulai } { input }
read(R);
{ proses } If R <= 0
then tulis("Data salah !")
else L_Lingkaran = PHI x R x R;
{ output } write(l_Lingkaran);
END; { selesai }
Indoprog 15
16. Algoritma & Pemrograman Hendra, S.T.
Sejarah dari bahasa pemrograman komputer
Sejak pertama komputer difference engine diciptakan oleh Charles Babbage pada
tahun 1822, komputer membutuhkan sejumlah instruksi untuk melakukan suatu tugas
tertentu. Instruksi-instruksi ini dikenal sebagai bahasa pemrograman. Bahasa komputer
mulanya terdiri dari sejumlah langkah pengkabelan untuk membuat suatu program; hal ini
dapat dipahami sebagai suatu rangkaian pengetikan kedalam komputer dan kemudian
dijalankan.
Pada awalnya, difference engine-nya Charles Babbage hanya dibuat untuk
menjalankan tugas dengan menggunakan perpindahan gigi roda untuk menjalankan fungsi
kalkukasi. Jadi, bentuk awal dari bahasa komputer adalah berupa gerakan secara mekanik,
selanjutnya gerakan mekanik tersebut digantikan dengan sinyal listrik ketika pemerintah
AS mengembangkan ENIAC pada tahun 1942, tetapi masih banyak mengadopsi prinsip-
prinsip dasar dari Babbage's engine yang mana diprogram dengan mengeset switch dan
perkabelan pada seluruh sistem pada setiap "program" maupun kalkulasi. Tentu saja ini
merupakan pekerjaan yang membosankan.
Pada 1945, John Von Neumann yang bekerja pada Institute for Advanced Study
mengemukakan dua konsep yang secara langsung mempengaruhi masa depan dari bahasa
pemrograman komputer. Yang pertama dikenal sebagai "shared-program technique"
(www.softlord.com). Pada teknik ini dinyatakan bahwa hardware komputer haruslah
sederhana dan tidak perlu dilakukan pengkabelan dengan menggunakan tangan untuk
setiap program. Sebagai gantinya, instruksi-instruksi yang lebih kompleks harus
digunakan untuk mengendalikan perangkat keras yang lebih sederhana, hal ini
memungkinkan komputer diprogram ulang dengan cepat.
Konsep yang kedua yang juga sangat penting untuk pengembangan bahasa
pemrograman. Von Neumann menyebutnya sebagai "conditional control transfer"
(www.softlord.com). Ide ini berkembang menjadi bentuk subrutin, atau blok kode yang
kecil yang dapat panggil berdasarkan aturan tertentu, dari pada suatu himpunan tunggal
urutan kronologis yang harus dijalankan oleh komputer. Bagian kedua dari ide tersebut
menyatakan bahwa kode komputer harus dapat bercabang berdasarkan pernyataan logika
seperti IF (ekspresi) THEN, dan perulangan seperti FOR statement. "Conditional control
transfer" mengembangkan ide adanya "libraries," yang mana merupakan blok kode yang
dapat digunakan berulang kali.
Pada 1949, setelah beberapa tahun Von Neumann bekerja, bahasa Short Code
dilahirkan (www.byte.com), yang merupakan bahasa komputer yang pertama untuk
peralatan elektronik yang membutuhkan programmer untuk mengubah perintah kedalam 0
dan 1 dengan tangan.
Pada 1957, bahasa khusus yang pertama muncul dalam bentuk FORTRAN yang
merupakan singkatan dari sistem FORmula TRANslating. Bahasa ini dirancang pada IBM
untuk perhitungan scientific. Komponen-komponennya sangat sederhana, dan
Indoprog 16
17. Algoritma & Pemrograman Hendra, S.T.
menyediakan bagi programmer akses tingkat rendah kedalam komputer. Sampai saat ini,
bahasa ini terbatas pada hanya terdiri dari perintah IF, DO, dan GOTO, tetapi pada waktu
itu, perintah-perintah ini merupakan lompatan besar kearah depan. Type data dasar yang
digunakan sampai sekarang ini dimulai dari FORTRAN, hal ini meliputi variabel logika
(TRUE atau FALSE), dan bilangan integer, real, serta double-precision.
FORTRAN sangat baik dalam menangani angka-angka, tetapi tidak terlalu baik
untuk menangani proses input dan output, yang mana merupakan hal yang penting pada
komputasi bisnis. Komputasi bisnis mulai tinggal landas pada 1959, dengan
dikembangkannya COBOL, yang dirancang dari awal sebagai bahasa untuk para pebisnis.
Type data yang ada hanya berupa number dan text string. Hal tersebut juga
memungkinkan pengelompokan menjadi array dan record, sehingga data di telusuri dan
diorganisasikan dengan lebih baik. Sesuatu hal yang menarik untuk dicatat bahwa suatu
program COBOL dibuat menyerupai suatu essay, dengan empat atau lima bagian utama
yang membentuk keseluruhan yang tertata dengan baik. Perintah-perintah COBOL sangat
menyerupai tata bahasa English, sehingga membuatnya agak mudah dipelajari. Semua
ciri-ciri ini dikembangkan agar mudah dipelajari dan mudah diterapkan pada dunia bisnis.
Pada 1958, John McCarthy di MIT membuat bahasa LISt Processing (atau LISP).,
yang dirancang untuk riset Artificial Intelligence (AI). Karena dirancang untuk fungsi
spesialisasi yang tinggi, maka tata cara penulisannya jaring kelihatan sebelum ataupun
sesudahnya. Sesuatu perbedaan yang paling nyata dari bahasa ini dengan bahasa lain
adalah dasar dan type satu-satunya adalah list, yang ditandai dengan suatu urutan item
yang dicakup dengan tanda kurung. Program LISP sendirinya dibuat sebagai suatu
himpunan dari list, sehingga LISP memiliki kemampuan yang khusus untuk memodifikasi
dirinya, dan juga dapat berkembang sendiri. Tata cara penulisan LISP dikenal sebagai
"Cambridge Polish," sebagaimana dia sangat berbeda dari logika Boolean (Wexelblat,
177) :
x V y - Cambridge Polish, what was used to describe the LISP program
OR(x,y) - parenthesized prefix notation, what was used in the LISP program
x OR y - standard Boolean logic
LISP masih digunakan sampai sekarang karena spesialiasi yang tinggi dari sifat
abstraknya.
Bahasa Algol dibuat oleh suatu komite untuk pemakaian scientific pada tahun
1958. Kontribusi utamanya adalah merupakan akar dari tiga bahasa selanjutnya yaitu
Pascal, C, C++, dan Java. Dia juga merupakan bahasa pertama dengan suatu tata bahasa
formal, yang dikenal sebagai Backus-Naar Form atau BNF (McGraw-Hill Encyclopedia of
Science and Technology, 454). Pada Algol telah diterapkan konsep-konsep baru, seperti
rekursif pada function, bahasa berikutnya Algol 68, menjadi bahasa yang membosankan
dan sulit digunakan (www.byte.com). Hal ini mengarah kepada adopsi terhadap bahasa
yang lebih kecil dan kompak seperti Pascal.
Pascal dimulai pada tahun 1968 oleh Niklaus Wirth. Tujuan utama
Indoprog 17
18. Algoritma & Pemrograman Hendra, S.T.
pengembangannya adalah untuk kebutuhan pengajaran. Pada awalnya bahasa ini
dikembangkan bukan dengan harapan adopsi pemakaian secara luas. Prinsipnya mereka
mengembangkannya untuk alat pengajaran pemrograman yang baik seperti kemampuan
debug dan perbaikan sistem dan dukungan kepada mikroprosesor komputer yang
digunakan pada institusi pendidikan.
Pascal dirancang dengan pendekatan yang sangat teratur (terstruktur), dia
mengkombinasikan kemampuan yang terbaik dari bahasa-bahasa saat itu, COBOL,
FORTRAN, dan ALGOL. Dalam pengerjaannya banyak perintah-perintah yang tidak
teratur dan aneh dihilangkan, sehingga sangat menarik bagi pemakai (Bergin, 100-101).
Kombinasi dari kemampuan input/output dan kemampuan matematika yang solid,
membuatnya menjadi bahasa yang sukses besar. Pascal juga mengembangkan tipe data
"pointer", suatu fasilitas yang sangat bermanfaat pada bahasa yang
mengimplementasikannya. Dia juga menambahkan perintah CASE, yang mana
memperbolehkan perintah bercabang seperti suatu pohon pada suatu aturan:
CASE expression OF
possible-expression-value-1:
statements to execute...
possible-expression-value-2:
statements to execute...
END
Pascal juga mengembangkan variabel dinamis, dimana variabel dapat dibuat ketika suatu
program sedang berjalan, melalui perintah NEW dan DISPOSE. Tetapi Pascal tidak
mengimplementasikan suatu array dinamis, atau kelompok dari variabel-variabel, yang
mana sangat dibutuhkan, dan merupakan salah satu penyebab kekalahannya (Bergin, 101-
102). Wirth kemudian membuat lanjutan dari Pascal, Modula-2, tetapi pada saat itu
muncul C yang dengan cepat menjadi mengeser posisi Pascal.
C dikembangkan pada tahun 1972 oleh Dennis Richie ketika sedang bekerja pada
Bell Labs di New Jersey. Transisi pemakaian dari bahasa umum yang pertama ke bahasa
umum sampai hari ini yaitu transisi antara Pascal dan C, C merupakan perkembangan dari
B dan BCPL, tetapi agak menyerupai Pascal. Semua fasilitas di Pascal, termasuk perintah
CASE tersedia di C. C menggunakan pointer secara luas dan dibangun untuk kecepatan
dengan kelemahannya yaitu menjadi sulit untuk dibaca. Tetapi karena dia menghilangkan
semua kelemahan yang terdapat di Pascal, sehingga dengan cepat mengambil alih posisi
Pascal.
Ritchie mengembangan C untuk sistem Unix yang baru pada saat yang bersamaan.
Oleh karena ini, C dan Unix saling berkaitan. Unix memberikan C beberapa fasilitas besar
seperti variabel dinamis, multitasking, penanganan interrupt, forking, dan strong low-
level, input-output. Oleh karena itu, C sangat sering digunakan untuk pemrograman sistem
operasi seperti Unix, Windows, MacOS, dan Linux.
Pada akhir tahun 1970 dan awal 1980, suatu metode pemrograman yang baru telah
Indoprog 18
19. Algoritma & Pemrograman Hendra, S.T.
dikembangkan. Ha tersebut dikenal sebagai Object Oriented Programming, atau OOP.
Object merupakan suatu potongan dari data yang dapat dipaket dan dimanipulasi oleh
programmer. Bjarne Stroustroup menyukai metode ini dan mengembangkan lanjutan dari
C yang dikenal sebagai "C With Classes." Kemampuan lanjutan ini dikembangkan
menjadi bahasa C++ yang diluncurkan pada tahun 1983.
C++ dirancang untuk mengorganisasikan kemampuan dasar dari C dengan OOP,
dengan tetap mempertahankan kecepatan dari C dan dapat dijalankan pada komputer yang
tipe berlainan. C++ sering kali digunakan dalam simulasi, seperti game. C++ menyediakan
cara yang baik untuk memanipulasi ratusan instance dari manusia didalan elevator, atau
pasukan yang diisi dengan tipe prajurit yang berbeda. Bahasa ini menjadi pilihan pada
mata kuliah AP Computer Science sampai hari ini.
Pada awal 1990's, interaktif TV adalah teknologi masa depan. Sun Microsystems
memutuskan bahwa interaktif TV membutuhkan suatu hal yang khusus, yaitu bahasa
portable (bahasa yang dapat berjalan pada banyak jenis mesin yang berbeda). Bahasa ini
dikenal sebagai Java. Pada tahun 1994, team proyek Java mengubah fokus mereka ke web,
yang mana berubah menjadi sesuatu yang menjanjikan setelah interactive TV gagal. Pada
tahun berikutnya, Netscape menyetujui pemakaian Java pada internet browser mereka,
Navigator. Sampai titik ini, Java menjadi bahasa masa depan dan beberapa perusahaan
mengumumkan aplikasi harus ditulis dalam Java.
Java mempunyai tujuan yang besar dan merupakan bahasa yang baik menurut buku
text, pada kenyataanya "bahasa tersebut tidak". Dia memiliki masalah yang serius dalam
optimasi, dengan arti program yang ditulis dengannya berjalan dengan lambat. Dan Sun
telah membuat cacat penerimaan terhadap Java dengan pertikaian politis dengan
Microsoft. Tetapi Java telah dinyatakan sebagai bahasa untuk instruksi masa depan dan
benar-benar menerapkan object-oriented dan teknik tingkat tinggi seperti kode yang
portable dan garbage collection.
Visual Basic sering diajari sebagai bahasa pemrograman dasar yang mengacu pada
bahasa BASIC yang dikembangkan pada tahun 1964 oleh John Kemeny dan Thomas
Kurtz. BASIC adalah bahasa yang sangat terbatas dan dirancang untuk orang yang bukan
computer science. Perintah-perintah dijalankan secara berurutan, tetapi kendali program
dapat berubah berdasarkan IF..THEN, dan GOSUB yang mana menjalankan suatu blok
kode dan kembali ketitik semula didalam alur program.
Microsoft telah mengembangkan BASIC ke dalam produk Visual Basic (VB).
Jantung dari VB adalah form, atau suatu window kosos dimana anda dapat drag dan drop
komponen seperti menu, gambarm dan slider bars. Item-item ini dikenal sebagai
"widgets." Widget memiliki properti (seperti warna) dan events (seperti klik dan double
klik) dan menjadi pusat dari pengembangan antarmuka dengan pemakai diberbagai bahasa
program dewasa ini. VB merupakan program yang banyak digunakan untuk membuat
interface sederhana ke produk Microsoft lainnya seperti Excel dan Access tanpa membaca
banyak kode, dengannya dapat dimungkinkan untuk dibuat aplikasi yang lengkap.
Indoprog 19
20. Algoritma & Pemrograman Hendra, S.T.
Perl telah sering digambarkan sebagai "duct tape of the Internet," karena sering
digunakan sebagai engine untuk interface web atau pada script untuk memodifikasi file
konfigurasi. Dia memiliki fungsi text matching yang sangat baik sehingga membuatnya
menjadi hal yang ideal untuk pekerjaan tersebut. Perl dikembangkan oleh Larry Wall pada
1987 karena fasilitas pada sed dan awk pada Unix (digunakan untuk manipulasi text) tidak
mencukupi kebutuhannya. Tergantung kepada siapa anda bertanya, Perl adalah singkatan
dari Practical Extraction and Reporting Language atau Pathologically Eclectic Rubbish
Lister.
Bahasa pemrograman telah berkembangan dari masa kemasa dan tetap
dikembangkan dimasa depan. Mereka dimulai dari suatu daftar langkap pengkabelan agar
komputer menjalankan tugas tertentu. Langkah-langkah ini berkembang menjadi software
dan memiliki kemampuan yang lebih baik. Bahasa umum yang pertama menekankan pada
kesederhanaan dan untuk satu tujuan saja, sedangkan bahasa dewasa ini terbagi atas
bagaimana mereka diprogram, sehingga mereka dapat digunakan untuk semua tujuan. Dan
mungkin bahasa yang akan datang lebih natural dengan penemuan pada quantum dan
komputer-komputer biologis.
Latihan 1
1. What is a computer program ?
2. Explain what is the different between High Level Language & Low Level Language !
3. How about Machine Language & Assembly Language !
4. Explain how are interpreters and Compiler works !
5. Is a computer program like an algorithm ?
6. What can we use to presenting an algorithm ?
7. Draw the symbols use in flowchart, and mention each symbols function !
Indoprog 20
21. Algoritma & Pemrograman Hendra, S.T.
Modul 1
Apa itu Bahasa Pemrograman Pascal ?
Pascal merupakan suatu bahasa komputer tingkat tinggi yang dibuat sekitar tahun 1970
oleh Niklaus Wirth1 dan digunakan untuk pendidikan komputer. Bahasa Pascal
dikembangkan dari Bahasa Pemrograman ALGOL. Nama Pascal diambil dari seorang ahli
matematika yang bernama Blaise Pascal2 yang menemukan mesin hitung pertama. Bahasa
Pascal dirancang untuk menyelesaikan masalah dari berbagai kalangan pemakai, mulai
dari para mahasiswa, pendidik, dan ilmuwan dengan pendekatan terstruktur.
Apa itu Turbo Pascal ?
Salah satu kompiler pascal yang terkenal dan tercepat adalah Turbo PASCAL yang dibuat
oleh perusahaan Borland (http://www.borland.com). Turbo PASCAL telah membuat
pascal sebagai salah satu bahasa pemrograman yang popular dikalangan IBM PC.
Adakah versi Turbo Pascal untuk pemrograman Visual ?
Pada trend pemrograman Visual, perusahaan Borland mengeluarkan Borland Delphi
(Windows) dan Kylix (Linux) yang menggunakan dasar dialek Pascal (object Pascal) pada
lingkungan pemrograman Visual.
Apa artinya Pascal adalah bahasa pemrogram terstruktur ?
Pascal adalah suatu bahasa pemrograman terstruktur. Hal tersebut berarti semua program
yang anda buat harus terstruktur dan teratur, dalam hal ini harus menghindari pemakaian
goto dan jump.
Apakah Turbo Pascal mendukung pemrograman berorientasi object ?
Mulai versi 5.5 Turbo Pascal telah dilengkapi dengan kemampuan pemrograman
berorientasi object, dan program ini secara bebas dapat di download pada alamat
http://bdn.borland.com/article/0,1410,20803,00.html (Antique Software: Turbo Pascal
version 5.5)
Adakah compiler Pascal lainnya selain Turbo Pascal ?
Compiler Pascal lainnya yang cukup terkenal adalah Free Pascal3 yang dapat didownload
pada http://www.freepascal.org/ (Free Pascal). Free Pascal merupakan compiler yang
dikembangkan oleh komunitas open source.
1
Dr. Niklaus Wirth of the Swiss Federal Institute of Technology (ETH-Zurich), a member of the original
group that created ALGOL. In 1971, he published his specification for a highly-structured language which
resembled ALGOL in many ways. He named it Pascal.
2
Blaise Pascal, a French mathematician who was a pioneer in computer development history. In 1641, at the
age of eighteen, Pascal constructed the first arithmetical machine, arguably the first computer. He would
improve upon the instrument eight years later. In 1650, Pascal left the world of geometry and physics, and
shifted his focus towards religious studies, or, as Pascal wrote, to "contemplate the greatness and the misery
of man." Pascal died in Paris on August 19, 1662.
3
Free Pascal (aka FPK Pascal) is a 32 or 64 bit (from 1.9.6) pascal compiler. It is available for different
processors Intel x86, Amd64/x86 64 (from 1.9.6), PowerPC (from 1.9.2), Sparc (from 1.9.6) and Motorola
680x0 (1.0.x only). The following operating systems are supported Linux, FreeBSD, NetBSD,
Indoprog 21
22. Algoritma & Pemrograman Hendra, S.T.
Mengapa kita belajar bahasa pemrogram Pascal, padahal trend pemrograman
dewasa ini adalah C/C++, C#, dan Java ?
Sebagaimana tujuan awal dari pembuatan bahasa Pascal adalah untuk pengajaran
pemrograman komputer di perguruan tinggi4, sebagai bahasa pemrograman yang
terstruktur Pascal akan menjadi dasar praktek pemrograman yang baik bagi mahasiswa.
Jika dibandingkan dengan C/C++, Pascal relatif lebih mudah dipelajari, karena bahasa
C/C++ merupakan bahasa yang cenderung simbolic dan adanya type casting serta pointer
arithmetic (sering membuat program menjadi crash dan buffer overun bagi programmer
yang kurang berpengalaman.
Sedangkan bahasa Java dan C# adalah bahasa pemrograman terkini yang menekanan
kepada pendekatan berorientasi object, padahal pendekatan tersebut adalah tidak mudah
untuk orang yang baru belajar pemrograman komputer.
Kemudian Borland merupakan salah satu perusahaan yang terus mengembangan
produknya, terutama Delphi dan Kylix yang menggunakan Object Pascal.
Bagaimana Struktur program pascal yang paling sederhana ?
Struktur program pascal yang paling sederhana adalah :
uses ...;
var ...;
begin
.... {Your program is here}
end.
Dapatkah anda memberi contoh sebuah program pascal yang sederhana ?
begin
Writeln('Saya sedang belajar Pascal !');
Writeln('Di STMIK IBBI');
end.
Bagaimana kalau saya mau membersihkan layar terlebih dahulu sebelum mencetak
tulisan ?
Untuk membersihkan layar, anda dapat menggunakan perintah Clrscr yang terdapat pada
unit CRT.
MacOSX/Darwin, MacOS classic, DOS, Win32, OS/2, BeOS, SunOS (Solaris), Netware (libc and classic),
QNX and Classic Amiga.
4
According to the Pascal Standard (ISO 7185), these goals were to a) make available a language suitable for
teaching programming as a systematic discipline based on fundamental concepts clearly and naturally
reflected by the language, and b) to define a language whose implementations could be both reliable and
efficient on then-available computers.
Indoprog 22
23. Algoritma & Pemrograman Hendra, S.T.
Contoh :
Uses CRT;
begin
Clrscr;
Writeln('Saya sedang belajar Pascal !');
Writeln('Di STMIK IBBI');
end.
Bagaimana Struktur program pascal yang kompleks ?
Adapun struktur dasar suatu program pascal adalah sebagai berikut :
program ... ; { Program heading }
uses ... ; { Uses clause }
label ... ; { Labels }
const ... ; { Constants }
type ... ; { Types }
var ... ; { Variables }
procedure ... ; { Procedures }
function ... ; { Functions }
begin
statement; { Statements }
...
end.
Program heading
Judul program dalam Turbo Pascal bersifat optional dan tidak ada pengaruhnya dalam
program. Jika ditulis akan memberikan nama program dan suatu daftar parameter optional
dimana program itu berkomunikasi. Daftar itu terdiri dari sederetan indentifier yang
diakhiri dengan tanda kurung dan dipisahkan dengan tanda koma.
Contoh :
Program Perhitungan(Input,Output);
Uses Clause
Bagian uses clause digunakan untuk menentukan library yang dibutuhkan saat proses
program. LIBRARY merupakan file penyimpan subroutine yang secara berulang
digunakan saat proses program. Library ini diistilahkan sebagai unit dalam Turbo
PASCAL yang terdiri dari SYSTEM, OVERLAY, GRAPH, DOS, CRT yang ditempatkan
dalam file TURBO.TPL.
Contoh :
Uses Crt; (*menggunakan Unit Crt *)
Perhatian :
Unit system merupakan unit yang secara otomatis akan disertakan dalam setiap program,
unit inilah mengatur semua perintah dasar input dan output pada Pascal. Sedangkan unit-
unit lain hanya akan disertakan bila kita pilih pada bagian uses.
Indoprog 23
24. Algoritma & Pemrograman Hendra, S.T.
Declaration
Bagian ini meliputi deklarasi untuk label, const, type, var, procedure dan function.
Syarat terpenting dalam pembentukan suatu program adalah, bahwa setiap variabel, type
non-standard, label, procedure non-standard, serta function non-standard yang dipakai
didalamnya harus nyatakan (deklarasi) terlebih dahulu pada bagian deklarasi.
Setiap deklarasi tersebut harus bersifat unik (tidak boleh serupa satu sama yang lain).
Penulisan nama dalam deklarasi tersebut harus memenuhi syarat-syarat sebagai berikut :
- panjang nama maximum 63 character, diawali dengan alphabet
- tidak ada special character kecuali tanda garis bawah ("_")
- tidak boleh serupa dengan reserved word (kata tercadang)
- tidak boleh serupa dengan indentifier lainnya.
Variabel Declaration
Setiap variabel yang digunakan dalam program harus didefinisikan terlebih dahulu
sebelum digunakan. Cara penulisan ini adalah :
Var
<nama var> : <type variable>;
Statement
Bagian ini merupakan inti dari program. Seluruh perintah dan urutannya serta proses
Input/Output dalam program perlu disusun secara teratur oleh penyusun program. Segala
yang ada pada bagian uses maupun deklarasi merupakan pendukung terhadap isi program.
Bagaimana membuat keterangan ?
Untuk membuat program anda menjadi mudah dibaca dan dimengerti, maka perlu diberi
keterangan yang akan diabaikan oleh kompiler. Untuk membuat keterangan gunakan tanda
kurawal { ini adalah keterangan }, atau (* ini adalah keterangan *).
Type data apa saja yang disediakan Turbo Pascal ?
Adapun type variable yang disediakan pada TURBO PASCAL :
1. Ordinal types
Type data yang mempunyai urutan pasti, dan masih terbagi menjadi
- Integer
Type variable yang beguna untuk pengolahan data yang bulat, type ini masih terbagi atas
berberapa menurut jangkauan data dan ukurannya :
Type Jangkuan Ukuran
Shortint -128..127 8 bit
Integer -32768..32767 16 bit
Longint -2147483648..2147483647 32 bit
Byte 0..255 8 bit
Indoprog 24
25. Algoritma & Pemrograman Hendra, S.T.
Word 0..65535 16 bit
- Char
Type variabel yang berguna untuk pengolahan character ASCII, type character ini
penulisannya ditandai dengan dua buah petik tunggal seperti : 'A', '3','*',#7 untuk
menyatakan ' harus ditulis ''''
- Boolean
Type varibale yang berguna untuk pengolahan hal yang hanya mempunyai dua ketentuan
yaitu benar(TRUE) dan salah(FALSE) saja.
2. Real types
Type variable yang beguna untuk pengolahan data yang tidak bulat, untuk type real ini
juga terbagi atas beberapa :
Type Jangkauan Ketelitian Ukuran
Real 2.9e-39..1.7e38 11-12 digit 6 bit
Single 1.5e-45..3.4e38 ³ 7-8 7-8 digit 4 bit
Double 5.0e-324..1.7e308 15-16 digit 8 bit
Extended 3.4e-4932..1.1e4932 19-20 digit 10 bit
Comp -9.2e18..9.2e18 19-20 digit 8 bit
Untuk pengolahan type variabel diatas di sediakan berbagai jenis operator antara lain :
Operator Integer Type Real Type
+ Penjumlahan Penjumlahan
- Pengurangan Pengurangan
* Perkalian Perkalian
/ Pembagian Pembagian
DIV Hasil bagi
MOD Sisa Bagi
Operator Integer Type Boolean Type
NOT Bitwise Negation Logical Negation
AND Bitwise AND Logical AND
OR Bitwise inclusive OR Logical inclusive OR
XOR Bitwise exclusive OR Logical exclusive OR
SHL Bitwise shift-left
SHR Bitwise shift-right
Operator relasi yang mengembalikan hasil Boolean
Operator Fungsi
:= Menyatakan nilai
= Sama dengan
<> Tidak sama dengan
< Lebih kecil
> Lebih besar
<= Lebih kecil atau sama dengan
>= Lebih besar atau sama dengan
Apa pengertian Pascal adalah bahasa yang strong type ?
Indoprog 25
26. Algoritma & Pemrograman Hendra, S.T.
Sebagaimana anda ketahui bahwa Pascal adalah bahasa yang dirancang untuk
pembelajaran pemrograman komputer yang terstruktur. Pada saat kompilasi, compiler
akan memeriksa pemakaian type data yang bersesuaian. Jadi setiap variabel yang
dideklarasi harus disesuaikan dengan nilai yang akan disimpan kevariabel tersebut.
Bagaimana menampilkan tulisan ke layar ?
Pascal menyediakan perintah Write dan Writeln yang dapat anda gunakan untuk
menampilkan tulisan ke layar.
Dapatkah anda memberi contoh program yang menggunakan variabel ?
{Deklarasi variabel}
var
UmurKu : Byte;
Keterangan : String;
(*Program anda*)
begin
UmurKu:=19;
Keterangan:='Hi, saya sedang belajar Pascal di STMIK IBBI';
Writeln('Saya berumur ',UmurKu,' tahun');
Writeln(Keterangan);
end.
Bagaimana kalau saya ingin membaca masukan dari pemakai ?
Perintah Readln dapat digunakan untuk membaca masukan dari pemakai dan
menyimpannya ke suatu variabel.
var
UmurKu : Byte;
Keterangan : String;
begin
Write('Berapa umur anda ? '); Readln(UmurKu);
Write('Komentar anda: '); Readln(Keterangan);
Writeln;
Writeln('Saya berumur ',UmurKu,' tahun');
Writeln(Keterangan);
end.
Bagaimana membatasi pencetakan tempat desimal untuk data Real type ?
Untuk menentukan jumlah tempat sebelum desimal dan sesudah desimal anda dapat
menggunakan :x:y setelah variabel yang akan dibatasi pencetakan nilainya, dimana x
adalah jumlah tempat sebelum desimal dan y adalah jumlah tempat setelah desimal.
Silahkan coba koding berikut :
var
Pi : Real;
Begin
Pi := 22/7;
Writeln('Bilangan Pi adalah ', Pi);
Writeln('Bilangan Pi adalah ', Pi:2:3);
end.
Indoprog 26
27. Algoritma & Pemrograman Hendra, S.T.
Proses pemrograman komputer
Ketika melakukan pemrograman dengan menggunakan bahasa tingkat tinggi, ada
beberapa operasi yang harus dilakukan. Mekanisme ini dikenal sebagai siklus edit-
compile-run. Mempelajari proses ini adalah berbeda dengan belajar bagaimana untuk
membuat program; anda harus menguasai proses ini—dan hal tersebut adalah penting.
Berikut ini adalah proses membuat sebuah program :
Edit
Ketika anda menulis sebuah program dalam bahasa tingkat tinggi, anda menulis perintah-
perintahnya dalam bentuk perintah bahasa pemrograman dengan menggunakan text editor.
Dokumen yang anda hasilkan pada tahap ini dikenal sebagai source code.
Compile
Setelah anda selesai menulis program anda, anda perlu meng-kompilasi-nya dengan
menggunakan suatu software yang disebut sebagai compiler. Kompiler mengubah source
code anda menjadi bahasa mesin. Jika program anda gagal di kompilasi (tejadi kesalahan
"grammatical" atau sytnax errors pada kode anda), anda harus meng-edit kembali kode
anda sampai dapat dikompilasi dengan benar.
Setelah suatu program berhasil dikompilasi artinya dia telah benar secara syntax, tetapi
masih dapat mengandung runtime error, atau logical error.
Run
Setelah program anda dikompilasi, anda dapat menjalankannya. Ketika anda menjalankan
program anda, hal yang pertama yang perlu anda lakukan adalah memeriksa apakah
programt tersebut berjalan seperti yang diharapkan, proses ini dikenal sebagai testing.
Pada tahapan ini dapat ditemui logical error ataupun runtime error.
Untuk menghilangkan runtime error atau logical error anda perlu kembali ke langkah
pertama, jadi inilah yang dikenal sebagai siklus edit-compile-run cycle sampai program
dapat berjalan dengan benar.
Latihan 1
1. What does structured programming mean ?
2. What is the line "uses" for ?
3. Pascal programs always begin with _______ and end with _______
4. What is the difference between "Write" and "Writeln" ?
5. How can we write two blank lines on the screen ?
Indoprog 27
28. Algoritma & Pemrograman Hendra, S.T.
6. Mention at least 5 variable type names with their range and types !
7. How can we get user's input ?
8. What is the difference between "Read" and "Readln" ?
9. Why can't we enter the value 0.75 to Word variables ?
10. How can we view and pause the screen after the program ran ?
11. How can we declare variables in Pascal ?
12. What key should we press to run a program in Borland Pascal 7.0 ?
13. How can we limit the fractional output to 3 places before and after the decimal point?
14. Explain how can the string be limited on display.
15. Can we enter the value "1/4" to Real variables ?
16. Explain what is edit-compile-run cycle in proses of programming ?
Latihan di Laboratorium
1. Make a program to write your name and your age on screen.
2. Make a program to input user's comment and print it.
3. Make a program to calculate the area of a circle. Limit the fractional part 3 places
before decimal point and 4 places after decimal.
program menghitung_luas_lingkaran;
var
r : integer;
luas : real;
begin
write('masukkan panjang jari-jari :');
readln(r);
luas := 3.14*r*r;
writeln('luas lingkaran adalah :',luas:8:4);
readln;
end.
4. Make a program to convert temperature from Celcius to Reamur, Kelvin, and
Fahrenheit.
Indoprog 28
29. Algoritma & Pemrograman Hendra, S.T.
Modul 2
Pada pertemuan sebelumnya kita telah belajar membuat program dengan pascal,
apakah program yang dapat dibuat hanya untuk perhitungan matematika
sederhana?
Tentu saja tidak, salah satu tujuan kita menggunakan komputer adalah membantu dalam
pengambilan keputusan, dan tentu saja keputusan yang terprogram.
Anda menyebutkan keputusan terprogram, apa artinya ?
Artinya komputer dapat mengambil keputusan untuk berdasarkan aliran logika yang telah
ditentukan sebelumnya yang dikenal sebagai algoritma.
Bagaimana penulisan perintah pengambilan keputusan pada Pascal ?
Salah satu perintah struktur pengambilan keputusan adalah :
If condition Then statement;
Dimana condition adalah sesuatu yang bernilai True atau False, dan statement adalah
perintah yang akan dijalankan.
Dapatkah anda memberikan sebuah contoh pemakaian perintah If ?
Baiklah, misalnya kita akan membuat program menentukan pembayaran berdasarkan
berdasarkan jumlah belanja, jika diatas 100000 (seratus ribu) mendapatkan potongan 3%,
maka programnya adalah sebagai berikut :
Uses Crt;
Var
Belanja : Real;
Begin
Clrscr;
Write('Jumlah belanja ? '); Readln(Belanja);
If Belanja > 100000 Then Belanja := Belanja * 0.97;
Writeln('Jumlah yang harus anda bayar ',Belanja:10:2);
Readln;
End.
Ok, saya mengerti bahwa pada prinsipnya Statement setelah Then akan dijalankan
kalau condition setelah If menghasilkan nilai True. Bagaimana kalau condition True
Statement1 dijalankan, dan sebaliknya Statement2 dijalankan ?
Untuk keputusan seperti ini, pascal menyediakan struktur pengambilan keputusan berikut:
If condition Then Statement1 Else Statement2;
Atau lebih baik ditulis sebagai
Indoprog 29
30. Algoritma & Pemrograman Hendra, S.T.
If conditon Then
Statement1
Else
Statement2;
Langsung saya buatkan contoh :
Uses Crt;
Var
Bilangan : Integer;
Begin
Clrscr;
Write('Masukan Bilangan ? '); Readln(Bilangan);
If (Bilangan Mod 2) = 0 Then
Writeln ('Genap')
Else
Writeln ('Ganjil');
Readln;
End.
He-he-he, bagaimana kalau keputusannya lebih dari 2, misalnya 4 Statement yang
harus dijalankan berdasarkan masing-masing condition ?
Oh, hal itu bisa dilakukan dengan merangkai beberapa struktur If, misalnya :
If condition1 Then
Statement1
Else
If condition2 Then
Statement2
Else
If condition3 Then
Statement3
Else
Statement4;
Jadi pada prinsipnya adalah terdiri dari tiga struktur If.
Misalnya kita akan membuat nilai huruf dari angka dengan kriteria 80 keatas mendapat A,
70 s/d 79 mendapat B, 60 s/d 69 mendapat C, 50 s/d 59 mendapat D, dan dibawah 49
mendapat E, maka dapat ditulis menjadi :
if mark>=80 then
grade:='A'
else { 79 or below goes here }
if mark>=70 then
grade:='B'
else { 69 or below goes here }
if mark>=60 then
Indoprog 30
31. Algoritma & Pemrograman Hendra, S.T.
grade:='C'
else { 59 or below goes here }
if mark>=50 then
grade:='D'
else { 49 or below goes here }
grade:='E';
Wah panjang banget, adakah cara lain untuk melakukan hal tersebut ?
Selain struktur kendali If, pascal juga menyediakan suatu struktur Case, yang akan
menjalankan statement berdasarkan range tertentu, adapun syntaxnya adalah sebagai
berikut :
Case variabel Of
Range1 : Statement1;
Range2 : Statement2;
Range3 : Statement3;
…
Else StatementN;
End;
Saya akan menggulangi contoh diatas dengan struktur Case :
Case mark of
80..100: grade:='A';
70..79 : grade:='B';
60..69 : grade:='C';
50..59 : grade:='D';
Else grade:='E';
End;
Lebih sederhana bukan.
Tetapi sesuatu hal yang perlu diperhatikan bahwa variabel yang akan dievaluasi dengan
Case haruslah Ordinal type.
Opss, hampir lupa, bagaimana kalau statement yang harus dijalankan pada masing-
masing condition lebih dari 1 ?
Ya, benar, sering kita perlu menjalankan beberapa Statement pada masing-masing
condition, untuk keperluan tersebut kita dapat memblok perintah-perintah tersebut dengan
Begin … End;
Contoh :
If Belanja > 100000 Then
Begin
Belanja := Belanja * 0.97;
Writeln ('Anda berhak mendapat potongan 3%');
End;
Indoprog 31
32. Algoritma & Pemrograman Hendra, S.T.
Pertanyaan yang terakhir, bagaimana penulisan condition yang terdiri dari
beberapa logika ?
Pertanyaan yang tepat sekali, untuk condition yang terdiri dari beberapa logika dapat anda
gabungkan dengan operasi AND, OR. Misalnya kita akan mencari tahun kabisat.
In the Gregorian calendar, which is the calendar used by most modern countries, the
following rules decides which years are leap years:
1. Every year divisible by 4 is a leap year.
2. But every year divisible by 100 is NOT a leap year
3. Unless the the year is also divisible by 400, then it is still a leap year.
Maka penulisan programnya menjadi :
If ((tahun Mod 4) = 0) And Not (tahun Mod 100 = 0)) Or ((tahun Mod 400) = 0)
Then
Writeln ('Tahun Kabisat !')
Else
Writeln ('Bukan Tahun Kabisat !');
Catatan Instruktur
Berdasarkan hasil pengamatan, kesalahan yang sering dilakukan oleh mahasiswa dalam
pemakaian struktur If…Then…Else, adalah didepan Else tidak ada pemakaian titik koma
(;).
Latihan 2
1. What does Pascal provide in order to perform conditional branching ?
2. Explain briefly each syntax !
3. How could we do nested branching ? Is it legal ?
4. Determine the output if i=5 and j=3 for the following excerpt :
if i<4 then writeln('Need more experience ...')
else
begin
writeln('Yes, you have it !');
if j<=3 then writeln('But, I would prefer better ones.')
else writeln('Superb !');
writeln('Congratulations !');
end;
writeln('Thank you for using this program !');
5. Make a program to ask ages. Classify the ages into these categories :
* age < 2 ==> "You are a baby !"
Indoprog 32
33. Algoritma & Pemrograman Hendra, S.T.
* 2 to age < 12 ==> "You are a kid !"
* 12 to age < 18 ==> "You are a teenager !"
* 18 to age < 24 ==> "You are a young adult !"
* 24 to age < 40 ==> "You are an adult !"
* 40 to age < 55 ==> "You are middle aged !"
* 55 to age < 65 ==> (Give comments yourself)
* age to 65 ==> (Give comments yourself)
6. Using ABC formula, make a program to solve aX2 + bX + C problem.
Indoprog 33
34. Algoritma & Pemrograman Hendra, S.T.
Modul 3
Hallo, ketemu lagi, pada pertemuan ini kita akan membahas tentang Looping.
Apa itu Looping
Secara sederhana looping diartikan sebagai proses berulang terhadap statement maupun
serangkaian statement lebih dari satu kali.
Aduh, kurang jelas, dapatkah anda memberikan contoh pemakaian looping?
Tentu saja anda telah menjalankan program pada pertemuan-pertemuan sebelumnya, dan
program tersebut berjalan hanya sekali, seterusnya selesai. Pernahkan anda bayangkan
kalau anda ingin membuat program yang dapat menanyakan kepada pemakai apakah dia
ingin ulang program tersebut sekali lagi ? Kalau ya maka program akan diulang kembali,
dalam hal ini looping akan berperan.
Ok, sekarang saya sudah punya gambaran. Apakah hal tersebut tidak dapat
dilakukan tanpa looping ?
Tentu saja bisa, tetapi akibatnya program kita menjadi panjang dan tidak efisien, coba
bayangkan misalnya anda ingin mencetak tulisan STMIK IBBI sebanyak 10 baris di layar,
bisa saja anda menggunakan perintah Writeln(' STMIK IBBI '); sebanyak 10 kali.
Bukankah lebih baik kita memerintahkan komputer untuk secara berulang menjalankan
perintah Writeln(' STMIK IBBI '); sebanyak 10 kali.
Benar juga ya, tetapi bagaimana struktur perintah perulangan pada pascal ?
Salah satu struktur perintah perulangan pada pascal adalah yang menggunakan counter.
For variabel := nilai awal To nilai akhir Do Statement;
Atau
For variabel := nilai awal DownTo nilai akhir Do Statement;
Dimana variabel harus ordinal type
Contoh :
Var I : Integer;
Begin
For I := 1 To 10 Do Writeln(' STMIK IBBI ');
End.
Tapi tadi saya lihat yang satu pakai To dan yang satu lagi pakai DownTo, apa sih
bedanya ?
Kita menggunakan To kalau nilai awal < nilai akhir, dan sebaliknya pakai DownTo
Contoh :
Indoprog 34
35. Algoritma & Pemrograman Hendra, S.T.
Var I : Integer;
Begin
For I := 10 DownTo 1 Do Writeln(' STMIK IBBI');
End.
Apa maksudnya variabel counter harus ordinal type ?
Maksudnya variabel counter harus berupa salah satu type seperti Byte, Shortint, Integer,
Longint, Char, Boolean.
Misalnya Ch adalah Char, maka dapat dilakukan
For Ch := 'a' to 'z' Do Write(Ch,' ');
Dan bahkan misalnya Bo adalah boolean, dapat juga
For Bo :=false to true do writeln(Bo);
Adakah struktur perulangan lainnya pada bahasa pascal ?
Ya, ada lagi, yaitu yang melakukan perulangan yang menggunakan condition.
While condition Do Statement;
Contoh :
I := 1;
While I <= 10 Do
Begin
Writeln(' STMIK IBBI');
I := I + 1;
End;
Apakah maksudnya I := I + 1; saya belum pernah melihat persamaan seperti ini
secara matematika !
Ya, memang hal ini tidak mungkin ada secara matematika, tetapi pada dunia
pemrograman artinya menaikan nilai variabel I sebesar 1. Supaya tidak membingungkan
pascal menyediakan suatu function Inc(variabel); sebagai penganti I:= I + 1;
Ok, sekarang saya sudah jelas dengan struktur looping pada bahasa pascal.
Tunggu dulu, masih ada satu struktur perulangan dengan condition, yaitu :
Repeat
Statement;
…
Until condition;
Contoh :
I := 1;
Repeat
Indoprog 35
36. Algoritma & Pemrograman Hendra, S.T.
Writeln(' STMIK IBBI');
Inc(I);
Until I <= 10;
Kalau begitu ya sama saja dengan yang While, bukankah begitu ?
Tentu saja ada perbedaannya, coba perhatikan contoh berikut
I := 11;
While I <= 10 Do
Begin
Writeln(' STMIK IBBI');
Inc(I);
End;
Dan
I := 11;
Repeat
Writeln(' STMIK IBBI');
Inc(I);
Until I <= 10;
Pada contoh 1, tidak akan mencetak apa-apa, sedangkan pada contoh 2 akan mencetak
tulisan STMIK IBBI minimal 1 kali.
Pada prinsipnya struktur While melakukan pemeriksaan awal, dan struktur Repeat
melakukan pemeriksaan di akhir.
Bagaimana kalau kita ingin keluar dari pertengahan looping walaupun conditionnya
masih terpenuhi ?
Mudah saja, gunakan perintah Break, dan anda juga dapat menggunakan perintah
Continue untuk kembali ke While ataupun Repeat.
Contoh :
I := 1;
While I <= 10 Do
Begin
Writeln(' STMIK IBBI');
I := I + 1;
Break;
End;
Akan mencetak STMIK IBBI sekali saja, karena begitu ketemu perintah Break, maka
proses keluar dari looping. Bagaimana dengan yang berikut ini :
I := 1;
While I <= 10 Do
Begin
Writeln(' STMIK IBBI');
I := I + 1;
Indoprog 36
37. Algoritma & Pemrograman Hendra, S.T.
Continue;
End;
Catatan Instruktur
Berdasarkan hasil pengamatan, kesalahan yang sering dilakukan oleh mahasiswa dalam
pemakaian struktur For…Do, dan While…Do adalah adanya pemakaian titik koma
dibelakang Do, sehingga menyebabkan looping tidak menjalankan statement sebagaimana
yang diharapkan.
Contoh :
For I := 1 To 10 Do;
Writeln(' STMIK IBBI ');
Akan menyebabkan tulisan STMIK IBBI hanya dicetak satu kali, hal ini terjadi karena
looping menjalankan apa-apa.
Indentasi pada penulisan program Pascal yang menggunakan perintah-perintah terstruktur
adalah sangat penting, terutama dalam program yang besar, pemakaian indentasi akan
membantu pemeriksaan kelengkapan block begin…end, serta memudahkan pembacaan
program.
Latihan 3
1. Explain the characteristics of all three loop syntaxes in Pascal !
2. Explain the differences between them !
3. Suppose the output is :
1
Indoprog 37
39. Algoritma & Pemrograman Hendra, S.T.
end.
program jawaban_soal_no_5;
var
n,i,j : byte;
begin
write('jumlah data :'); readln(n);
for i := 1 to n do
begin
for j := 1 to i do
write (i);
writeln;
end;
readln;
end.
program jawaban_soal_no_6;
var
n,l,r,t,b : byte;
begin
write('jumlah data :'); readln(n);
r := n;
for l := 1 to n do
begin
b := n;
for t := 1 to n do
begin
if (l <= r) and (l <= t) and (l <= b) then
write(l)
else if (r <= l) and (r <= t) and (r <= b) then
write(r)
else if (t <= l) and (t <= r) and (t <= b) then
write(t)
else
write(b);
b := b - 1;
end;
writeln;
r := r - 1;
end;
readln;
end.
9. Make fibonacci series. If input is n, write all the series up to n numbers :
Input : 10
Output : 1 1 2 3 5 8 13 21 34 55
The first and the second numbers of fibonacci series are 1. The third is
the sum of the first and the second. The fourth is the sum of the second
and the third. The fifth is the sum of the third and the fourth, so on.
program cetak_suku_fibonacci;
var
Indoprog 39
40. Algoritma & Pemrograman Hendra, S.T.
n,i, n_1, n_2, n_i : byte;
begin
write('jumlah suku :'); readln(n);
n_1 := 1;
n_2 := 1;
for i := 1 to n do
if i = 1 then write(n_1:4)
else if i = 2 then write(n_2:4)
else
begin
n_i := n_1 + n_2;
write(n_i:4);
n_1 := n_2;
n_2 := n_i;
end;
readln;
end.
10. Make a factor tree.
Input : 100 Input : 1001
Output : 100 Output : 1001
/ /
2 50 7 143
/ /
2 25 11 13
/ Input : 5
5 5 Output : 5 is a prime !
Indoprog 40
41. Algoritma & Pemrograman Hendra, S.T.
Modul 4
Hallo, ketemu lagi, pada pertemuan ini kita akan belajar tentang array.
Apa sih Array itu ?
Baiklah, array adalah variabel yang dapat menampung sejumlah data yang ditandai
dengan suatu index pada masing-masing elemennya.
Contoh :
Var
Nilai : Array [1..10] of Integer;
Dalam hal ini variabel Nilai adalah suatu array yang memiliki 10 element, yaitu Nilai[1],
Nilai[2], Nilai[3], …, Nilai[10]. Pada masing-masing elemennya dapat menampung satu
nilai Integer.
Contoh :
Nilai[1] := 60;
Nilai[2] := 75;
…
Nilai[10] := 90;
Writeln(Nilai[1]);
Writeln(Nilai[2]);
…
Writeln(Nilai[10]);
Kalau begitu kita juga dapat melakukan hal yang sama dengan memesan 10
variabel, misalnya Nilai1, Nilai2, Nilai3, dst, dapatkah kira-kira anda memberikan
contoh keunggulan dari pemakaian Array ?
Ya, memang hal tersebut dapat dilakukan, tetapi sesuatu yang perlu kita perhatikan adalah
kemudahan pengolahan data Variabel tersebut, misalnya kita akan menjumlahkan total
nilai dari variabel tersebut tanpa array maka dapat ditulis :
Total :=
Nilai1+Nilai2+Nilai3+Nilai4+Nilai5+Nilai6+Nilai7+Nilai8+Nilai9+Nilai10;
Dan kalau pakai array :
Total := 0;
For I:= 1 To 10 Do Total := Total + Nilai[I];
Dan bagaimana kalau ada elemennya ada 100. Bisa anda bayangkan.
Adakah bentuk array yang lain, selain yang anda sebutkan ?
Indoprog 41
42. Algoritma & Pemrograman Hendra, S.T.
Ada, array yang telah kita sebutkan tersebut adalah array 1 dimensi, kita dapat juga
membuat multi dimensi sesuai dengan kebutuhan, contoh :
Var
Matrix : Array [1..3,1..3] Of Integer;
Adalah contoh array 2 dimensi, yang terdiri dari elemen Matrix[1,1], Matrix [1,2],
Matrix[1,3], Matrix[2,1], Matrix[2,2], Matrix[2,3], Matrix[3,1], Matrix[3,2], dan
Matrix[3,3].
Jadi jumlah elemennya adalah 3 x 3 = 9 elemen.
Dapatkah kita buat 3 Dimensi, 4 Dimensi, dst ?
Oh, bisa, hal ini tergantung bagaimana kita mendeklarasikan variabel array tersebut.
Adakah hal-hal yang khusus dalam mendeklarasikan array pada Pascal ?
Ada, anda bisa mendeklarasikan array seperti :
x : Array[3..10] of Integer; {elemennya x[3], x[4], x[5], …, x[10]}
idx : Array['A'..'Z'] of Integer;
a : Array['a'..'z'] of Byte;
n : Array[byte] of Integer; { The same as array[0..255] of integer; }
Saya bingung dengan yang Array ['A'..'Z'] of Integer, bagaimana kira-kira cara
pemakaiannya ?
Cara pemakaiannya seperti array bisanya, Cuma indexnya ditulis sebgai character, contoh:
Idx['A'] = 100;
Dan kalau pakai looping :
For c:='A' to 'Z' do
idx[c]:= 0;
Latihan 4
1. What is an array ?
2. What is it for ?
3. How is the declaration ?
4. Explain how to use it !
5. How can we declare two or more dimension in array and explain the usage.
6. Suppose we have n : array[char] of byte; Is it valid ? Explain.
Indoprog 42
43. Algoritma & Pemrograman Hendra, S.T.
Latihan di Laboratorium
1. Make a Pascal triangle, example :
Input : 7
Output : 1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
1 5 10 10 5 1
1 6 15 20 15 6 1
program segitiga_pascal;
var
baris_kini,
baris_lalu : array [0..99] of integer;
n,i,j : byte;
begin
write('jumlah baris :'); readln(n);
baris_lalu[0] := 0;
baris_lalu[1] := 1;
baris_lalu[2] := 0;
for i := 1 to n do
begin
for j := 1 to i do
begin
baris_kini[j] := baris_lalu[j-1]+baris_lalu[j];
write(baris_kini[j]:3);
end;
baris_lalu := baris_kini;
writeln;
end;
readln;
end.
2. Suppose you have an array 100 elements of random numbers. Find its average, maxi-
mum and minimum value of the elements.
Program mencari_nilai_minimum_dari_100_nilai_random;
const
jd = 100;
var
arr : array [1..100] of integer;
i : byte;
min : integer;
begin
randomize;
for i := 1 to jd do
arr[i] := random(1000);
min := arr[1];
for i := 2 to jd do
if arr[i] < min then min = arr[i];
writeln('Nilai minimum :', min);
readln;
Indoprog 43
44. Algoritma & Pemrograman Hendra, S.T.
end.
4. Make matrix operations : addition, subtraction, multiplication.You may limit the
maximum dimension of the matrix.
program Penjumlahan_dua_matrix;
var
jb,jk,i,j : byte;
arr1,arr2,arr3 : array[1..10,1..10] of integer;
begin
write('Jumlah baris :'); readln(jb);
write('Jumlah kolom :'); readln(jk);
writeln('Data Matrix 1');
for i := 1 to jb do
for j := 1 to jk do
begin
write('Data ke ',i,'-',j,':');
readln(arr1[i,j]);
end;
writeln('Data Matrix 2');
for i := 1 to jb do
for j := 1 to jk do
begin
write('Data ke ',i,'-',j,':');
readln(arr2[i,j]);
end;
{penjumlahan matrix}
for i := 1 to jb do
for j := 1 to jk do
arr3[i,j] := arr1[i,j] + arr2[i,j];
writeln('Hasil penjumlahan');
for i := 1 to jb do
for j := 1 to jk do
begin
writeln('Data ke ',i,'-',j,':',arr3[i,j]);
end;
readln;
end.
Modul 5
Pada pertemuan-pertemuan sebelumnya kita telah belajar dasar-dasar pembuat program
dengan Pascal, pada pertemuan ini kita akan membahas tentang Algortima pengurutan
data (Sort).
Salah satu masalah pengolahan data dengan menggunakan komputer adalah bagaimana
menyajikan data dalam keadaan berurut, dan tentu saja untuk pengurutan data tersebut
dibutuhkan algoritma. Dewasa ini para ahli matematika dan komputer telah
mengembangkan berbagai algoritma pengurutan data seperti :
• Bubble Sort - O(n²)
• Selection Sort - O(n²)
Indoprog 44
45. Algoritma & Pemrograman Hendra, S.T.
• Insertion Sort - O(n²)
• Shell Sort - O(n1.25)
• Quick Sort - O(n log n)
Tetapi sebelum kita mulai dengan pengurutan data, kita akan membahas tentang pseudo
random generator (PRNG).
Apa itu PRNG ?
Pseudorandom number5 generator (PRNG) adalah algoritma yang ketika dijalankan
akan menghasilkan suatu urutan dari bilangan, dimana elemen-elemennya diperkirakan
tidak berkaitan satu sama yang lain.
Sesuatu hal yang perlu anda ketahui bahwa PRNG bukankan bilangan random, tetapi
diperkirakan mendekati bilangan random.
Berdasarkan observasi John von Neumann 1951 bahwa "Anyone who considers
arithmetical methods of producing random digits is, of course, in a state of sin".
Mersenne Twister adalah salah satu PRNG yang dibuat pada tahun 1997 oleh Makoto
Matsumoto dan Takuji Nishimura, yang mana bilangan random dapat dihasilkan dengan
sangat cepat dan berkualitas.
Vj+1 = A · Vj + B (mod M)
Bilangan Random pada Pascal
Pada Pascal telah tersedia procedure dan function untuk mengenerate bilangan random
yaitu fungsi Random, dan procedure Randomize.
Random dan randomize
Kedua berfungsi menghasilkan bilangan random, bilangan random sering digunakan untuk
mensimulasikan dunia nyata yang penuh dengan ketidakpastian.
Randomize digunakan untuk menginisialisasi suatu bibit random secara acak yang cukup
dipanggil sekali saja.
Random digunakan untuk mendapatkan bilangan random(bilangan), yang akan
menghasilkan bilangan 0 s/d bilangan-1. Misalnya num:=random(50); berarti variabel
num mungkin berisi salah satu bilangan 0 s/d 49.
Cobalah contoh berikut :
var
5
Pseudorandom numbers are a critical part of modern computing, from cryptography to the Monte Carlo
method for simulating physical systems.
Indoprog 45
46. Algoritma & Pemrograman Hendra, S.T.
i : byte;
begin
randomize;
for i:=1 to 10 do
write(random(30),' ');
end.
Coba hilangkan "randomize", dan jalankan beberapa kali, bagaimana dengan bilangan
yang dihasilkan apakah sama pada setiap percobaan ?
Jadi, selalu gunakan "randomize" untuk menjamin kerandoman bilangan yang dihasilkan
pada setiap run.
Algoritma SORT
Pada computer science dan matematika, algoritma sort adalah algoritma yang membuat
elemen dalam suatu daftar menjadi berurutan.
Algoritma Sort yang dipergunakan dalam computer science diklasifikasikan sebagai
berikut :
• Kerumitan dalam komputasi (prilaku buruk, sedang dan terbaik) dalam arti ukuran
dari elemen (n). Jelasnya, prilaku baik adalah O(n log n) dan prilaku buruk adalah
O(n2)6
• Memori yang digunakan (dan pemakain sumber daya komputer lainnya)
• Stabilitas: pengurutan yang stabil akan mempertahankan urutan relatif antar
elemen-elemen yang memiliki kunci (key) yang sama. Algoritma sort stabil jika
dua record R dan S dengan kunci yang sama dan R berada pada posisi sebelum S ,
dan R harus tetap berada sebelum S setelah di sort. (Algoritma sort yang tidak
stabil dapat dibuat stabil dengan menambah angka tambahan pada key untuk
mempertahankan posisi)
Bubble Sort
Mungkin merupakan cara yang paling sederhana untuk mengurut data dalam suatu array,
tetapi merupakan cara yang lambat ! Ide dasarnya adalah membandingkan dua objek yang
bersebelahan (neighboring), menganti posisi keduanya juga berada pada urutan yang
tidak sesuai.
Suatu array a, dengan n elemen, breikut ini adalah kode dalam Pascal untuk bubble sort:
for i:= jd-1 downto 1 do
6
Big O notation (with a capital letter O, not a zero), also called Landau's symbol, is a symbolism used in
complexity theory, computer science, and mathematics to describe the asymptotic behavior of functions. It
indicates how fast a function grows or declines.
Indoprog 46
47. Algoritma & Pemrograman Hendra, S.T.
for j:= 1 to i do
if a[j] > a[j+1] then
begin
t:=a[j];
a[j]:=a[j+1];
a[j+1]:=t;
end;
Sebagaimana yang kita lihat, algoritma tersebut terdiri dari dua loop bersarang (nested
loops). Index j pada looping sebelah dalam menelusuri elemen pada array,
membandingkan isi pada array (at j and j+1), sedangkan loop sebelah luar menyebabkan
loop sebelah dalam berulangan menelusuri array.
Setelah loop pertama, elemen terbesar pasti berada pada posisi akhir dari array.
Setelah loop kedua, elemen nomor dua terbesar akan berada pada posisinya, dan
seterusnya.
Hal inilah yang menyebabkan loop sebelah dalam berkurang (i) pada setiap langkah,
karena kita tidak perlu lagi memeriksa elemen yang terbesar itu berulang.
Insertion Sort
Algoritma ini bekerja dengan menyisipkan data ke posisinya pada suatu daftar yang sudah
berurut. Algoritma ini akan berprilaku terbaik pada daftar yang sudah berurut O(n).
Insertion Sort merupakan algoritma tercepat untuk jumlah elemen yang sedikit, terutama
dibawah 10 elemen.
for i:= 2 to jd do
begin
idx = I;
idxvalue = a[idx];
while idxvalue < a[idx-1] do
begin
a[idx] := a[idx-1];
idx := idx – 1;
if idx = 1 then Exit;
end;
a[idx] := idxvalue;
end;
Selection sort
Selection sort bekerja dengan mencari data yang lebih kecil dan memindahkan data
tersebut ke posisinya. Algoritma sort ini membutuhkan O(n2).
for i := 1 to n do
begin
minidx := i;
for j := (i+1) to n do
if a[j] < a[minidx] then
minidx := j;
t := a[i];
Indoprog 47
48. Algoritma & Pemrograman Hendra, S.T.
a[i] = a[minidx];
a[minidx] = t;
end;
Shell Sort7
Algoritma ini ditemukan oleh Donald Shell. Algoritma berprilaku baik kalau data pada
array dalam keadaan hampir berurut. Konsepnya adalah membandingkan data dengan
jarak tertentu dalam array
for gap:=(jd div 2) downto 1 do
for i:=1 to (jd - gap) do
if a[i]> a[i+gap] then
begin
t:= a[i];
a[i] := a[i+gap];
a[i+gap]:=t;
End;
Misalnya kita ada 8 data, maka gap akan mulai dari 4 s/d 1.
Pada gap = 4, maka :
Bandingkan data 1 dengan 5, 2 dengan 6, 3 dengan 7, 4 dengan 8.
Pada gap =3, maka :
Bandingkan data 1 : 4, 2 : 5, 3 : 6, 4 : 7, 5 : 8
Pada gap = 2, maka :
Bandingkan data 1 : 3, 2 : 4, 3 : 5, 4 : 6, 5 : 7, 6 : 8
Pada gap = 1, maka :
Bandingkan data 1 : 2, 2 : 3, 3 : 4, 4 : 5, 5 : 6, 6 : 7, 7 : 8
Latihan 5
1. What is sort algorithm ?
2. Suppose we have an array contain 8 data (7,8.5,4,2,1,3,6), please write down step
by step data changing when sorting using Bubble Sort, Insertion Sort, Shell Sort !
3. Explain how to generate random number in Pascal !
Latihan di Laboratorium
1. Write a program to generate 10000 random number, and then sort it using Bubble
Sort, Insertion Sort, Shell Sort, and Selection Sort examine how many data
comparing and data exchange.
program analisa_jumlah_perbandingan_dan_pergantian_data_bubble_sort;
var
arr : array[1..1000] of integer;
i,j,
jb,jg,temp: integer;
begin
7
Shell sort (or Shellsort) is one of the oldest sorting algorithms, named after its inventor D.L. Shell [Sh].
Indoprog 48
49. Algoritma & Pemrograman Hendra, S.T.
randomize;
for i := 1 to jd do
arr[i] := random(1000);
jb := 0;
jg := 0;
for i := (jd-1) downto 1 do
for j := 1 to i do
begin
jb := jb + 1;
if arr[j] > arr[j+1] then
begin
jg := jg + 1;
temp := arr[j];
arr[j]:=arr[j+1];
arr[j+1]:=temp;
end;
end;
writeln('Jumlah perbandingan :',jb);
writeln('Jumlah pergantian :',jg);
readln;
end.
Indoprog 49
50. Algoritma & Pemrograman Hendra, S.T.
Modul 6
Saya yakin anda sudah mengerti beberapa algoritma sort, sebagai seorang sarjana
komputer, anda harus mengerti dan mengetahui kelemahan dan kelebihan dari masing-
masing algoritma tersebut.
Selanjutnya kita akan melihat algoritma pencarian (Search Algorithms).
Apa itu Search Algorithms ?
Search algorithms adalah algoritma untuk mencari suatu elemen dalam suatu himpunan
elemen berdasarkan key tertentu.
Algoritma search yang paling sederhana adalah linier search, dimana memiliki O(n), tetapi
dapat digunakan pada daftar yang tidak berurut.
Algoritma yang lebih baik adalah binary search yang berjalan pada O(log(n)). Tentu saja
secara nyata lebih baik dari linier search untuk jumlah data yang besar, tetapi
membutuhkan kondisi data dalam keadaan berurut.
Linier Search
Pada bidang computer science, algoritma search dikenal juga sebagai sequential search.
Cara kerjanya adalah memeriksa setiap elemen dalam daftar sampai menemukan yang
dicari. Linier search berjalan secara O(n), kalau data terdistribusi secara acak, dan rata-rata
n/2 perbandingan diperlukan. Kasus terbaik adalah kalau nilai yang dicari berada diposisi
pertama, kasus yang terburuk adalah kalau nilai yang dicari tidak ada dalam daftar,
sehingga dibutuhkan n perbandingan.
Keunggulan dari linier search adalah dapat digunakan pada daftar yang tidak berurut.
i := 1;
continue := true;
while (i <= jd) and continue do
begin
if a[i] = findvalue then
continue := false;
i := i + 1;
end;
if i <= jd Then
writeln('data found at : ',i)
else
writeln('data not found');
Binary Search
Binary Search mengasumsikan data adalah dalam keadaan berurut dan mengambil
manfaat dari karakteristik tersebut. Binary search adalah algoritma logaritmik dan
Indoprog 50
51. Algoritma & Pemrograman Hendra, S.T.
berjalan secara O(log n). Khususnya diperlukan 1 + log2 N iterasi untuk mendapatkan
jawaban, dan lebih cepat dari linier search.
continue := true;
while (first <= last) and continue do
begin
mid := (first + last) Div 2;
if (findvalue > arr[mid]) then
begin
jb := jb + 1;
first := mid + 1;
end
else
if (findvalue < arr[mid]) then
begin
jb := jb + 1;
last := mid - 1
end
else
continue := false;
end;
if first > last then
writeln('data not found')
else
writeln('data found at :',mid);
Interpolation search
Menyerupai bagaimana orang mencari sesuatu pada buku telepon. Dari pada
membandingkan data satu persatu seperti pada linier search, tentu saja pencarian
didasarkan kepada perkiraan letak data dari posisi data sekarang.
Berbeda dengan binary search yang selalu membagi sisa data separuh. Interpolation
search membuat perbandingan yang lebih sedikit dari O(log(log(N)), tidak selamanya
interpolation search lebih cepat dari binary search.
Seperti binary search, interpolation search membutuhkan data dalam keadaan berurut, dan
interpolation search bekerja dengan asumsi data terdistribusi merata.
low := 1;
high := jd;
while (a[high] >= findvalue) and (findvalue > a[low]) do
begin
j:= trunc((findvalue-a[low])/(a[high]-a[low])*(high-low))+low;
if findvalue > a[j] then
low := j+1
else
if findvalue < a[j] then
high := j-1
else
low := j;
Indoprog 51
52. Algoritma & Pemrograman Hendra, S.T.
end;
if a[low] = findvalue then
writeln('data found at :',low);
else
writeln('data not found')
Latihan 6
1. What is search algorithm ?
2. Explain how linear search work !
3. Explain how binary search work !
4. Explain how interpolation search work !
5. Can we use binary search in not ordered list ? How about linier search ? Why ?
6. Explain when interpolation search is better than binary search !
7. Suppose we have an array contain 10 data (1,3,6,7,8,9,10,11,12,13), please write
down step by step data comparing data which find value is 12 using Binary Search
and Interpolation Search !
Latihan di Laboratorium
1. Write a program to generate 10000 random number, and then sort it Shell Sort,
examine how many data comparing to find a value using linier search, binary
search and interpolation search.
program analisa_binary_search;
const
jd = 10000;
var
arr : array [1..10000] of integer;
j,t,gap,
findvalue,
first,last,
mid,jb : integer;
continue : boolean;
begin
{generate 10000 bilangan random}
randomize;
for j := 1 to jd do
arr[j] := random(jd);
{urut data dengan algoritma shell sort}
for gap := (jd div 2) downto 1 do
for j := 1 to (jd-gap) do
if arr[j] > arr[j+gap] then
begin
t := arr[j];
arr[j] := arr[j+gap];
arr[j+gap] := t;
end;
{tanya data yang dicari}
Indoprog 52
53. Algoritma & Pemrograman Hendra, S.T.
write('Nilai yang dicari 0-10000 :');
readln(findvalue);
{pencarian data dengan binary search}
first:=1;
last :=jd;
jb := 0;
continue := true;
while (first <= last) and continue do
begin
mid := (first + last) Div 2;
if (findvalue > arr[mid]) then
begin
jb := jb + 1;
first := mid + 1;
end
else
if (findvalue < arr[mid]) then
begin
jb := jb + 1;
last := mid - 1
end
else
continue := false;
end;
if first > last then
writeln('data not found')
else
writeln('data found at :',mid);
writeln('jumlah perbandingan data :',jb);
readln;
end.
Modul 7
Pada contoh maupun tugas modul-modul sebelumnya kita telah banyak
menggunakan string (pada saat writeln), apakah sebenarnya string pada Pascal ?
Sebenarnya string adalah suatu array dari char, maksudnya anda dapat mengambil masing-
masing character dari suatu string dengan memperlakukannya sebagai elemen dari array.
Contoh :
Var
Nama : String;
Begin
Nama := 'Computer';
Writeln(Nama[1]);
Writeln(Nama[8]);
Nama[1] := 'K';
Writeln(Nama);
Indoprog 53
54. Algoritma & Pemrograman Hendra, S.T.
End.
Maka Nama[1] adalah huruf 'C', dan Nama[8] adalah huruf 'r'.
Sedangkan Nama[1] := 'K'; akan menyebabkan string nama berubah menjadi 'Komputer'.
Oh, begitu saja, jadi kita sudah selesai hari ini ?
Tunggu dulu, sebenarnya kalau kita dapat juga mendeklarasikan string dengan :
Var
Nama : String;
Alamat : String[40];
Dalam hal ini variabel Nama dapat menampung maksimal 255 character, sedangkan untuk
variabel Alamat dapat menampung maksimal 40 character.
Jadi kita dapat mendeklarasikan variabel string dengan panjang tertentu, berapa
panjang maksimal yang diperbolehkan ?
Sebenarnya kalau kita tidak menentukan panjang string ketika deklarasi, maka otomatis
pascal menyediakan 255 character untuk string kita, dalam hal ini merupakan panjang
maksimal yang diperbolehkan untuk suatu type data string.
Bolehkan kita memesan variabel array string ?
Boleh, anda dapat melakukannya.
Contoh :
NamaSiwa : Array[1..10] Of String[30];
Pada program Hangman, saya melihat adanya pemakaian fungsi Length, Pos, apa
fungsinya, dan adakah yang lain ?
Ya, itu adalah fungsi bantu yang disediakan oleh Pascal untuk melakukan pengolahan data
string,
Adapun fungsi bantu untuk string adalah sebagai berikut :
Length, mendapatkan panjang string
Syntax : length(s)
Contoh : : n:=length(s);
Misalnya s:='Apa kabar ?'; n akan berisi 11.
Copy, mendapatkan bagian dari suatu string.
Syntax : copy(s,from,howmuch)
Contoh : : st:=copy(s,5,5);
Indoprog 54
55. Algoritma & Pemrograman Hendra, S.T.
Menggambil 5 character mulai posisi ke 5
Misalnya s:='Apa kabar ?'; st akan berisi 'kabar'.
Pos, mengambil posisi substring dari suatu string.
Syntax : Pos(substr,s)
Contoh : : n:=pos('kabar','Apa kabar ?'); { n:=5; }
Jika substring tidak ditemukan, maka akan mengembalikan 0.
Val, mengkonversi string menjadi numerik.
Syntax : val(strvar,numvar,errorcode)
strvar adalah suatu variabel string yang akan di konversi
numvar adalah variabel integer atau real
errorcode adalah variabel integer yang akan berisi nilai kesalahan, jika berisi 0 sukses.
Contoh : :
Var
s : string;
e : integer;
r : real;
Begin
Write('Enter a number : '); readln(s);
val(s,r,e);
if e<>0 then
writeln('Error at position : ',e);
else
writeln('That was : ',r:4:3);
end.
Str, mengkonversi numerik menjadi string.
Syntax : (numvar,strvar)
Contoh : :
var
s : string;
i : integer;
begin
write('Input an integer : '); readln(i);
str(i,s);
writeln('That was : ',s);
end.
Jika anda bekerja dengan type real, anda perlu melakukan pemformatan sebelum konversi
ke string.
Indoprog 55
56. Algoritma & Pemrograman Hendra, S.T.
Contoh : :
var
s : string;
r : real;
begin
write('Input a real : '); readln(r);
str(r:4:3,s);
writeln('That was : ',s);
end.
Concat, mengabung dua string atau lebih
Syntax : concat(s1,s2,...,sn)
Contoh : st:=concat(s1,s2);
Jika s1 adalah 'STMIK', dan s2 adalah 'IBBI', maka st menjadi 'STMIKIBBI'
Sebenarnya kita juga dapat menggunakan operator + untuk mengabung string.
Contoh : st:=s1 + s2; {adalah sama dengan st:=concat(s1,s2);}
Insert, menyisip suatu string kedalam string lain dari posisi tertentu
Syntax : insert(source,target,index)
Contoh : :
var
s1, s2 : string;
begin
s1:='not ';
s2:='I do love you';
insert(s1,s2,6);
writeln(s2); { I do not love you }
end.
Delete, menghapus sejumlah character dari string mulai posisi ke i
Syntax : delete(s,i,n);
var
s : string;
begin
s:='I am not responsible for that !';
delete(s,6,3);
writeln(s); { I am responsible for that }
end.
Indoprog 56
57. Algoritma & Pemrograman Hendra, S.T.
Latihan 7
1. What is a string ?
2. Explain what the relationsip between string and character in pascal !
2. What is the maximum length of a string ?
3. How is the declaration ?
4. Explain how to merge two string, using function and operator !
5. Explain how to convert string to value and vice versa !
6. Explain how to know the length of a string !
Latihan di laboratorium
8. Make programs for serveral task like this:
a. Make all letters in a string upcase.
b. Make all letters in a string lowcase.
c. Count the number of word in a sentence
program ubah_kalimat_menjadi_huruf_kecil;
var
kalimat : string;
i : byte;
begin
write('Ketik sebuah kalimat :');
readln(kalimat);
for i := 1 to length(kalimat) do
if kalimat[i] in ['A'..'Z'] then
kalimat[i] := chr(ord(kalimat[i])+32);
writeln(kalimat);
readln;
end.
9. Make a text animation. Display a sentence in the center of the screen. And scroll it Left
To Right !
program putar_kiri_ke_kanan;
Uses CRT;
Indoprog 57
58. Algoritma & Pemrograman Hendra, S.T.
var
kalimat : string;
i : byte;
begin
write('Ketik sebuah kalimat :');
readln(kalimat);
repeat
gotoxy(13, (80-len(kalimat)) div 2);
write(kalimat);
kalimat:=copy(kalimat,length(kalimat),1) +
copy(kalimat,1,length(kalimat)-1);
until keypressed;
readln;
end.
10. Make a text animation. Display a sentence in the center of the screen. And scroll it
Right To Left !
Latihan di rumah
Make a simple calculator that can perform addition, substraction User input the equation
then press enter. You should give the answer. Example :
Input : 5+10
Output : 15
program kalkulator_ekspresi;
var
ekspresi : string;
temp1,temp2 : string;
val1,val2,
result : real;
numcode : integer;
begin
write('masukkan ekspresi penjumlahan :');
readln(ekspresi);
temp1:=copy(ekspresi,1,pos('+',ekspresi)-1);
temp2:=copy(ekspresi,pos('+',ekspresi)+1,length(ekspresi)-
pos('+',ekspresi));
val(temp1,val1,numcode);
val(temp2,val2,numcode);
result := val1 + val2;
writeln('Hasil perhitungan :',result:10:2);
readln;
Indoprog 58