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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Algoritma & Pemrograman Hendra. Perl dikembangkan oleh Larry Wall pada 1987 karena fasilitas pada sed dan awk pada Unix (digunakan untuk manipulasi text) tidak mencukupi kebutuhannya. Latihan 1 1. 2. 3. 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. and mention each symbols function ! Indoprog 20 . Tergantung kepada siapa anda bertanya. Perl adalah singkatan dari Practical Extraction and Reporting Language atau Pathologically Eclectic Rubbish Lister. 7. Langkah-langkah ini berkembang menjadi software dan memiliki kemampuan yang lebih baik. Dia memiliki fungsi text matching yang sangat baik sehingga membuatnya menjadi hal yang ideal untuk pekerjaan tersebut. S. sehingga mereka dapat digunakan untuk semua tujuan. Mereka dimulai dari suatu daftar langkap pengkabelan agar komputer menjalankan tugas tertentu. sedangkan bahasa dewasa ini terbagi atas bagaimana mereka diprogram. 6. Bahasa umum yang pertama menekankan pada kesederhanaan dan untuk satu tujuan saja.T. Dan mungkin bahasa yang akan datang lebih natural dengan penemuan pada quantum dan komputer-komputer biologis. 4. Bahasa pemrograman telah berkembangan dari masa kemasa dan tetap dikembangkan dimasa depan. Perl telah sering digambarkan sebagai "duct tape of the Internet. 5." karena sering digunakan sebagai engine untuk interface web atau pada script untuk memodifikasi file konfigurasi.

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

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

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

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

2e18.0e-324. 2..65535 Hendra.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 .5e-45.Algoritma & Pemrograman Word 0.1.4e-4932.7e308 3.1e4932 -9.9e-39. type character ini penulisannya ditandai dengan dua buah petik tunggal seperti : 'A'..Boolean Type varibale yang berguna untuk pengolahan hal yang hanya mempunyai dua ketentuan yaitu benar(TRUE) dan salah(FALSE) saja. S.#7 untuk menyatakan ' harus ditulis '''' . Real types Type variable yang beguna untuk pengolahan data yang tidak bulat. untuk type real ini juga terbagi atas beberapa : Type Real Single Double Extended Comp Jangkauan 2..3.Char Type variabel yang berguna untuk pengolahan character ASCII.T. '3'.4e38 ³ 7-8 5....'*'. 16 bit .9.7e38 1.1.1.

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

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

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

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

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

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

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

S. make a program to solve aX2 + bX + C problem. * age to 65 ==> (Give comments yourself) 6.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.T. Indoprog 33 . Using ABC formula.

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

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

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

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

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

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

readln(n). n_1 := n_2. end. Make a factor tree. 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. n_2. n_2 := 1. S. n_1 := 1. Hendra. 10. n_2 := n_i. n_1.Algoritma & Pemrograman 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 . end. n_i : byte. begin write('jumlah suku :'). write(n_i:4).T.i.

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

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

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

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

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

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

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

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

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

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

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

please write down step by step data comparing data which find value is 12 using Binary Search and Interpolation Search ! Latihan di Laboratorium 1. S. mid.jb : integer. if a[low] = findvalue then writeln('data found at :'. binary search and interpolation search. 6.T. j. Latihan 6 1.Algoritma & Pemrograman end. else writeln('data not found') Hendra. 7. program analisa_binary_search. 2. continue : boolean. 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.10.10000] of integer. const jd = 10000. findvalue.low).last. arr[j+gap] := t. arr[j] := arr[j+gap].7. and then sort it Shell Sort.gap. Write a program to generate 10000 random number.. begin {generate 10000 bilangan random} randomize. var arr : array [1. {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].3.11.13).6. first.8. 5.9.12. end. {tanya data yang dicari} Indoprog 52 . 4. for j := 1 to jd do arr[j] := random(jd).t. examine how many data comparing to find a value using linier search. 3.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Teori.T. maka : Type TSiswa = Record NIS : String[9]. Sedangkan kalau kita menggunakan fasilitas Record Type. Misalnya jumlah siswa adalah 10 orang. maka kita perlu mendeklarasikan variabel tersebut menjadi array: Var NIS : Array [1. 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]. Var Siswa : Array [1. NAMA : String[30].. End. S. Praktek : Array [1. tetapi bagaimana cara pemakaiannya dalam program ? Indoprog 72 .10] of TSiswa. Tugas. Teori. kita akan melanjutkan pembahasan tentang type ciptaan yang akan membuat program anda lebih terstruktur didalam pengolahan data yang dikenal dengan istilah Record type. Praktek : Byte.. Tugas..Algoritma & Pemrograman Hendra. Modul 10 Hallo. NAMA : Array [1.10] Of String[30]. Dapatkah anda memberi contoh suatu Record type ? Baiklah. Bukankan menjadi lebih sederhana dan terstruktur. Ok. I got It.10] Of String[9]. NAMA : String[30].10] Of Byte. Apa itu Record type? Record type adalah suatu type data terstruktur yang merupakan pengelompokan beberapa type data lainnya. Praktek : Byte. Teori. Tugas..

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

