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

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

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

system operasi akan menjalankan kode mesin yang telah disimpan – dalam hal ini source code tidak diperlukan lagi. kemudian menterjemahkannya menjadi perintah mesin yang bersesuaian (kode mesin) dan menjalankannya seketika. ia akan membaca perintah source code dan menulis kode mesin. Eksekusi menjadi lebih cepat.T. ia akan membaca perintah source code baris perbaris. Ketika anda ingin menjalankan program tersebut. dan dapat dijalankan dikomputer lain (dalam hal ini pada komputer dan system operasi yang sama) Indoprog 4 . anda membutuhkan source code dan interpreter untuk menjalankannya. BAHASA TINGKAT TINGGI Orang segera menyadari bahwa komputer dapat menterjemahkan bahasa assembly mejadi kode mesin. Setelah selesai keseluruhan kode mesin akan disimpan untuk pemakaian selanjutnya. Ketika anda menggunakan suatu compiler. INTERPRETER dan COMPILER Ketika anda menggunakan suatu interpreter.Algoritma & Pemrograman Hendra. dan mereka mudah memikirkan bagaimana jika komputer dapat diprogram dengan bahasa yang lebih "alamiah" [lebih alamiah untuk manusia]. sehingga ketika anda mencoba menjalankan program yang sama pada kesempatan berikutnya. Kode mesin ini tidak disimpan. S. inilah awal dari bahasa generasi ketiga yaitu High Level Languages.

Naik taxi. Menunggu saja ditempat pengambilan bagasi. yang mana diyakini Indoprog 5 . anda perlu memilih bagaimana hal tersebut dilakukan. Dari sinilah Algoritma Komputer muncul. juga terdapat banyak cara algoritma yang berbeda. Perhatikan contoh berikut untuk membantu pengertian anda tentang konsep dari algoritma. KOMPUTER DAN ALGORITMA Untuk membuat komputer melakukan sesuatu. 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. Dalam menulis suatu program komputer. Algoritma adalah teknik dasar untuk menyelesaikan suatu pekerjaan.T. Masing-masing algoritma memiliki keuntungan dan kerugian untuk situasi yang berbeda. Algoritma Bus: Keluar dari tempat pengambilan bagasi. tetapi paling mahal. tetapi lambat. Ketiga algoritma diatas memiliki tujuan yang sama. naik bus nomor 70. langkah-langkah persis apa yang harus ia lakukan. Dalam pemrograman komputer. Jalan kaki dua blok arah utara ke rumah anda. Ketika komputer menjalankan program tersebut. Berikut ini adalah empat algoritma yang berbeda yang mungkin dilakukan teman anda: Algoritma taxi: Pergi ke pemberhentian taxi. Tentu saja anda perlu memilih algortima sesuai dengan situasi dan kondisi. tetapi masing-masing melakukannya dengan cara yang berbeda. Berikan alamat rumah anda. Turun di jalan pada jalan AB. S. Turun dan naik bus nomor 14 pada jalan utama. Masing-masing algoritma diatas juga menghabiskan waktu dan biaya yang berbeda. dan teman anda ingin berangkat dari airport ke rumah anda. Naik bus mungkin adalah paling hemat. Katakanlah misalnya anda mempunyai teman yang baru tiba di airport. Ketika anda memberitahu kepada komputer apa yang harus dilakukan. Kata aslinya algorism mengacu pada aturan dari melakukan aritmetika menggunakan bilangan Arab dan berkembang menjadi algoritma pada abad 18. Kata algoritma (algorithm) berasal dari nama matematikawan Persia pada abad 9 Abu Abdullah Muhammad bin Musa al-Khwarizmi. telepon ke handphone anda. Algoritma Telepon untuk dijemput: Ketempat pemberhentian. kita perlu memberitahukan kepada komputer. anda perlu untuk menulis program komputer. ia akan melakukan setiap langkah secara mesin untuk mencapai tujuan akhir. Masuk ke taxi.Algoritma & Pemrograman Hendra. adalah contoh yang paling cepat.

