Bab 1 PARADIGMA PEMROGRAMAN DAN MEKANISME EKSEKUSI PROGRAM

Bab ini akan memperkenalkan paradigma pemrograman dan mekanisme eksekusi program. Di sini akan dijelaskan secara singkat apa itu paradigma pemrograman, beberapa contoh paradigma yang ada, serta sekilas mengenai paradigma prosedural. Di bagian berikutnya dibahas mengenai bagaimana suatu program dieksekusi di komputer, serta peran interpreter, kompilator, dan debugger dalam pembuatan program.

1.1

Paradigma Pemrograman

Paradigma pemrograman adalah bagaimana cara pandang kita terhadap penyelesaian masalah pemrograman (atau sudut “serang” kita dalam menyelesaikan suatu masalah pemrograman). Ada banyak cara untuk menyelesaikan suatu masalah, sehingga ada banyak paradigma yang ada. Beberapa contoh paradigma pemrograman yang ada saat ini adalah: prosedural, fungsional, deklaratif, dan objek. Secara singkat dapat dikatakan bahwa: • paradigma prosedural memandang penyelesaian masalah sebagai hasil dari serangkaian langkah yang menyelesaikan sub masalah • paradigma fungsional memandang penyelesaian masalah sebagai komposisi dan aplikasi fungsi yang memetakan masalah ke jawaban • paradigma deklaratif memandang penyelesaian masalah sebagai hasil inferensi terhadap fakta dan aturan yang diberikan • paradigma objek memandang penyelesaian masalah sebagai hasil interaksi dari kelas yang membentuk objek (objek dalam konsep ini merupakan representasi objek di dunia nyata) Buku ini tidak akan membahas secara detail masing-masing paradigma, paradigma yang telah disebutkan sekilas di atas hanya untuk memberikan gambaran bahwa solusi untuk suatu masalah

2

Konsep Dasar Pemrograman Prosedural

tidak harus dilakukan secara prosedural. Beberapa paradigma juga boleh digabung atau dipakai bersama untuk menyelesaikan masalah. Paradigma prosedural merupakan paradigma yang biasanya diajarkan pertama karena sangat dekat dengan mekanisme eksekusi mesin (secara hardware, komputer bekerja secara sekuensial atau berurutan). Dalam paradigma prosedural masalah diselesaikan dengan menggunakan langkahlangkah yang berurutan yang disebut sebagai suatu algoritma

1.2

Mekanisme Eksekusi Program

Komputer merupakan benda yang “bodoh” yang hanya bisa menjalankan instruksi dalam bahasa mesin, bukan bahasa manusia. Komputer yang pertama diprogram langsung dengan menuliskan bahasa mesin ke dalam komputer, seiring berlalunya waktu, hal itu dirasakan tidak efisien sehingga diciptakanlah bahasa assembly, berupa kata-kata singkat yang lebih mudah diingat dibanding dengan kode yang harus dimasukkan langsung. Bahasa assembly sebenarnya tidak jauh dari bahasa mesin namun sudah cukup untuk membantu pemrogram menulis program dengan lebih mudah. Bahasa assembly ini disebut sebagai bahasa tingkat rendah. Pada tahun enampuluhan, para ahli mulai banyak membuat bahasa yang lebih mudah dimengerti oleh manusia, bahasa tersebut disebut sebagai bahasa tingkat tinggi. Ada banyak bahasa yang diciptakan, bahkan sangat banyak, namun sedikit yang bertahan hingga saat ini. Tapi semua bahasa tersebut memiliki kesamaan yaitu bahwa mereka tidak bisa langsung dimengerti oleh komputer sehingga perlu diterjemahkan ke dalam bahasa mesin. Penerjemahan dapat dilakukan dengan menggunakan program (yang pada awalnya dulu ditulis dengan bahasa assembly) yang bisa berupa sebuah interpreter atau sebuah kompilator (atau gabungan dari keduanya). Program penerjemah tersebut akan memeriksa sintaks (format penulisan) apakah benar atau tidak, lalu menerjemahkan program tersebut ke dalam bahasa mesin.

1.2.1

Interpreter

Interpreter adalah suatu program komputer yang mampu menerjemahkan program dari bahasa tingkat tinggi yang dimengerti oleh manusia dan langsung menjalankan program tersebut. Kerja interpreter seperti penerjemah untuk turis yang langsung menerjemahkan kalimat demi kalimat yang dikatakan oleh sang turis.
Tim Olimpiade Komputer Indonesia

Konsep Dasar Pemrograman Prosedural

3

Setiap kali kita membutuhkan program tersebut, maka interpreter akan bekerja menerjemahkan program dari bahasa tingkat tinggi ke bahasa mesin untuk dieksekusi. Jadi siklus kerja ketika kita membuat program dengan interpreter adalah: tulis/edit program, eksekusi.

1.2.2

Kompilator

Kompilator adalah suatu program komputer yang membaca seluruh program dari bahasa tingkat tinggi yang dimengerti oleh manusia dan kemudian menerjemahkan keseluruhan program tersebut dalam bahasa mesin. Program yang sudah diterjemahkan tersebut akhirnya akan dijalankan oleh komputer. Kerja kompilator seperti penerjemah buku yang akan menerjemahkan seluruh buku sekaligus, sehingga setiap orang bisa mengerti makna buku dalam bentuk terjemahannya. Kompilator hanya perlu bekerja sekali saja menerjemahkan bahasa tingkat tinggi ke bahasa mesin, dan jika kita membutuhkan kembali program tersebut, kita hanya perlu menjalankannya, kompilator tidak perlu bekerja lagi. Jadi siklus kerja jika kita memakai kompilator adalah: tulis/edit program, kompilasi, eksekusi

1.2.3

Pemeriksaan Kesalahan oleh Kompilator dan Interpreter

Kompilator dapat melakukan pemeriksaan kesalahan pada program saat kompilasi, kesalahan ini hanya berupa kesalahan yang bisa diketahui secara statik (misalnya kesalahan penggunaan tipe data), pemeriksaan ini umumnya disebut dengan compile time error checking. Tidak semua kesalahan program bisa dideteksi saat kompilasi. Kompilator juga bisa menyisipkan kode untuk melakukan pemeriksaan kesalahan pada saat program berjalan, misalnya jika pengguna memasukkan bilangan nol sebagai pembagi maka program bisa dihentikan karena pembagian dengan nol tidak mungkin dilakukan. Pemeriksaan kesalahan yang pada saat program berjalan disebut dengan run time error checking. Pemeriksaan run time ini tergantung pada kompilator, ada kompilator yang melakukan banyak pemeriksaan pada saat run time, ada juga yang tidak. Sebagian besar interpreter menerjemahkan kode satu persatu, sehingga pemeriksaan kesalahan selalu dilakukan saat run time meskipun ada juga yang melakukan pemeriksaan awal sebelum kode mulai diinterpretasi.
Tim Olimpiade Komputer Indonesia

4

Konsep Dasar Pemrograman Prosedural

1.2.4

Kompilator vs Interpreter

Apakah suatu bahasa diinterpretasi atau dikompilasi bergantung pada ketersediaan interpreter atau kompilator untuk bahasa tersebut. Sebagai contoh, kita tidak dapat mengatakan bahwa bahasa BASIC adalah bahasa yang diinterpretasi karena ada juga kompilator untuk bahasa BASIC. Interpreter dan kompilator masing-masing memiliki keuntungan dan kerugian. Kelebihan interpreter adalah pengembangan program lebih cepat, tidak perlu melakukan kompilasi yang mungkin butuh waktu lama, namun kerugiannya setiap kali program perlu dijalankan, interpreter harus bekerja lagi, sehingga kecepatan eksekusi program menjadi kurang jika dibanding dengan kompilator. Sebaliknya penggunaan kompilator memungkinkan kita membentuk program yang dapat langsung dijalankan dengan cepat (karena sudah dalam bahasa mesin), namun dibutuhkan waktu yang relatif lama dalam pengembangan programnya.

1.3

Kompilator + Interpreter

Meskipun tidak terlalu penting dalam pembahasan buku ini, namun perlu diketahui bahwa ada bahasa yang dikompilasi namun tidak ke dalam bahasa mesin (ke bahasa antara), lalu diinterpretasi oleh suatu interpreter untuk menjalankannya. Sebagian pekerjaan interpreter (memvalidasi program) sudah dilakukan oleh kompilator, sehingga interpreter hanya perlu mengeksekusi program saja. Contoh bahasa yang menggunakan pendekatan ini adalah: Java, C#, dan VB.NET

1.3.1

Debugger

Kesalahan pertama yang ditemukan pada salah satu komputer pertama (yang saat itu masih sangat besar) adalah karena adanya serangga/kutu (bug) yang menyebabkan komputer tidak bekerja. Sejak saat itu semua kesalahan, baik di bidang hardware maupun software komputer disebut dengan bug (istilah ini lebih umum di bidang software dibanding hardware). Proses untuk menemukan kesalahan program disebut juga dengan proses pencarian bug (istilah proses ini adalah debug). Dalam pencarian kesalahan ini terkadang diperlukan program pembantu yang dinamakan debugger. Program ini akan membantu pemrogram untuk melihat bagaimana eksekusi program dilakukan oleh komputer, dan melihat kesalahan yang mungkin ada ketika program sedang berjalan.
Tim Olimpiade Komputer Indonesia

Konsep Dasar Pemrograman Prosedural

5

1.3.2

Editor, Kompilator, dan IDE

Untuk memasukkan program ke dalam komputer, kita perlu tools yang dinamakan editor. Editor adalah program yang mampu menerima teks dari manusia, dan menyimpannya ke dalam bentuk digital yang dimengerti komputer. Editor juga memungkinkan kita melakukan koreksi terhadap pengetikan yang kita lakukan (menghapus teks, menyalin teks, dan lain-lain). Bentuk kode program yang kita masukkan ini disebut dengan kode sumber atau source code. Untuk menjalankan program yang sudah kita ketikkan, kita akan membutuhkan kompilator atau interpreter. Pada bahasa Pascal, kompilator lebih umum dipakai dibanding interpreter. Perlu diperhatikan bahwa editor dan kompilator adalah dua program yang terpisah dan berbeda. Sebuah IDE (Integrated Development Environment) adalah program yang menggabungkan fungsi editor dan kompilator (serta terkadang debugger) dalam satu paket. IDE saat ini semakin populer, bahkan banyak orang yang menyangka bahwa IDE sama dengan kompilator. Sebuah IDE mungkin saja sekaligus memiliki fungsi kompilator, tapi tidak selalu demikian, terkadang IDE hanya menyediakan fungsi editor, dan akan memanggil kompilator yang sesungguhnya ketika kita akan mengkompilasi program.