{sabtu} Inc(Today). 4. Bandingkan dengan : Type DOW = (senin. kamis. minggu). If Today = 4 then Writeln('Jangan lupa sembayang DATUK'). Dec(X). function mendapatkan nilai predecessor dari suatu nilai ordinal type. S. selasa. 5.T. sabtu. 7. Var Today : DOW. 2. Today := Pred(Today). Dapatkah Enumerated type mengalami input-output dan operasi matematika ? Enumerated type tidak dapat mengalami input output maupun operasi matematika. selasa. procedure menambah nilai 1 ke variabel X. 6. Begin Today := minggu. Begin Today := minggu. Contoh : Type DOW = (senin. sabtu. Inc(X). Subtitution and Enumerated in type declaration ? Can we do input output for Enumerated type ? Indoprog 95 . End. rabu. Latihan 15 1. kamis. If Today = kamis then Writeln('Jangan lupa sembayang DATUK').Algoritma & Pemrograman Var Today : Integer. Hendra. Succ(X). jumat. 3. minggu). tetapi ada beberapa fungsi bantu ordinal yang dapat digunakan untuk mengolah enumerated type. Begin Today := 7. function mendapatkan nilai predecessor dari suatu nilai ordinal type. yaitu : Pred(X). {minggu} End. rabu. Var Today : DOW. procedure mengurangi nilai 1 ke variabel X. 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. jumat. End.

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

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

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

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

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

Move from Src to Dst 9. Move from Aux to Dst Indoprog 101 . 5. Move from Dst to Src 12. Move from Aux to Dst 4.T. Dst. Move from Aux to Dst 13. Aux. 7. Src. Src. Aux. Dst) if N is 0 exit Solve(N-1. Aux) Move from Src to Dst Solve(N-1. Move from Src to Aux 14. For N=3 it translates into 1.Algoritma & Pemrograman Solve(N. Move from Src to Dst 15. 2. Move from Src to Aux 8. For N=4 we get the following sequence 1. This actually serves as the definition of the function Solve. Src. 6. 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. Dst) Hendra. 4. Move from Src to Aux 5. Move from Src to Aux 2. Move from Dst to Aux 7. Move from Src to Dst 3. Move from Aux to Src 11. Move from Aux to Dst 10. To me the sheer simplicity of the solution is breathtaking. 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. S. Move from Dst to Src 6. 3.

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

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

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

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

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

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

ru/Projects/SortAlg/ Introduction Sorting is one of the problems in computer science that seems to have the most algorithms developed for it. sorting became an ideal method for many applications to gain better performance. Indeed. Here read and write times are major concern in determining sort performance. If the records are very large. thus. Records are sorted according to the values of their keys. 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. a great deal of their time is spent maintaining that data in sorted order in the first place.aeriesoft. displacing each smaller element one position. A sort is called stable if it preserves the relative order of keys in the file. As the sort progresses. not just a bunch of numbers. There are two basic category of sorting techniques: internal sorting and external sorting. and not move the records until sorting is complete (if even then). • • 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. computers are used so extensively to process data collections that in many installations. S. The time required to read and write records is not considered to be significant in evaluating the performance of internal sorting techniques. the larger elements sink quickly to their lower positions while the smaller elements slowly Indoprog 108 . 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. A characteristic of sorting methods which is sometimes important in practice is stability. list entries "bubble upward" in the list until they bump into one with a lower sort value. Usually sorting is performed on either arrays. it is usually required to sort records. Instead it's possible to move around pointers to the records.T. or on linked lists. at most. upward. moving around the records themselves every time the keys must be moved may be inefficient. The name is derived from the fact that as each pass is made. In today's computing age. Insertion sort is an example of stable sorting algorithm. the largest element in a sub-list sinks all the way to the bottom of the list. http://www.Algoritma & Pemrograman Hendra. Sorting Algorithms.

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

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

and data.Algoritma & Pemrograman Hendra. The programs' complexity is very difficult to measure or analyze. computers. every software engineer is bound to have a rather clear intuitive notion of program simplicity. TotalMetric supports • McCabe's Metrics Indoprog 111 . The most important characteristics of all algorithms described and implemented here are given in the table below. Programmers can't help but admit that defining program simplicity in a complete and robust way is an extremely hard task. computer scientists often use some combination of theoretical analysis of algorithms and empirical results.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.T. Simpler algorithms are less error-prone. Nevertheless there are numerous software metrics that are used for rough estimates of actual software effort. S. The second table lists the results of actual complexity tests obtained with the applet that is running currently in the right frame. But in practice. thing to learn is how quickly the algorithm's time requirement grows as a function of the problem. 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. but some attention must be paid to it. easier to implement and result in more reliable and easy-to-maintain programs. None of presently known complexity measurement techniques give adequate and accurate results. Algorithm analysis should be independent of specific implementation. TotalMetric is one of static metrics analysis tools that capture complexity and level of effort metrics for Java programs.25 InStable Place Worst N2 N2 N N N 2 1. However.

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

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

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

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

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

Sign up to vote on this title
UsefulNot useful