perancangan (design) dan pewujudannya (implementation). Pemrograman dalam pengertian luas meliputi seluruh kegiatan yang tercakup dalam pembuatan program. Salah satunya adalah memahami langkah-langkah pengembangan suatu program yang besar. Kita sering mendengar bahwa berbagai program besar memiliki banyak bug maupun menyebabkan crash ketika dioperasikan pada kondisi tertentu dan beberapa lama setelah dijalankan.T. kita sering tidak mengetahui dengan persis. Hal lain yang harus dinyakini adalah keterbatasan memori manusia. bahkan untuk programmer yang profesional. sedangkan program yang besar umumnya dikembangkan atas permintaan dan dipakai oleh orang lain. pemrograman merupakan pengkodean (coding atau program writing = penulisan program) dan pengujiannya (testing) berdasarkan rancangan tertentu. Tetapi banyak cara yang dapat kita lakukan untuk menghasilkan program dengan bug yang lebih sedikit. Indoprog 6 . langkah-langkah ini dikenal sebagai Software Development Life Cycle. dan mereka tetap dapat mengingatnya pada saat perubahan dibutuhkan. banyak orang sebagai programmer pertama didunia. S. Pada program yang besar. perencanaan dan perancangan program dengan pemrogram (programmer) yang bertugas membuat kode program dan menguji kebenaran program. Pemahaman yang lebih sempit ini sering digunakan dalam pembuatan program-program terapan komersial yang membedakan antara system analyst yang bertanggung jawab dalam menganalisa kebutuhan. sejak Charles Babbage tidak pernah menyelesaikan analytical engine-nya. programmer harus memiliki semua informasi yang tertulis untuk memahami atau mengubah program.Algoritma & Pemrograman Hendra. Oleh karena itu program tersebut harus ditulis dengan lebih hati-hati untuk mencegah segala bentuk pemakaian yang menyimpang. penulisan program yang besar adalah tidak mudah. serta harus disertai dengan dokumentasi dan petunjuk pemakaian. Adalah tidak mungkin untuk menghasilkan program yang bebas dari kesalahan. Dalam pengertian yang lebih sempit. Bagaimanapun. Tahapan Pengembangan Program Permasalahan dalam pembuatan program yang besar tentu saja berbeda dengan program yang kecil. dan algoritma tersebut tidak pernah diimplementasi padanya. termasuk analisis kebutuhan (requirement's analysis) dan keseluruhan tahapan dalam perencanaan (planning). Oleh karena itu. kebanyakan orang dengan mudah dapat memahami program dibawah 10 baris dalam beberapa detik. pada program yang kecil umumnya dikembangkan untuk sekali pakai dan meliputi suatu detail yang kecil.

Untuk penyelesaian aritmatik. Contoh: untuk membuat program luas_lingkaran kita membuat model matematis c = a x b 3. Pemrograman Implementasi algoritma ke dalam program (algoritma sendiri dalam komputer adalah merupakan program). Gambar : Tahap pengembangan program 1.fatal error). 5. Dengan pembuatan model akan terlihat dengan jelas hubungan antara objek-objek dalam sistim yang akan kita bangun. model adalah suatu gambaran sederhana dari sistim yang kita buat. Pengembangan Model Pembuatan model dari sistim yang akan kita bangun. Pengumpulan data 2. Menentukan hal-hal yang diperlukan oleh sistim c. kesalahan saat eksekusi (runtime error) kesalahan logika program (program berjalan tapi menghasilkan output yang salah. Rancangan algoritma Pembuatan urutan instruksi yang akan ditulis pada program (dijelaskan lebih lanjut) 4. biasanya model dibuat dalam bentuk rumus matematik.Algoritma & Pemrograman Hendra. Batasan Masalah Merencanakan sistim dan spesifikasi program: Siapa yang akan menggunakan program dan untuk apa? dengan cara: a.T. Dokumentasi Pembuatan catatan pada program terutama pada modul-modul yang rumit. Uji dan Validasi Pengujian terhadap program : seperti kesalahan penulisan (syntax error) . Menentukan tujuan dan hasil yang akan dicapai b. Suatu ilustrasi tentang rumitnya SDLC yang dapat menyebabkan kekacauan berikut ini : Indoprog 7 . S.

Algoritma & Pemrograman Hendra. S. 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 .T.

tipe. Juga nama sub-program dinyatakan di sini } DESKRIPSI { Semua langkah atau aksi algoritma dituliskan di sini } Contoh: 1). suatu teks algoritma disusun dalam tiga bagian.Algoritma & Pemrograman Hendra. S. Aturan Penulisan Teks Algoritma Tidak ada notasi yang baku dalam penulisan teks algoritma. yaitu: 1.Y) ini hanya memerintahkan penyajian nilai X ke piranti keluaran (output). konstanta. sifat atau identitas lainnya yang melekat dengan suatu proses. Algoritma menerima masukan jejari lingkaran. Bagian deklarasi. Bagian deskripsi algoritma. meliputi nama-nama: tipe. { input jejari lingkaran bilangan riil } l_Lingkaran : real. Teks Algoritma Mengikuti alur konsep pemrograman prosedural. algoritma dituliskan mendekati gaya bahasa pemrograman umumnya. { Nilai phi = 22/7 } { nama peubah } var R : real.T. konstanta. menghitung luasnya. Algoritma bukanlah program yang harus mengikuti aturan-aturan tertentu. Perhatikan dalam notasi write(X. input/output B:integer) Indoprog 9 . Algoritma adalah bebas bahasa pemrograman. Meski demikian. Misal. variabel. pemakaian pemisah antara X dan Y menggunakan koma atau spasi. Kepala algoritma: Algoritma Luas_Lingkaran { Menghitung luas lingkaran dengan ukuran jejari tertentu.Nama-nama yang bermakna disebut mnemonic. 2) Deklarasi algoritma: DEKLARASI { nama konstanta } const PHI = 3. { luas lingkaran bilangan riil } { nama sub program } procedure TUKAR(input/output A:integer. dan 3.14. Setiap bagian disertai dengan penjelasan atau dokumentasi tentang maksud pembuatan teks. Dalam notasi itu juga tidak memasalahkan format ataupun bentuk-bentuk tampilan lainnya. dituliskan dalam algoritma sebagai write(X. 2. Bagian penjelasan diawali dan diakhiri dengan simbol { dan }. tulis nilai X dan Y. Bagian kepala algoritma. seperti dicetak dalam satu baris X dan Y. dalam menulis nama-nama dalam algoritma harus mempunyai makna yang mencerminkan proses.Y). sub-program dan lainlainnya. dan menyajikan hasilnya ke piranti keluaran } Perhatian. variabel. Algoritma NAMA_ALGORITMA { Penjelasan tentang algoritma yang menguraikan secara singkat hal-hal yang dilakukan oleh algoritma } DEKLARASI { Semua nama yang digunakan. Hal-hal yang bersifat teknis ini baru dipikirkan waktu penulisan program.

maupun pada sistem design dan pemrograman.Algoritma & Pemrograman Hendra. Sub program memutus aktivitas karena Indoprog 10 . dan pengertian yang lebih baik terhadap proses akan membawa kepada perbaikan dan pengembangan. Konektor.Setelah pertukaran. Simbol untuk penghubung antar aktifitas. Tampilkan luas lingkaran.Jika R <= 0 tulis pesan data salah. S. Konstruksi flowchart memungkinkan pengertian yang lebih baik kepada proses. tulis(l_Lingkaran). Urutan penulisan menentukan urutan pelaksanaan perintah. Berbagai jenis flowchart telah dikembangkan pada berbagai bidang seperti pada sistem produksi. jika R <= 0 then tulis("Data salah !") selain itu l_Lingkaran = PHI x R x R. } baca(R).Parameter A dan B sudah terdefinisi nilainya. Hal tersebut memungkinkan anda untuk memecah proses menjadi kejadian-kejadian individual atau aktifitas untuk menunjukan secara singkat hubungan diantaranya. { Baca data jejari lingkaran R.T. { Mempertukankan nilai A dan B. Setiap langkah algoritma dibaca dari atas ke bawah. selain itu hitung luas ingkaran. 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. Flowchart Flowchart adalah alat untuk menganalisa proses. Simbol untuk keterbatasan media kertas. 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.

S.Algoritma & Pemrograman Hendra. Komentar Contoh pemakaian flowchart: Sequential (berurutan) perhitungan volume dan luas permukaan silinder Selection/Branching Structure (Struktur pemilihan) Indoprog 11 .T.

S. Repetition/Looping Structure(Struktur pengulangan) Indoprog 12 .T.Algoritma & Pemrograman Hendra.

Algoritma & Pemrograman Hendra. Kombinasi Indoprog 13 . S.T.

pseudo code — tidak dapat dieksekusi langsung pada komputer. Karena bentuk pseudocode bervairasi dari pengarang yang satu dengan pengarang yang lain. Bahasa natural digunakan pada bagian detail yang kurang penting. tetapi bentuk yang sering digunakan untuk pengenalan adalah sebagai berikut : Indoprog 14 .T. walaupun banyak meminjam tata cara penulisan dari bahasa pemrograman popular (seperti C. Pseudocode Pseudocode adalah cara generik untuk menerangkan suatu algoritma tanpa menggunakan tata cara penulisan bahasa pemrograman tertentu. atau Fortran).Algoritma & Pemrograman Hendra. walaupun mereka tidak menggunakan bahasa pemrograman yang sama. tetapi merupakan model dan harus diubah menjadi kode pemrograman yang sebenarnya. Textbook computer science sering menggunakan pseudocode pada contoh sehingga semua programmer dapat memahaminya. Lisp. dan ditulis sama detailnya. S. Flowchart dahulu digunakan di computer science untuk mengambarkan algoritma. Tetapi bagaimanapun flowchart lebih visual dan sering digunakan pada saat presentasi. Dewasa ini trend kedepan adalah pemakaian pseudocode untuk mengambarkan algoritma. Sebagaimana namanya. Pseudocode. secara alamiah dapat terdiri dari berbagai bentuk. dimana mereka merupakan blok-blok instruksi untuk suatu rangkaian operasi.

BEGIN { mulai } { input } read(R). { selesai } Indoprog 15 . END. { proses } If R <= 0 then tulis("Data salah !") else L_Lingkaran = PHI x R x R.Algoritma & Pemrograman Hendra. { output } write(l_Lingkaran). S.T.

Bahasa ini dirancang pada IBM untuk perhitungan scientific. dan Indoprog 16 . Von Neumann menyebutnya sebagai "conditional control transfer" (www. bahasa Short Code dilahirkan (www. Jadi.byte. Sejarah dari bahasa pemrograman komputer Sejak pertama komputer difference engine diciptakan oleh Charles Babbage pada tahun 1822.softlord. Bagian kedua dari ide tersebut menyatakan bahwa kode komputer harus dapat bercabang berdasarkan pernyataan logika seperti IF (ekspresi) THEN.com). Instruksi-instruksi ini dikenal sebagai bahasa pemrograman.Algoritma & Pemrograman Hendra. Yang pertama dikenal sebagai "shared-program technique" (www. hal ini dapat dipahami sebagai suatu rangkaian pengetikan kedalam komputer dan kemudian dijalankan.com). Pada awalnya. bahasa khusus yang pertama muncul dalam bentuk FORTRAN yang merupakan singkatan dari sistem FORmula TRANslating. Pada 1949. tetapi masih banyak mengadopsi prinsipprinsip dasar dari Babbage's engine yang mana diprogram dengan mengeset switch dan perkabelan pada seluruh sistem pada setiap "program" maupun kalkulasi.T. bentuk awal dari bahasa komputer adalah berupa gerakan secara mekanik. komputer membutuhkan sejumlah instruksi untuk melakukan suatu tugas tertentu. S. hal ini memungkinkan komputer diprogram ulang dengan cepat. difference engine-nya Charles Babbage hanya dibuat untuk menjalankan tugas dengan menggunakan perpindahan gigi roda untuk menjalankan fungsi kalkukasi. Pada teknik ini dinyatakan bahwa hardware komputer haruslah sederhana dan tidak perlu dilakukan pengkabelan dengan menggunakan tangan untuk setiap program. Komponen-komponennya sangat sederhana. Pada 1945. Sebagai gantinya. selanjutnya gerakan mekanik tersebut digantikan dengan sinyal listrik ketika pemerintah AS mengembangkan ENIAC pada tahun 1942. Konsep yang kedua yang juga sangat penting untuk pengembangan bahasa pemrograman. Bahasa komputer mulanya terdiri dari sejumlah langkah pengkabelan untuk membuat suatu program. atau blok kode yang kecil yang dapat panggil berdasarkan aturan tertentu. "Conditional control transfer" mengembangkan ide adanya "libraries. dari pada suatu himpunan tunggal urutan kronologis yang harus dijalankan oleh komputer. Pada 1957. John Von Neumann yang bekerja pada Institute for Advanced Study mengemukakan dua konsep yang secara langsung mempengaruhi masa depan dari bahasa pemrograman komputer." yang mana merupakan blok kode yang dapat digunakan berulang kali. Tentu saja ini merupakan pekerjaan yang membosankan.softlord. dan perulangan seperti FOR statement. instruksi-instruksi yang lebih kompleks harus digunakan untuk mengendalikan perangkat keras yang lebih sederhana. setelah beberapa tahun Von Neumann bekerja.com). Ide ini berkembang menjadi bentuk subrutin. yang merupakan bahasa komputer yang pertama untuk peralatan elektronik yang membutuhkan programmer untuk mengubah perintah kedalam 0 dan 1 dengan tangan.

Sesuatu perbedaan yang paling nyata dari bahasa ini dengan bahasa lain adalah dasar dan type satu-satunya adalah list. DO. sehingga membuatnya agak mudah dipelajari. Dia juga merupakan bahasa pertama dengan suatu tata bahasa formal.. menjadi bahasa yang membosankan dan sulit digunakan (www. perintah-perintah ini merupakan lompatan besar kearah depan. C. seperti rekursif pada function. Hal tersebut juga memungkinkan pengelompokan menjadi array dan record. yang dikenal sebagai Backus-Naar Form atau BNF (McGraw-Hill Encyclopedia of Science and Technology. Hal ini mengarah kepada adopsi terhadap bahasa yang lebih kecil dan kompak seperti Pascal.T." sebagaimana dia sangat berbeda dari logika Boolean (Wexelblat. dengan dikembangkannya COBOL. Tata cara penulisan LISP dikenal sebagai "Cambridge Polish. Perintah-perintah COBOL sangat menyerupai tata bahasa English.parenthesized prefix notation. Karena dirancang untuk fungsi spesialisasi yang tinggi. sehingga data di telusuri dan diorganisasikan dengan lebih baik. bahasa ini terbatas pada hanya terdiri dari perintah IF. Type data yang ada hanya berupa number dan text string. Kontribusi utamanya adalah merupakan akar dari tiga bahasa selanjutnya yaitu Pascal.byte. Bahasa Algol dibuat oleh suatu komite untuk pemakaian scientific pada tahun 1958. real. Sesuatu hal yang menarik untuk dicatat bahwa suatu program COBOL dibuat menyerupai suatu essay. sehingga LISP memiliki kemampuan yang khusus untuk memodifikasi dirinya. Type data dasar yang digunakan sampai sekarang ini dimulai dari FORTRAN.y) . yang mana merupakan hal yang penting pada komputasi bisnis. C++. dan GOTO. Semua ciri-ciri ini dikembangkan agar mudah dipelajari dan mudah diterapkan pada dunia bisnis.com). John McCarthy di MIT membuat bahasa LISt Processing (atau LISP). Pada Algol telah diterapkan konsep-konsep baru. tetapi tidak terlalu baik untuk menangani proses input dan output. Komputasi bisnis mulai tinggal landas pada 1959. maka tata cara penulisannya jaring kelihatan sebelum ataupun sesudahnya. hal ini meliputi variabel logika (TRUE atau FALSE). menyediakan bagi programmer akses tingkat rendah kedalam komputer. Pascal dimulai pada tahun 1968 oleh Niklaus Wirth. Program LISP sendirinya dibuat sebagai suatu himpunan dari list. yang dirancang untuk riset Artificial Intelligence (AI). bahasa berikutnya Algol 68. dengan empat atau lima bagian utama yang membentuk keseluruhan yang tertata dengan baik. 454). dan juga dapat berkembang sendiri. what was used to describe the LISP program OR(x. yang ditandai dengan suatu urutan item yang dicakup dengan tanda kurung. what was used in the LISP program x OR y . dan bilangan integer. serta double-precision.Algoritma & Pemrograman Hendra. dan Java. 177) : x V y . Tujuan utama Indoprog 17 . Pada 1958.Cambridge Polish. tetapi pada waktu itu. Sampai saat ini. S. FORTRAN sangat baik dalam menangani angka-angka. yang dirancang dari awal sebagai bahasa untuk para pebisnis.standard Boolean logic LISP masih digunakan sampai sekarang karena spesialiasi yang tinggi dari sifat abstraknya.

MacOS. Wirth kemudian membuat lanjutan dari Pascal. dia mengkombinasikan kemampuan yang terbaik dari bahasa-bahasa saat itu. Pascal juga mengembangkan tipe data "pointer". C dikembangkan pada tahun 1972 oleh Dennis Richie ketika sedang bekerja pada Bell Labs di New Jersey. Unix memberikan C beberapa fasilitas besar seperti variabel dinamis. C sangat sering digunakan untuk pemrograman sistem operasi seperti Unix. Pascal dirancang dengan pendekatan yang sangat teratur (terstruktur). Dalam pengerjaannya banyak perintah-perintah yang tidak teratur dan aneh dihilangkan. Ritchie mengembangan C untuk sistem Unix yang baru pada saat yang bersamaan. dan ALGOL. yang mana memperbolehkan perintah bercabang seperti suatu pohon pada suatu aturan: CASE expression OF possible-expression-value-1: statements to execute. COBOL. sehingga sangat menarik bagi pemakai (Bergin. 100-101). suatu fasilitas yang sangat bermanfaat pada bahasa yang mengimplementasikannya. C dan Unix saling berkaitan.Algoritma & Pemrograman Hendra. Tetapi karena dia menghilangkan semua kelemahan yang terdapat di Pascal. termasuk perintah CASE tersedia di C. 101102). yang mana sangat dibutuhkan. membuatnya menjadi bahasa yang sukses besar. dan merupakan salah satu penyebab kekalahannya (Bergin. END Pascal juga mengembangkan variabel dinamis. Oleh karena itu.. atau kelompok dari variabel-variabel. Modula-2. Kombinasi dari kemampuan input/output dan kemampuan matematika yang solid. melalui perintah NEW dan DISPOSE. penanganan interrupt. dan strong lowlevel. S. C menggunakan pointer secara luas dan dibangun untuk kecepatan dengan kelemahannya yaitu menjadi sulit untuk dibaca. Dia juga menambahkan perintah CASE.. dimana variabel dapat dibuat ketika suatu program sedang berjalan. C merupakan perkembangan dari B dan BCPL. tetapi agak menyerupai Pascal..T. tetapi pada saat itu muncul C yang dengan cepat menjadi mengeser posisi Pascal. Windows. Pada awalnya bahasa ini dikembangkan bukan dengan harapan adopsi pemakaian secara luas. Semua fasilitas di Pascal. input-output. 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. possible-expression-value-2: statements to execute. Oleh karena ini. Pada akhir tahun 1970 dan awal 1980. Transisi pemakaian dari bahasa umum yang pertama ke bahasa umum sampai hari ini yaitu transisi antara Pascal dan C. multitasking. forking. sehingga dengan cepat mengambil alih posisi Pascal. pengembangannya adalah untuk kebutuhan pengajaran. dan Linux. FORTRAN.. suatu metode pemrograman yang baru telah Indoprog 18 . Tetapi Pascal tidak mengimplementasikan suatu array dinamis.

Ha tersebut dikenal sebagai Object Oriented Programming. yang mana berubah menjadi sesuatu yang menjanjikan setelah interactive TV gagal. C++ menyediakan cara yang baik untuk memanipulasi ratusan instance dari manusia didalan elevator. Pada tahun 1994. Netscape menyetujui pemakaian Java pada internet browser mereka.. interaktif TV adalah teknologi masa depan. Object merupakan suatu potongan dari data yang dapat dipaket dan dimanipulasi oleh programmer. 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.THEN. C++ sering kali digunakan dalam simulasi. Bahasa ini dikenal sebagai Java. yaitu bahasa portable (bahasa yang dapat berjalan pada banyak jenis mesin yang berbeda). Visual Basic sering diajari sebagai bahasa pemrograman dasar yang mengacu pada bahasa BASIC yang dikembangkan pada tahun 1964 oleh John Kemeny dan Thomas Kurtz. Sun Microsystems memutuskan bahwa interaktif TV membutuhkan suatu hal yang khusus. dikembangkan. dan GOSUB yang mana menjalankan suatu blok kode dan kembali ketitik semula didalam alur program. Dan Sun telah membuat cacat penerimaan terhadap Java dengan pertikaian politis dengan Microsoft. gambarm dan slider bars. Perintah-perintah dijalankan secara berurutan. BASIC adalah bahasa yang sangat terbatas dan dirancang untuk orang yang bukan computer science. VB merupakan program yang banyak digunakan untuk membuat interface sederhana ke produk Microsoft lainnya seperti Excel dan Access tanpa membaca banyak kode. pada kenyataanya "bahasa tersebut tidak". Sampai titik ini. dengannya dapat dimungkinkan untuk dibuat aplikasi yang lengkap. Item-item ini dikenal sebagai "widgets. Bahasa ini menjadi pilihan pada mata kuliah AP Computer Science sampai hari ini. atau pasukan yang diisi dengan tipe prajurit yang berbeda. team proyek Java mengubah fokus mereka ke web. Navigator. Microsoft telah mengembangkan BASIC ke dalam produk Visual Basic (VB).Algoritma & Pemrograman Hendra. Pada awal 1990's. Java menjadi bahasa masa depan dan beberapa perusahaan mengumumkan aplikasi harus ditulis dalam Java. Dia memiliki masalah yang serius dalam optimasi.T. seperti game. S. Indoprog 19 . atau suatu window kosos dimana anda dapat drag dan drop komponen seperti menu." Kemampuan lanjutan ini dikembangkan menjadi bahasa C++ yang diluncurkan pada tahun 1983. Pada tahun berikutnya. Java mempunyai tujuan yang besar dan merupakan bahasa yang baik menurut buku text. Bjarne Stroustroup menyukai metode ini dan mengembangkan lanjutan dari C yang dikenal sebagai "C With Classes. C++ dirancang untuk mengorganisasikan kemampuan dasar dari C dengan OOP. tetapi kendali program dapat berubah berdasarkan IF. dengan arti program yang ditulis dengannya berjalan dengan lambat. Jantung dari VB adalah form. dengan tetap mempertahankan kecepatan dari C dan dapat dijalankan pada komputer yang tipe berlainan. atau OOP." 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.

What is a computer program ? Explain what is the different between High Level Language & Low Level Language ! How about Machine Language & Assembly Language ! Explain how are interpreters and Compiler works ! Is a computer program like an algorithm ? What can we use to presenting an algorithm ? Draw the symbols use in flowchart. Bahasa umum yang pertama menekankan pada kesederhanaan dan untuk satu tujuan saja. Bahasa pemrograman telah berkembangan dari masa kemasa dan tetap dikembangkan dimasa depan. 2.Algoritma & Pemrograman Hendra.T. Latihan 1 1. 7. 5. sehingga mereka dapat digunakan untuk semua tujuan. Dan mungkin bahasa yang akan datang lebih natural dengan penemuan pada quantum dan komputer-komputer biologis. Perl adalah singkatan dari Practical Extraction and Reporting Language atau Pathologically Eclectic Rubbish Lister. and mention each symbols function ! Indoprog 20 . 6." karena sering digunakan sebagai engine untuk interface web atau pada script untuk memodifikasi file konfigurasi. S. 4. Dia memiliki fungsi text matching yang sangat baik sehingga membuatnya menjadi hal yang ideal untuk pekerjaan tersebut. Tergantung kepada siapa anda bertanya. Langkah-langkah ini berkembang menjadi software dan memiliki kemampuan yang lebih baik. sedangkan bahasa dewasa ini terbagi atas bagaimana mereka diprogram. 3. Mereka dimulai dari suatu daftar langkap pengkabelan agar komputer menjalankan tugas tertentu. Perl dikembangkan oleh Larry Wall pada 1987 karena fasilitas pada sed dan awk pada Unix (digunakan untuk manipulasi text) tidak mencukupi kebutuhannya. Perl telah sering digambarkan sebagai "duct tape of the Internet.

0. 3 Free Pascal (aka FPK Pascal) is a 32 or 64 bit (from 1. dan ilmuwan dengan pendekatan terstruktur.9.borland. dan program ini secara bebas dapat di download pada alamat http://bdn. Apakah Turbo Pascal mendukung pemrograman berorientasi object ? Mulai versi 5. a member of the original group that created ALGOL.freepascal.borland. 2 Blaise Pascal.2).1410. he published his specification for a highly-structured language which resembled ALGOL in many ways. The following operating systems are supported Linux. Bahasa Pascal dirancang untuk menyelesaikan masalah dari berbagai kalangan pemakai. FreeBSD.html (Antique Software: Turbo Pascal version 5.5 Turbo Pascal telah dilengkapi dengan kemampuan pemrograman berorientasi object.9. Apa artinya Pascal adalah bahasa pemrogram terstruktur ? Pascal adalah suatu bahasa pemrograman terstruktur. and shifted his focus towards religious studies. Sparc (from 1. pendidik. In 1641.5) Adakah compiler Pascal lainnya selain Turbo Pascal ? Compiler Pascal lainnya yang cukup terkenal adalah Free Pascal3 yang dapat didownload pada http://www. Nama Pascal diambil dari seorang ahli matematika yang bernama Blaise Pascal2 yang menemukan mesin hitung pertama.x only). It is available for different processors Intel x86. Indoprog 21 ." Pascal died in Paris on August 19.9. Bahasa Pascal dikembangkan dari Bahasa Pemrograman ALGOL.org/ (Free Pascal).com/article/0.6). In 1650. Pascal constructed the first arithmetical machine. arguably the first computer. Apa itu Turbo Pascal ? Salah satu kompiler pascal yang terkenal dan tercepat adalah Turbo PASCAL yang dibuat oleh perusahaan Borland (http://www. Free Pascal merupakan compiler yang dikembangkan oleh komunitas open source. S. perusahaan Borland mengeluarkan Borland Delphi (Windows) dan Kylix (Linux) yang menggunakan dasar dialek Pascal (object Pascal) pada lingkungan pemrograman Visual. PowerPC (from 1.6) and Motorola 680x0 (1. NetBSD. or.com). as Pascal wrote.20803. 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. Turbo PASCAL telah membuat pascal sebagai salah satu bahasa pemrograman yang popular dikalangan IBM PC. Hal tersebut berarti semua program yang anda buat harus terstruktur dan teratur. mulai dari para mahasiswa. He would improve upon the instrument eight years later. at the age of eighteen.T.9. 1 Dr. 1662. Adakah versi Turbo Pascal untuk pemrograman Visual ? Pada trend pemrograman Visual. Pascal left the world of geometry and physics. a French mathematician who was a pioneer in computer development history. to "contemplate the greatness and the misery of man.6) pascal compiler.Algoritma & Pemrograman Hendra. He named it Pascal. Amd64/x86 64 (from 1.00. Niklaus Wirth of the Swiss Federal Institute of Technology (ETH-Zurich). dalam hal ini harus menghindari pemakaian goto dan jump. In 1971.

Win32. MacOSX/Darwin. begin . MacOS classic..Algoritma & Pemrograman Hendra. DOS. C#. sebagai bahasa pemrograman yang terstruktur Pascal akan menjadi dasar praktek pemrograman yang baik bagi mahasiswa. Bagaimana Struktur program pascal yang paling sederhana ? Struktur program pascal yang paling sederhana adalah : uses .. SunOS (Solaris). padahal trend pemrograman dewasa ini adalah C/C++. Kemudian Borland merupakan salah satu perusahaan yang terus mengembangan produknya. QNX and Classic Amiga. {Your program is here} end. Bagaimana kalau saya mau membersihkan layar terlebih dahulu sebelum mencetak tulisan ? Untuk membersihkan layar. var ...... S. anda dapat menggunakan perintah Clrscr yang terdapat pada unit CRT. and b) to define a language whose implementations could be both reliable and efficient on then-available computers. BeOS. Dapatkah anda memberi contoh sebuah program pascal yang sederhana ? begin Writeln('Saya sedang belajar Pascal !'). Netware (libc and classic).. terutama Delphi dan Kylix yang menggunakan Object Pascal. Indoprog 22 . end.. Pascal relatif lebih mudah dipelajari.T. Mengapa kita belajar bahasa pemrogram Pascal. Sedangkan bahasa Java dan C# adalah bahasa pemrograman terkini yang menekanan kepada pendekatan berorientasi object. 4 According to the Pascal Standard (ISO 7185). padahal pendekatan tersebut adalah tidak mudah untuk orang yang baru belajar pemrograman komputer. 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. Writeln('Di STMIK IBBI'). 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. dan Java ? Sebagaimana tujuan awal dari pembuatan bahasa Pascal adalah untuk pengajaran pemrograman komputer di perguruan tinggi4. OS/2. Jika dibandingkan dengan C/C++.

Output)...... Library ini diistilahkan sebagai unit dalam Turbo PASCAL yang terdiri dari SYSTEM.Algoritma & Pemrograman Hendra.. (*menggunakan Unit Crt *) Perhatian : Unit system merupakan unit yang secara otomatis akan disertakan dalam setiap program. Bagaimana Struktur program pascal yang kompleks ? Adapun struktur dasar suatu program pascal adalah sebagai berikut : program .. label . S. end. CRT yang ditempatkan dalam file TURBO... Jika ditulis akan memberikan nama program dan suatu daftar parameter optional dimana program itu berkomunikasi. .. . . uses . end. Indoprog 23 . Writeln('Saya sedang belajar Pascal !'). . Contoh : Uses CRT. GRAPH. Daftar itu terdiri dari sederetan indentifier yang diakhiri dengan tanda kurung dan dipisahkan dengan tanda koma.. Writeln('Di STMIK IBBI')... LIBRARY merupakan file penyimpan subroutine yang secara berulang digunakan saat proses program. begin statement. type . var . function .TPL. Contoh : Program Perhitungan(Input. { { { { { { { { Program heading } Uses clause } Labels } Constants } Types } Variables } Procedures } Functions } { Statements } Program heading Judul program dalam Turbo Pascal bersifat optional dan tidak ada pengaruhnya dalam program.. . const .. DOS. . . .T. OVERLAY. procedure .. . begin Clrscr.. Sedangkan unitunit lain hanya akan disertakan bila kita pilih pada bagian uses. unit inilah mengatur semua perintah dasar input dan output pada Pascal. Contoh : Uses Crt. Uses Clause Bagian uses clause digunakan untuk menentukan library yang dibutuhkan saat proses program..

serta function non-standard yang dipakai didalamnya harus nyatakan (deklarasi) terlebih dahulu pada bagian deklarasi. const. Penulisan nama dalam deklarasi tersebut harus memenuhi syarat-syarat sebagai berikut : . Segala yang ada pada bagian uses maupun deklarasi merupakan pendukung terhadap isi program. diawali dengan alphabet . procedure dan function. type. Ordinal types Type data yang mempunyai urutan pasti.2147483647 0..255 Ukuran 8 bit 16 bit 32 bit 8 bit Indoprog 24 . dan masih terbagi menjadi .Algoritma & Pemrograman Hendra. S. bahwa setiap variabel. atau (* ini adalah keterangan *)... Variabel Declaration Setiap variabel yang digunakan dalam program harus didefinisikan terlebih dahulu sebelum digunakan. Untuk membuat keterangan gunakan tanda kurawal { ini adalah keterangan }. var. label. Syarat terpenting dalam pembentukan suatu program adalah.T.tidak boleh serupa dengan indentifier lainnya. Setiap deklarasi tersebut harus bersifat unik (tidak boleh serupa satu sama yang lain). Seluruh perintah dan urutannya serta proses Input/Output dalam program perlu disusun secara teratur oleh penyusun program. Type data apa saja yang disediakan Turbo Pascal ? Adapun type variable yang disediakan pada TURBO PASCAL : 1. Bagaimana membuat keterangan ? Untuk membuat program anda menjadi mudah dibaca dan dimengerti.tidak ada special character kecuali tanda garis bawah ("_") . procedure non-standard. type ini masih terbagi atas berberapa menurut jangkauan data dan ukurannya : Type Shortint Integer Longint Byte Jangkuan -128. Declaration Bagian ini meliputi deklarasi untuk label.. maka perlu diberi keterangan yang akan diabaikan oleh kompiler.tidak boleh serupa dengan reserved word (kata tercadang) . type non-standard.Integer Type variable yang beguna untuk pengolahan data yang bulat.32767 -2147483648.127 -32768.panjang nama maximum 63 character. Cara penulisan ini adalah : Var <nama var> : <type variable>. Statement Bagian ini merupakan inti dari program.

16 bit .'*'.2e18 Ketelitian 11-12 digit 7-8 digit 15-16 digit 19-20 digit 19-20 digit Ukuran 6 bit 4 bit 8 bit 10 bit 8 bit Untuk pengolahan type variabel diatas di sediakan berbagai jenis operator antara lain : Operator + * / DIV MOD Operator NOT AND OR XOR SHL SHR Integer Type Penjumlahan Pengurangan Perkalian Pembagian Hasil bagi Sisa Bagi Integer Type Bitwise Negation Bitwise AND Bitwise inclusive OR Bitwise exclusive OR Bitwise shift-left Bitwise shift-right Real Type Penjumlahan Pengurangan Perkalian Pembagian Boolean Type Logical Negation Logical AND Logical inclusive OR Logical exclusive OR 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 .4e38 ³ 7-8 5..9e-39.Boolean Type varibale yang berguna untuk pengolahan hal yang hanya mempunyai dua ketentuan yaitu benar(TRUE) dan salah(FALSE) saja.9.T.Algoritma & Pemrograman Word 0.1..5e-45.4e-4932. 2.1..1..2e18. untuk type real ini juga terbagi atas beberapa : Type Real Single Double Extended Comp Jangkauan 2.65535 Hendra.. '3'.1e4932 -9. S.#7 untuk menyatakan ' harus ditulis '''' .Char Type variabel yang berguna untuk pengolahan character ASCII.7e38 1.7e308 3. Real types Type variable yang beguna untuk pengolahan data yang tidak bulat.3..0e-324. type character ini penulisannya ditandai dengan dua buah petik tunggal seperti : 'A'.

end. saya sedang belajar Pascal di STMIK IBBI'. Writeln('Bilangan Pi adalah '. Pi:2:3).' tahun'). begin Write('Berapa umur anda ? '). Begin Pi := 22/7. Bagaimana menampilkan tulisan ke layar ? Pascal menyediakan perintah Write dan Writeln yang dapat anda gunakan untuk menampilkan tulisan ke layar. 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.Algoritma & Pemrograman Hendra. Write('Komentar anda: ').UmurKu. Keterangan : String. Bagaimana kalau saya ingin membaca masukan dari pemakai ? Perintah Readln dapat digunakan untuk membaca masukan dari pemakai dan menyimpannya ke suatu variabel. Keterangan:='Hi. Writeln('Saya berumur '. Pi). Indoprog 26 . Writeln('Saya berumur '. dimana x adalah jumlah tempat sebelum desimal dan y adalah jumlah tempat setelah desimal. var UmurKu : Byte. Silahkan coba koding berikut : var Pi : Real.T. S. Readln(UmurKu). Writeln(Keterangan). Writeln.UmurKu. compiler akan memeriksa pemakaian type data yang bersesuaian. Writeln('Bilangan Pi adalah '.' tahun'). Writeln(Keterangan). Sebagaimana anda ketahui bahwa Pascal adalah bahasa yang dirancang untuk pembelajaran pemrograman komputer yang terstruktur. Readln(Keterangan). Jadi setiap variabel yang dideklarasi harus disesuaikan dengan nilai yang akan disimpan kevariabel tersebut. Pada saat kompilasi. (*Program anda*) begin UmurKu:=19. end. end. Dapatkah anda memberi contoh program yang menggunakan variabel ? {Deklarasi variabel} var UmurKu : Byte. Keterangan : String.

What is the line "uses" for ? 3. Run Setelah program anda dikompilasi. anda dapat menjalankannya. Mempelajari proses ini adalah berbeda dengan belajar bagaimana untuk membuat program. Kompiler mengubah source code anda menjadi bahasa mesin. Untuk menghilangkan runtime error atau logical error anda perlu kembali ke langkah pertama. What does structured programming mean ? 2. What is the difference between "Write" and "Writeln" ? 5. proses ini dikenal sebagai testing.Algoritma & Pemrograman Hendra. anda harus menguasai proses ini—dan hal tersebut adalah penting. Setelah suatu program berhasil dikompilasi artinya dia telah benar secara syntax. Pada tahapan ini dapat ditemui logical error ataupun runtime error. Proses pemrograman komputer Ketika melakukan pemrograman dengan menggunakan bahasa tingkat tinggi. atau logical error. Mekanisme ini dikenal sebagai siklus editcompile-run. Dokumen yang anda hasilkan pada tahap ini dikenal sebagai source code. tetapi masih dapat mengandung runtime error. Berikut ini adalah proses membuat sebuah program : Edit Ketika anda menulis sebuah program dalam bahasa tingkat tinggi. Ketika anda menjalankan program anda. Pascal programs always begin with _______ and end with _______ 4. anda harus meng-edit kembali kode anda sampai dapat dikompilasi dengan benar. hal yang pertama yang perlu anda lakukan adalah memeriksa apakah programt tersebut berjalan seperti yang diharapkan. Latihan 1 1. S. ada beberapa operasi yang harus dilakukan. anda perlu meng-kompilasi-nya dengan menggunakan suatu software yang disebut sebagai compiler. anda menulis perintahperintahnya dalam bentuk perintah bahasa pemrograman dengan menggunakan text editor.T. How can we write two blank lines on the screen ? Indoprog 27 . jadi inilah yang dikenal sebagai siklus edit-compile-run cycle sampai program dapat berjalan dengan benar. Compile Setelah anda selesai menulis program anda. Jika program anda gagal di kompilasi (tejadi kesalahan "grammatical" atau sytnax errors pada kode anda).

What is the difference between "Read" and "Readln" ? 9. var r : integer. 15.Algoritma & Pemrograman Hendra. 4. 3. begin write('masukkan panjang jari-jari :'). How can we get user's input ? 8. Make a program to write your name and your age on screen. and Fahrenheit. luas := 3. How can we view and pause the screen after the program ran ? 11. luas : real. Make a program to calculate the area of a circle. Limit the fractional part 3 places before decimal point and 4 places after decimal. readln(r). Mention at least 5 variable type names with their range and types ! 7. program menghitung_luas_lingkaran. readln.T. How can we declare variables in Pascal ? 12. S.75 to Word variables ? 10. Make a program to convert temperature from Celcius to Reamur. Can we enter the value "1/4" to Real variables ? 16. How can we limit the fractional output to 3 places before and after the decimal point? 14. 2. end. Explain how can the string be limited on display. 6. What key should we press to run a program in Borland Pascal 7.luas:8:4). writeln('luas lingkaran adalah :'.14*r*r. Explain what is edit-compile-run cycle in proses of programming ? Latihan di Laboratorium 1. Make a program to input user's comment and print it. Kelvin. Indoprog 28 .0 ? 13. Why can't we enter the value 0.

dan statement adalah perintah yang akan dijalankan. pascal menyediakan struktur pengambilan keputusan berikut: If condition Then Statement1 Else Statement2.Algoritma & Pemrograman Hendra. Atau lebih baik ditulis sebagai Indoprog 29 . misalnya kita akan membuat program menentukan pembayaran berdasarkan berdasarkan jumlah belanja. jika diatas 100000 (seratus ribu) mendapatkan potongan 3%. dan sebaliknya Statement2 dijalankan ? Untuk keputusan seperti ini. salah satu tujuan kita menggunakan komputer adalah membantu dalam pengambilan keputusan. Dimana condition adalah sesuatu yang bernilai True atau False. dan tentu saja keputusan yang terprogram. maka programnya adalah sebagai berikut : Uses Crt. Readln. Writeln('Jumlah yang harus anda bayar '. Var Belanja : Real.97. Bagaimana kalau condition True Statement1 dijalankan. Dapatkah anda memberikan sebuah contoh pemakaian perintah If ? Baiklah. apakah program yang dapat dibuat hanya untuk perhitungan matematika sederhana? Tentu saja tidak. Readln(Belanja).Belanja:10:2). End. S. Modul 2 Pada pertemuan sebelumnya kita telah belajar membuat program dengan pascal. apa artinya ? Artinya komputer dapat mengambil keputusan untuk berdasarkan aliran logika yang telah ditentukan sebelumnya yang dikenal sebagai algoritma. Anda menyebutkan keputusan terprogram.T. Begin Clrscr. Ok. Write('Jumlah belanja ? '). Bagaimana penulisan perintah pengambilan keputusan pada Pascal ? Salah satu perintah struktur pengambilan keputusan adalah : If condition Then statement. If Belanja > 100000 Then Belanja := Belanja * 0. saya mengerti bahwa pada prinsipnya Statement setelah Then akan dijalankan kalau condition setelah If menghasilkan nilai True.

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 . If conditon Then Statement1 Else Statement2. misalnya 4 Statement yang harus dijalankan berdasarkan masing-masing condition ? Oh. 50 s/d 59 mendapat D. Misalnya kita akan membuat nilai huruf dari angka dengan kriteria 80 keatas mendapat A. If (Bilangan Mod 2) = 0 Then Writeln ('Genap') Else Writeln ('Ganjil'). Var Bilangan : Integer. Readln(Bilangan). misalnya : If condition1 Then Statement1 Else If condition2 Then Statement2 Else If condition3 Then Statement3 Else Statement4.T. dan dibawah 49 mendapat E. Begin Clrscr. 70 s/d 79 mendapat B. Langsung saya buatkan contoh : Uses Crt.Algoritma & Pemrograman Hendra. hal itu bisa dilakukan dengan merangkai beberapa struktur If. bagaimana kalau keputusannya lebih dari 2. S. 60 s/d 69 mendapat C. Jadi pada prinsipnya adalah terdiri dari tiga struktur If. Readln. End. Write('Masukan Bilangan ? '). He-he-he.

Hendra.79 : 60. grade:='D'. End. untuk keperluan tersebut kita dapat memblok perintah-perintah tersebut dengan Begin … End. pascal juga menyediakan suatu struktur Case. Range3 : Statement3. Tetapi sesuatu hal yang perlu diperhatikan bahwa variabel yang akan dievaluasi dengan Case haruslah Ordinal type. grade:='A'. bagaimana kalau statement yang harus dijalankan pada masingmasing condition lebih dari 1 ? Ya. Contoh : If Belanja > 100000 Then Begin Belanja := Belanja * 0.69 : 50. yang akan menjalankan statement berdasarkan range tertentu.. Opss.. S.97. … Else StatementN.. benar. adakah cara lain untuk melakukan hal tersebut ? Selain struktur kendali If.59 : Else End. End. grade:='B'. Range2 : Statement2.. adapun syntaxnya adalah sebagai berikut : Case variabel Of Range1 : Statement1. Wah panjang banget. grade:='C'. Lebih sederhana bukan. Writeln ('Anda berhak mendapat potongan 3%'). Saya akan menggulangi contoh diatas dengan struktur Case : Case mark of 80.100: 70. sering kita perlu menjalankan beberapa Statement pada masing-masing condition. hampir lupa.T. grade:='E'. Indoprog 31 .Algoritma & Pemrograman grade:='C' else { 59 or below goes here } if mark>=50 then grade:='D' else { 49 or below goes here } grade:='E'.

Pertanyaan yang terakhir. Explain briefly each syntax ! 3.') else writeln('Superb !'). 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 !'). writeln('Thank you for using this program !'). writeln('Congratulations !'). How could we do nested branching ? Is it legal ? 4. Latihan 2 1. Misalnya kita akan mencari tahun kabisat. But every year divisible by 100 is NOT a leap year 3. S. Catatan Instruktur Berdasarkan hasil pengamatan.. In the Gregorian calendar. Unless the the year is also divisible by 400. the following rules decides which years are leap years: 1. Make a program to ask ages. then it is still a leap year. kesalahan yang sering dilakukan oleh mahasiswa dalam pemakaian struktur If…Then…Else. What does Pascal provide in order to perform conditional branching ? 2. Every year divisible by 4 is a leap year. Determine the output if i=5 and j=3 for the following excerpt : if i<4 then writeln('Need more experience . which is the calendar used by most modern countries. 5.).T. end. 2. you have it !'). 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. Classify the ages into these categories : * age < 2 ==> "You are a baby !" Indoprog 32 . if j<=3 then writeln('But. adalah didepan Else tidak ada pemakaian titik koma (. OR.. I would prefer better ones.Algoritma & Pemrograman Hendra.') else begin writeln('Yes.

S. make a program to solve aX2 + bX + C problem. * age to 65 ==> (Give comments yourself) 6. Using ABC formula.Algoritma & Pemrograman * * * * * * 2 12 18 24 40 55 to to to to to to age age age age age age < < < < < < 12 18 24 40 55 65 ==> ==> ==> ==> ==> ==> "You are a kid !" "You are a teenager !" "You are a young adult !" "You are an adult !" "You are middle aged !" (Give comments yourself) Hendra. Indoprog 33 .T.

seterusnya selesai. Dimana variabel harus ordinal type Contoh : Var I : Integer. 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. tetapi akibatnya program kita menjadi panjang dan tidak efisien. Atau For variabel := nilai awal DownTo nilai akhir Do Statement. sebanyak 10 kali. dalam hal ini looping akan berperan. bisa saja anda menggunakan perintah Writeln(' STMIK IBBI '). dan program tersebut berjalan hanya sekali. sekarang saya sudah punya gambaran. For variabel := nilai awal To nilai akhir Do Statement. dan sebaliknya pakai DownTo Contoh : Indoprog 34 . tetapi bagaimana struktur perintah perulangan pada pascal ? Salah satu struktur perintah perulangan pada pascal adalah yang menggunakan counter. dapatkah anda memberikan contoh pemakaian looping? Tentu saja anda telah menjalankan program pada pertemuan-pertemuan sebelumnya. S. Apa itu Looping Secara sederhana looping diartikan sebagai proses berulang terhadap statement maupun serangkaian statement lebih dari satu kali. Aduh. pada pertemuan ini kita akan membahas tentang Looping. STMIK IBBI '). Begin For I := 1 To 10 Do Writeln(' End. Bukankah lebih baik kita memerintahkan komputer untuk secara berulang menjalankan perintah Writeln(' STMIK IBBI '). Tapi tadi saya lihat yang satu pakai To dan yang satu lagi pakai DownTo.Algoritma & Pemrograman Hendra. Modul 3 Hallo. Ok.T. sebanyak 10 kali. ketemu lagi. kurang jelas. apa sih bedanya ? Kita menggunakan To kalau nilai awal < nilai akhir. coba bayangkan misalnya anda ingin mencetak tulisan STMIK IBBI sebanyak 10 baris di layar. Apakah hal tersebut tidak dapat dilakukan tanpa looping ? Tentu saja bisa. Benar juga ya.

Apa maksudnya variabel counter harus ordinal type ? Maksudnya variabel counter harus berupa salah satu type seperti Byte. Supaya tidak membingungkan pascal menyediakan suatu function Inc(variabel). saya belum pernah melihat persamaan seperti ini secara matematika ! Ya.' '). yaitu : Repeat Statement. Begin For I := 10 DownTo 1 Do Writeln(' End. tetapi pada dunia pemrograman artinya menaikan nilai variabel I sebesar 1. STMIK IBBI'). Dan bahkan misalnya Bo adalah boolean. While condition Do Statement. S.T. dapat juga For Bo :=false to true do writeln(Bo). End. Contoh : I := 1. Integer. sekarang saya sudah jelas dengan struktur looping pada bahasa pascal. Shortint. ada lagi. Longint. Ok. sebagai penganti I:= I + 1. … Until condition.Algoritma & Pemrograman Var I : Integer. Hendra. yaitu yang melakukan perulangan yang menggunakan condition. memang hal ini tidak mungkin ada secara matematika. Tunggu dulu. IBBI'). Repeat Indoprog 35 . Misalnya Ch adalah Char. masih ada satu struktur perulangan dengan condition. Boolean. Contoh : I := 1. Adakah struktur perulangan lainnya pada bahasa pascal ? Ya. While I <= 10 Do Begin Writeln(' STMIK I := I + 1. Apakah maksudnya I := I + 1. Char. maka dapat dilakukan For Ch := 'a' to 'z' Do Write(Ch.

karena begitu ketemu perintah Break. coba perhatikan contoh berikut I := 11. Until I <= 10. IBBI').T. bukankah begitu ? Tentu saja ada perbedaannya. IBBI'). Hendra. Repeat Writeln(' STMIK Inc(I). S. dan struktur Repeat melakukan pemeriksaan di akhir. Break. End. Until I <= 10. While I <= 10 Do Begin Writeln(' STMIK Inc(I). gunakan perintah Break. Bagaimana dengan yang berikut ini : I := 1.Algoritma & Pemrograman Writeln(' STMIK Inc(I). IBBI'). Dan I := 11. tidak akan mencetak apa-apa. Akan mencetak STMIK IBBI sekali saja. maka proses keluar dari looping. Pada prinsipnya struktur While melakukan pemeriksaan awal. sedangkan pada contoh 2 akan mencetak tulisan STMIK IBBI minimal 1 kali. Pada contoh 1. Bagaimana kalau kita ingin keluar dari pertengahan looping walaupun conditionnya masih terpenuhi ? Mudah saja. Kalau begitu ya sama saja dengan yang While. While I <= 10 Do Begin Writeln(' STMIK I := I + 1. dan anda juga dapat menggunakan perintah Continue untuk kembali ke While ataupun Repeat. IBBI'). Contoh : I := 1. IBBI'). End. Indoprog 36 . While I <= 10 Do Begin Writeln(' STMIK I := I + 1.

serta memudahkan pembacaan program. Explain the characteristics of all three loop syntaxes in Pascal ! 2. Latihan 3 1. hal ini terjadi karena looping menjalankan apa-apa. End. pemakaian indentasi akan membantu pemeriksaan kelengkapan block begin…end.T. sehingga menyebabkan looping tidak menjalankan statement sebagaimana yang diharapkan. dan While…Do adalah adanya pemakaian titik koma dibelakang Do. Akan menyebabkan tulisan STMIK IBBI hanya dicetak satu kali. kesalahan yang sering dilakukan oleh mahasiswa dalam pemakaian struktur For…Do. Hendra. Contoh : For I := 1 To 10 Do. terutama dalam program yang besar. Suppose the output is : 1 Indoprog 37 . Writeln(' STMIK IBBI '). Explain the differences between them ! 3.Algoritma & Pemrograman Continue. S. Indentasi pada penulisan program Pascal yang menggunakan perintah-perintah terstruktur adalah sangat penting. Catatan Instruktur Berdasarkan hasil pengamatan.

begin write('jumlah data :'). Explain how to nest one syntax to another ! Latihan di laboratorium 1. Input : 5 Output : 1 2 3 4 5 7. S. Input : 5 Output : 1 1 1 1 1 6. readln(n). Input : 5 Output : 1 2 3 4 5 2 2 2 2 2 3 3 3 3 3 4 4 4 4 4 5 5 5 5 5 3. end. Input : 5 Output : 1 1 1 1 1 4.Algoritma & Pemrograman Hendra. for i := 1 to n do begin for j := 1 to n do write (j). readln. Input Output Input Output : : : : 5 1 2 3 4 5 4 3 2 1 1 1 2.T. Indoprog 38 . Input : 5 Output : 2 3 4 5 1 3 4 5 1 2 4 5 1 2 3 5 1 2 3 4 2 2 3 2 3 4 2 3 4 5 1 2 3 4 5 1 2 3 4 5 1 2 3 4 5 1 2 3 4 5 2 3 3 4 4 4 5 5 5 5 1 1 2 1 2 2 1 1 1 1 1 2 3 2 1 1 2 3 3 2 1 1 2 3 4 3 2 1 1 2 3 4 4 3 2 1 1 2 3 4 5 4 3 2 1 1 2 3 4 4 3 2 1 1 2 3 4 3 2 1 1 2 3 3 2 1 1 2 3 2 1 1 2 1 2 2 1 1 1 1 1 program jawaban_soal_no_2. var n. Input : 5 Output : 1 2 3 4 5 5. 2 3 4 5 6 Write an excerpt using all three syntaxes ! 4.i.j : byte. writeln.

If input is n. b := b . The fourth is the sum of the second and the third.i.T. program jawaban_soal_no_6.r. end. begin write('jumlah data :'). var n. writeln. r := n. end. readln(n).l.1. 9. for i := 1 to n do begin for j := 1 to i do write (i). The third is the sum of the first and the second. for l := 1 to n do begin b := n. end. Make fibonacci series. var Indoprog 39 . S. 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). end. readln(n).1. readln. r := r . so on. writeln.t. begin write('jumlah data :').Algoritma & Pemrograman end. Hendra. readln. end. program cetak_suku_fibonacci.b : byte.j : byte. 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 fifth is the sum of the third and the fourth. program jawaban_soal_no_5. var n.

readln. Input : 100 Output : / 2 2 5 100 \ 50 /\ 25 /\ 5 Input : 1001 Output : 1001 /\ 7 143 /\ 11 13 Input : 5 Output : 5 is a prime ! Indoprog 40 . 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.T. n_1. end. Make a factor tree. end. Hendra. write(n_i:4). n_2 := n_i. readln(n). n_i : byte.i. begin write('jumlah suku :').Algoritma & Pemrograman n. S. n_2. n_1 := n_2. n_1 := 1. 10.

memang hal tersebut dapat dilakukan. dapatkah kira-kira anda memberikan contoh keunggulan dari pemakaian Array ? Ya. 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. Nilai[2]. For I:= 1 To 10 Do Total := Total + Nilai[I]. … Nilai[10] := 90. Adakah bentuk array yang lain. Writeln(Nilai[1]). ketemu lagi. Nilai2. array adalah variabel yang dapat menampung sejumlah data yang ditandai dengan suatu index pada masing-masing elemennya. Writeln(Nilai[2]). selain yang anda sebutkan ? Indoprog 41 . Contoh : Nilai[1] := 60. …. Kalau begitu kita juga dapat melakukan hal yang sama dengan memesan 10 variabel. Nilai[2] := 75. … Writeln(Nilai[10]). S. Contoh : Var Nilai : Array [1. pada pertemuan ini kita akan belajar tentang array.. Bisa anda bayangkan.10] of Integer. dst. Dan kalau pakai array : Total := 0.T. misalnya Nilai1. Nilai[10]. Modul 4 Hallo. yaitu Nilai[1]. Nilai3. Apa sih Array itu ? Baiklah. Nilai[3]. Dan bagaimana kalau ada elemennya ada 100.Algoritma & Pemrograman Hendra. Dalam hal ini variabel Nilai adalah suatu array yang memiliki 10 element. Pada masing-masing elemennya dapat menampung satu nilai Integer. tetapi sesuatu yang perlu kita perhatikan adalah kemudahan pengolahan data Variabel tersebut.

1]. What is an array ? 2. Jadi jumlah elemennya adalah 3 x 3 = 9 elemen. {elemennya x[3].3. bagaimana kira-kira cara pemakaiannya ? Cara pemakaiannya seperti array bisanya.255] of integer. Ada. Matrix[2. Array['a'.'Z'] of Integer.T.3] Of Integer. …. How is the declaration ? 4. bisa. contoh: Idx['A'] = 100.1].1]. Cuma indexnya ditulis sebgai character. Matrix [1.1.. Is it valid ? Explain.3].. What is it for ? 3..3].. Dan kalau pakai looping : For c:='A' to 'Z' do idx[c]:= 0.Algoritma & Pemrograman Hendra. Matrix[3.2]..'z'] of Byte. Array[byte] of Integer. Explain how to use it ! 5. } Saya bingung dengan yang Array ['A'. Matrix[1.3]. S. Matrix[2.. x[5]. Matrix[3. kita dapat juga membuat multi dimensi sesuai dengan kebutuhan.2]. x[10]} Array['A'. Adalah contoh array 2 dimensi. Latihan 4 1. dst ? Oh. 6. How can we declare two or more dimension in array and explain the usage. Indoprog 42 . 4 Dimensi.. yang terdiri dari elemen Matrix[1.10] of Integer. Matrix[2.2]. anda bisa mendeklarasikan array seperti : x idx a n : : : : Array[3. Dapatkah kita buat 3 Dimensi. { The same as array[0. hal ini tergantung bagaimana kita mendeklarasikan variabel array tersebut. dan Matrix[3. Suppose we have n : array[char] of byte. Adakah hal-hal yang khusus dalam mendeklarasikan array pada Pascal ? Ada. x[4]. contoh : Var Matrix : Array [1.'Z'] of Integer. array yang telah kita sebutkan tersebut adalah array 1 dimensi.

Program mencari_nilai_minimum_dari_100_nilai_random. write(baris_kini[j]:3). baris_lalu[0] := 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]. min := arr[1]. readln(n). Latihan di Laboratorium 1.j : byte. for i := 1 to jd do arr[i] := random(1000). writeln.99] of integer. var baris_kini. for i := 2 to jd do if arr[i] < min then min = arr[i].Algoritma & Pemrograman Hendra. end. end. min). baris_lalu := baris_kini. var arr : array [1.. maximum and minimum value of the elements. begin randomize. 2. end. begin write('jumlah baris :').. baris_lalu[1] := 1.i. readln. 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.100] of integer. const jd = 100. min : integer. Indoprog 43 . S. Make a Pascal triangle. readln. Suppose you have an array 100 elements of random numbers. n. i : byte.T. Find its average. baris_lalu : array [0. writeln('Nilai minimum :'. baris_lalu[2] := 0.

for i := 1 to jb do for j := 1 to jk do begin write('Data ke '. {penjumlahan matrix} for i := 1 to jb do for j := 1 to jk do arr3[i. end.j. begin write('Jumlah baris :'). readln(arr1[i.arr2.j] + arr2[i. writeln('Data Matrix 2').Algoritma & Pemrograman end. readln(jb).10] of integer.j : byte.i. program Penjumlahan_dua_matrix.j]).i.You may limit the maximum dimension of the matrix.10.j] := arr1[i. readln.'-'. for i := 1 to jb do for j := 1 to jk do begin write('Data ke '.j].j]). Salah satu masalah pengolahan data dengan menggunakan komputer adalah bagaimana menyajikan data dalam keadaan berurut. arr1.'-'. subtraction. S. var jb. Hendra.':').i. multiplication. Dewasa ini para ahli matematika dan komputer telah mengembangkan berbagai algoritma pengurutan data seperti : • • Bubble Sort .jk. Make matrix operations : addition. for i := 1 to jb do for j := 1 to jk do begin writeln('Data ke '.arr3[i.O(n²) Selection Sort .O(n²) Indoprog 44 . write('Jumlah kolom :'). pada pertemuan ini kita akan membahas tentang Algortima pengurutan data (Sort). Modul 5 Pada pertemuan-pertemuan sebelumnya kita telah belajar dasar-dasar pembuat program dengan Pascal.j.. end. 4.':')..T. writeln('Data Matrix 1').'-'.1. readln(arr2[i.i.':'. end. writeln('Hasil penjumlahan'). end. dan tentu saja untuk pengurutan data tersebut dibutuhkan algoritma.j.arr3 : array[1.j]). readln(jk).

in a state of sin". Random digunakan untuk mendapatkan bilangan random(bilangan). Sesuatu hal yang perlu anda ketahui bahwa PRNG bukankan bilangan random.O(n²) Shell Sort . berarti variabel num mungkin berisi salah satu bilangan 0 s/d 49. yang mana bilangan random dapat dihasilkan dengan sangat cepat dan berkualitas. S. dan procedure Randomize.Algoritma & Pemrograman Hendra. from cryptography to the Monte Carlo method for simulating physical systems.O(n1. Cobalah contoh berikut : var Pseudorandom numbers are a critical part of modern computing. yang akan menghasilkan bilangan 0 s/d bilangan-1. Apa itu PRNG ? Pseudorandom number5 generator (PRNG) adalah algoritma yang ketika dijalankan akan menghasilkan suatu urutan dari bilangan. 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. Random dan randomize Kedua berfungsi menghasilkan bilangan random. Berdasarkan observasi John von Neumann 1951 bahwa "Anyone who considers arithmetical methods of producing random digits is. kita akan membahas tentang pseudo random generator (PRNG). 5 Indoprog 45 . Misalnya num:=random(50). dimana elemen-elemennya diperkirakan tidak berkaitan satu sama yang lain. Mersenne Twister adalah salah satu PRNG yang dibuat pada tahun 1997 oleh Makoto Matsumoto dan Takuji Nishimura. of course.O(n log n) Tetapi sebelum kita mulai dengan pengurutan data. Randomize digunakan untuk menginisialisasi suatu bibit random secara acak yang cukup dipanggil sekali saja.25) Quick Sort . • • • Insertion Sort .T. bilangan random sering digunakan untuk mensimulasikan dunia nyata yang penuh dengan ketidakpastian. tetapi diperkirakan mendekati bilangan random.

i : byte. bagaimana dengan bilangan yang dihasilkan apakah sama pada setiap percobaan ? Jadi. 6 Indoprog 46 . S. Jelasnya. Algoritma sort stabil jika dua record R dan S dengan kunci yang sama dan R berada pada posisi sebelum S . computer science. sedang dan terbaik) dalam arti ukuran dari elemen (n). algoritma sort adalah algoritma yang membuat elemen dalam suatu daftar menjadi berurutan. begin randomize. (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. It indicates how fast a function grows or declines. Coba hilangkan "randomize". is a symbolism used in complexity theory. and mathematics to describe the asymptotic behavior of functions. 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. dan jalankan beberapa kali. end. also called Landau's symbol. breikut ini adalah kode dalam Pascal untuk bubble sort: for i:= jd-1 downto 1 do Big O notation (with a capital letter O. not a zero). selalu gunakan "randomize" untuk menjamin kerandoman bilangan yang dihasilkan pada setiap run. for i:=1 to 10 do write(random(30). Algoritma SORT Pada computer science dan matematika. dengan n elemen.Algoritma & Pemrograman Hendra.' '). tetapi merupakan cara yang lambat ! Ide dasarnya adalah membandingkan dua objek yang bersebelahan (neighboring). Suatu array a.T. dan R harus tetap berada sebelum S setelah di sort. menganti posisi keduanya juga berada pada urutan yang tidak sesuai. Algoritma Sort yang dipergunakan dalam computer science diklasifikasikan sebagai berikut : • • • Kerumitan dalam komputasi (prilaku buruk.

Hendra. for i:= 2 to jd do begin idx = I. Setelah loop kedua. Hal inilah yang menyebabkan loop sebelah dalam berkurang (i) pada setiap langkah. terutama dibawah 10 elemen. Insertion Sort Algoritma ini bekerja dengan menyisipkan data ke posisinya pada suatu daftar yang sudah berurut. end. karena kita tidak perlu lagi memeriksa elemen yang terbesar itu berulang. dan seterusnya. idx := idx – 1. elemen terbesar pasti berada pada posisi akhir dari array. algoritma tersebut terdiri dari dua loop bersarang (nested loops). for i := 1 to n do begin minidx := i. Index j pada looping sebelah dalam menelusuri elemen pada array. Insertion Sort merupakan algoritma tercepat untuk jumlah elemen yang sedikit. Indoprog 47 . a[idx] := idxvalue. end. elemen nomor dua terbesar akan berada pada posisinya. membandingkan isi pada array (at j and j+1). a[j+1]:=t. end. sedangkan loop sebelah luar menyebabkan loop sebelah dalam berulangan menelusuri array. if idx = 1 then Exit. idxvalue = a[idx]. while idxvalue < a[idx-1] do begin a[idx] := a[idx-1]. t := a[i].T. Algoritma sort ini membutuhkan O(n2). Algoritma ini akan berprilaku terbaik pada daftar yang sudah berurut O(n). for j := (i+1) to n do if a[j] < a[minidx] then minidx := j. Selection sort Selection sort bekerja dengan mencari data yang lebih kecil dan memindahkan data tersebut ke posisinya. Sebagaimana yang kita lihat.Algoritma & Pemrograman for j:= 1 to i do if a[j] > a[j+1] then begin t:=a[j]. a[j]:=a[j+1]. S. Setelah loop pertama.

Pada gap = 4. and then sort it using Bubble Sort. Konsepnya adalah membandingkan data dengan jarak tertentu dalam array for gap:=(jd div 2) downto 1 do for i:=1 to (jd . 6 : 7. 5 : 6.6). Indoprog 48 . S. Shell [Sh]. Hendra. 6 : 8 Pada gap = 1. 2 : 4.temp: integer. Pada gap =3.gap) do if a[i]> a[i+gap] then begin t:= a[i]. a[i+gap]:=t. a[i] := a[i+gap]. maka : Bandingkan data 1 : 4. What is sort algorithm ? 2. named after its inventor D. maka gap akan mulai dari 4 s/d 1. Shell Sort7 Algoritma ini ditemukan oleh Donald Shell. please write down step by step data changing when sorting using Bubble Sort. Explain how to generate random number in Pascal ! Latihan di Laboratorium 1.T. Algoritma berprilaku baik kalau data pada array dalam keadaan hampir berurut.8. i. end. 5 : 8 Pada gap = 2.3. 4 : 7. var arr : array[1. program analisa_jumlah_perbandingan_dan_pergantian_data_bubble_sort. 4 dengan 8. begin 7 Shell sort (or Shellsort) is one of the oldest sorting algorithms. 2 dengan 6.Algoritma & Pemrograman a[i] = a[minidx]. 5 : 7.1.1000] of integer.5. Insertion Sort. 3 : 5. 3 : 4. jb. 3 dengan 7. Suppose we have an array contain 8 data (7. Misalnya kita ada 8 data.j. a[minidx] = t. 7 : 8 Latihan 5 1.L. 3 : 6. and Selection Sort examine how many data comparing and data exchange. 4 : 6. maka : Bandingkan data 1 : 3. Write a program to generate 10000 random number. maka : Bandingkan data 1 : 2. Shell Sort. 2 : 5. Insertion Sort.4.jg. maka : Bandingkan data 1 dengan 5. Shell Sort ! 3. End..2. 4 : 5. 2 : 3.

jg). for i := 1 to jd do arr[i] := random(1000). S. if arr[j] > arr[j+1] then begin jg := jg + 1. end. writeln('Jumlah perbandingan :'. arr[j+1]:=temp. Hendra. end. for i := (jd-1) downto 1 do for j := 1 to i do begin jb := jb + 1. jb := 0.jb). readln. temp := arr[j]. writeln('Jumlah pergantian :'. arr[j]:=arr[j+1].Algoritma & Pemrograman randomize. end. jg := 0. Indoprog 49 .T.

Keunggulan dari linier search adalah dapat digunakan pada daftar yang tidak berurut. Tentu saja secara nyata lebih baik dari linier search untuk jumlah data yang besar. Kasus terbaik adalah kalau nilai yang dicari berada diposisi pertama. algoritma search dikenal juga sebagai sequential search. Algoritma search yang paling sederhana adalah linier search. kasus yang terburuk adalah kalau nilai yang dicari tidak ada dalam daftar. Linier Search Pada bidang computer science. tetapi dapat digunakan pada daftar yang tidak berurut.Algoritma & Pemrograman Hendra. Selanjutnya kita akan melihat algoritma pencarian (Search Algorithms). Binary search adalah algoritma logaritmik dan Indoprog 50 . Modul 6 Saya yakin anda sudah mengerti beberapa algoritma sort. Cara kerjanya adalah memeriksa setiap elemen dalam daftar sampai menemukan yang dicari. Apa itu Search Algorithms ? Search algorithms adalah algoritma untuk mencari suatu elemen dalam suatu himpunan elemen berdasarkan key tertentu. dan rata-rata n/2 perbandingan diperlukan. Binary Search Binary Search mengasumsikan data adalah dalam keadaan berurut dan mengambil manfaat dari karakteristik tersebut. end. S. i := 1. tetapi membutuhkan kondisi data dalam keadaan berurut. dimana memiliki O(n). if i <= jd Then writeln('data found at : '. Linier search berjalan secara O(n). sehingga dibutuhkan n perbandingan. while (i <= jd) and continue do begin if a[i] = findvalue then continue := false. sebagai seorang sarjana komputer. Algoritma yang lebih baik adalah binary search yang berjalan pada O(log(n)). kalau data terdistribusi secara acak. i := i + 1.T. continue := true. anda harus mengerti dan mengetahui kelemahan dan kelebihan dari masingmasing algoritma tersebut.i) else writeln('data not found').

low := 1. if findvalue > a[j] then low := j+1 else if findvalue < a[j] then high := j-1 else low := j. if first > last then writeln('data not found') else writeln('data found at :'. continue := true. last := mid . while (a[high] >= findvalue) and (findvalue > a[low]) do begin j:= trunc((findvalue-a[low])/(a[high]-a[low])*(high-low))+low. S. Khususnya diperlukan 1 + log2 N iterasi untuk mendapatkan jawaban.1 end else continue := false. Seperti binary search. if (findvalue > arr[mid]) then begin jb := jb + 1. tentu saja pencarian didasarkan kepada perkiraan letak data dari posisi data sekarang. while (first <= last) and continue do begin mid := (first + last) Div 2. interpolation search membutuhkan data dalam keadaan berurut. Indoprog 51 . Dari pada membandingkan data satu persatu seperti pada linier search. Berbeda dengan binary search yang selalu membagi sisa data separuh. end. berjalan secara O(log n).Algoritma & Pemrograman Hendra.T. dan interpolation search bekerja dengan asumsi data terdistribusi merata. first := mid + 1. high := jd. dan lebih cepat dari linier search. tidak selamanya interpolation search lebih cepat dari binary search. Interpolation search membuat perbandingan yang lebih sedikit dari O(log(log(N)).mid). Interpolation search Menyerupai bagaimana orang mencari sesuatu pada buku telepon. end else if (findvalue < arr[mid]) then begin jb := jb + 1.

3.12. S. please write down step by step data comparing data which find value is 12 using Binary Search and Interpolation Search ! Latihan di Laboratorium 1. arr[j+gap] := t.9. arr[j] := arr[j+gap]. first.last. program analisa_binary_search. Latihan 6 1. 4. j.8. end.6.T. begin {generate 10000 bilangan random} randomize. mid..11. 7. Write a program to generate 10000 random number. {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]. 6. findvalue. What is search algorithm ? Explain how linear search work ! Explain how binary search work ! Explain how interpolation search work ! Can we use binary search in not ordered list ? How about linier search ? Why ? Explain when interpolation search is better than binary search ! Suppose we have an array contain 10 data (1. for j := 1 to jd do arr[j] := random(jd). 5.7. {tanya data yang dicari} Indoprog 52 .13). 3.Algoritma & Pemrograman end. 2. examine how many data comparing to find a value using linier search. continue : boolean. else writeln('data not found') Hendra.10000] of integer.10.t. var arr : array [1.gap. const jd = 10000.jb : integer. and then sort it Shell Sort.low). binary search and interpolation search. if a[low] = findvalue then writeln('data found at :'.

mid). end else if (findvalue < arr[mid]) then begin jb := jb + 1. writeln('jumlah perbandingan data :'. first := mid + 1. continue := true. S. Writeln(Nama). maksudnya anda dapat mengambil masingmasing character dari suatu string dengan memperlakukannya sebagai elemen dari array. Writeln(Nama[1]). end. while (first <= last) and continue do begin mid := (first + last) Div 2. last :=jd. Writeln(Nama[8]). readln. Indoprog 53 .jb).Algoritma & Pemrograman write('Nilai yang dicari 0-10000 :'). Nama[1] := 'K'. last := mid . readln(findvalue). Modul 7 Pada contoh maupun tugas modul-modul sebelumnya kita telah banyak menggunakan string (pada saat writeln).T.1 end else continue := false. end. {pencarian data dengan binary search} first:=1. if first > last then writeln('data not found') else writeln('data found at :'. jb := 0. if (findvalue > arr[mid]) then begin jb := jb + 1. Contoh : Var Nama : String. apakah sebenarnya string pada Pascal ? Sebenarnya string adalah suatu array dari char. Begin Nama := 'Computer'. Hendra.

. Alamat : String[40]. mendapatkan bagian dari suatu string. itu adalah fungsi bantu yang disediakan oleh Pascal untuk melakukan pengolahan data string.5). sebenarnya kalau kita dapat juga mendeklarasikan string dengan : Var Nama : String. begitu saja. Syntax : copy(s. Copy. Oh.T.Algoritma & Pemrograman End. S. dan adakah yang lain ? Ya. saya melihat adanya pemakaian fungsi Length. Pada program Hangman. dan Nama[8] adalah huruf 'r'. Misalnya s:='Apa kabar ?'. jadi kita sudah selesai hari ini ? Tunggu dulu. apa fungsinya. maka otomatis pascal menyediakan 255 character untuk string kita. akan menyebabkan string nama berubah menjadi 'Komputer'. Sedangkan Nama[1] := 'K'. Hendra. Indoprog 54 . Jadi kita dapat mendeklarasikan variabel string dengan panjang tertentu.10] Of String[30]. Adapun fungsi bantu untuk string adalah sebagai berikut : Length. Dalam hal ini variabel Nama dapat menampung maksimal 255 character. anda dapat melakukannya.howmuch) Contoh : : st:=copy(s. berapa panjang maksimal yang diperbolehkan ? Sebenarnya kalau kita tidak menentukan panjang string ketika deklarasi. mendapatkan panjang string Syntax : length(s) Contoh : : n:=length(s). Bolehkan kita memesan variabel array string ? Boleh. n akan berisi 11.from. Maka Nama[1] adalah huruf 'C'. dalam hal ini merupakan panjang maksimal yang diperbolehkan untuk suatu type data string.5. Contoh : NamaSiwa : Array[1. Pos. sedangkan untuk variabel Alamat dapat menampung maksimal 40 character.

Str.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. end.e).e). maka akan mengembalikan 0. readln(s). mengambil posisi substring dari suatu string. st akan berisi 'kabar'.s). i : integer. end. r : real.r. mengkonversi string menjadi numerik. Indoprog 55 . Syntax : (numvar. val(s. Pos. else writeln('That was : '. } Jika substring tidak ditemukan. Menggambil 5 character mulai posisi ke 5 Misalnya s:='Apa kabar ?'. { n:=5. if e<>0 then writeln('Error at position : '. Jika anda bekerja dengan type real.'Apa kabar ?'). anda perlu melakukan pemformatan sebelum konversi ke string.numvar. mengkonversi numerik menjadi string.T.Algoritma & Pemrograman Hendra. Val. e : integer. writeln('That was : '. Syntax : Pos(substr.strvar) Contoh : : var s : string.s). Begin Write('Enter a number : '). readln(i). S. Contoh : : Var s : string.s) Contoh : : n:=pos('kabar'. jika berisi 0 sukses. Syntax : val(strvar. str(i.r:4:3). begin write('Input an integer : ').

. s2 : string. delete(s.s2).6.s2). menghapus sejumlah character dari string mulai posisi ke i Syntax : delete(s. r : real. menyisip suatu string kedalam string lain dari posisi tertentu Syntax : insert(source. {adalah sama dengan st:=concat(s1. dan s2 adalah 'IBBI'. { I do not love you } end..} Insert. writeln(s). mengabung dua string atau lebih Syntax : concat(s1.Algoritma & Pemrograman Hendra. begin s1:='not '. end. str(r:4:3.index) Contoh : : var s1.s). readln(r). insert(s1. Contoh : : var s : string.s2. Indoprog 56 . { I am responsible for that } end. Concat. writeln('That was : '.target. var s : string. S. writeln(s2).s).s2. Delete..6).3).i..n). Jika s1 adalah 'STMIK'.T. Contoh : st:=s1 + s2. s2:='I do love you'.sn) Contoh : st:=concat(s1. begin s:='I am not responsible for that !'. begin write('Input a real : '). maka st menjadi 'STMIKIBBI' Sebenarnya kita juga dapat menggunakan operator + untuk mengabung string.

Algoritma & Pemrograman

Hendra, S.T.

Latihan 7
1. 2. 2. 3. 4. 5. 6. What is a string ? Explain what the relationsip between string and character in pascal ! What is the maximum length of a string ? How is the declaration ? Explain how to merge two string, using function and operator ! Explain how to convert string to value and vice versa ! 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

Algoritma & Pemrograman
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.

Hendra, S.T.

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 temp1,temp2 val1,val2, result numcode begin : string; : string; : real; : integer;

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

Algoritma & Pemrograman
end.

Hendra, S.T.

Indoprog

59

. begin writeln('Press any key when ready ...'). pause. Tujuan pemakaian procedure maupun function adalah untuk memecah program kita menjadi kesatuan logika yang lebih kecil (sub-sub program) untuk menghindari perulangan pengetikan dan memudahkan pembacaan.. end. writeln('Pause again !'). Contoh pemakaian procedure : uses crt.. S. begin clrscr. pause. readkey. writeln('Press any key when ready . let''s pause !').'). Modul 8 Hallo. readkey. writeln('ABC').Algoritma & Pemrograman Hendra. writeln('Press any key when ready .'). writeln('Hey. Indoprog 60 . pause. procedure pause. end. writeln('ABC').').. tersendiri layaknya suatu program pascal. yang artinya program yang kita buat harus terstruktur dan teratur.. writeln('Press any key when ready . Apa itu procedure dan function ? Procedure dan function merupakan sub-program yang memiliki bagian deklarasi dan begin-end. Salah satu usaha untuk usaha kearah sana adalah memecah program kita menjadi sub-sub program dengan menggunakan procedure dan function. Dengan memecah program kita menjadi kesatuan yang lebih kecil : uses crt. begin clrscr.. let''s pause !'). masihkah anda ingat bahwa pascal adalah bahasa pemrograman yang terstruktur. readkey. writeln('Pause again !'). readkey. end.T. writeln('Hey.

(*local variable ) Begin If Num < 2 Then IsPrime := False Else If Num < 4 Then IsPrime := Bil > 1 Else Begin Sq := Round(Sqrt(Num)). End. S. If Bagi > Akar Then Write(I : 4). End. Bagi := 3. IsPrime := Dv > Sq.T. Dan contoh berikut yang menggunakan function : Function IsPrime (Num : Longint) : Boolean.30). For I := 1 To 100 do If (Bil > 1 And Bil < 4) Then Write(I : 4) Else Begin Akar := Round(Sqrt(Bil)). While (Dv <= Sq) And (Num Mod Dv <> 0) Do Dv := Dv + 1. Dv := 3. apa maksudnya ? Indoprog 61 . For I := 1 To 100 do If IsPrima(I) Then Write(I : 4). (* Main program*) Var I : Byte.Algoritma & Pemrograman Hendra. Begin Writeln(Upper('Bilangan Prima dari 1 s/d 100').Bagi : Word. (*local variable*) Begin Writeln(Upper('Prime number from 1 to 100'). Var Sq . Writeln(Replicate('-'. End. Akar. End. Tadi saya melihat ada keterangan variabel local. End.Dv : Word. Contoh pemakaian function : Var I : Byte. While (Bagi <= Akar) And (Bil Mod Bagi <> 0) Do Bagi := Bagi + 1. Writeln(Replicate('-'.30).

Algoritma & Pemrograman Hendra. global variabel adalah variabel yang ruang lingkup pemakaiannya meliputi seluruh program. begin foo. b:=15. end. var a : byte. dimana ruang lingkup pemakaiannya hanya berlaku pada program utama. end. a:=15. { main begin. var a : byte.. Bagaimana kalau ada variabel local dan variabel global yang sama namanya ? Global variabel tersebut akan di override. usahakan untuk menggunakan variabel Global seminimal mungkin. procedure maupun function dimana variabel tersebut dideklarasi. Pada suatu program yang terstruktur dengan baik. { main begin. Contoh : procedure foo. begin a:=10. { This is legal } end. procedure maupun function dapat memiliki variabel masing-masing. since a is only known inside foo } Kalau begitu berarti ada variabel global dong ? Ya. procedure maupun function. Contoh : uses crt. S. var a : byte. begin foo. baik program utama. Pada program utama.T.end block } { This is illegal } { This is perfectly legal } Jadi variabel global harus dideklarasi diatas semua procedure maupun function. b:=5.. a:=15. { global variabel } procedure foo. Contoh: var b : byte. end. begin a:=10... benar. { This is the global variable } Indoprog 62 .end block } { This will be an error. writeln(a).

Algoritma & Pemrograman

Hendra, S.T.

procedure foo; var a : byte;

{ This is local variable }

begin a:=15; writeln('foo is ',a); end; begin a:=10; writeln(a); foo; writeln(a); end.

{ Will print 15}

{ Will print 10} { Still print 10}

Dari tadi anda menyebutkan procedure dan function, apa sih bedanya ? Pada prinsipnya function mengembalikan nilai. Syntax untuk procedure :
Procedure namaprocedure (deklarasi parameter); Deklarasi variabel local begin : { commands } : : end;

Syntax untuk function :
function namafunction (deklarasi parameter) : returntype; Deklarasi variabel local begin : { commands } : namafunction := return value; end;

Coba perhatikan kembali contoh Isprima untuk lebih jelas. Sebenarnya apa fungsi deklarasi parameter pada procedure maupun function ? Pada deklarasi bagian deklarasi parameter kita menentukan parameter dan type data dari masing-masing parameter yang akan dikirim kedalam procedure maupun function.
procedure makewin(x1,y1,x2,y2 : byte); var i,j : byte; begin gotoxy(x1,y1); write(#201); {top}

Indoprog

63

Algoritma & Pemrograman
for i:=x1+1 to x2-1 do write(#205); write(#187); for i:=y1+1 to y2-1 do {middle} begin gotoxy(x1,i); write(#186); for j:=x1+1 to x2-1 do write(' '); write(#186); end; gotoxy(x1,y2); write(#200); {bottom} for i:=x1+1 to x2-1 do write(#205); write(#188); end; begin makewin(1,1,30,8); makewin(10,10,60,18); end.

Hendra, S.T.

Dan contoh untuk function :
function factorial(n : byte):longint; var i : byte; result : longint; begin result:=1; for i:=1 to n do result:=result*i; factorial:=result; end; var x : byte; begin writeln('Enter a value : '); readln(x); writeln(x,'! is ',factorial(x)); end.

Kalau kita bisa mengirim nilai kedalam procedure maupun function, apakah bisa juga sebaliknya ? Pada contoh diatas nilai parameter dikirim secara PASS BY VALUE. Kita dapat juga mengirim parameter secara PASS BY REFERENCE dengan menambah Var pada saat deklarasi masing-masing parameter, dalam hal ini yang dikirim kedalam procedure maupun function adalah alamat dari variabel tersebut. Contoh :
(*Pass by value*) procedure foo(a : byte); begin writeln(a); {15} a:=10; writeln(a); {10} (*Pass by reference*) procedure foo(var a : byte); begin writeln(a); {15} a:=10; writeln(a); {10}

Indoprog

64

Algoritma & Pemrograman
end; var x : byte; begin x:=15; writeln(x); foo(x); writeln(x); end. end; var x : byte; begin x:=15; writeln(x); foo(x); writeln(x); end.

Hendra, S.T.

{15} {15}

{15} {10}

Latihan 8
1. Explain the syntax of procedures and functions. 2. Explain the differences between them. 3. Explain the differences between pass by value and pass by reference. Give an example. 4. Can procedures nest each other ? Explain and give example ! 5. Explain the differences between global variable and local variable. 6. Explain the rule of calling procedures / functions.

Latihan di laboratorium 7. Make a guessing number game using functions and procedures. You hold a random number between 1 to 100, and user have to guess. If the guess is smaller than it suppose to be, you should say "lower". If the guess is higher, say "higher". If it is the same, then user wins. User has 8 chances to guess. If chances are used up, game over. Score is number of chances left times 10. If user wins, get another number and go on. Don't forget to restore the chances back to 8. If game over, ask him/her to play again. Here are some hint : function compare(number, guess : byte):shortint; function advice(comparison : shortint):string; function asknumber: byte; function yesno : boolean; function score(guessleft : byte):longint; procedure writeat(x,y : byte; sentence:string); procedure setupscreen; Latihan di rumah

Indoprog

65

program baca_bilangan_sampai_ratusan.'tujuh'. Input : 1537000 Output : Satu juta lima ratus ribu tiga puluh tujuh ribu rupiah. hasil : string.'satu'. 'sebelas'. BacaBilangan := hasil.'lima'. 'enam'. ratusan := x div 100.sisa : integer.'tigabelas'. Indoprog 66 .'delapanbelas'.'tiga'. function BacaBilangan(x : integer):string. end.'tujuhbelas'..'sembilanbelas').'empat'. const angka : array[0.'dua'. readln.19] of string = ('nol'. sisa := x . Make a program to translate a number into word using function.puluhan.'duabelas'. 'enambelas'.satuan. satuan := sisa . begin hasil := ''. S.'sembilan'. if puluhan > 0 then hasil := hasil + angka[puluhan] + 'puluh'. (*program utama*) begin writeln(BacaBilangan(200)). if satuan > 0 then hasil := hasil + angka[puluhan].'limabelas'. end.Algoritma & Pemrograman Hendra. if ratusan > 0 then hasil := hasil + angka[ratusan] + 'ratus'.T.(ratusan*100).'sepuluh'.'empatbelas'.'delapan'. var ratusan.(puluhan*10). end. if (sisa > 0) and (sisa < 20) then hasil := hasil + angka[sisa] else begin puluhan := sisa div 10.

Algoritma & Pemrograman Hendra. and was published in Computer Journal in 1962 Indoprog 67 . writeln(x.R. end. serta menghindari pemakaian looping yang membingungkan. sehingga rekursif dapat selesai. 5! 4! 2! 1! = = = = 4! * 5 3! * 4 1! * 2 1 Jadi kita secara programming dapat dilakukan dengan : function factorial (n:byte):factorial. Apa yang dimaksud dengan rekursif ? Rekursif merupakan salah satu fasilitas pemrograman yang sangat efektif yang mana memperbolehkan function ataupun procedure untuk memanggil dirinya sendiri. Modul 9 Pada modul-modul sebelumnya kita telah membahas algoritma sort. misalnya dalam menghitung faktorial. Hoare in 1960.T. begin writeln('Enter a value : ').'! is '. Tetapi sebelum kita akan membahas fasilitas rekursif yang tersedia pada bahasa Pascal. Pada pertemuan ini kita akan membahas algoritma Quick sort8 yang mana diakui sebagai yang tercepat didunia. Quick Sort 8 Quicksort was invented by C. Sesuatu hal yang perlu diperhatikan dalam pembuatan fungsi rekursif adalah harus adanya suatu titik akhir. { This is the recursive part } end.A. yaitu bubble sort. selection sort.factorial(x)). readln(x). Sebenarnya masih banyak algoritma sort yang telah diciptakan oleh para ahli. begin if n<2 then { This is the terminating condition } factorial:=1. dan shell sort. dan hal tersebut banyak ditemukan pada persamaan matematika. Dapatkan anda memberikan sebuah contoh dari pemakaian rekursif ? Boleh. Hal ini memungkinkan solusi pemrograman menjadi lebih baik dan efisien. S. insertition sort. else factorial:=n*factorial(n-1). var x : byte.

end.NumberOfData). right:=right-1. end. program urut_data_qsort_dan_cari_data_interpolation_search. procedure swap(var data1. (*oleh : hendra soewarno*) const jd = 10000. if right>lower then qsort(lower. var temp : integer. right. procedure qsort(lower.jd] of integer. Indoprog 68 . Hoare. data2:= temp. left:=lower. right:=upper. while left<=right do begin while Data[left] < pivot do left:=left+1. Algoritma ini merupakan metode pengurutan data yang tercepat didunia (n log n). begin temp := data1.Algoritma & Pemrograman Hendra. { Sort the LEFT part if upper>left then qsort(left . left:=left+1. begin temp := data1.upper).. Contoh program menggunakan procedure dan function dengan implementasi Quick Sort dan Interpolation Search.right). var temp : integer.data2 : integer). { Sort the RIGHT part end. data1:= data2. { Parting for while Data[right] > pivot do right:=right-1.Data[right]). Pindahkan data sisi kiri yang lebih besar dari pada pivot dengan data sisi kanan yang lebih kecil dari pada pivot. yang ditemukan oleh E. begin pivot:=Data[(lower+upper) div 2].data2 : integer).{ Parting for if left<=right then { Validate the change } begin swap(Data[left]. var Data : array[1. end. procedure swap(var data1. Algoritma ini menggunakan metode rekursif. Prinsip kerjanya adalah membagi data menjadi dua bagian dengan data ditengah sebagai titik pivot (divide-and-conquer algorithm). var left. pivot : integer. left } right} } } Pemakaian : qsort(1. S.T. upper : integer).

data[right]). procedure qsort(lower. begin pivot:=data[(lower+upper) div 2]. procedure grandom. begin low := 1. Indoprog 69 . if right>lower then qsort(lower.{ Parting for right} if left<=right then { Validate the change } begin swap(data[left]. pivot : integer. if data[low] = findvalue then isearch := low Hendra. left:=left+1. { Sort the LEFT part } if upper>left then qsort(left . var left. end. upper : integer). end.upper). end.Algoritma & Pemrograman data1:= data2. var i : integer.j : integer. var low. function isearch(findvalue:integer) : integer. high := jd. for i := 1 to jd do data[i] := random(jd). right. data2:= temp. end. high.T. while (data[high] >= findvalue) and (findvalue > data[low]) do begin j:=trunc((findvalue-data[low])/(data[high]-data[low])*(high-low))+low. begin randomize.right). right:=upper. { Sort the RIGHT part } end. while left<=right do begin while data[left] < pivot do left:=left+1. end. S. if findvalue > data[j] then low := j+1 else if findvalue < data[j] then high := j-1 else low := j. { Parting for left } while data[right] > pivot do right:=right-1. left:=lower. right:=right-1.

8. Latihan 9 1.findvalue. posisi := isearch(findvalue).posisi : integer.posisi) else writeln('tidak ditemukan !').2. Suppose we have an array contain 8 data (7. please write down step by step data changing when sorting using Quick Sort! Latihan di Laboratorium 1.5.3. 2.1. end. S.6). {urut data dengan algoritma quick sort} {tanya data yang dicari} write('Nilai yang dicari 0-10000 :'). end. Explain how recursive. begin if n < 3 then fibo := 1 else fibo := fibo(n-1)+fibo(n-2). readln.T. readln(findvalue). function fibo(n:integer):longint. {generate 10000 bilangan random} qsort(1. (*Program Utama*) var j.jd). {cari data dengan interpolation search} if posisi > -1 then writeln('ditemukan diposisi '. Hendra. begin writeln(fibo(3)). end. begin grandom.Algoritma & Pemrograman else isearch := -1.4. Make a recursive algorithm of fibonacci series ! program mencari_suku_fibonacci_dengan_rekursif. end. readln. Indoprog 70 .

T. Indoprog 71 . 2. and then sort it using Quick sort examine how many data comparing and data exchange. Write a program to generate 10000 random number.Algoritma & Pemrograman Hendra. S.

NAMA : Array [1. NAMA : String[30]. Dapatkah anda memberi contoh suatu Record type ? Baiklah. misalnya kita akan mengolah data nilai ujian pascal programming siswa sebagai berikut: Nis 02001 Nama Hendra Soewarno Tugas 80 Teori 90 Praktek 90 Dari tabel diatas kita dapat menyusun variabel data sebagai berikut : NIS : String[9]. Bukankan menjadi lebih sederhana dan terstruktur. kita akan melanjutkan pembahasan tentang type ciptaan yang akan membuat program anda lebih terstruktur didalam pengolahan data yang dikenal dengan istilah Record type.T.10] of TSiswa.10] Of String[30]. Praktek : Byte. Apa itu Record type? Record type adalah suatu type data terstruktur yang merupakan pengelompokan beberapa type data lainnya. maka kita perlu mendeklarasikan variabel tersebut menjadi array: Var NIS : Array [1. maka : Type TSiswa = Record NIS : String[9].10] Of String[9]. Modul 10 Hallo. Praktek : Array [1. Tugas.Algoritma & Pemrograman Hendra... Tugas. Teori. S. Teori. Teori. Misalnya jumlah siswa adalah 10 orang. NAMA : String[30]. Tugas. I got It.. End. Sedangkan kalau kita menggunakan fasilitas Record Type.10] Of Byte. tetapi bagaimana cara pemakaiannya dalam program ? Indoprog 72 . Var Siswa : Array [1.. Ok. Praktek : Byte.

Readln(Siswa[I]. Teori := 90.' ').Teori). Write('Nama siswa :'). Siswa[1]. For I := 1 To 10 Do Begin With Siswa[I] Do Begin Rata := (Tugas+Teori+Praktek)/3. Write('Praktek :').Tugas := 80. Write(Teori:6:2. Bisakah anda bayangkan kalau yang tidak pakai Record Type ! Adakah cara untuk melakukan hal yang sama ? Ya. Siswa[1].' ').Nama := "Hendra Soewarno".Nis := "02001". Write(Rata:6:2). Readln(Siswa[I]. Nama := "Hendra Soewarno". End. Contoh Kongkrit pemanfaatan data terstruktur dengan pendekatan pemrograman terstruktur. End. kita dapat menggunakan block With … End. Write(Praktek:6:2.T. Contoh : For I := 1 To 10 Do Begin Write('No.' '). Siswa[1].' '). Induk siswa :'). Bagaimana untuk proses input-outputnya ? Untuk proses input-output sama saja dengan variabel biasanya. Tugas := 80.' '). End.Teori := 90.Nis).Nama). Write(Tugas:6:2. Siswa[1]. Write(Nis:9.Praktek := 90. S.Tugas). Write('Tugas :'). Readln(Siswa[I]. Write(Nama:30. Readln(Siswa[I].Algoritma & Pemrograman Hendra.Praktek). Siswa[1]. Praktek := 90. Indoprog 73 . Misalnya kita anda mengisi data untuk Siswa yang pertama. Readln(Siswa[I]. End. With Siswa[1] Do Begin Nis := "02001". Write('Teori :').

procedure prosesurutdata. End. Teori.T.nis) then last := mid . If Nis <> '' Then begin Write('Nama siswa :'). With Siswa[I] do begin Nis := ''. end.nis) then first := mid + 1 else if (findvalue < siswa[mid]. var I : Integer. last :=js.nis > siswa[j+gap]. Write('Tugas :').NIS <> '' Then Js := Js + 1. Readln(Teori). if (findvalue > siswa[mid]. if first > last then caridata := -1 else caridata := mid. procedure prosestambahdata.I). writeln. end. var gap. bacasiswa(I). procedure bacasiswa(I : integer). (*oleh : hendra soewarno*) uses CRT. Writeln('Nama siswa :'. Induk siswa :'). end. end. begin For I := 1 To JS Do begin With Siswa[I] Do begin Rata := (Tugas+Teori+Praktek)/3. end. Write(Tugas:6. (*variabel global*) var Siswa : Array [1. Write(Rata:6:2). Js : Integer.' '). const jd = 200. procedure prosesperbaikidata.' ').nis then begin t := siswa[j].' '). NAMA : String[30]. Hendra.mid : Integer. procedure tampildaftarnilai. end. S. var I : Integer. end. Readln(Nis). Write(Nis:9.j : integer. Induk siswa :'. Type TSiswa = Record NIS : String[9].1 else continue := false.Praktek). continue : boolean. begin for gap := (js div 2) downto 1 do for j := 1 to (js-gap) do if siswa[j].last. readln.Algoritma & Pemrograman program data_terstruktur.jd] of TSiswa. function caridata(findvalue:String):integer. end. Rata : Real. var J : Integer. Readln(Praktek). Js := Js-1. if Siswa[I]. siswa[j+gap] := t. Writeln('Tugas :'. Tugas.I). Writeln('Praktek :'. end. begin Writeln('Record ke-'. Indoprog 74 . continue := true. Praktek : Integer. end. while (first <= last) and continue do begin mid := (first + last) Div 2. procedure tampilsiswa(I : integer). begin repeat I := JS+1.Nis). Write('Praktek :'). Write(Praktek:6. begin Writeln('Record ke-'. begin For J := I to Js-1 do {geser 1 record ke atas} Siswa[J] := Siswa[J+1].. siswa[j] := siswa[j+gap]. Writeln('Teori :'. procedure hapusdata(I : integer). t : Tsiswa. until JS < I. end.Nama).' ').Teori). Write(Teori:6. Readln(Tugas).' '). {langsung urut data} end. prosesurutdata. end. Write('Teori :').Tugas). var first. begin first:=1. Write(Nama:30. Write('No. Readln(Nama). With Siswa[I] do begin Writeln('No. end.

delete the record. sort the record according to : * Quiz * Midtest * Finaltest * Overall value (Overall value = 0. edit existing student. Writeln('5.1*Quiz + 0. If Posisi = -1 Then Writeln('Data tidak ditemukan !') else begin Write('Apakah yakin dihapus [Y/T] :'). Make a database. Writeln('2. Continue: Boolean. Selesai'). until Tanya in ['Y'. Explain what is Record Type and give an example ! 2. end. Explain what With … End block function ! Latihan di Laboratoriun 3. Hendra. Writeln('4. Continue := True. Case Pilihan of 1 : prosestambahdata. Tanya : Char. Posisi := caridata(TNis). from 1 to 100 Midtest number. If Posisi = -1 Then Writeln('Data tidak ditemukan !') else begin tampilsiswa(Posisi). Tambah Data'). Posisi: Integer. Writeln('Proses hapus berhasil !'). readln(TNis). TStudent consists of these fields : Field Length ~~~~~ ~~~~~~ Name 20 Address 40 Phone 15 Quiz number. bacasiswa(Posisi). The record tag. Posisi: Integer. end.4*Mid + 0. from 1 to 100 Finaltest number. Latihan 10 1. Hapus Data'). readln(TNis). if Tanya = 'Y' Then begin hapusdata(posisi).Algoritma & Pemrograman var TNis : String[9].5*Final) You must : * Make simple menu. repeat Tanya := Upcase(Readkey). Writeln('Diubah menjadi'). end. (*Program utama*) var Pilihan : Integer. 4 : tampildaftarnilai. end. Readln(Pilihan). end. Daftar Nilai'). end. Writeln('Menu Utama'). 3 : proseshapusdata. Writeln('3. 2 : prosesperbaikidata. Indoprog 75 . from 1 to 100 User could : add new student. var TNis : String[9].'T']. * At least be able to handle 200 students. Repeat Clrscr. procedure proseshapusdata. end. Until not Continue. Posisi := caridata(TNis). 5 : continue := false. view student in a list. S. begin write('Nis yang ingin dihapus :').T. Writeln('1. begin write('Nis yang ingin diperbaiki :'). Write('Pilihan Anda :'). begin Js := 0. Perbaiki Data').

T. Tip : Use array of records.Algoritma & Pemrograman Hendra. * Apply quick sort for at least one key-sort. Indoprog 76 . S. * Apply search for student name first before editing the data.

Apakah setelah itu kita dapat langsung bekerja dengan file tersebut ? Oh. Modul 11 Hallo.bat. Dalam hal ini s adalah variable string yang akan menampung pembacaan tersebut. s). contoh: assign(F. bagaimana saya bisa tahu bahwa pembacaan telah selesai ? Untuk keperluan tersebut telah disediakan fungsi bantu EOF. Adakah contoh lain dari text file pada lingkungan Windows ? Oh. karena text file hanya dapat diolah secara sequential.T. bagaimana apakah masih semangat belajar ? Pada pertemuan hari ini dan selanjutnya kita akan membahas tentang File.exe) adalah binary file. S. tentu saja ada. Indoprog 77 . ya. contoh : if EOF(F) then writeln('This is the end of text file'). artinya kita hanya dapat membaca baris ketiga. sedangkan binary file tidak.INI yang biasanya berada pada folder C:\Windows. saya cukup jelas sekarang. belum-belum. misalnya program pascal yang anda ketik. Pada dasarnya pengolahan file pada pascal dibagi atas dua yaitu text file dan binary file. sederhana saja.sys dan *. Apakah kita dapat menentukan baris nomor berapa yang akan dibaca ? Dalam hal ini tidak dapat dilakukan. misalnya Autoexec. dimana fungsi ini akan bernilai True kalau pembacaan telah mencapai akhir dari file. Dalam hal ini F adalah sebuah variable untuk text file. contoh : reset(F). kalau textfile anda dapat membacanya dengan jelas. Kalau begitu.'README'). Baiklah. setelah membaca baris pertama dan kedua. dan sebenarnya anda telah pernah bekerja dengan kedua jenis file tersebut. Ok. kita perlu mendeklarasikan suatu variable untuk file tersebut. Config. Dapatkah anda memberikan contoh text file dan binary file ? Ok. selanjutnya adalah kita perlu mengasosiasikan variable tersebut dengan suatu nama file.Algoritma & Pemrograman Hendra. seperti : readln(F. pada pascal sebelum kita mulai bekerja dengan file. pelajaran bisa dilanjutkan. itulah yang dimaksud dengan text file. Dan selanjutnya anda dapat membaca dari file tersebut baris-perbaris ke variable string. selanjutnya anda perlu membuka file tersebut dengan menggunakan perintah reset. sedangkan file seperti program IDE Turbo Pascal (turbo. misalnya untuk text file kita dapat mendeklarasikannya sebagai berikut : var F : text. Bagaimana saya dapat membedakannya ? Untuk membedakan anda dapat menggunakan perintah TYPE pada DOS terhadap masingmasing file.

end.'). assign(F.s) { s is a string variable } Sebagai pengganti dari readln.s). { create it } writeln('Just enter any text and followed by enter. until true. Mudah bukan ? Bagaimana kalau saya ingin membuat sebuah text file baru ? Wah. begin clrscr. close(F).Algoritma & Pemrograman Hendra. var F : text.s). dan perintah writeln(F. { associate it } reset(F). { write it until done } { close it } Indoprog 78 . end. write('Input file name to create : '). { associate it } rewrite(F). readln(s). writeln('To quit : Input an empty line. repeat readln(s). contoh : close(F). var F : text. readln(s). { close it } end.T. if s='' then break.'). untuk membuat sebuah text file baru anda dapat menggunakan perintah berikut : rewrite(F). pertanyaan yang baik. write('Input file name to read : '). close(F). Sebagai penganti dari reset. begin clrscr. Jadi contoh kongkrit membaca suatu text file dari awal sampai akhir dari file adalah : uses crt. S. Bagaimana kalau kita telah selesai bekerja dengan file tersebut ? Kalau anda telah selesai. s : string. s : string.s). writeln(s). { open it } while not EOF(F) do { read it until it's done } begin readln(F.s). dan untuk menutupnya tetap 'close'. Berikut ini adalah contoh menyimpan apa yang anda ketik ke sebuah text file : uses crt. writeln(F. assign(F. maka anda perlu menutupnya.

hal itu harus dilakukan. { open it } {$I+} if IOresult<>0 then begin writeln('Error encountered in reading file '. { read it until it's done } { close it } Sebenarnya. end. tujuan pemakaian buffer adalah untuk mempercepat proses I/O. close(F). readln(s). Indoprog 79 . Jika saya perhatikan. {$I+} n:=IOResult. end. turbo pascal telah mengantisipasi masalah ini dengan mematikan sementara I/O checking. dan selanjutnya kita dapat memeriksanya dengan Ioresult. write('Input file name to read : '). while not EOF(F) do begin readln(F. 4: writeln('Too many open files'). case n of 2: writeln('File not found'). readln(s). Mengenai close. begin clrscr. end. 3: writeln('Path not found'). artinya tidak ada error. terutama pada proses penulisan file.Algoritma & Pemrograman Hendra. jika bernilai 0. { associate it } {$I-} reset(F). kalau kita membuka suatu file. var F : text. pada dasarnya system operasi menyediakan suatu buffer untuk proses I/O file. selain 0. S. Perhatian : Perintah rewrite akan menghapus file yang telah ada. apakah wajib dilakukan pada setiap akhir operasi file ? Ya. if n<>0 then begin writeln('Error encountered in reading file '. jadi pastikan penulisan isi buffer ke file dengan close. perhatikan contoh berikut : uses crt. assign(F. IOResult dapat berisi nilai lain yang memiliki arti.s). bagaimana caranya menangani masalah ini ? Ha-ha-ha. hal tersebut tidak secara otomatis dilakukan oleh system operasi.s).s). dan file tersebut belum ada. var F : text. halt. write('Input file name to read : '). { associate it } {$I-} reset(F). writeln(s). maka akan terjadi runtime error. s : string.s). Jadi kalau kita menulis data ke file. jangan takut.T. Contoh : uses crt.s). assign(F. begin clrscr. s : string.

writeln('Disk read error').baris[jb]). type Tbaris = String[80]. begin assign(ftext. program readme_file. {$I-} reset(ftext). Hendra. S. writeln('CRC error in data'). writeln('Hardware failure'). readln(ftext. writeln('Disk is write protected'). var i. atas : integer.brs : integer. repeat cetaktext. writeln('Unknown media type'). begin brs := 1. end. end. Tantangan: Write a 'readme' program that could access just every text file. You may limit the maximum number of lines of the file say 400 lines. procedure bacatextfile(fname:string). Make a program to convert the content of a text file to uppercase. writeln('Disk seek error'). Indoprog 80 . key := readkey. procedure readme. end. bacatextfile('c:\editor. 2. until key = #27. end else begin jb := 0.fname). clreol. procedure cetaktext. readme. var Baris : array [1. Latihan 11 1. and Sentence case. for i := atas to atas+23 do begin gotoxy(1. {$I+} if ioresult <> 0 then begin writeln('error open file !'). (*oleh : hendra soewarno*) uses crt. end else delline. case key of #72 : if atas > 1 then dec(atas). while not eof(ftext) and (jb < jd) do begin jb := jb + 1.jd] of TBaris. (*Program Utama*) begin clrscr. begin atas := 1.pas'). writeln('File access denied'). lowercase. Jb. #80 : if atas+24 < jb then inc(atas). end. halt. Make a program to count number of word and line in a text file. end..T. halt. end. brs := brs + 1. if i <= jb then begin write(baris[i]). end. var ftext : text. var key : char. end. writeln('Disk write error'). writeln('Drive is not ready'). end. writeln('Various error'). close(ftext). const jd = 400. if key = #00 then key := readkey.brs). end.Algoritma & Pemrograman 5: 100: 101: 150: 152: 154: 156: 157: 162: else end.

Untuk membacanya gunakan perintah 'read'. yaitu : 1. phone : string[15]. ada beberapa perbedaan. address : string[40]. Selanjutnya kita dapat mendeklarsikan variable untuk file dengan format tersebut : var F : file of Temployee. end. Biasanya file jenis ini digunakan untuk menyimpan data (Database) dalam bentuk record. Baiklah. dengan kata lain file of records. dan kali ini kita akan membahas tentang binary file. salary : longint. sound. Modul 12 Hallo. atau buat yang baru dengan 'rewrite'. dan menulisnya dengan 'write' 4. Kalau begitu.T. biasanya file jenis ini digunakan untuk menyimpan executable file maupun file-file yang dibentuk oleh system tertentu seperti gambar. 3. age : integer. Untuk bekerja dengan Typed file. pada pertemuan sebelumnya kita telah bekerja dengan text file. anda perlu mendeklarasikan record yang berlaku sebagai format untuk file tersebut. dalam hal ini tetap menggunakan IOResult. apa pula artinya dengan Untyped file ? Untyped file artinya file yang tidak memiliki format tertentu. Buka file tersebut dengan 'reset'.Algoritma & Pemrograman Hendra. Typed files 2. Meng-asosiasikan variable file ke nama file tertentu dengan perintah assign 2. Apakah cara menangani errornya juga sama ? Ya. kita akan membahas Typed file untuk pertemuan ini. dan saya yakin anda telah cukup memahaminya. S. kali ini masih tentang file. Apakah ada perbedaan cara pengolahan file tersebut ? Ya. contoh : type Temployee = record name : string[20]. dll. Pada dasarnya binary file dibagi atas dua kelompok. yaitu sesuatu file yang dibuka dengan reset dapat menggalami proses 'read' maupun 'write'. Untyped files Apa artinya Typed file ? Typed file artinya file yang telah memiliki format tertentu. baik ketika kita menulis maupun membacanya. Perhatikan contoh berikut : { A crude database recording } Indoprog 81 . jadi tidak perlu diterangkan kembali. Tutup file tersebut dengan 'close'. Selanjutnya langkah pengolahan Typed file menyerupai pemakaian pada text file : 1.

string. S.address). '). Apakah suatu file of records juga diolah secara sequential ? Ha-ha.r). dikenal sebagai istilah "Random File Access".recordno). repeat c:=upcase(readkey). Apakah saya bisa menambah data baru ke suatu file of records ? Indoprog 82 . readln(s). close(F). readln(r.r). repeat clrscr. readln(r. { Input data } { Write data to file } write('Input data again (Y/N) ?'). begin clrscr. write('Input file name to record databases : '). type Temployee = record name address phone age salary end. Temployee. readln(r.9).salary). integer. Pada file of records.s). char. write('Name write('Address write('Phone write('Age write('Salary write(F.name). rewrite(F). Adapun syntaxnya adalah sebagai berikut : seek(F. until c='N'. anda dapat membaca data berdasarkan record tertentu.age). { Data record number started from 0 } { r is the record variable } Istilah pengolahan file yang dapat mengakses sembarang posisi record. '). Sesuatu yang menentukan posisi record yang akan dibaca/tulis adalah record pointer. readln(r.T. ini pertanyaan yang sangat bagus. { Associate it } { Create it } = = = = = ').'N']. string[40]. Perhatian : recordno dimulai dari 0 untuk record 1 Contoh pemakaiannya : seek(F. { Ask user : Input again or not } until c in ['Y'. '). string[15]. Pointer ini dapat dipindah-pindahkan sebelum proses pembacaan maupun penulisan. : : : : : string[20]. ').Algoritma & Pemrograman uses crt. writeln(c). end. Hendra. var F c r s : : : : file of Temployee. readln(r. longint. read(F.phone). assign(F.

perhatikan potongan algoritma berikut : for i:=n to totalrecord-1 do begin seek(f. write(f.i). begin Writeln('Record ke-'. tetapi anda dapat membuat suatu rutin sendiri untuk melakukan hal tersebut. dan bagaimana caranya ? Jangan takut. Pindahkan pointer file ke record terakhir dengan seek. Praktek : integer.i-1). end. adapun triknya adalah : 1. Saya melihat ada perintah truncate.Algoritma & Pemrograman Hendra. {$I-} yang reset(FSiswa). end. Readln(Nis). read(f. Dapatkah saya mengetahui posisi record pointer yang sedang aktif ? Ya. Apakah kita bisa menghapus record tertentu pada file of records ? Pada dasarnya pascal tidak menyediakan fungsi tertentu untuk menghapus record. Induk siswa :'). begin close(FSiswa). Buka file tersebut dengan 'reset'. 2. procedure bacasiswa(I : integer).T. (*variabel global*) var Siswa : TSiswa.totalrecord-1).r).r). end. Tugas. Tentu saja. S. Type TSiswa = Record NIS : String[9].I). FSiswa : File of TSiswa. With Siswa do begin Nis := ''. procedure tutupfile. saya perlu mengetahui jumlah record yang telah ada. truncate(f). anda dapat menggunakan fungsi 'filepos' . 3. NAMA : String[30]. dec(totalrecord). Write('No. seek(f. If Nis <> '' Then Indoprog 83 . procedure bukafile(fname : string). Lakukan proses penulisan Kalau begini. End. (*oleh : hendra soewarno*) uses crt. contoh : n:=filepos(F). seek(f. Contoh program kongkrit : program data_record_terstruktur. Teori. begin assign(FSiswa.fname). contoh : totalrecord := filesize(f). {$I+} if IoResult<>0 then rewrite(FSiswa). apa fungsinya ? Perintah truncate dapat digunakan untuk membuat EOF pada posisi record ditentukan. atau dengan kata lain memotong file mulai posisi record tertentu. pascal ada menyediakan sebuah fungsi yaitu filesize.

end.j). With Siswa Do begin Rata := (Tugas+Teori+Praktek)/3. read(FSiswa. begin Writeln('Record ke-'. truncate(FSiswa) end. read(FSiswa.Teori). begin write('Nis yang ingin diperbaiki :').' '). var TNis : String[9]. procedure hapusdata(I : integer). procedure prosestambahdata.' '). Write('Teori :'). If Posisi = -1 Then Writeln('Data tidak ditemukan !') else Indoprog 84 . Write('Praktek :'). Writeln('Praktek :'. Seek(FSiswa. begin Seek(FSiswa. end. readln(TNis). Readln(Tugas).I). procedure prosesperbaikidata. end. Write(Praktek:6.Tugas). S. For J := I to Js-2 do begin Seek(FSiswa.Siswa).' '). Readln(Teori).j). begin js := Filesize(FSiswa).Nama).Nis = ''.nis) then last := mid .J). end. until Siswa. read(FSiswa. if Siswa. readln. Writeln('Teori :'.siswa). Write(Nama:30. Readln(Praktek). repeat I := FilePos(FSiswa)+1.T. Write(Rata:6:2). procedure tampilsiswa(I : integer).Siswa).mid : integer. function caridata(findvalue:String):integer.last.siswa). end.J+1).s1). Write(Tugas:6.siswa). var first. var I : integer. var js. end. While not eof(FSiswa) do begin read(FSiswa.s2.I). writeln. last :=Filesize(FSiswa)-1. end. while (first <= last) and continue do begin mid := (first + last) Div 2.Praktek). write(FSiswa. end. var Rata : Real. for gap := ((js-1) div 2) downto 0 do for j := 0 to ((js-1)-gap) do begin Seek(FSiswa. read(FSiswa. Seek(FSiswa. end. read(FSiswa. Posisi: integer. end. begin Seek(FSiswa. Seek(FSiswa. begin Seek(FSiswa. continue := true. Posisi := caridata(TNis). continue : boolean.t : Tsiswa.s2). Write(Teori:6.s1). With Siswa do begin Writeln('No. Js : integer. var J : integer. s1. Writeln('Nama siswa :'.j : integer. Hendra. Writeln('Tugas :'. {langsung urut data} end.nis) then first := mid + 1 else if (findvalue < siswa. Seek(FSiswa.mid). end. end. procedure prosesurutdata.Filesize(FSiswa)). Readln(Nama).j+gap).' ').nis > s2.nis then begin Seek(FSiswa. end. if s1. read(FSiswa. begin first:=0. if (findvalue > siswa. Induk siswa :'. Write(Nis:9.Nis).1 else continue := false.s2).Nis <> '' Then Write(FSiswa. bacasiswa(I).0).' '). procedure tampildaftarnilai. Write('Tugas :'). prosesurutdata. if first > last then caridata := -1 else caridata := mid.Algoritma & Pemrograman begin Write('Nama siswa :').j+gap). Js := Filesize(FSiswa).gap. end.

end. repeat Tanya := Upcase(Readkey). Write(FSiswa.Siswa). address.Algoritma & Pemrograman begin tampilsiswa(Posisi). and search function.rec'). Tanya : Char. BukaFile('C:\Siswa. Writeln('5. Writeln('4. end. end. end. if Tanya = 'Y' Then begin hapusdata(posisi). Hendra. Writeln('Diubah menjadi'). 2 : prosesperbaikidata. Write('Pilihan Anda :'). 5 : continue := false. var TNis : String[9]. Give explanation what is the different between Text file and File of records. Provide it add. bacasiswa(Posisi). Daftar Nilai'). If Posisi = -1 Then Writeln('Data tidak ditemukan !') else begin Write('Apakah yakin dihapus [Y/T] :'). 3 : proseshapusdata. Latihan 12 1. procedure proseshapusdata. sort.Posisi). Hapus Data'). Writeln('3. Writeln('1. Case Pilihan of 1 : prosestambahdata. 2. Extended program_data_terstruktur which only can store unique data for Nis. Continue: Boolean. delete. Write a program to store your friend name. end. (*Program utama*) var Pilihan : integer. telephone number in a Typed file.'T']. 4 : tampildaftarnilai. Readln(Pilihan). 3. until Tanya in ['Y'. begin Continue := True. Writeln('Proses hapus berhasil !'). Writeln('2. and use Quick Sort algorithm. readln(TNis). TutupFile. begin write('Nis yang ingin dihapus :'). Posisi := caridata(TNis). Writeln('Menu Utama'). Posisi: integer. Perbaiki Data'). end. Seek(FSiswa. Selesai'). end.T. Tambah Data'). Indoprog 85 . Until not Continue. S. Repeat Clrscr. edit.

count. contoh :: var buffer : array[1.BLen] of byte.actual). dimana : f .buffer.count. Modul 13 Akhirnya kita sampai juga pada pembahasan tentang Untyped file. actual : word.buffer. Sedangkan fungsi 'Assign'.T.actual).. f : file. count. Adapun cara deklarasi suatu untyped file : var F : file.buffer. akan berisi jumlah integer yang benar-benar berhasil dibaca dari file.count. blockread(f. (*variabel global*) var FSource. adalah variable buffer dalam bentuk array. 'Rewrite'. Contoh kongkrit : program enkripsi_dekripsi_file. Bread. count .Bkey : array [1. const Blen = 1024.buffer. (*oleh : hendra soewarno*) uses crt.buffer.. and 'Close' adalah tetap sama.actual).count.actual).2048] of integer. adalah jumlah integer yang akan dibaca/tulis. FTarget : file. dalam hal ini masingmasing record berukuran 1 integer. Variabel actual. Indoprog 86 . Dan proses pembacaan dapat sebagai berikut : count:=sizeof(buffer). Adapun syntax penulisannya adalah sebagai berikut blockread (f. blockwrite(f. Buffer. adalah variable file. blockread(f. Sebenarnya cara pengolahan Untyped file mirip dengan Typed file. Sedangkan perintah 'read' dan 'write' harus diganti dengan 'blockread' dan 'blockwrite'.actual). blockwrite(f.512. 'Reset'. Contoh berikut ini akan mencoba membaca 512 integer dari file. demikian juga untuk proses 'blockwrite' : count:=sizeof(buffer). S. Actual. Berikut ini saya akan mendeklarsikan variable sebagai buffer.Algoritma & Pemrograman Hendra. adalah jumlah integer yang berhasil dibaca/tulis.

bukafilesource. tutupfilesource. procedure bukafilesource. end. inc(i). i := 1. begin write('masukkan key anda :'). Return true if it does. end.fname). var i : integer.fname). {$I+} if IoResult<>0 then begin writeln('Tidak dapat buka '. halt. end.1). begin write('Nama file asal :'). writeln(nRead). writeln(nWrite). {$I-} rewrite(FTarget. Hendra. var Latihan 13 1. blockwrite(FTarget. while i <= BLen do begin j := 1. nRead. if length(key) = 0 then begin writeln('key tidak sah !'). {$I-} reset(FSource. assign(FTarget. end. S. end. end. Make a function to detect whether it is a text file or not. var fname : string. 2. end. until (nRead < 1024) or (nRead <> nWrite). inc(j).1). procedure tutupfilesource. Make a simulation for copy command in DOS using untyped file. procedure persiapankey. i. end.BRead. procedure lakukanenkripsi. procedure buatfiletarget. nWrite : word. Indoprog 87 . begin close(FSource). while (j <= length(key)) and (i <= BLen) do begin BKey[i] := Ord(Key[j]). var fname : string. end.T. end. begin close(FTarget). readln(fname).nRead). halt.fname). {$I+} if IoResult<>0 then begin writeln('Tidak dapat buat '.j : integer.1024. end. procedure tutupfiletarget. end. buatfiletarget. lakukanenkripsi. begin write('Nama file tujuan :').nWrite). Make a encryption/decryption utility for encrypt/decrypt a given file. (*Program utama*) var Fname : string. readln(fname).nRead. begin persiapankey. assign(FSource.Algoritma & Pemrograman Key : String.fname). repeat blockread(FSource. begin for i := 1 to BLen do Bread[i] := Bread[i] xor Bkey[i]. halt. readln(key).BRead. 3. tutupfiletarget.

5 (magenta). saya sudah mengerti. 10 (lightgreen). 14 (yellow). green.T. 11 (lightcyan). Indoprog 88 . apa gunanya dan apa perintahnya ? Pada lingkungan dos. bagaimana pula dengan warna latar belakang ? Pengaturan warna latarbelakang dapat menggunakan perintah : TextBackground(nomor warna). 1 (blue). warna background. kalau saya ingin melakukan pengaturan layar ? Turbo Pascal menyediakan suatu unit CRT. mengatur warna tulisan. blue. S. Pada prinsipnya anda dapat menggunakan konstanta dari masing-masing nomor warna seperti black. Dalam hal ini nomor warna yang berlaku hanya 0 s/d 7. 15 (White). saya sudah tahu perintah Clrscr. Modul 14 Unit apa yang perlu saya cantumkan pada bagian uses. 3 (cyan). misalnya sekarang posisi cursor berada di kolom 10. 4 (red). Atau : TextColor(Red + Blink). 12 (lightred). Saya pernah melihat tulisan warna berkedip-kedip. 8 (darkgray). 6 (brown). maka perintah : Writeln('Sedang belajar Pascal di STMIK IBBI').Algoritma & Pemrograman Hendra. yang berisi perintah-perintah pengaturan layar seperti membersihkan layar. dll. apa perintah untuk mengatur warna tulisan ? Pada prinsipnya ada dua cara untuk mengatur warna tulisan yang dicetak dengan perintah Write dan Writeln. yang pertama adalah perintah : TextColor(nomor warna). memindahkan posisi cursor. Ok. 2 (green). Hallo. Tadi anda ada menyinggung tentang memindahkan posisi cursor. Dan yang kedua adalah variabel internal dari unit CRT: Textattr := nomor warna. dapatkah hal tersebut dilakukan ? Anda dapat saja melakukan hal tersebut dengan menambahkan angka 128 pada nomor warna yang anda inginkan. untuk menggantikan pemakaian nomor. anda belum memberitahukan kepada saya nomor warna yang dapat saya gunakan ! Baiklah. (9) lightblue. 7 (lightgray). baris 5. 13 (lightmagenta). Writeln('Merah dan berkedip-kedip'). misalnya : TextColor(4 + 128). Writeln('Merah dan berkedip-kedip'). berikut ini adalah nomor warna yang mewakili masing-masing warna: 0 (black). mode layar. posisi tulisan dilayar dicetak berdasarkan posisi cursor yang sedang aktif. dan membuat window Ok.

y2). baris 13.10. Indoprog 89 . berapa sih jumlah kolom dan baris pada layar normal ? Normalnya 80 kolom. Writeln('Tulisan ini dicetak mulai kolom 20. WriteLn('We are now writing in this small window we just created. x2. He-he-he. S.3). Dimana x1. Contoh : Uses CRT. dan WhereY.T. Readln. WriteLn('Creating a window from 30. Writeln('A Real BIG Characters on screen !'). baris 13. di baris 13). Write('Pascal'). yaitu membatasi dari pencetakan dilayar berdasarkan koordinat kiri atas dan koordinat kanan bawah dengan perintah : Window(x1. Hal tersebut dapat dilakukan dengan mengatur Mode layar dengan perintah : TextMode(CO40). Untuk menormalkannya. ada satu hal lagi yang belum diberitahu. Akan menampilkan tulisan tersebut mulai kolom 10 di baris 5. GotoXY(WhereX+10. y1. Jadi misalnya anda ingin mencetak tulisan tersebut pada kolom 20. Write('Press any key to clear the window').13). begin TextMode(CO40).20). we'+ 'can''t get outside it when writing long lines like this one'). end. Write('Turbo'). contoh : GotoXY(20. anda bisa menggunakan variabel internal unit CRT.50. maka anda harus memindahkan cusor keposisi kolom 20. 25 baris. bagaimana hal tersebut dapat dilakukan ? Oh.10 to 50. TextMode(CO80). Contoh : uses Crt. Dan TextMode(CO80). diikuti dengan perintah pencetakan tulisan tersebut. Ngomong-ngomong. Readln. Tunggu dulu. GotoXY(5. Bisakah saya mendapatkan nilai posisi cursor yang sedang aktif ? Bisa. y2 adalah koordinat kanan bawah. Window(30. y1 adalah koordinat kiri atas dan x2. Saya pernah melihat tulisan layar komputer di bandara Polonia yang lebih besar dari tulisan normal.Algoritma & Pemrograman Hendra. ya. Writeln('Back to normal'). yaitu WhereX. saya sudah mengerti trik yang mereka gunakan.5).20'). begin ClrScr.

Berikut ini saya akan menerangkan konvensi perhitungan dan type data yang dihasilkan : Konvensi Penjumlah (+). bunyinya tidak berhenti. saya sering mendapatkan peringatan compiler akan kesalahan Type Mismatch.1. press any key to restore to fullscreen'). Tolong.T. sebenarnya masih banyak perintah yang terdapat pada unit CRT. dan Perkalian (*) : integer dengan integer = integer integer dengan real = real Indoprog 90 .80.25).Algoritma & Pemrograman Hendra. Write('The window is cleared. Writeln('Back in Full Screen'). Memang pascal adalah bahasa yang sangat ketat dalam variabel dan type data. Ok. seperti : Sound(frekuensi). ReadKey. NoSound. Pengurangan (-). Daftar Frekuensi Nada Frekuensi C 262 D 294 E 330 F 350 G 392 A 440 B 494 Sebagai programer pemula pascal. apakah anda sudah selesai ? Belum. NoSound. ReadKey. masalah ini sering saya dengar dari orang yang baru belajar pascal. walaupun programnya sudah selesai ! He-he-he. ClrScr. saya lupa menyisipkan delay diantara Sound dan NoSound. end. Kok sekarang speaker komputer tidak berbunyi sama sekali ? Oh. Contoh : Sound(500). {Full Screen is 80x25} Window(1. Apa pula fungsinya itu ? Fungsi perintah Sound untuk membunyikan speaker komputer dengan frekuensi tertentu. NoSound. Contoh : Sound(500). anda tidak menggunakan perintah NoSound untuk menghentikan efek dari perintah Sound. S. dapatkah anda menjelaskan hal tersebut ? Ok. Delay(1000). Contoh : Sound(500). Clrscr. ya. Delay(milidetik).

Pembagian bulat dengan Div : Menghasilkan Integer. If we omit NoSound statement. what will happen ? 10. Explain shortly all about text modes in PC ! 8. 4.T. What is TextColor and TextBackGround for ? 2. How was the formula to assign colors in TextAttr ? Indoprog 91 . 6. Latihan 14 1. Why must we add Delay between Sound and NoSound ? 9. Mention values that is accepted for changing text modes. S.Algoritma & Pemrograman Hendra. The same as number 2. List the value accepted as TextColor parameter with its color ! 3. How would it be if we specify X and Y parameter in GotoXY exceeds the screen resolution ? 7. but for TextBackGround. How can we switch between text modes ? 5. real dengan real = real Konvensi Pembagian (/) : Selalu menghasilkan real.

dan Type. Oh. e = 2. Kalau begitu bukankan sama saja dengan menulis langsung Setelah PPN = NilaiPenjualan * (1+0. S. Kalau begitu artinya. apakah maksud anda seperti itu ? Ya. Indoprog 92 . {deklarasi konstanta} {PPN 12. SetelahPPN:10:2). 'security'.125. 'museum'. tidak pakai :} Dalam hal ini anda tidak perlu mengubah isi program. 'spillway'. walaupun tidak mengunakan fasilitas kita tetap dapat membuat program ? Benar.5%. 'killer'. Dapatkah anda memberi sebuah contoh program yang menggunakan konstanta ? Contoh : Uses crt. Const {deklarasi konstanta} PPN = 0. yaitu memberikan nilai awal kepada variabel.7182818284529…. pengertian konstanta di pascal hampir sama dengan konstanta di dunia matematika maupun fisika. 'stupidity'. yaitu besaran-besaran yang memiliki ketetapan-ketetapan tertentu. SetelahPPN : Real. 'teacher'. Begin Write('Nilai penjualan :') Readln(Penjualan). misalnya terjadi perubahan nilai PPN menjadi 12. {PPN 10%} Var Penjualan. SetelahPPN = NilaiPenjualan * (1+PPN).. 'freebooter'). s: array[0. ketemu lagi.. tetapi coba anda bayangkan. 'butcher'. 'splotchier'.1415926513. Modul 15 Hallo.Algoritma & Pemrograman Hendra. 'computer'. 'programmer'. 'hacher'.1).18] of string= ('hello'. apakah anda telah siap ? Ok saya rasa siap. 'pascal'.5%. contoh yang diambil dari Hangman Modul 2 : const havetry=10. tetapi sebagai programmer yang baik. konstanta.T. 'children'. 'mouse'. Writeln('Nilai penjualan setelah PPN adalah '.. 'poor'. benar. . di sekolah kami ada belajar PI = 3. Apa saja fasilitas yang anda maksud tersebut ? Pertama kita akan membahas tentang Constants. tentu saja anda harus mampu menghasilkan program yang terstruktur dan mudah dimaintenance. Set. dan apa hubungannya dengan membuat program kita lebih mudah di maintenance ? Pada prinsipnya sama. 'corrigenda'. sehingga maintenance program anda menjadi mudah. Apakah ada kegunaan lain dari konstanta pada pascal ? Ada. Tetapi pemakaian konstanta di pascal programmer bebas membuat konstanta sesuai dengan kebutuhan programnya. End. 'house'.1. pada hari ini kita akan membahas beberapa fasilitas yang tersedia pada pascal dan akan membantu membuat program anda menjadi lebih terstruktur dan mudah di maintenance. berdasarkan contoh diatas kita tinggal mengubah Const PPN = 0.

sehingga nilainya boleh diubah didalam program. Set pada pascal adalah merupakan himpunan seperti pada matematika. Apakah fungsi operator in pada operasi Set ? Oh.. until c in letter. repeat c:=upcase(readkey).'E'. Dapatkah anda menjelaskan lebih lanjut apa itu type ciptaan dari sisi penerapan pada program. Ok. until c in vowel. Gaji:10:2).'I'. masih adalah beberapa yaitu user defined type. repeat c:=upcase(readkey). end. end. repeat c:=upcase(readkey). begin write('Yes or no (Y/N) ?').Algoritma & Pemrograman Hendra. Pemakaian Set dapat menyederhanakan algoritma program. dan memudahkan pembacaan. dan contoh lain : Uses crt. write('Enter a letter'). Const {deklarasi konstanta} Gaji : Real = 500000. Pada contoh diatas konstanta Gaji yang dideklarasikan beserta type dapat berprilaku sebagai variabel. {deklarasi variabel Set} {range A s/d Z} Contoh lain pemakaian set uses crt. fungsi operator in pada Set adalah menyatakan bagian dari himpunan tertentu. until c in ['Y'.T. S.'O'. vowel : set of 'A'. Apakah masih ada fasilitas lain yang khusus pada pascal ? Ya. ya. sekarang akan kita lanjutkan ke pembahasan tentang Set. var c : char.'N'].'U'. contoh : uses crt. begin write('Enter a vowel'). If Omzet >= 10000000 Then Gaji := Gaji + 10000. var c : char. dimana pemakai dapat membuat type ciptaan sesuai dengan kebutuhan program.'Z'. dan kalau bisa kasih contoh dong ! Indoprog 93 . Var Omzet : Real. Begin Write('Omzet penjualan :') Readln(Omzet). Set adalah sesuatu fasilitas khusus pada pascal yang tidak dimiliki oleh bahasa pemrograman lainnya. Writeln('Gaji yang diterima '. End. letter : set of 'A'.

sehingga selanjutnya kita dapat menggunakan nama tersebut dalam deklarasi variabel. Dalam hal ini sebenarnya type nilai merupakan subrange dari type ordinal yang telah ada. padahal deklarasi type diatas : Type Nilai = 0 . masih ada. pada modul ini kita belum akan membahas tentang Record type. type ini sebenarnya adalah pemberian nama terhadap type berstruktur seperti array dan string. sebenarnya subrange tersebut merupakan bagian dari range nilai type lain..Algoritma & Pemrograman Hendra. user diberi kesempatan untuk membentuk ordinal type yang sesuai dengan kebutuhan program. misalnya kita ingin mengolah data nilai siswa yang kemungkinan nilainya berkisar 0 s/d 100. misalnya : Contoh : Indoprog 94 . integer. Adakah type ciptaan yang lain ? Masih ada dua yaitu Enumerated type dan Record Type. Apa itu Enumerated type ? Pada pascal. pascal menyediakan beberapa ordinal type seperti shortint. Adakah type ciptaan lain yang dapat membuat program kita menjadi lebih terstruktur ? Ya. sesuai dengan namanya. integer. Sebenarnya sama saja kalau kita tulis sebagai berikut : Var Nama : STRING30. char dan boolean. salah satunya adalah type substitusi.100.. Dapatkah anda menjelaskan lebih lanjut kira-kira bagaimana pengertian dari subrange tersebut! Ok. Didalam pemakaian type ini kadang-kadang kurang sesuai dengan kebutuhan. Contoh : Type STRING30 = String[30]. 100.T. Sebagaimana kita ketahui. Var Fisika : Nilai. Pada prinsipnya kita dapat menggunakan type integer untuk keperluan tersebut. Var Nama : STRING30. Tetapi akan lebih baik kalau dengan contoh berikut . Type Nilai = 0. S. misalnya type Integer dimana nilai yang dapat ditampung berkisar 0 s/d 255. Dalam hal ini type ciptaan seperti ini disebut sebagai Subrange. longint. Contoh : Var Fisika : Integer.

minggu). S.Algoritma & Pemrograman Var Today : Integer. rabu. {minggu} End.T. Var Today : DOW. Today := Pred(Today). If Today = kamis then Writeln('Jangan lupa sembayang DATUK'). Inc(X). jumat. procedure mengurangi nilai 1 ke variabel X. End. 6. kamis. {sabtu} Inc(Today). sabtu. rabu. yaitu : Pred(X). End. 4. minggu). Begin Today := minggu. selasa. 5. Succ(X). Var Today : DOW. Begin Today := minggu. 7. If Today = 4 then Writeln('Jangan lupa sembayang DATUK'). Contoh : Type DOW = (senin. 2. 3. tetapi ada beberapa fungsi bantu ordinal yang dapat digunakan untuk mengolah enumerated type. kamis. Bandingkan dengan : Type DOW = (senin. Dec(X). selasa. Dapatkah Enumerated type mengalami input-output dan operasi matematika ? Enumerated type tidak dapat mengalami input output maupun operasi matematika. jumat. Explain what is constants in pascal ? Explain how constants make your program more easy maintenance ? Can we change the value of constant in program ? Explain how to declare set variable ! Explain the function of in operator in set ! Explain what is Sub Ranges. Latihan 15 1. procedure menambah nilai 1 ke variabel X. Subtitution and Enumerated in type declaration ? Can we do input output for Enumerated type ? Indoprog 95 . Begin Today := 7. Hendra. sabtu. function mendapatkan nilai predecessor dari suatu nilai ordinal type. function mendapatkan nilai predecessor dari suatu nilai ordinal type.

FUNCTION untuk mengambil harga mutlak suatu nilai FRAC(Real). Fungsi Bantu Matematika : ABS(Numerik). FUNCTION untuk menghasilkan Sinus suatu sudut (dalam radian PI/180) ARCTAN(real).T. ORD(Char). FUNCTION untuk menghasilkan data type Character dari suatu Integer. S. FUNCTION untuk menghasilkan sudut yang diketahui nilai tangennya PI. Fungsi bantu konversi ini terdiri atas ROUND(Real) FUNCTION untuk menghasilkan data type INTEGER dari suatu REAL dengan memperhatikan aturan pembulatan..1415926. FUNCTION untuk mengambil bagian pecahan dari suatu REAL INT(Real).Algoritma & Pemrograman Hendra.) LN(Real). FUNCTION untuk menghasilkan nilai kuadrat suatu bilangan SQRT(Real) FUNCTION untuk menghasilkan akar kwadrat suatu bilangan COS(Real) FUNCTION untuk menghasilkan Cosinus suatu sudut SIN(real). FUNCTION untuk menghasilkan data type Integer dari suatu Character. FUNCTION untuk mengambil bilangan bulat dari suatu REAL SQR(Real).. FUNCTION untuk menghasilkan logaritma natural dari suatu nilai EXP(real). TRUNC(REAL) FUNCTION untuk mengambil bagian INTEGER dari suatu REAL. CHR(Integer). FUNCTION untuk menghasilkan nilai pi (3. Indoprog 96 . FUNCTION untuk menghasilkan eksponensial dari suatu nilai.

As an exercise you may want to find the other solutions. Probably the fact that this number coincidentally equals the dimensions of an ordinary chess board has contributed to the popularity of the problem. If the queen there is at the end of the column it removes that queen as well and goes to the preceding column. and it's reasonably straightforward to find solutions when N is 4. or combining these two operations. it is not that simple to find any others. then a solution of the puzzle has been found. vertically. One solution .the prettiest in my opinion . S. You may find it interesting to watch your computer find the solutions. It's pretty easy to see that this is impossible if N is 2 or 3. Our particular solution is configuration 10. Besides being an amusing puzzle this problem is interesting because kids love it and it's a great teaching tool in the upper grades of Elementary School. or 7. a queen can move as far as she pleases. It turns out that there are 12 essentially distinct solutions. The standard 8 by 8 Queen's problem asks how to place 8 queens on an ordinary chess board so that none of them can hit any other in one move. 6. or diagonally. The problem begins to become difficult for manual solution precisely when N is 8. It then places a queen in the third column and moves it until it cannot be hit by either of the first two queens. or even this one if I hadn't displayed it here.Algoritma & Pemrograman Hendra.is given in the figure nearby. 5.T. If you are impatient. If the current column is the last column and a safe place has been found for the last queen. (Two solutions are not essentially distinct if you can obtain one from another by rotating your chess board. An obvious modification of the 8 by 8 problem is to consider an N by N "chess board" and ask if one can place N queens on such a board. If the current column is the first column and its queen is being moved off the board then all Indoprog 97 . It also provides great programming exercises. horizontally. It then places a queen in the second column and moves it until it finds a place where it cannot be hit by the queen in the first column.) Even though the solution shown here looks pretty natural and straightforward. The interactive applet on this page let's you find solutions of the N by N Queen's Puzzle for arbitrary values of N. A chess board has 8 rows and 8 columns. The Algorithm The program finds solutions by starting with a queen in the top left corner of the chess board. If there is no place for a queen in the current column the program goes back to the preceding column and moves the queen in that column. you can look them up by clicking here. or placing in in front of a mirror. Lampiran The N by N Queens Problem In chess. Then it continues this process with the remaining columns.

The Table nearby gives the required number of steps. until r = 0. r := 1. A measure of the difficulty of the problem is given by the number of moves the above algorithm takes to find the first solution. for i := 1 to nq do write(i:2.':'). writeln(jbacktrack). of queen :'). backtrack := false. queen := i = r. while (i <= r-1) and (c <> cq[i]) and (c <> cq[i]+r-i) and (c <> cq[i]+i-r) do inc(i). function queen(r. Currently the program does not eliminate solutions that can be obtained from previous ones by rotations or reflections.c. begin i := 1.1000] of integer. backtrack := true.cq[i]:2.Algoritma & Pemrograman Hendra. backtrack := false. It is ordered by increasing difficulty. writeln('no any more'). This number of course tends to go up as as N increases. end.c : integer):boolean. backtrack := true.T. var i : integer.. c := cq[r]+1. (*oleh : hendra soewarno*) var cq : array[1. repeat while (r > 0) and (r < nq+1) do begin if not backtrack then c := 1. end. (* program utama*) var nq. if c < nq+1 then begin cq[r] := c. end. all solutions have been found. writeln. if r = nq+1 then begin inc(solution). So the easiest board to find a solution on is the 5 by 5 board.r. continue := true. dec(r). but it does not increase monotonically. c := cq[r]+1.solution:2. solution. end. and the 22 by 22 board is about 65 times as hard as the 23 by 23 board. Contoh Program program nqueen. jbacktrack : longint. Indoprog 98 . continue : boolean. solution := 0. S. end. inc(jbacktrack). jbacktrack := 0. When a solution has been found it can be displayed in its own window. possible configurations have been examined. readln. end else begin dec(r). end.c) then continue := false else inc(c). while (c < nq+1) and continue do begin if queen(r. begin write('no. and the algorithm terminates. and about 41.000 times as hard as the 8 by 8 board. write('solution '.' '). inc(r). backtrack : boolean.i : integer. readln(nq).

backtrack : boolean. begin cleardevice. function queen(r. k := 0.(i-1)*(200 div n). end. var i : integer. initgraph (graphdriver. jbacktrack : longint. readln. Indoprog 99 . readkey. var graphdriver : integer. i*(200 div n)).Algoritma & Pemrograman program nqueen_visual_grafik. for i := 1 to n do circle((cq[i]-1)*(200 div n)+(200 div (n*2)). continue := true.c) then continue := false else inc(c).1000] of integer. inc(r). end. 'EGAVGA. procedure showresult(n : byte). initialgraph. end. Hendra.. continue : boolean. graphmode : integer. begin i := 1.crt. r := 1. c := cq[r]+1. begin write('no. j*(200 div n). queen := i = r. end. var i.jbacktrack). for i := 1 to n do for j := 1 to n do begin setfillstyle(1. of queen :'). backtrack := false. c := cq[r]+1.j.r. repeat while (r > 0) and (r < nq+1) do begin if not backtrack then c := 1. readln(nq). writeln('jumlah solusi :'. end. end. while (i <= r-1) and (c <> cq[i]) and (c <> cq[i]+r-i) and (c <> cq[i]+i-r) do inc(i). writeln('jumlah backtrack :'. solution. closegraph. backtrack := true. end. (* program utama*) var nq. (i-1)*(200 div n)+(200 div (n*2)). (*oleh hendra soewarno*) uses graph. until r = 0. var i : integer. if c < nq+1 then begin cq[r] := c. inc(jbacktrack).solution). procedure drawchessboard(n :byte).(i+j) mod 2). while (c < nq+1) and continue do begin if queen(r.c : integer):boolean. graphmode).i : integer. k:=k+1. jbacktrack := 0. end. end. if r = nq+1 then begin inc(solution). begin detectgraph (graphdriver.c. bar((j-1)*(200 div n).T. backtrack := false. graphmode.BGI'). end. dec(r). S. solution := 0. end else begin dec(r). var cq : array[1. showresult(nq). backtrack := true.k : byte. procedure initialgraph. begin drawchessboard(n). 200 div (n*3)).

However one solves the problem. Its solution touches on two important topics discussed later on: • • recursive functions and stacks recurrence relations The applet has several controls that allow one to select the number of disks and observe the solution in a Fast or Slow manner. You can drop a disk on to a peg when its center is sufficiently close to the center of the peg. We are given a tower of eight disks (initially four in the applet below). The applet expects you to move disks from the leftmost peg to the rightmost peg. S. perhaps.Algoritma & Pemrograman Hendra. The objective is to transfer the entire tower to one of the other pegs (the rightmost one in the applet below). After moving the bottom disk from Src to Dst these disks will have to be moved from Aux to Dst. Therefore. say. sooner or later the bottom disks will have to be moved from Src to Dst.3. moving only one disk at a time and never a larger one onto a smaller. Then the body of the function might look like Indoprog 100 . initially stacked in increasing size on one of three pegs. the problem appears to be solved if we know how to accomplish the following tasks: 1. 2.in this order).number of disks and three pegs (source. for a given number N of disks. Tower of Hanoi The Tower of Hanoi puzzle was invented by the French mathematician Edouard Lucas in 1883. To better understand and appreciate the following solution you should try solving the puzzle for small number of disks. Move the bottom disks from Src to Dst 3.T. Move the top N-1 disks from Src to Aux (using Dst as an intermediary peg) 2. and. Aux (Auxiliary) and Dst (Destination). Recursive solution Let call the three pegs Src (Source). intermediary and destination . 4. The puzzle is well known to students of Computer Science since it appears in virtually any introductory text on data structures or algorithms. Move N-1 disks from Aux to Dst (using Src as an intermediary peg) Assume there is a function Solve with for arguments . To solve the puzzle drag disks from one peg to another following the rules. At this point in time all the remaining disks will have to be stacked in decreasing size order on Aux.

Move from Aux to Dst 13. For N=3 it translates into 1. Aux) Move from Src to Dst Solve(N-1.Algoritma & Pemrograman Solve(N. 6. Aux. Dst) Hendra. Move from Src to Dst 9. Dst. Move from Dst to Src 6. 7. For N=4 we get the following sequence 1. Move from Src to Aux 8. 3.T. This actually serves as the definition of the function Solve. Move from Src to Aux 14. The function is recursive in that it calls itself repeatedly with decreasing values of N until a terminating condition (in our case N=0) has been met. Move from Src to Dst 15. Move from Dst to Aux 7. Move from Aux to Src 11. Move from Aux to Dst 4. Src. Src. Src. Move from Aux to Dst 10. Move from Aux to Dst Indoprog 101 . Move from Src to Aux 2. To me the sheer simplicity of the solution is breathtaking. Move from Src to Dst 3. 5. Move from Src to Aux 5. Move from Src to Dst Move from Src to Aux Move from Dst to Aux Move from Src to Dst Move from Aux to Src Move from Aux to Dst Move from Src to Dst Of course "Move" means moving the topmost disk. S. Dst) if N is 0 exit Solve(N-1. 4. Aux. 2. Move from Dst to Src 12.

UsingPeg.} begin if Height = 1 then begin write ('Move a disk from '). ToPeg. {Recursive procedure for determining moves. ToPeg). writeln. to. FromPeg. S.} var Height: integer. write (ToPeg). write (ToPeg). Indoprog 102 . procedure Move (Height: integer.1. program Hanoi. UsingPeg: char). write (FromPeg). Keep this order-from. write (' to '). Move (Height . read (Height).1.T.Algoritma & Pemrograman Hendra. FromPeg) end end. write (' to '). Moves disks from A to C. write ('Move a disk from '). write (FromPeg). ToPeg. FromPeg. UsingPeg. using-in mind when you read the recursive calls. writeln end else begin Move (Height . {Recursively solves the Towers of Hanoi problem. (*main program*) begin write ('How many disks are you going to start with? ').

begin setfillstyle(1. end. end. mid + size div 2. Peg = object private stack : array [1. public stackname : string. procedure push(size : byte). midpoint : integer. function height:byte. procedure initialgraph. var A. Move (Height.mid:integer). procedure pop(var size : byte).20*height.} uses crt. setcolor(15).Algoritma & Pemrograman Hendra.300 .319 . procedure erasedisk(height.C : PPeg. 'EGAVGA.graph. 'A'.size div 2. graphmode : integer..1).100] of byte.mid:integer). S. mid + size div 2.size div 2.20*height). end. graphmode.0). Indoprog 103 .size.20*height. (*modify by hendra soewarno*) Type PPeg = ^Peg. constructor initial(name:string.T. initgraph (graphdriver. program Hanoi_visual_grafik. 'B') end. begin detectgraph (graphdriver. rectangle(mid . bar(mid .319 .mid:integer). begin setfillstyle(1. procedure printdisk(height. nstack : byte.300 . var graphdriver : integer. graphmode). {Recursively solves the Towers of Hanoi problem. Moves disks from A to C. 'C'.size.20*height).B.BGI').

FromPeg^. end. midpoint := mid.midpoint) end. erasedisk(nstack+1.UsingPeg.pop(disk). begin height := nstack. end. stackname := name. end else begin Move (Height-1.20*height. bar(mid . procedure Peg.push(size : byte). begin inc(nstack). Move (Height-1. FromPeg).pop(var size : byte). end.pop(disk). function Peg. end end. stack[nstack] := size. procedure Move(Height:byte. ToPeg^.300 . constructor Peg.initial(name:string.push(disk).push(disk). UsingPeg. ToPeg. Delay(1000).midpoint) end. var disk : byte. ToPeg). mid + size div 2. begin if Height = 1 then begin FromPeg^. S.height:byte.FromPeg. procedure Peg.size div 2.UsingPeg:PPeg).mid:integer).ToPeg.Algoritma & Pemrograman Hendra. begin size := stack[nstack].T.size. dec(nstack).FromPeg. Indoprog 104 . ToPeg^.319 .size.20*height). printdisk(nstack. begin nstack := 0.

A. i. closegraph.540)).100)). readln (Height). C. end.push(i*20).T.initial('C'. Indoprog 105 . new(B. begin new(A. B). write ('How many disks are you going to start with? '). Move (Height.initial('B'. new(C.320)). S. initialgraph. readln. (*main program*) var Height.Algoritma & Pemrograman Hendra.disk : byte.initial('A'. for i := Height downto 1 do A^.

See also (n).000 numbers. S. The notion of "equal to" is expressed by (n). or the algorithm will always be too slow on a big enough input. or elapsed ("wall clock") time. Note: As an example. but big-O notation is often misused to mean equal to rather than less than. quicksort. Strictly speaking. which is O(n2). it may be the number of messages passed across a network. (n). Usually this is some notion of the limiting factor. which is usually the number of items. 3n + 4 is O(n2). running on a supercomputer if there are a lot of numbers to sort. asymptotic upper bound. The notation is read. memory used. which is O(n log n) on average.000. "f of n is big oh of g of n". model of computation. Formal Definition: f(n) = O(g(n)) means there are positive constants c and k.000 steps on average. Also known as O. the number of floating point multiplications may be the limiting factor. the quicksort takes 20. For instance. usually the time or memory needed. NP. . (n). disk accesses. while the bubble sort takes 1. Other measures which may be important are compares.T. little-o notation. given the problem size n. To sort 1.000. asymptotically tight bound. saying some equation f(n) = O(g(n)) means it is less than some constant multiple of g(n). For one problem or machine. n2 + 3n + 4 is O(n2). while for another. The values of c and k must be fixed for the function f and must not depend on n. Informally.000.000. such that 0 f(n) cg(n) for all n k. too. but may just need a better implementation. item moves.000.000 steps! Any measure of execution must implicitly or explicitly refer to some computation model. The importance of this measure can be seen in trying to decide whether an algorithm is adequate. running on a small desktop computer can beat bubble sort. big-O notation (definition) Definition: A theoretical measure of the execution of an algorithm. Indoprog 106 .Algoritma & Pemrograman Hendra. complexity. since n2 + 3n + 4 < 2n2 for all n > 10.

not the letter O. S.T. Strictly.Algoritma & Pemrograman Hendra. but who can tell the difference? Indoprog 107 . the character is the upper-case Greek letter Omicron.

or on linked lists. moving around the records themselves every time the keys must be moved may be inefficient. at most.aeriesoft. The name is derived from the fact that as each pass is made.Algoritma & Pemrograman Hendra. In today's computing age. a great deal of their time is spent maintaining that data in sorted order in the first place. S. Here read and write times are major concern in determining sort performance. A characteristic of sorting methods which is sometimes important in practice is stability. not just a bunch of numbers.T. Sorting Algorithms. Instead it's possible to move around pointers to the records. There are two basic category of sorting techniques: internal sorting and external sorting. As the sort progresses. list entries "bubble upward" in the list until they bump into one with a lower sort value. displacing each smaller element one position. The basic premise behind sorting an array is that its elements start out in some (presumably) random order and need to be arranged from lowest to highest In real life. the largest element in a sub-list sinks all the way to the bottom of the list. thus. The time required to read and write records is not considered to be significant in evaluating the performance of internal sorting techniques. Basic Sorting Algorithms Bubble Sorts Bubble Sort is a sorting technique in which pairs of adjacent values in the list to be sorted are compared and interchanged if they are out of order. sorting became an ideal method for many applications to gain better performance. computers are used so extensively to process data collections that in many installations. http://www. Indeed. • • Internal sorting methods are applied when the entire collection of data to be sorted is small enough that the sorting can take place within main memory. External sorting methods are applied to larger collections of data where some (frequently most) of the collection resides on an auxiliary memory device such as a magnetic tape or disk. upward. it is usually required to sort records. Usually sorting is performed on either arrays. Records are sorted according to the values of their keys. If the records are very large. Insertion sort is an example of stable sorting algorithm. and not move the records until sorting is complete (if even then). the larger elements sink quickly to their lower positions while the smaller elements slowly Indoprog 108 .ru/Projects/SortAlg/ Introduction Sorting is one of the problems in computer science that seems to have the most algorithms developed for it. A sort is called stable if it preserves the relative order of keys in the file.

the data must already be sorted. in the worst case. This is easily checked. one compares it with the last element in the sorted list. Sometimes this method is also called bidirectional selection sort. Bubble sort uses about N2/2 comparisons and N2/2 exchanges on the average and in the worst case. Thus it is possible to halt the algorithm without going through all passes. Selection sort is linear for files with large records and small keys. Bubble sort may be speeded up by doing two iterations on each pass. The the first iteration is done as is standard bubble sort and the second iteration moves upwards. It is saved in temporary storage. Shaker sort is a simple variation of selection sort. If it is less than this element. just like a shaker separates different substances. This algorithm is called shaker sort because it continuously finds small and large elements and moves them far apart. Thus.T. that element Indoprog 109 . This is done by finding the smallest element in the array and swapping it with the element in the first position. it is not a good algorithm to use with data stored as a linked list. one position per sort-pass. but a small element to bubble up many places. An upward iteration allows a large element to sink only one place. twice as many in the worst case. This method is called selection sort because it repeatedly selects the smallest element in the yet unsorted part of the array. which finds both the smallest and the largest items on each pass and then moves them to their final correct places. Beginning with the second element. Selection Sorts The idea behind selection sort is that each shift of data moves an item directly into its final. correct place. it must be shifted backwards into the sorted list. As long as it is less than the current element in the sorted list. "bubble" up to their final resting place. such as index cards or forms. fewer iterations are required because no element requires a full set of iterations to bubble up to the top. Selection sort uses about N2/2 comparisons and N exchanges on the average. starting at the bottom of the list and ending at the top. This approach is called bidirectional bubble sort. since a great deal of time will be used traversing the list trying to locate the correct elements at each step. Because selection sort involves accessing the list at various points in a more-or-less random fashion. S. then finding the second smallest element and exchanging it with the element in the second position. Insertion Sort The insertion sort algorithm is copied directly from a commonly used technique for hand-sorting objects. and then reassigning the pointers. If a complete pass is made without any exchanges being made.Algoritma & Pemrograman Hendra. and then compared with each element in the sorted list in turn. and doing in this way until the entire array is sorted.

Shell Sort re-divides the array into less segments and repeat the the algorithm until at last that the number of segment equals one. Instead. time complexity. Comparison of Methods There are many criterion that may be used in selecting an algorithm and its implementation. or pivot element. is shifted one space to the right the search is continued.T. When an element that is less than the new element is found. This helps to avoid the worst case situation. Hoare in 1960. it divides the array into noncontiguous segments. which are separately sorted by using Insertion Sort. Shell Sort does not sort the entire array at once. bubble or selection sort for small partitions. 364. Insertion sort uses about N2/4 comparisons and N2/8 exchanges and is linear for "almost sorted" files.. avoiding a stack overflow situation. In addition to the basic Quicksort algorithm. Second. Quicksort can be replaced with the insertion. there are some improvements that can increase the performance of Quicksort by approximately 30% and can help to prevent a worst case situation. and the segment is sorted. Finally. and was published in Computer Journal in 1962. one of the two recursive calls of Quicksort can be removed and replaced with iteration.. L. However. It is also called diminishing increment sort. There are many variations of Shell Sort depending on the method of arranging segments. Quick Sorts The Quicksort was invented by C.5 comparisons. and forcing all data below or above the midpoint to its respective side). It then repeats the partitioning in recursive manner. Once all of the segments are sorted. Unlike Insertion Sort. 1. This divide-and-conquer algorithm first partitions the sequence into two parts (working in-place) such that all of the elements in the first part are less than or equal to all of the elements in the second part (this is done by selecting a midpoint. The best separation sequence is .A. the most important Indoprog 110 . space complexity and implementation difficulty. for this sequence Shell sort never does more than N1. S.Algoritma & Pemrograman Hendra. 13. or when the top of the sorted list is reached. 121. The algorithm achieves high efficiency because the partitioning step is fast and usually breaks its input into two parts of roughly equal size. Quicksort is most efficient for large amounts of data.R. If the smaller of the two partitions is used for the recursive call. Shell. 40. the number of recursive levels can be reduced to lg N. a "Median-of-Three" approach can be used to select the pivot element. and is inspired by the Insertion Sort's ability to work very fast on an array that is almost in order. First. 4. The most important of them are efficiency. the search stops and the new element is inserted in the correct place. Shell Sort This sorting algorithm is conceived by D.

Algoritma & Pemrograman Hendra. Nevertheless there are numerous software metrics that are used for rough estimates of actual software effort. and data. computer scientists often use some combination of theoretical analysis of algorithms and empirical results. thing to learn is how quickly the algorithm's time requirement grows as a function of the problem. The programs' complexity is very difficult to measure or analyze. S. Simpler algorithms are less error-prone. The second table lists the results of actual complexity tests obtained with the applet that is running currently in the right frame. computers.5 2 Yes Yes Yes Yes Yes * No No Yes No No N logN Uses stack for recursion Initial Array Content Algorithm < Bubble Sort Selection Sort Insertion Sort Shell Sort Quick Sort 99 4950 99 342 552 Ascending := 0 300 198 692 180 Random < 4940 4950 2644 765 880 := Descending < := 300 922 431 Computational Complexity (Comparisons and Assignments) 8115 4950 14850 300 4950 1163 500 854 676 2745 4950 5148 Simplicity is traditionally considered the least important issue. easier to implement and result in more reliable and easy-to-maintain programs. but some attention must be paid to it. But in practice. Algorithm analysis should be independent of specific implementation. Programmers can't help but admit that defining program simplicity in a complete and robust way is an extremely hard task. TotalMetric supports • McCabe's Metrics Indoprog 111 . Important Characteristics Algorithm Bubble Sort Selection Sort Insertion Sort Shell Sort Quick Sort * Asymptotic Behavior Best N N2 N N(logN) N logN 2 Average N2 N2 N N 2 1. However. every software engineer is bound to have a rather clear intuitive notion of program simplicity.T.25 InStable Place Worst N2 N2 N N N 2 1. TotalMetric is one of static metrics analysis tools that capture complexity and level of effort metrics for Java programs. The most important characteristics of all algorithms described and implemented here are given in the table below. None of presently known complexity measurement techniques give adequate and accurate results.

Algoritma & Pemrograman o o Hendra. Major metrics produced by TotalMetric for all methods of these classes are listed in the tables below. • Average and Worst Cyclomatic Complexity among methods Average and Worst Extended Cyclomatic Complexity among methods Halstead's Metrics o Average and Worst Volume among methods (V) o Average and Worst Effort among methods (E) o Average and Worst Difficulty among methods (D) All sorting algorithms in the applet that is running in the right frame were implemented as separate classes.T. Average in Class Algorithm Bubble Sort Selection Sort Insertion Sort Shell Sort Quick Sort Metrics v(G) ev(G) 6 5 4 7 5 6 5 5 9 6 E 8470 7756 9734 V 385 357 335 D 22 21 29 55 37 31405 563 33709 476 Indoprog 112 . S.

the number 20 appears in row 6. . Here's how you construct it: 1 1 1 1 1 1 1 1 7 6 21 5 15 35 . in Algebra and in Probability / Combinatorics. Where do we use Pascal's Triangle? Pascal's Triangle is more than just a big triangle of numbers.e. like 1.3. the one above it and to the right. beginning with row zero and place zero. they usually give a row number and a place in that row... and 1 1. pretend it's zero) and the number above and to the right (1). put a 1. What is Pascal's Triangle? How do you construct it? What is it used for? Pascal's Triangle is an arithmetical triangle you can use for some neat things in mathematics.. If you make a chart of what you get when you do these powerraisings. There are two major areas where Pascal's Triangle is used. Indoprog 113 . you'll get something like this: (x+1)^0 (x+1)^1 (x+1)^2 (x+1)^3 (x+1)^4 (x+1)^5 = = = = = = 1 1 + x + 2x + x^2 3x + 3x^2 + x^3 + 6x^2 + 4x^3 + 10x^2 + 10x^3 + 5x^4 1 1 + 1 + 5x 1 + 4x + x^4 + x^5 . to get the first 1 in any line. when there's only one number above..Algoritma & Pemrograman Hendra. . and get a sum of 1. you add up the number above and to the left (since there is no number there..4. Then to construct each entry in the next row. When people talk about an entry in Pascal's Triangle.2.T.. Algebra Let's say you have the polynomial x+1.. For instance. you look at the two entries above it (i..5. S. At the beginning and the end of each row. place 3. 4 10 20 35 3 6 10 15 21 2 3 4 5 6 7 1 1 1 1 1 1 1 You start out with the top two rows: 1. You might even think of this rule (for placing the 1's) as included in the first rule: for instance. and the one above it and to the left). and you want to raise it to some powers.

If you just look at the coefficients of the polynomials that you get. Triangular Numbers." If you want to find out the probability of choosing one particular combination of two hats. 6. the entries in Pascal's Triangle are called the binomial coefficients.Algoritma & Pemrograman Hendra. There's a pretty simple formula for figuring out the binomial coefficients: n! [n:k] = -------k! (n-k)! For example.T. 10. then that probability is 1/10.) 1 1 1 1 1 1 1 1 7 6 21 5 15 35 4 10 20 35 3 6 10 15 21 2 3 4 5 6 7 1 1 1 1 1 1 1 Because of this choosing property. It doesn't matter to you which hat is on top. In about 1654 Blaise Pascal started to investigate the chances of getting different values for rolls of the dice. 3. and you want to know how many different ways you can pick two of them and wear them. [6:3] = 6 * 5 * 4 * 3 * 2 * 1 -----------------------3 * 2 * 1 * 3 * 2 * 1 = 20. is always place 0. 1. (Remember that the first number in the row. i. Fibonacci Numbers The triangular numbers and the Fibonacci numbers can be found in Pascal's triangle. and his discussions with Pierre de Fermat are usually considered to have laid the foundation for the theory of probability. it just matters which two hats you pick. 10.e. 1 1 1 1 1 1 1 1 7 6 21 5 15 35 4 10 20 35 3 6 10 15 21 2 3 4 5 6 7 1 1 1 1 1 1 1 Indoprog 114 . the binomial coefficient [6:3] is usually read "six choose three. The triangular numbers are easier to find: starting with the third one on the left side go down to your right and you get 1. S. Probability/Combinatorics The other main area where Pascal's Triangle shows up is in Probability. Let's say you have five hats on a rack. you'll see Pascal's Triangle! Because of this connection. etc. where it can be used to find Combinations. So this problem amounts to the question "how many different ways can you pick two objects from a set of five objects?" The answer? It's the number in the second place in the fifth row.

To find them you need to go up at an angle: you're looking for 1. 1+2. 1. 1+4+3. 1+5+6+1. The Fibonacci numbers are harder to locate. S. 1+3+1.Algoritma & Pemrograman Hendra. Indoprog 115 . 1+1.T.

at/bossung/prog/delphi/sorting.html.gov/dads/. Sorting Algoritms in Pascal. Demo. Sebastian Boßung Indoprog 116 . Dictionary of Algorithms and Data Structure.T.pages.ca/spider/harrison/Java/sorting-demo. Daftar Pustaka http://www.nist.Algoritma & Pemrograman Hendra. http://free.ubc. S. National Institute of Standards and Technology.html. Sorting Algorithms http://www.cs.

Sign up to vote on this title
UsefulNot useful