1.4

Aneka Implementasi Kompilator Pascal

Sama seperti mobil, yang memiliki fungsi yang sama namun memiliki banyak merk, saat ini ada banyak merk kompilator. Setiap kompilator ini memiliki fungsi yang sama namun memiliki perbedaan dalam hal detailnya. Perbedaan kompilator ini ada karena beberapa hal: • Perbedaan sistem operasi menyebabkan sifat kompilator berbeda • Kurang detailnya standar bahasa Pascal menyebabkan interpretasi yang berbeda terhadap standar Pascal • Masing-masing pembuat kompilator menambahkan fitur di luar standar Pascal untuk mempermudah pembuat program Secara umum, semua fitur standar bahasa Pascal akan didukung oleh aneka kompilator yang ada saat ini. Jika Anda terkadang menemukan ada program yang tidak berjalan di suatu sistem operasi atau di suatu kompilator tertentu, maka Anda perlu memeriksa apakah program yang Anda buat memenuhi standar Pascal.
Tim Olimpiade Komputer Indonesia

Dokumentasi FreePascal juga tersedia gratis . buku ini bisa dipakai bersama kompilator yang lain (bahkan dapat dipakai untuk bahasa pemrograman selain Pascal). FreePascal dipilih dengan beberapa alasan: .6 Konsep Dasar Pemrograman Prosedural 1.FreePascal tersedia gratis. Tim Olimpiade Komputer Indonesia . dan hal tersebut harus dikonsultasikan pada manual masing-masing kompilator. FreePascal dipilih sebagai acuan dalam buku ini.5 FreePascal Dari aneka kompilator yang ada. namun perlu diperhatikan bahwa setiap kompilator memiliki perbedaan. sehingga kode sumber kompilatornya sendiri bisa dilihat dan dipelajari .FreePascal merupakan kompilator resmi yang dipakai pada IOI (International Olympiad in Informatics/Olimpiade Informatika Internasional) .FreePascal memenuhi standar Pascal Meskipun kompilator FreePascal banyak diacu dalam buku ini. dan bersifat opensource.

Konsep Dasar Pemrograman Prosedural 7 Tim Olimpiade Komputer Indonesia .

serta konsep Input. masukkan ke bak mandi. ulangi ambil air. Langkah yang tepat artinya serangkaian langkah tersebut selalu benar untuk menyelesaikan masalah yang diberikan. Program utama 2. maka bisa disebut algoritma. 2.Bab 2 PEMROGRAMAN PROSEDURAL Pemrograman dalam paradigma prosedural dilakukan dengan memberikan serangkaian perintah yang berurutan. Tipe 3. masukkan ke bak mandi.1 Algoritma Algoritma adalah serangkaian langkah-langkah yang tepat. meliputi definisi algoritma dan konstruktor pemrograman prosedural. karena “sedikit” tidak menyatakan sesuatu dengan tepat. masukkan ke bak mandi. ulangi ambil air sampai bak mandi penuh”. namun langkah ambil air. Dalam bab ini akan dibahas hal-hal yang menjadi dasar dalam pemrograman prosedural. 2. Proses. artinya suatu saat langkah harus berhenti. dan terbatas untuk menyelesaikan suatu masalah. Konstanta 4. instruksi seperti “angkat sedikit ke kiri” merupakan contoh instruksi yang tidak tepat. Langkah yang terperinci artinya setiap langkah diberikan secara detail dan dapat dieksekusi oleh komputer.2 Konstruktor (elemen) Pemrograman Prosedural Elemen bahasa pemrograman prosedural yang penting adalah: 1. Variabel . dan Output yang sangat lazim dalam dunia pemrograman prosedural. dan seterusnya”) maka serangkaian langkah itu tidak disebut sebagai algoritma (jika: “ambil air. harus diperinci dan dapat dieksekusi oleh mesin). terperinci. Langkah yang tidak memberikan hasil yang benar untuk domain masalah yang diberikan bukanlah sebuah algoritma. Langkah yang diberikan harus terbatas. jika langkah tidak pernah berhenti (misalnya: “ambil air.

File eksternal 10. proses. dan operand 6. operator. dan Output Sekumpulan aksi dalam pemrograman prosedural bisa dibagi menjadi tiga bagian penting yaitu: input. dan dalam setiap bagian mungkin akan ada input. Struktur Data 7. Instruksi dasar 8. Proses. Program Moduler 9. namun semua perlu dipelajari dan dimengerti untuk dapat membuat program dengan baik. dan output. Tim Olimpiade Komputer Indonesia . proses. Ekspresi. Rekurens Konstruktor ini tidak untuk dipelajari secara berurutan.3 Input.Konsep Dasar Pemrograman Prosedural 9 5. 2. dan output. proses. dan output dikerjakan secara sekuensial. Bagian input.

misalnya: program bilanganprima. Bagian berikutnya adalah blok program utama yang ditandai dengan begin dan end. dan tidak bisa kita ubah. namun sebaiknya tetap ditulis. Bagian di dalam tanda kurung diikuti oleh bintang/asterisk. (*seperti ini*) merupakan komentar program yang tidak akan diproses oleh kompilator (hanya untuk dibaca oleh manusia. Bagian ini tidak wajib ada di kompilator Pascal yang baru. Program yang diberikan di atas tidak melakukan apa-apa. meskipun dapat dikompilasi dan dijalankan. Kata kunci adalah kata-kata baku dalam bahasa Pascal yang memiliki arti khusus. dan eksekusi akan dimulai dari program utama yang mungkin akan memanggil fungsi-fungsi yang lain. Mengenal program utama dalam suatu bahasa akan memberikan gambaran global bagaimana menulis program dalam bahasa tersebut. begin (*bagian program utama*) end. Program dalam bahasa Pascal memiliki format dasar seperti berikut (format lebih lengkap akan diberikan secara bertahap): Program namaprogram. Bagian pertama berisi nama program. Sebuah program bisa terdiri dari banyak bagian (subprogram dan unit). kita bisa memberi nama program dengan kata kunci program. Perhatikan bahwa setelah end ada tanda titik yang menyatakan akhir program.Bab 3 PENGENALAN PROGRAM UTAMA DALAM PASCAL Program utama adalah bagian program yang menjadi titik awal eksekusi bagi suatu program. kata-kata tersebut harus kita pakai sesuai dengan makna yang sudah berikan oleh Pascal. Kata-kata yang ditebalkan merupakan kata kunci (keyword) dalam bahasa Pascal. sebagai tambahan keterangan). Program sederhana yang dapat kita buat berikutnya adalah program “hello world” yang .

tipe. 2you adalah identifier yang tidak valid • Nama boleh berupa huruf yang digabung dengan angka. dan untuk program. Instruksi yang ada bisa berupa assignment. instruksi kondisional. pemanggilan fungsi. Batasan Penamaan Identifier Identifier adalah nama yang diberikan untuk fungsi. namun umumnya: • Nama tidak boleh diawali dengan angka. boleh ada titik koma. Beberapa hal yang perlu diperhatikan adalah: • Pascal tidak membedakan case atau kapitalisasi huruf (jadi writeln dengan WRITELN dianggap sama). tergantung kompilator) • Nama biasanya boleh mengandung tanda underscore (garis bawah seperti ini: nama_orang) Perhatian: pilihlah nama yang singkat namun deskriptif untuk menamai apapun dalam program. tapi tidak boleh diawali angka: its4you adalah nama yang valid • Nama yang hanya terdiri dari huruf saja pasti valid (sampai panjang tertentu. dan lain-lain. end. pengulangan. Perhatikan bahwa banyak bahasa membedakan kapitalisasi huruf. sehingga konsistensi dalam penulisan sebaiknya dibiasakan. • Setelah setiap instruksi harus ada titik koma (titik koma adalah pemisah antar instruksi). boleh juga tidak • Writeln adalah salah satu prosedur standar Pascal Bagian yang ada di antara blok begin dan end adalah instruksi-instruksi dalam bahasa Pascal. Program hello. Program tersebut juga ada pada buku Contoh Program kecil dalam bahasa Pascal. begin writeln('Hello World').Konsep Dasar Pemrograman Prosedural 11 akan mencetak kalimat “hello world” ke layar komputer. variabel. Tim Olimpiade Komputer Indonesia . Semua nama yang disebutkan memiliki batasan tergantung pada kompilator yang digunakan. prosedur. kecuali instruksi terakhir sebelum end.

Bab 4 EKSPRESI. VARIABEL. Sintaks yang lebih lengkap dapat dilihat pada buku pemrograman bahasa Pascal. misalnya 1 ≤ x < 5 | x Є R yang artinya x adalah suatu variabel bertipe real (domain x adalah bilangan real). kita mengenal tipe untuk suatu variabel. Sebuah variabel dalah sebuah ekspresi . contoh ekspresi yang paling sederhana adalah operasi aritmatika seperti 5 + 2 (ekspresi yang menghasilkan nilai bilangan bulat). seperti ini: Program namaprogram. nama_variabel2 : tipevariabel2.1 Ekspresi Ekspresi adalah pernyataan yang menghasilkan nilai dengan tipe tertentu. Sebuah angka atau nilai juga merupakan sebuah ekspresi (5 adalah ekspresi) 2. Contoh penggunaan variabel yang sederhana ada pada contoh program kecil BACA. begin (*bagian program utama*) end.PAS. Salah satu cara untuk memberi nilai variabel adalah melalui assignment. 4. dengan range (jangkauan/rentang) 1 (inklusif) sampai 5 (eksklusif). Seperti dalam matematika. DAN TIPE DASAR Konsep variabel dalam pemrograman mirip dengan konsep variabel dalam matematika. Perhatikan bahwa ketika dideklarasi sebuah variabel belum terdefinisi nilainya (sudah memiliki nilai. tapi tidak bisa diprediksi nilai apa yang ada). Hasil operasi terhadap nilai juga merupakan ekspresi ( 5 + 8 adalah ekspresi) 3. Perhatikan bahwa: 1. Perhatikan bahwa deklarasi variabel (pernyataan variabel apa memiliki tipe apa) ada pada bagian sebelum blok utama begin end. Variabel adalah suatu nama yang dapat diasosiasikan dengan sebuah nilai yang dapat kita manipulasi. var nama_variabel : tipevariabel.

setelah instruksi a:=2. sehingga semua tipe data dalam komputer akan diproses dalam bentuk bilangan integer.3 Representasi Tipe Komputer hanya bisa memproses angka. Bahkan kata-kata yang muncul dalam komputer juga diproses sebagai bilangan. end. Perhatikan bahwa tipe di sebelah kanan harus sama dengan tipe di sebelah kiri (pembahasan mengenai assignment untuk tipe yang berbeda dapat dilihat di bagian Kompatibilitas Tipe) Contoh di bawah ini memberikan nilai pada variabel a dengan ekspresi yang lebih rumit (bukan sekedar konstanta nilai): Program assign_ekspresi. 4. var a: integer. var a: integer. seperti ini: writeln(a).Konsep Dasar Pemrograman Prosedural 13 4.2 Assignment Assignment adalah pemberian nilai kepada variabel. begin a := 2. Untuk melihat nilai a. Untuk masing-masing tipe yang dibahas di sini. end. mengapa Tim Olimpiade Komputer Indonesia . kita bisa mengoutputkan nilai tersebut dengan instruksi writeln. Misalnya jika a adalah sebuah variabel yang tipenya bilangan bulat: program assign_variabel. Pemahaman representasi tipe ini penting untuk mengetahui mengapa suatu tipe terbatas. Assignment memberikan nilai pada ruas kiri sesuai dengan hasil nilai di ruas kanan (berupa sebuah ekspresi). akan diberikan juga representasi di dalam komputer untuk masing-masing tipe untuk mengetahui batasan dari setiap tipe. begin a := 2 + 5. akan memberikan nilai 2 pada variabel a.

Boolean. output tipe dasar dilakukan dengan prosedur write dan writeln. const PI = 3. Dengan mengetahui representasi tipe. Dalam Pascal. nama ini disebut sebagai konstanta.6 Input dan Output Variabel bertipe Dasar Setiap bahasa pemrograman umumnya sudah menyediakan cara untuk melakukan input dan output tipe dasar. Sebenarnya representasi tipe ini menjadi bahasan dalam kuliah atau pelajaran arsitektur komputer. Variabel bertipe dasar akan sangat banyak digunakan.5 Variabel bertipe Dasar Variabel bertipe dasar adalah variabel yang memiliki tipe yang sudah didefinisikan oleh suatu bahasa. Perlu ditekankan bahwa pengetahuan mengenai representasi tipe merupakan penting dalam pemrograman. Contohnya pi (π). sehingga dapat memilih tipe yang tepat ketika membuat program. Dalam Pascal dan dalam semua bahasa prosedural lain sebuah nama boleh diberi nilai yang tidak akan diubah di dalam program. namun karena tidak ada buku lain yang digunakan yang memuat hal tersebut. Kata kunci yang dipakai dalam Pascal adalah const. 4. pembahasan representasi akan digabung dalam penjelasan tipe. pemrogram bisa mengetahui batasan dari setiap tipe yang ada. Karakter. 4. dan e adalah konstanta bilangan euler. dan merupakan elemen pembentuk tipe bentukan. dan Real. Tim Olimpiade Komputer Indonesia . sehingga penguasaan tipe dasar ini sangat penting.14 Konsep Dasar Pemrograman Prosedural hasil suatu operasi seperti yang dijelaskan. Konstanta adalah suatu nilai yang tidak berubah yang diberi nama. Tipe dasar yang sudah didefinisikan Pascal meliputi: Integer. Beda kedua prosedur tersebut adalah: write tidak memajukan kursor ke baris berikutnya sedangkan writeln memajukan kursor ke baris berikutnya (ln di sini berarti line atau baris).4 Konstanta Penggunaan konstanta yang lebih lengkap dapat dilihat dalam buku panduan FreePascal . 4. adalah konstanta yang digunakan sebagai perbandingan keliling lingkaran terhadap diameternya.14.

dan “pasangannya” yaitu tipe shortint suatu tipe integer 8 bit signed (bertanda atau bilangan bulat). Bilangan integer 8 bit artinya diperlukan memori sebesar 8 bit untuk menyimpan tipe tersebut. read(a). tapi per blok bit yang umumnya terdiri dari 8 bit (dikenal sebagai 1 byte atau binary eight). atau hanya bisa menampung tipe bilangan asli/natural). dan nol). nilai Tim Olimpiade Komputer Indonesia . gunakan write atau writeln seperti ini: write(var1). gunakan string untuk menjelaskan arti output: writeln('Nilai var1 adalah '.7. Ada beberapa tipe integer. Integer dipakai dalam kebanyakan operasi matematika dan loop. Komputer memandang integer sebagai nilai dari serangkaian bilangan biner. positif. dimana a adalah suatu variabel dengan tipe dasar manapun. var1). sebaiknya sebelum read perlu diberikan informasi kepada pengguna mengenai apa yang harus dilakukan: write(“Masukkan sebuah angka:”). Sebaliknya untuk membaca input dari pengguna. 4. bahkan beberapa prosesor tidak memiliki kemampuan perhitungan bilangan real sehingga semua perhitungan numerik dilakukan dengan integer. read dan readln memiliki fungsi yang sama untuk variabel bukan string. Contoh penggunaan read adalah: read(a).7 Integer Integer adalah suatu tipe bilangan bulat (bisa menampung nilai negatif. Untuk memperjelas. Namun komputer tidak memproses satu bit demi satu bit. read hanya membaca 1 kata sedangkan readln bisa membaca 1 kalimat. tipe integer paling sederhana adalah byte yaitu integer 8 bit yang unsigned (tidak bisa menyimpan nilai negatif.1 Representasi integer dalam komputer Integer memiliki representasi yang sederhana dalam komputer. atau agar lebih jelas. 4.Konsep Dasar Pemrograman Prosedural 15 Untuk menuliskan atau mengoutputkan variabel bertipe dasar. gunakan read atau readln. pada variabel string.

2 = 1. Operasi perbandingan memiliki semantik yang sama seperti yang dipelajari dalam matematika (sama seperti di matematika 6 > 5). sisanya adalah 2 – 0* 5 = 2). dan 2 mod 5 = 2 (2/5 jika dibulatkan adalah nol. Operasi perbandingan integer meliputi. Jika dipandang sebagai tipe unsigned. tambah (+). Tim Olimpiade Komputer Indonesia . Ada dua operator unary (operator yang memakai satu operand) untuk integer yaitu minus dan plus. Perbedaan dari masing-masing tipe tersebut adalah kemampuannya dalam jangkauan angka yang bisa disimpan. tambah.8 Operasi Terhadap Integer Ada beberapa operasi dasar untuk integer yaitu: kali. 2 * 3 = 6. Operasi kali (disimbolkan dengan bintang/asterisk * ). dan longint yang berupa tipe integer 64 bit. kurang. setiap bit 0 menjadi 1 dan sebaliknya) menjadi 1111 1010. Sebelum angka 5 ada operator minus yang menyatakan bilangan negatif. Contoh ekspresinya: -5 * 2 = -10. >= (lebih dari atau sama dengan). dan kurang (-) sudah jelas dan berlaku seperti yang sudah dipelajari.16 Konsep Dasar Pemrograman Prosedural yang bisa disimpan adalah 0000 0000 sampai dengan 1111 1111. Komplemen 2 adalah kebalikan dari representasi desimal ditambah dengan 1. < (kurang dari). Dalam beberapa bahasa pemrograman operasi mod mungkin tidak ada. Operasi pembagian (div) akan memberikan hasil pembagian yang dibulatkan. Untuk menyimpan bilangan positif 5. sehingga representasi -5 dalam biner adalah 11111011. <= (kurang dari atau sama dengan). 5 + 5 = 10. Varian dari integer yang lain (subtipe dari integer) akan di bahas pada Bab 8 (Tipe Data Lanjut). bagi. Untuk bisa menyimpan nilai negatif dalam biner biasanya digunakan representasi yang disebut sebagai komplemen 2. Operasi mod memberikan sisa dari hasil bagi sehingga 5 mod 2 = 1. maka nilai desimal untuk 8 bit tersebut adalah 0 sampai dengan 255. dan kita tambahkan 1 menjadi 11111011. dan 5 div 2 = 2. tidak sama dengan (<>) dan = (sama dengan). jadi 4 div 2 = 2. kita balik (not-kan. > (lebih besar). Untuk menyimpan -5 desimal misalnya. 4. dan mod. tetap digunakan 0000 0101. Dengan cara komplemen 2 maka nilai yang bisa ditampung dalam 8 bit adalah dari -128 sampai dengan 127 Tipe integer lain adalah integer yang berupa tipe integer 32 bit (atau 16 bit pada Pascal di DOS). dan 3 . kita cari representasi untuk 5 yaitu 0000 0101.

atau satu angka.127 memiliki pemetaan standar yang disebut dan biasanya disebut dengan karakter ASCII (American Standard Code For Information Interchange). misalnya nilai 65 adalah nilai untuk simbol A. Pemetaan ini tergantung pada encoding yang dipakai (dan encoding ini bergantung pada wilayah atau bahasa tertentu).9 Karakter Di dalam Pascal dan aneka bahasa lain.1 Urutan Operator (Precedence of operator) Integer Ekspresi 2 * 4 + 5 * 2 akan menghasilkan 18 karena operasi perkalian dilakukan lebih dahulu jika dibandingkan dengan pejumlahan. Dalam Pascal. Tim Olimpiade Komputer Indonesia . dan fungsi chr (character) yang melakukan proses kebalikannya. Setiap nilai ini dipetakan dalam suatu simbol. ada fungsi ord (ordinal) yang bisa memetakan dari karakter menjadi nilainya.8. seperti ini: program assign_char. karakter 0 . sedangkan sisanya bergantung pada encoding yang dipakai (misalnya orang Perancis memetakan menjadi beraneka huruf yang memiliki accent. akan mencetak angka 65. Dalam hal ini dikatakan bahwa precedence kali lebih tinggi dari bagi. (* c berisi huruf A *) end. var c:char.Konsep Dasar Pemrograman Prosedural 17 4. 4. Sebuah karakter adalah sebuah bilangan integer 8 bit yang memiliki nilai dari 0 sampai 255.9. begin c:= 'A'. dan seterusnya. dikenal tipe data char yang bisa menampung satu karakter. dan contoh pemakaian chr writeln(chr(65)). 4. Contoh pemakaian ord: writeln(ord('A')). atau simbol. orang Rusia memetakan dalam alfabet mereka). Umumnya precedence of operator untuk integer di aneka bahasa adalah sama. Sebuah variabel bertipe karakter hanya boleh diisi dengan satu simbol saja. Satu karakter adalah satu huruf. 66 adalah nilai simbol B.1 Representasi karakter dalam komputer Dalam bahasa Pascal standar.

karena ordinal 'A' adalah kurang dari ordinal 'B'. Jarang sekali karakter ditangani satu per satu. terdapat jenis karakter yang disebut dengan UNICODE. Pada dasarnya penyimpanan UNICODE tetap memakai angka tapi memakai jumlah bit yang lebih dari karakter biasa (bervariasi dari 8 – 64 bit. biasanya tipe data untuk menyimpan teks adalah String. karena ordinal 'b' (b kecil) lebih dari ordinal 'A' (A kapital). Lihat Bab 8 Tipe Data Lanjut untuk pembahasan mengenai String. Karakter UNICODE dapat merepresentasikan hampir semua karakter yang masih dipakai di bumi (dan yang sudah tidak dipakai. namun 'b' > 'A'. Tim Olimpiade Komputer Indonesia . karena hasil manipulasi serupa mungkin tidak bisa diprediksi. seperti hieroglyph). Sebuah tipe karakter tidak bisa dioperasikan untuk menghasilkan nilai tertentu. tergantung pada encoding yang dipakai) 4.18 Konsep Dasar Pemrograman Prosedural akan mencetak huruf A. tidak bisa dijumlahkan ataupun dikurangkan. Operasi perbandingan yang bisa dilakukan sama dengan yang bisa dilakukan dengan integer. Tipe char hanya bisa dioperasikan jika dikonversi menjadi integer dengan ord. Contoh: 'A' < 'B'. hasil perbandingan adalah perbandingan nilai ordinal karakter tersebut.2 Operasi Terhadap char Sebuah tipe karakter hanya bisa diberi nilai (assign) dan dibaca nilainya (atau dioutputkan ke layar/file). UNICODE Dalam sistem operasi yang modern. Sebuah karakter bisa dibandingkan dengan karakter lain. yang lebih kompleks dari karakter sederhana. Kebiasaan melakukan hal ini juga berbahaya jika suatu saat Anda beralih ke UNICODE. Perhatian Manipulasi karakter dengan melakukan konversi ke integer merupakan hal yang sangat tidak disarankan.9. Sebuah tipe char bisa digabungkan pada sebuah tipe string.

not. 4.10. sedangkan 6 < 2 adalah ekspresi yang nilainya false. boolean dan integer adalah dua nilai yang bisa dipertukarkan.1 Representasi Boolean dalam komputer Nilai boolean disimpan sebagai angka 0 untuk false dan bukan nol untuk true. boolean tidak bisa dioperasikan sebagai integer.10 Boolean Boolean adalah suatu tipe data yang hanya memiliki nilai true (benar) dan false (salah). Tim Olimpiade Komputer Indonesia . 4. Urutan untuk operator boolean dapat dilihat pada buku panduan Free Pascal.2 Urutan Operator (Precedence of operator) Boolean Sama seperti pada integer.3 Operasi Boolean pada Bilangan Integer Bilangan integer dapat dioperasikan dengan operator boolean.10. or. Dalam bahasa Pascal. dan xor OR AND XOR NOT akan menghasilkan true jika salah satu operandnya bernilai true akan menghasilkan true jika kedua operandnya bernilai true akan menghasilkan true jika operandnya memiliki nilai boolean yang berbeda akan menghasilkan nilai boolean kebalikan dari nilai yang diberikan Dalam Pascal. proses operasi dilakukan dengan melihat representasi bit pada bilangan integer. Tipe boolean sangat diperlukan dalam kondisi perulangan dan kondisional (menggunakan if).Konsep Dasar Pemrograman Prosedural 19 4. dan 0 dianggap false). karena bilangan 6 memang lebih besar dari 5 maka nilai ekspresi tersebut adalah true. ada urutan operator pada operasi boolean. namun dalam bahasa lain (C misalnya). Operator untuk boolean ada beberapa yaitu: and.10. Ekspresi yang menghasilkan boolean bisa berupa ekspresi dengan tipe-tipe yang terdiri dari tipe boolean. dan melakukan operasi boolean yang bersesuaian terhadap bit tersebut (bit 1 dianggap true. dan berbagai bahasa umumnya nilai true lebih besar dari nilai false (true > false adalah true) 4. bisa juga berupa ekspresi dari tipe lain. Contoh ekspresi yang menghasilkan boolean adalah 6 > 5.

Operasi perbandingan selain sama dengan(=) dan tidak sama dengan (<>) bisa dilakukan terhadap real (>. sedangkan representasi biner untuk 2 desimal adalah 00000010.20 Konsep Dasar Pemrograman Prosedural Contoh: 1 or 2 = 3 representasi biner untuk 1 desimal adalah (kita ambil 8 bit) 00000001. namun umumnya real direpresentasikan dalam bentuk: A * 2+/. 4. <=. >=.5 akan direpresentasikan sebagai 1 * 2-1 (½ = 0. <>).2 Operasi Terhadap Real Operasi yang bisa dilakukan terhadap real meliputi: tambah. maka jika kita or -kan masing-masing bit. minus (sama seperti integer). dan pembagian (memakai simbol / yang menghasilkan bilangan real). <. nilai 1/3 misalnya tidak bisa dinyatakan dengan tepat dalam bentuk perkalian tersebut.11. Operasi sama dengan dan tidak sama dengan sebenarnya bisa dilakukan (tidak dibatasi oleh bahasa Pascal).b Misalnya nilai 0. Tipe ini bisa menampung bilangan dengan suatu nilai di belakang koma dengan presisi tertentu (lihat bagian representasi real). namun dalam kasus tertentu hasilnya mungkin tidak sesuai dengan yang diharapkan. operasi MOD tidak terdefinisi untuk real. kali.11 Real Real adalah tipe yang dapat menampung bilangan real. Cara yang benar untuk membandingkan 2 buah real adalah dengan menetapkan nilai epsilon yang Tim Olimpiade Komputer Indonesia . Perhatikan bahwa tidak semua nilai bisa direpresentasikan dengan tepat dengan cara ini. 4.5). yang artinya 3 desimal 4. hasilnya adalah 00000011.1 Representasi Real dalam komputer Ada banyak representasi real dalam komputer. Baik nilai A maupun nilai B memiliki presisi integer yang terbatas.11.

c := a/b. c : real. Contohnya. kompatibilitas tipe mungkin tidak terlalu jelas dan harus diperhatikan dengan baik. sehingga instruksi terakhir adalah salah dan tidak bisa dikompilasi (tipe di ruas kanan tidak sama dengan tipe di ruas kiri). b := 2. karena tipe string tidak kompatibel dengan tipe integer. begin a := 1. Kedua tipe itu sangat berbeda.Konsep Dasar Pemrograman Prosedural 21 kecil yang dipakai untuk membandingkan (mengenai penggunaan kalimat kondisional. Permasalahan menjadi lebih kompleks pada ekspresi yang melibatkan banyak variabel dengan berbagai jenis tipe. variabel bertipe real tidak bisa langsung diassign pada variabel bertipe integer. karena variabel bertipe real mungkin mengandung pecahan. tapi hal yang sebaliknya (mengassih integer pada real) bisa dilakukan. d := a/b. lihat bab 5 Instruksi Kondisional): if (a – b < epsilon) then begin writeln(“A sama dengan B”). end. end. karena presisinya bisa hilang. sehingga masalah kompatibilitas tipe itu sudah jelas. end else begin writeln(“A tidak sama dengan B”). var a : integer. Ekspresi a/b akan menghasilkan tipe real. b : integer. 4. d : integer. Tim Olimpiade Komputer Indonesia . Variabel bertipe real dengan presisi yang tinggi (misalnya double di Pascal) tidak bisa diassign pada variabel bertipe real dengan presisi yang lebih rendah (tipe real biasa di Pascal). Contohnya dalam ekspresi ini: program assign_tipe.12 Kompatibilitas Tipe Sebuah variabel bertipe string tentu tidak bisa dijumlahkan dengan variabel bertipe integer. Namun dalam kasus tertentu.

13 Konversi Antar Tipe Sederhana Suatu tipe dapat dikonversi ke tipe lain meskipun biasanya konversi ini tidak sempurna. jika i memiliki nilai di luar itu maka nilai b tidak bisa diprediksi.22 Konsep Dasar Pemrograman Prosedural 4. konversi dari string ke integer. Contoh konversi tipe adalah: konversi dari tipe dengan presisi yang lebih tinggi ke yang lebih rendah (misalnya integer ke byte atau double ke real). Konversi a ke real bisa dilakukan karena bilangan integer pasti bisa dikonversi ke real. writeln(real(b)). konversi dari i ke b (integer ke byte) akan menghasilkan hasil yang benar jika i memiliki nilai antara 0 sampai 255. b := real(a). var a:byte. Konversi dari tipe yang lebih presisi lebih tinggi. dan b adalah sebuah byte. konversi dari tipe bertanda ke tidak bertanda. Konversi integer(b) akan menghasilkan error karena dalam konversi real ke integer ada beberapa hal yang bisa dilakukan. Tim Olimpiade Komputer Indonesia . apakah akan dibulatkan ke atas. end. writeln(real(1/2)). Misalnya i adalah sebuah integer. konversi dari real ke integer. Contohnya casting bisa dilakukan untuk mengubah sebuah shortint menjadi byte. Sebagian proses konversi dapat dilakukan melalui proses yang disebut dengan casting. b:real. atau semua angka di belakang koma akan dihilangkan. atau byte menjadi integer. atau yang memiliki range yang lebih besar ke tipe yang presisi atau range yang lebih kecil akan memiliki hasil yang tidak terdefinisi dalam kasus tertentu. Cara melakukan casting adalah dengan memberikan ekspresi yang akan dicasting di dalam nama tipe tujuan casting: program casting. Casting merupakan proses konversi sederhana yang hanya melakukan perubahan representasi internal tanpa kehilangan makna. namun sebuah bilangan real tidak bisa dicast menjadi sebuah integer. atau dibulatkan ke bawah. begin a := 3 div 2. writeln(integer(a)).

Lihat Bab 7 Subprogram Tim Olimpiade Komputer Indonesia .Konsep Dasar Pemrograman Prosedural 23 Konversi tipe yang kompleks bisa dilakukan dengan fungsi.

else. Jika aksi lebih dari satu instruksi maka bisa dikelompokkan dalam blok begin end. Instruksi ini adalah instruksi yang sangat penting.then. end. . 5.Bab 5 INSTRUKSI KONDISIONAL Instruksi (kalimat) kondisional adalah instruksi yang dilakukan berdasarkan kondisi boolean tertentu. ada bentuk kondisional lain yaitu if . if (a<=b) then writeln(“A kurang dari atau sama dengan B”). Aksi adalah sekumpulan instruksi yang valid pada suatu bahasa. yang memungkinkan komputer untuk bisa “berpikir” dengan mengambil aksi berdasarkan kondisi boolean tertentu. Bentuk paling sederhana dari pernyataan kondisional dalam setiap bahasa adalah Contoh: if (a>b) then writeln(“A lebih besar dari B”). 5. writeln(“A lebih besar dari B”). menjadi: if (a>b) then writeln(“A lebih besar dari B”) else (“A kurang dari atau sama dengan B”).2 IF dengan ELSE Selain if . Kita bisa mengubah instruksi semacam ini: if (a>b) then writeln(“A lebih besar dari B”).then . bagian setelah if disebut dengan bagian kondisi dan bagian setelah then adalah bagian aksi.1 IF Sederhana if then. Seperti ini: if (a>b) then begin writeln(“Kesimpulan:”).

end else if (a = k2) then begin Tim Olimpiade Komputer Indonesia . end else (* a<= b *) begin (“A kurang dari atau sama dengan B”). seperti ini: if (kondisi_1) then begin aksi1. atau dengan kata lain. ada bentuk analisa kasus yang digunakan untuk menangani banyak kondisi yang ada dalam bentuk (a adalah suatu ekspresi yang menghasilkan tipe enumerasi. end. 5. tidak boleh ada titik koma sebelum else.3 Case untuk banyak aksi Selain IF.Konsep Dasar Pemrograman Prosedural 25 Bagian else akan dieksekusi jika bagian kondisi tidak dipenuhi.2. menangani kondisi yang kompleks (banyak 5. Dalam bahasa Pascal.. Perhatikan: untuk memperjelas program. end else if (kondisi_2) then begin aksi2.1 IF untuk banyak kondisi if Instruksi if boleh digabung dengan banyak instruksi kondisi dan banyak aksi). bagian else dieksekusi jika kondisi yang terjadi adalah komplemen dari kondisi di bagian if. dan k1 . end. sebaiknya semua instruksi if yang memiliki else ditulis dengan komentar setelah else (untuk menjelaskan kondisi apa yang ditangani oleh else kepada pembaca program) seperti ini: if (a>b) then begin writeln(“A lebih besar dari B”). end else (* kondisi 1 dan 2 tidak dipenuhi*) begin aksi_n. kn adalah konstanta): if (a = k1 ) then begin aksi1.

26 Konsep Dasar Pemrograman Prosedural aksi2. else begin aksi_n. end. seperti ini: case a of k1 : begin aksi_1. k3: begin aksi_3. Bentuk ini adalah bentuk case of. end. end else begin Aksi_n. dan tipe enum (dijelaskan pada bab 8 Tipe Data Lanjut) Tim Olimpiade Komputer Indonesia . end. end. boolean. end. yaitu integer (dan tipe range). k2 : begin aksi_2. end. Hal yang perlu diperhatikan dalam analisa kasus dengan case adalah bahwa ekspresi yang bisa ditangani dalam case hanya yang nilainya bisa dienumerasi. end else if (a=k3) then begin aksi3.

Konsep Dasar Pemrograman Prosedural 27 Tim Olimpiade Komputer Indonesia .

Pengulangan dilakukan mulai dari suatu indeks awal. Bentuk loop ini sangat sederhana. seperti ini: for i:=1 to 5 do writeln(i). sampai dengan indeks akhir. maka kita bisa (dan sebaiknya) menggunakan bentuk pengulangan ini. end. karena kita bisa memastikan bahwa loop pasti akan berhenti.1 Bentuk Pengulangan FOR Bentuk pengulangan ini adalah yang paling sederhana. seperti ini: for i:=1 to 5 do begin i:=i+2. jika kita ingin melakukan aksi sebanyak N kali (kondisi berhenti adalah jika suatu nilai sudah dicapai). Nilai indeks loop biasanya dapat diubah oleh program. yang akan mencetak angka 1 sampai dengan 5. yaitu ketika nilai indeks sudah sama dengan nilai akhirnya. misalnya: for i:=1 to 5 do writeln('Hello'). namun Anda disarankan untuk TIDAK mengubah INDEKS LOOP di dalam loop. akan mencetak 5 kali kata Hello. Karena hasilnya mungkin tidak dapat diprediksi . Indeks loop (dalam kasus ini i) berguna karena dapat diakses di dalam loop. 6.Bab 6 PENGULANGAN Pengulangan adalah suatu cara untuk mengulangi eksekusi blok instruksi (sekumpulan instruksi) sampai suatu kondisi tertentu dipenuhi.

2 Bentuk Pengulangan REPEAT . Karena loop repeat bisa dikonversi ke bentuk while. maka gunakan bentuk perulangan repeat until .Konsep Dasar Pemrograman Prosedural 29 Bentuk Pengulangan WHILE . end. while (not kondisi) do begin aksi.DO Terkadang jumlah pengulangan yang akan dilakukan belum diketahui di awal sehingga kita tidak bisa menggunakan bentuk perulangan for. 6. Bentuk loop ini adalah while (kondisi) do begin aksi. maka hal yang perlu diperhatikan sama yaitu bahwa loop pasti akan berhenti. Aksi akan diulangi sampai kondisi bernilai true. end. until kondisi. Aksi dalam while akan dilakukan selama kondisi memiliki nilai true. Nested loop adalah loop yang memiliki loop di dalam bagian aksinya.3 NESTED LOOP (Loop Bersarang) Loop boleh memiliki instruksi apa saja di dalamnya. 6. Nested loop dapat dibuat dengan Tim Olimpiade Komputer Indonesia . dan aksi mungkin tidak dilakukan sama sekali jika di awal loop kondisi sudah bernilai false.UNTIL Bentuk pengulangan while do mungkin tidak pernah mengeksekusi instruksi di dalam loop satu kali pun jika kondisi sudah tidak terpenuhi. repeat aksi. bentuk ini sama saja dengan: aksi. termasuk juga instruksi loop yang lain. Jika diinginkan agar minimal sebuah aksi dieksekusi sekali. Hal yang perlu diperhatikan dalam loop ini adalah kepastian bahwa loop akan berhenti (bahwa suatu saat kondisi akan bernilai false).

atau loop while dalam repeat until. end. Jadi kita bisa membuat loop for di dalam loop for. end. atau kombinasi apapun. Akan mencetak: * ** *** **** ***** Tim Olimpiade Komputer Indonesia . Variabel loop bagian luar dapat dipakai oleh loop di bagian dalamnya. Misalnya nested loop for dapat memakai indeks loop di luarnya sebagai batas seperti dalam potongan program ini (dengan i dan j adalah integer): for i:=1 to 5 do begin for j:=1 to i do begin writeln(“*”). Jumlah loop di dalam loop bisa sangat banyak (hanya dibatasi oleh kemampuan kompilator dalam menangani loop bersarang).30 Konsep Dasar Pemrograman Prosedural aneka bentuk loop yang sudah ada.

Dalam setiap bahasa pemrograman prosedural umumnya dikenal prosedur dan fungsi. 7. begin . end. atau memakai subprogram yang sudah ada di dalam program kita yang baru. Fungsi adalah subprogram yang memetakan suatu nilai dari suatu domain ke domain lain. var c: char.Bab 7 SUBPROGRAM Di saat program kita sudah menjadi besar kita akan mengalami kesulitan dalam mengatur kode program. kita bisa menggunakan subprogram untuk membuat program kita terbagi menjadi beberapa bagian yang masing-masing lebih kecil dan lebih mudah dikelola. jika semua kode tersebut disatukan. Contoh penggunaan prosedur tanpa parameter: program testprocedure. Untuk mengatasi hal tersebut. dua buah bentuk subprogram yang umum. sedangkan prosedur adalah suatu subprogram yang melakukan aksi tertentu. Pemecahan program menjadi subprogram yang lebih kecil juga akan mempermudah kita jika ingin membuat program yang serupa. writeln('-------------------').1 Prosedur tanpa parameter Prosedur memungkinkan kita membagi program dengan mengelompokkan aksi menjadi bagianbagian yang jelas terpisah. begin writeln('TIM TOKI'). prosedur juga memungkinkan kita memisahkan bagian program yang sering diulang sehingga tidak perlu ditulis ulang di setiap waktu. kita hanya perlu menyalin. procedure CetakHeader.

1. end. (*diteruskan dgn instruksi untuk mencetak laporan bulanan*) end else begin writeln('Pilihan salah'). Prosedur di atas bisa dipanggil dengan: cetakbintang(5). seperti ini: CetakHeader. end. 7. Perhatikan bahwa pemanggilan prosedur dilakukan dengan menggunakan nama prosedur. yang akan mencetak 5 bintang (*****) di layar. Parameter prosedur berguna sebagai input prosedur: procedure cetakbintang(jumlahbintang: integer) var i:integer begin for i:=1 to jumlahbintang do write('*').1 Prosedur dengan Parameter Agar prosedur lebih generik.32 Konsep Dasar Pemrograman Prosedural writeln('Cetak laporan harian atau bulanan: (H/B):'). maka prosedur bisa menerima parameter. end. Tim Olimpiade Komputer Indonesia . (*diteruskan dgn instruksi untuk mencetak laporan harian *) end else if (c='B') then begin CetakHeader. if (c='H') then begin CetakHeader.

begin jumlah:= 5. end. Tim Olimpiade Komputer Indonesia . end. Perhatikan bahwa ada kata kunci var sebelum nama parameter angka. karena nilai 5 tidak bisa diubah oleh prosedur tambahsatu. Dengan kata lain. tetap 5. baru akan dipakai oleh prosedur.2 Prosedur dengan Parameter by Reference Perhatikan bahwa dalam prosedur seperti ini: procedure tambahsatu(angka: integer) var i:integer begin angka: = angka+1. sehingga nilai jumlah sendiri tidak berubah (hanya salinannya yang berubah). Perhatikan bahwa prosedur tambah satu tidak bisa dipanggil seperti ini: tambahsatu(5).1. end. hal itu menyatakan bahwa parameter angka dilewatkan berdasarkan reference (berdasarkan variabel itu sendiri). Hal ini dikarenakan passing parameter dilakukan by value.Konsep Dasar Pemrograman Prosedural 33 7. Maka nilai jumlah tidak berubah. Jika kita mengubah prosedur tersebut menjadi: procedure tambahsatu(var angka: integer) var i:integer begin angka: = angka+1. misalnya dalam Pascal nama fungsi boleh berada di ruas kiri assignment pada fungsi itu sendiri. artinya nilai jumlah akan disalin. sehingga sekarang program utama yang sama akan menghasilkan angka 6. parameter untuk var hanyalah sesuatu yang boleh berada di ruas kiri assignment (biasanya berupa sebuah variabel. writeln(jumlah). dan pada C makro tertentu boleh di ruas kiri pada assignment). dan prosedur tersebut dipanggil dengan cara: var jumlah: integer. tapi apa yang boleh ada di ruas kiri assignment berbeda untuk setiap bahasa. tambahsatu(jumlah).

b:integer):integer. Contoh sebuah fungsi adalah: function kuadrat(x: integer):integer. Dalam implementasinya fungsi hampir sama persis dengan prosedur (boleh memiliki variabel. dan lain-lain) dengan satu perbedaan yaitu fungsi dapat dan harus mengembalikan nilai. end. function kali_lima(a:integer):integer. Pascal sudah menyediakan aneka fungsi standar.2 Fungsi Sama seperti definisi dalam matematika. Fungsi boleh dideklarasikan tapi belum didefinisikan. fungsi dalam pemrograman juga berarti pemetaan suatu nilai dari suatu domain ke domain yang lain. Ruas kiri adalah nama fungsi itu sendiri. hal ini berguna untuk mengatasi keadaan di mana fungsi A memanggil fungsi B dan Fungsi B memanggil Fungsi A. begin hasil:= kuadrat(5). (* prototipe.34 Konsep Dasar Pemrograman Prosedural 7. end. parameter. begin Tim Olimpiade Komputer Indonesia . begin kuadrat:= x * x. seperti fungsi trigonometri. atau deklarasi fungsi *) function kali(a. dan lain-lain. Variabel hasil akan memiliki nilai 25 Fungsi harus dideklarasikan sebelum dipanggil agar oleh kompilator dapat memeriksa apakah pemanggilan fungsi sudah benar (baik jumlah maupun jenis parameternya). Untuk memanggil fungsi ini: var hasil:integer. fungsi kuadrat. Perhatikan bahwa pada instruksi: kuadrat:= x * x. di sini nilai kembalian dari fungsi diberikan.

end. demikian seterusnya).1 Prosedur dan Fungsi yang bersarang Beberapa bahasa.2 Scope Prosedur dan Fungsi Untuk bahasa yang mendukung prosedur dan fungsi yang bersarang. 7. termasuk juga Pascal. 7. maka yang akan diakses adalah variabel lokal atau parameter • Jika tidak ada nama variabel lokal yang sama dengan global. function kali(a. 5).2. atau secara formal: scope variabel pada sebuah prosedur hanya pada prosedur tersebut.PAS dan LINGKUP. begin kali := a * b. maka scope prosedur dan fungsi yang ada dalam prosedur hanya pada prosedur atau fungsi terluar.Konsep Dasar Pemrograman Prosedural 35 fungsi_a := kali(a. mengijinkan prosedur dan fungsi ada dalam fungsi atau prosedur yang lain (dan di dalam prosedur yang ada di dalam prosedur masih boleh ada prosedur lain. Nama variabel dalam sebuah prosedur hanya berlaku untuk prosedur tersebut. Beberapa aturan: • Nama parameter dan variabel dalam prosedur (disebut variabel lokal) tidak boleh sama • Jika ada nama variabel global yang sama dengan variabel lokal atau nama variabel parameter. b:integer):integer. maka variabel global yang akan diakses Lihat contoh mengenai program kecil SUBPRG.2. Variabel-variabel di dalam prosedur ini boleh memiliki nama yang sama. setiap prosedur boleh memiliki parameter. 7.2.3 Scope Variabel Di dalam setiap prosedur boleh ada deklarasi variabel.PAS Tim Olimpiade Komputer Indonesia . end.

tapi karakter lain sehingga konversi gagal. atau fungsi tambahan pendukung bahasa tersebut.7 menjadi 7). Fungsi konversi yang disebutkan bukan merupakan standar Pascal. Konversi ini melibatkan penggunaan fungsi khusus yang menjadi bagian dari bahasa. floor untuk membulatkan bilangan real ke bawah (6. dan round untuk membulatkan bilangan real ke nilai yang terdekat (6. sehingga perlu dikonsultasikan pada dokumentasi kompilator yang dipakai.7 menjadi 6). Contoh fungsi yang adalah ceil untuk membulatkan bilangan ke atas (6. Tim Olimpiade Komputer Indonesia .36 Konsep Dasar Pemrograman Prosedural 7.3 Konversi tipe dengan fungsi Konversi tipe yang melibatkan tipe yang berbeda jauh dapat dipandang sebagai konversi tipe yang tidak sederhana. Dalam kasus konversi string ke numerik. Untuk FreePascal.7 menjadi 7). ada kemungkinan bahwa string tidak mengandung karakter angka. informasi ini juga bisa diperiksa di buku FreePascal. Fungi atau prosedur konversi juga tersedia untuk mengubah integer/real menjadi string dan sebaliknya.

kamis. rabu. kuning hijau). 8. Dalam Pascal tipe ini didefinisikan dengan cara menyebut elemen-elemennya: type hari = (senin. warna = (merah. angka di luar itu sifatnya tidak valid.2 Subtipe Integer Integer memiliki range tertentu sesuai dengan jumlah bit yang dipakai oleh integer. Tipe Enumerasi Tipe enumerasi adalah tipe yang elemen-elemennya bisa disebutkan satu persatu (bisa dicacah). misalnya untuk mengolah data jam yang berbasis 60 (seksadesimal).Bab 8 TIPE DATA LANJUT Tipe dasar sudah cukup untuk dapat dipakai memproses sebagian besar data yang ada. integer. sabtu. Untuk menyelesaikan persoalan pengolahan data tertentu. enum. tipe jenis ini hanya bisa diberi nilai dengan assignment. Terkadang dalam kasus tertentu hanya diperlukan subrange (sebagian range) integer. namun tipe dasar tidak cukup untuk memproses banyak data. tipe string juga tidak bisa dicacah satu per satu.1 Tipe Enum Tipe enum adalah suatu tipe yang elemennya didefinisikan sendiri satu per satu. Dalam representasinya sebenarnya tipe enum ini adalah sebuah integer yang diberi nama..12. type jam = 1. minggu). yang diperlukan hanyalah angka dari 0 sampai 59. Subtipe integer didefinisikan dengan menyebutkan range untuk tipe tersebut. suatu tipe data baru dapat dibentuk berdasarkan tipe data dasar (primitif). jumat. apalagi data yang memiliki struktur tertentu. Tipe enum tidak bisa dibaca (dengan readln) atau ditulis (dengan writeln). Tipe real tidak bisa dicacah satu persatu. . dan karakter adalah contoh tipe enumerasi. 8. selasa.

lalu melakukan hal ini: M := 61. Deklarasi tipe himpunan adalah: type hari = (senin. harihari = set of hari. maka program tidak akan menolak jika pengguna memasukkan angka selain 0 sampai 59.3 Tipe SET (himpunan) Tipe himpunan adalah tipe yang bisa menerima himpunan nilai yang masing-masing elemennya adalah tipe enumerasi. minggu). detik = 0.59. serta pengecekan keanggotaan. kamis. 8. selasa. rabu. Tim Olimpiade Komputer Indonesia . tapi tidak waktu eksekusi (run time). TODO: ini masuk ke mekanisme eksekusi program Pengecekan run time dan compile time Perhatikan bahwa jika Anda memiliki variabel m dengan tipe menit. begin repeat readln(i). (* bilangan yang dimasukkan ke m pasti sudah valid*) end.59. seperti ini: var i:integer. Perhatikan: tidak semua bahasa pemrograman prosedural memiliki tipe SET. m := i. Operasi yang tersedia untuk himpunan meliputi: gabungan (union). sabtu.38 Konsep Dasar Pemrograman Prosedural menit = 0. irisan (intersection).. dengan kata lain. until (i>=0) and (i<=59). Cara yang benar untuk membaca tipe menit agar masuk ke m adalah dengan membaca integer ke dalam variabel lain dan memeriksa hasil pembacaan.. m: menit. Namun jika dalam program dilakukan hal ini: readln(m). jumat. setkar = set of char. dan pengurangan elemen himpunan. maka kompilator akan menolak program karena ada pemeriksaan pada waktu kompilasi yang mencegah m diisi selain 0 sampai 59. kompilator hanya melakukan pengecekan waktu kompilasi (compile time).

Konsep Dasar Pemrograman Prosedural 39 Tipe set tidak bisa dibaca dan ditulis secara langsung menggunakan read/readln/write/writeln. nilai:real. urut: integer. Deklarasi tipe komposisi dalam Pascal adalah: type mahasiswa = record nama:string. misalnya data nilai mahasiswa dalam suatu kelas untuk dihitung rata-ratanya. Dalam banyak kasus kita perlu menyimpan banyak nilai yang serupa untuk diproses. end. Cara mengakses elemen tipe adalah dengan titik.nama).4 Tipe Komposisi (Record) Suatu tipe bisa disusun dari beberapa tipe. tipe real untuk nilai. Atau dengan blok with : with mhs do begin writeln(nama). jumlah data yang dapat disimpan dibatasi oleh kemampuan kompilator dan komputer. dan tipe integer untuk nomor urutnya. misalnya tipe mahasiswa bisa disusun dari tipe string untuk nama.5 Tabel Berdimensi Satu (Array) Jenis variabel yang telah diberikan hanya bisa digunakan untuk menyimpan sebuah nilai saja. var mhs: mahasiswa. Tabel adalah tipe data yang dapat menampung sejumlah data dengan tipe sejenis. misalnya: writeln(mhs. Jika bagian dari tipe bentukan merupakan tipe dasar yang bisa langsung dibaca atau tulis maka elemen tersebut bisa langsung dibaca atau ditulis. 8. Deklarasi tabel integer yang Tim Olimpiade Komputer Indonesia . end. 8. namun bagian tipe yang tidak bisa dibaca dan ditulis langsung tetap harus diperlakukan khusus.

String dapat menampung serangkaian huruf dan angka. namun yang akan dibahas di bagian ini hanyalah instruksi penambahan atau konkatenasi string. Tim Olimpiade Komputer Indonesia .40 Konsep Dasar Pemrograman Prosedural terdiri dari 100 elemen adalah: var tabint : array [1. String dapat digabungkan seperti ini: program concat_string. jadi untuk menuliskan string “don't do that”. Suatu literal integer dapat ditulis seperti biasa: 5 atau 6. inklusif). Untuk mengakses elemen tabel ke-n gunakan sintaks: tabint[n]. for i:=1 to 100 do jumlah := jumlah + tabint[i].6 String Dalam Pascal String dapat dianggap sebagai tipe data dasar. sedangkan literal string harus ditulis dengan diapit tanda kutip tunggal. s3 : string begin s1:= 'hello'. contoh berikut akan menjumlahkan seluruh elemen tabel integer yang dideklarasikan di atas (jumlah dan i bertipe integer): Jumlah := 0. harus seperti ini: 'don''t do that' 8. digunakan dua kutip tunggal. writeln('Jumlah elemen tabel adalah:'. var s1.. seperti ini: 'ini string' Jika ada tanda kutip di dalam string. s2. 8. dan dapat diakses melalui indeksnya (antara 1 sampai 100. Dengan deklarasi semacam itu sebuah tabel yang terdiri dari 100 elemen integer dibentuk.6.100] of integer. Tabel dapat diproses menggunakan loop (biasanya loop for. jumlah).1 Operasi Terhadap String Ada beberapa operasi untuk string. namun dalam kebanyakan bahasa String hanyalah tipe data array of character. karena indeks tabel sudah jelas).

8. 8.7 String sebagai Array of Character String sebenarnya adalah tabel berdimensi satu dengan elemennya berupa karakter. Fungsi-fungsi string yang tersedia untuk FreePascal dapat dilihat pada buku FreePascal.Konsep Dasar Pemrograman Prosedural 41 s2:='world'. readln(c). Operasi terhadap string yang lain dilakukan dengan menggunakan fungsi-fungsi string yang tergantung pada kompilator Pascal. c:char. Tim Olimpiade Komputer Indonesia . Sedangkan ord(s[0]) akan berisi panjang string yaitu 5. karena tergantung pada implementasi Pascal. Tabel multi dimensi dipandang oleh semua bahasa yang mengenal tipe data tabel satu dimensi. dan string s2. s[2]='e'. s3:= s1 + ' '+ s2. indeks ke-0 tabel berisi panjang string saat ini. spasi. writeln(s3). karena tabel dua dimensi bisa dipandang sebagai tabel dari tabel. Matriks merupakan salah satu contoh tabel dengan banyak dimensi (tabel multi dimensi). Pada string seperti ini: s := 'hello'. Sebuah karakter bisa juga digabung atau disambungkan dengan sebuah karakter: var s:string. Pengaksesan panjang string melalui elemen ke-0 tidak disarankan. Nilai string s3 adalah 'hello world' yang merupakan gabungan dari string s1. dst. dan indeks ke 1 dan seterusnya berisi data karakter yang ada pada string. maka s[1] = 'h'. elemen string sebaiknya hanya diakses mulai dari elemen 1 sampai panjang string. s:= 'Huruf yang Anda masukkan adalah '+c. end. end. writeln(s).8 Tabel Berindeks Banyak (Tabel Multi Dimensi) Terkadang kita perlu memiliki tabel dengan dimensi lebih dari satu. begin writeln('Masukkan sebuah huruf:').

5] of integer. Pemrosesan tabel multi dimensi umumnya dilakukan dengan nested loop.. tipe tabel multi dimensi dapat dideklarasikan seperti ini: var matriks : array [1.42 Konsep Dasar Pemrograman Prosedural Dalam Pascal. Pengaksesan elemen tabel dilakukan dengan memberikan indeks baris dan kolom: matriks[baris. tabel berdimensi tiga dapat dipandang sebagai ruang.5] of integer. atau: matriks[baris][kolom] := nilai. Tabel dengan dimensi lebih dari tiga tidak disarankan untuk digunakan dalam program. Hal yang perlu diperhatikan dalam pemrosesan tabel dengan loop adalah bahwa indeks tabel tidak boleh lebih dari yang sudah dideklarasikan..4.4] of array [1. untuk dimensi yang lebih dari dua. Tim Olimpiade Komputer Indonesia . tambahkan koma setelah 1..5 dan tambahkan range indeks untuk dimensi berikutnya dan seterusnya.. 1. Tabel berdimensi dua bisa dipandang sebagai matriks.. kolom] := nilai. alternatif lain adalah: var matriks : array [1.

Konsep Dasar Pemrograman Prosedural 43 Tim Olimpiade Komputer Indonesia .

sedangkan file biner adalah file yang memiliki format khusus yang harus dibaca oleh program khusus. kita bisa menggunakan file (berkas). Dalam lomba TOKI dan IOI. Program yang ditulis adalah sebuah file. Untuk melakukan penyimpanan tersebut.2 Nama Fisik File File di dalam disket atau harddisk (atau media penyimpanan manapun) akan diidentifikasi dengan menggunakan suatu nama file. di DOS nama file maksimal 11 Karakter). Hal ini berbeda dengan variabel yang nilainya akan hilang ketika program selesai berjalan. File berguna untuk menyimpan data yang akan dipakai kembali. hasil kompilasi (program) juga adalah sebuah file.Bab 9 FILE Variabel adalah bentuk penyimpanan internal ketika program dijalankan. Sistem operasi memiliki batasan dalam penamaan file ini (misalnya di DOS atau Windows nama file tidak boleh mengandung karakter titik dua. dan dapat dipakai kembali meskipun komputer sudah dimatikan. karena apa yang disimpan di file akan ada di media penyimpanan sekunder (harddisk atau disket). File adalah suatu bentuk penyimpanan eksternal dalam suatu media penyimpanan. Ketika Anda mengedit dengan editor. Nama ini disebut dengan nama fisik. jenis file yang digunakan hanya file Teks.1 File teks dan File biner File teks adalah file yang isinya bisa dibaca dan dibuat langsung dengan editor teks biasa. Setiap sistem operasi juga memiliki sifat yang berbeda dalam menangani perbedaan case pada nama . Ada banyak kasus dimana diinginkan agar nilai variabel bisa disimpan kemudian dipakai kembali. sehingga buku ini juga hanya membahas penggunaan file teks. Setelah program selesai. 9. yang Anda edit merupakan file yang jenisnya adalah teks. 9. maka nilai variabel tersebut akan hilang.

'file. harus ditentukan operasi apa yang hendak dilakukan terhadap file tersebut. file teks bisa dibuka untuk dibaca dengan memanggil prosedur reset.2. penulisan file. yang meliputi assign nama fisik ke nama logik. Proses assignment ini dilakukan agar dalam semua langkah berikutnya file bisa diacu berdasarkan variabel tersebut dan bukan nama fisiknya. Windows dan DOS menganggap Aku dan AKU adalah file yang sama. atau file akan ditambah isinya di bagian akhir (append). pembacaan file. dan dibuka untuk ditambah isinya dengan prosedur append.txt'). Dalam Pascal. apakah file akan dibaca saja. pembukaan file. 9. Tim Olimpiade Komputer Indonesia . maka file dapat dibuka. Contoh assign: var t:text. begin assign(t. dan penutupan file. sementara Linux menganggap bahwa Aku dan AKU mengacu ke dua file yang berbeda. atau file akan dibaca dan ditulis. Dalam beberapa bahasa.1 Primitif Pemrosesan File Ada lima primitif yang digunakan dalam memproses file. Perbedaan dalam sistem operasi ini perlu diperhatikan oleh program agar dapat berjalan di semua lingkungan. Ketika membuka file. assignment ini merupakan langkah yang terpisah dari langkah membuka file. end. • Assign nama fisik ke nama logik Pemrosesan file diawali dengan assignment nama fisik (berupa string yang merupakan nama yang dikenali sistem operasi) ke nama logik (suatu variabel dalam program yang memiliki tipe file atau tipe text).Konsep Dasar Pemrograman Prosedural 45 file. proses assignment dari nama fisik ke nama logik dilakukan ketika file dibuka.Assignment nama fisik ke nama logik tidak melakukan hal apapun terhadap file. dibuka untuk ditulis (isi file sebelumnya akan dihapus) dengan prosedur rewrite. atau file akan ditulisi. • Membuka file Setelah proses assign file dilakukan. File teks di Pascal tidak bisa dibuka untuk dibaca dan ditulis sekaligus. Pada Pascal.

Program berikut ini akan menuliskan 2 baris ke dalam sebuah file teks.46 Konsep Dasar Pemrograman Prosedural • Membaca file File yang dibuka dengan prosedur reset bisa dibaca menggunakan read atau readln. Jika ada file dengan nama input. (*tuliskan integer yang dibaca dari file *) close(t). i).txt'). maka jika program berikut ini dijalankan: program baca_file. 'Hello'). begin assign(t. 'input.txt. 123). (*buka file untuk dibaca*) readln(t. dengan parameter pertama adalah nama logik file. rewrite(t). (*baca string dari file*) readln(t. (*tuliskan string ke dalam file*) writeln(t. sebuah file yang dibuka dengan menggunakan append bisa ditulisi dengan menggunakan write atau writeln. var t:text. baris pertama adalah kata hello dan baris kedua adalah sebuah integer 123 program tulis_file. Kata hello dan angka 123 dibaca dari file input. Maka hasilnya adalah program akan mencetak hello dan diikuti dengan angka 123 di baris berikutnya. diikuti satu baris angka 123). 'output. (*tuliskan integer ke dalam file *) Tim Olimpiade Komputer Indonesia . var t:text. Penulisan dengan write dan writeln yang dilakukan terhadap file akan tertulis pada file dan tidak pada layar. Proses pemabacaan seolah-olah seperti ada pengguna yang mengetikkan suatu input melalui keyboard. end. i:integer. (*tuliskan string yang dibaca dari file *) writeln(i). File yang sudah ditulisi ini bisa dibaca lagi dengan program yang serupa. reset(t). (*baca integer dari file *) writeln(s).txt dengan isi berikut: hello 123 (isi file satu baris kata hello. begin assign(t. (*buka file untuk ditulisi*) writeln(t.txt'). s). s:string. • Menulis file Sebaliknya.

misalnya seperti ini (anggap t adalah nama logik untuk file yang sudah dibuka untuk dibaca. maka file perlu ditutup.3 Skema dasar Pembacaan File Semua soal TOKI dan IOI mewajibkan peserta membaca input dari sebuah file dan menuliskan hasil ke dalam file lain. (* lakukan pemrosesan *) end. i adalah sebuah integer. end. (* buka file *) While (not eof(t)) do begin readln(t. Pembacaan file juga bisa dilakukan terhadap file yang tidak diketahui jumlah barisnya dengan menggunakan fungsi eof. for i:=1 to jumlahbaris do begin readln(t. • Menutup file Setelah selesai. Penutupan file dalam Pascal dilakukan dengan memanggil prosedur close dengan parameter nama logik file yang telah dibuka. misalnya file berisi : 5 adi budi charlie desi eni Skema pembacaan yang dilakukan untuk membaca soal semacam itu adalah dengan loop for dengan terlebih dahulu membaca jumlah yang akan diloop. tabs[i]). Setiap soal TOKI selalu diberi jumlah baris yang akan dibaca berikutnya. Setelah file ditutup sistem operasi akan memastikan bahwa file dipindahkan ke media penyimpanan. s). jumlahbaris). 9. dan tabs adalah array of string): readln(t. end. file mungkin belum dituliskan ke media penyimpanan. Fungsi eof akan mengembalikan true jika akhir dari file telah tercapai. Tim Olimpiade Komputer Indonesia . Hasil output program di atas dapat dibaca oleh contoh program sebelumnya. sebelum file ditutup.Konsep Dasar Pemrograman Prosedural 47 close(t). dan false jika belum.

s). Assign(stdout. yang memetakan ulang stdin ke file 'input. Teknik semacam ini sebaiknya tidak digunakan. reset(stdin). Read dan Readln akan membaca dari nama logik STDIN yang merupakan file input standar (yang dipetakan oleh sistem operasi menjadi input dari keyboard).48 Konsep Dasar Pemrograman Prosedural STDIN dan STDOUT Sebenarnya fungsi read/readln dan write/writeln tanpa parameter file akan menganggap dua buah nama logik untuk input dan output. Tim Olimpiade Komputer Indonesia . Anda mungkin akan banyak menemui contoh program dari peserta TOKI yang memakai teknik seperti ini: assign(stdin. s). sama saja dengan readln(stdin. program memakai fitur sistem operasi (yang kebetulan saat ini didukung oleh Windows dan Linux). (* sama dengan readln(stdin.txt').txt' sehingga untuk membaca file cukup dilakukan dengan readln(s). 'fileout. karena selain mengurangi keterbacaan program. Sehingga instruksi readln(s). rewrite(stdout). sama saja dengan writeln(stdout. yang mungkin tidak akan ada di semua sistem.txt'). sedangkan Write dan Writeln akan menulis ke nama logik STDOUT yang merupakan file output standar (yang dipetakan oleh sistem operasi menjadi output ke layar komputer). s) *) Sebaliknya stdout juga bisa dipetakan agar semua writeln akan muncul di file. dan writeln(s). 'input.

Konsep Dasar Pemrograman Prosedural 49 Tim Olimpiade Komputer Indonesia .

Bab 10 FUNGSI DAN PROSEDUR REKURSIF Fungsi dan prosedur bisa memiliki sifat yang rekursif. sedangkan bagian yang memanggil dirinya sendiri disebut sebagai bagian rekurens. yaitu untuk n = 0 (yang hasilnya adalah 1) dan untuk n lebih dari nol (hasilnya adalah faktorial (n – 1) dikalikan dengan n. begin if (n=0) then (*basis*) begin . Fungsi rekursif hanya akan dibahas perkenalannya saja. function faktorial(n: integer):integer. yang artinya struktur data tersebut bisa menunjuk ke struktur data yang lain yang sama. fungsi rekursif ini mengandung dirinya sendiri dalam definisinya: faktorial n = faktorial (n – 1) * n dan faktorial 0 = 1 Perhatikan bahwa ada dua definisi fungsi ini. karena terlalu komplels. Struktur data rekursif tidak akan dibahas dalam buku ini. 10. Bagian yang tidak memanggil dirinya sendiri (dalam kasus n = 0) disebut dengan basis. Konsep rekursif bisa sangat rumit. dan akan dibahas di buku lain yang mengajarkan problem solving dan algoritma. Struktur data juga bisa memiliki sifat yang rekursif. artinya prosedur dan fungsi tersebut memanggil dirinya sendiri dalam bagian implementasinya.1 Fungsi yang rekursif Fungsi faktorial adalah contoh fungsi yang rekursif.

hasil: integer. maka rekursi tidak akan berhenti. Secara umum semua bentuk rekursif bisa diubah menjadi bentuk interatif. 10.Konsep Dasar Pemrograman Prosedural 51 faktorial:= 1. end else (* rekurens *) begin faktorial:= n * faktorial ( n – 1). Penggunaan bentuk rekursif biasanya lebih lambat. var i. while (i<n) do begin i:=i+1. dan harus dijamin bahwa pada suatu saat kondisi basis akan dipenuhi. Tim Olimpiade Komputer Indonesia . hasil:=1.2 Rekursif dan interatif Suatu bentuk rekursif bisa diubah menjadi bentuk iteratif (bentuk perulangan/loop). Tanpa bagian basis. faktorial:= i. end. hasil:=hasil * i. end. jadi bagian basis ini harus ada. end. misalnya fungsi faktorial di atas dapat diubah menjadi: function faktorial(n: integer):integer. namun bentuk rekursif biasanya lebih natural untuk menyelesaikan masalah yang sifatnya memang rekursif. begin i:=0. end.

16. 35. 18. 36 Integrated Development Environment · 4 interpreter · 1. 31. 12.then . 44 D debugger · 1. 3.else · 23 Indeks loop · 27 input · 9. 19. 46. 46 File · 9. 15. 3. 16. 40 Fungsi · 30. 28.then · 23 if . 2. 19 bug · 4 I IDE · 4 Identifier · 11 if . 45. 4. 18. 14 Instruksi · 9. 10. 46 FOR · 27 FreePascal · 5. 50 false · 18. 4 Interpreter · 2. 44. 45 Array · 38. 35. 24 Integer · 14. 47 Assignment · 12. 34 E Editor · 4 eksekusi · 1. 11. 19. 43. 27. 37 Eksekusi · 2 EKSEKUSI · 1 Ekspresi · 9. 19. 47 Input · 8. 21 Elemen · 8 Enum · 36 Enumerasi · 36 eof · 46 H hardware · 2. 4 bahasa Pascal · 4. 17. 5. 16. 40. 19. 3. 43 Boolean · 14. 9. 14. 23. 15. 4 hardware) · 4 himpunan · 37 B bahasa assembly · 2 Bahasa assembly · 2 bahasa mesin · 2. 49 fungsional · 1 C Case · 24 case of · 25 Character · 40 compile time · 37 . 4 intersection · 37 F faktorial · 49. 45.Index A algoritma · 2. 8. 33. 49 Algoritma · 8 append · 44. 40 ASCII · 17 Assign · 44. 20 biner · 15. 14. 46. 3. 4 deklaratif · 1 G global · 10.

31. 50 Tim Olimpiade Komputer Indonesia O objek · 1 operand · 9. 33. 2. 45. 19. 21. 19. 47 rewrite · 44. 37 proses · 4. 38. 46. 47 run time · 37 S Scope · 34 seksadesimal · 36 sekuensial · 2. 9. 46. 50 Rekurens · 9 REKURENS · 49 rekursif · 49. 8 precedence · 16 program · 1. 4. 38 Real · 14. 40 teks · 4. 29. 45. 30. 17. 37. 35. 47 readln · 15. 37. 18 . 16 operator · 9. 55 PEMROGRAMAN · 1. 5. 10 programmer · 2. 47 real · 12. 16. 9 SET · 37 sintaks · 2. 16. 14. 43. 46. 4 prosedur · 11. 24. 19 U unary · 16 underscore · 11 UNICODE · 17. 20 reference · 32 rekurens · 49. 34. 40 output · 9. 19. 14. 13. 39. 29. 9. 9. 14. 28. 19. 14 Konversi · 21. 22. 35 P paradigma · 1. 43 keyword · 10 kompilator · 1. 8. 45. 2. 46 N NESTED LOOP · 28 R read · 15. 47 Parameter · 31. 8 Paradigma · 1. 40 Struktur Data · 9 subprogram · 30 Subtipe · 36 L lokal · 34 loop · 15. 19. 32. 29. 3. 14. 44. 45.Konsep Dasar Pemrograman Prosedural 53 iteratif · 50 ord · 17. 17. 41. 14 K Karakter · 14. 15. 14. 45 REPEAT .UNTIL · 28 representasi · 1. 9. 47. 10. 27. 12. 30. 3. 30. 9. 5. 39. 49 prosedural · 1. 8. 15. 22 reset · 44. 43. 39 software · 4. 45. 34. 18. 13. 45. 38. 35. 20. 34. 36. 19. 5 Konstanta · 8. 33. 37. 33. 35. 37. 5. 46. 9. 36. 18. 44 Proses · 4. 8. 4. 32 pemrograman · 1. 21. 55 true · 18. 11. 45. 10. 11. 55 STDIN · 47 STDOUT · 47 String · 39. 2. 40 Kompilator · 3. 46. 46. 12. 36. 38 TOKI · 30. 22. 44. 13. 28. 46. 37. 43. 47 PROGRAM · 1. 40. 38. 45. 16. 4. 39. 2 PARADIGMA · 1 parameter · 31. 32. 44. 47 Output · 8. 14. 21. 32. 50 M mekanisme · 1 MEKANISME · 1 MOD · 20 Moduler · 9 T Tabel · 38. 30. 2. 20. 45 Tipe · 8. 44. 27.

14. 27. 44 Variabel · 8. 13. 12. 33. 34 W WHILE .54 Konsep Dasar Pemrograman Prosedural union · 37 variabel · 11. 37. 21. 38. 17. 22. 15. 12. 17. 14. 40. 36. 20. 14. 45. 34. 31. 39. 32. 45. 29. 37 Tim Olimpiade Komputer Indonesia . 38. 13. 15. 32. 36. 43.DO · 27 write · 14. 33. 31. 24. 47 V valid · 11. 21. 30. 23. 38. 47 writeln · 11.

Konsep Dasar Pemrograman Prosedural 55 Tim Olimpiade Komputer Indonesia .

Selain menguasai hampir semua bahasa pemrogramanm populer.BIODATA SINGKAT PENULIS Yohanes Nugoroho. penulis adalah salah satu Pengajar/Pembina di Tim Olimpiade Komputer Indonesia. serta aktif menghasilkan berbagai macam tulisan/artikel tentang teknologi informasi. Sarjana Teknik Informatika lulus tahun 2002 dari Departemen Informatika Institut Teknologi Bandung saat ini bekerja sebagai teaching assistant di Departemen Teknik Informatika ITB dan merupakan salah satu pembina di TOKI Biro ITB. yang handal. . Penulis juga aktif pada kegiatan Opensource di Indonesia dan banyak terlibat dalam proyek-proyek pembangunan software. Saat ini juga sedang menyelesaikan studi lanjutan S2-nya di institusi yang sama..

Sign up to vote on this title
UsefulNot useful