Diktat pemrograman dan algoritma 1 dengan bahasa Pascal

Embed Size (px)

DESCRIPTION

Diktat pemrograman dan algoritma 1 untuk mahasiswa

Citation preview

ALGORITMA & PEMROGRAMAN I DENGAN PASCAL

DIKTAT KULIAH

Oleh: Hendra, MT.

PROGRAM STUDI TEKNIK INFORMASI STMIK IBBI

MEDAN 2011

Kata PengantarBahasa Pascal merupakan bahasa pemrograman terstruktur yang popular digunakan di berbagai perguruan tinggi Teknik maupun Sains Komputer sebagai bahasa pengantar untuk pembelajaran algoritma dan pemrograman. Pembuatan program komputer sendirinya tidak terlepas dari algoritma, karena program komputer itu sendirinya terdiri dari langkah-langkah yang sistematis untuk pemecahan masalah yang diwujudkan dalam bentuk instruksiinstruksi yang ditulis dalam bahasa komputer, sehingga pemahaman akan algoritma akan sangat membantu untuk menghasilkan program yang sistematis dan memiliki kinerja yang tinggi. Pembelajaran pemrograman komputer tidak dapat dilakukan hanya dengan membaca, tetapi juga membutuhkan praktek langsung yang membantu kepada pemahaman secara langkah-per-langkah sehingga dapat memahami bagian-bagian yang berikutnya. Diktat ini disusun untuk membantu mahasiswa untuk mempelajari algoritma dan pemrograman yang dimulai dengan pemahaman istilah-istilah dasar pemrograman komputer, pembahasan dasar pemrograman seperti input/output, test pilihan, perulangan, array, struktur data pencarian, pengurutan, pengolahan file, dan pembahasan beberapa algoritma seperti pencarian, dan pengurutan data. Akhirnya penulis mengucapkan selamat belajar dan semoga buku ini dapat memberi manfaat yang sebesarnya dalam pembelajaran mata kuliah Algoritma dan Programming. Medan, 17 November 2011

Hendra, MT. Email : [email protected] Revisi 1, 18 February 2006 Revisi 2, 17 November 2011

Daftar IsiModule 0 Module 1 Module 2 Module 3 Module 4 Module 5 Module 6 Module 7 Module 8 Module 9 Module 10 Module 11 Module 12 Module 13 Module 14 Module 15 Appendix A Appendix B Appendix C Appendix D Daftar Pustaka Pengantar algoritma & pemrograman komputer....................................1 Pengenalan bahasa pemrograman Pascal.............................................16 Struktur keputusan...............................................................................23 Struktur perulangan..............................................................................27 Array....................................................................................................33 Algoritma sorting.................................................................................36 (Bubble sort, Selection sort, Insertion sort, Shell sort, Quick sort) Algoritma search..................................................................................42 (Linear search, Binary search, Interpolation search) String....................................................................................................45 Subrutin................................................................................................50 (Procedure, Function) Rekursi.................................................................................................56 Struktur data record..............................................................................60 Pengolahan file teks.............................................................................64 Pengolahan file terstruktur...................................................................68 Pengolahan file binary.........................................................................73 Pengaturan layar...................................................................................75 Konstanta.............................................................................................79 Fungsi Bantu konversi.........................................................................83 The N and N Queens problem.............................................................84 Hanoi tower problem...........................................................................87 big-O Notation.....................................................................................92

Algoritma & Pemrograman

Hendra, MT.

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

STMIK IBBI

1

Algoritma & Pemrograman

Hendra, MT.

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]. 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.

STMIK IBBI

2

Algoritma & Pemrograman

Hendra, MT.

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.

BAHASA TINGKAT TINGGI Orang segera menyadari bahwa komputer dapat menterjemahkan bahasa assembly mejadi kode mesin, dan mereka mudah memikirkan bagaimana jika komputer dapat diprogram dengan bahasa yang lebih "alamiah" [lebih alamiah untuk manusia], inilah awal dari bahasa generasi ketiga yaitu High Level Languages.

STMIK IBBI

3

Algoritma & Pemrograman

Hendra, MT.

INTERPRETER dan COMPILER Ketika anda menggunakan suatu interpreter, ia akan membaca perintah source code baris perbaris, kemudian menterjemahkannya menjadi perintah mesin yang bersesuaian (kode mesin) dan menjalankannya seketika. Kode mesin ini tidak disimpan; sehingga ketika anda mencoba menjalankan program yang sama pada kesempatan berikutnya, anda membutuhkan source code dan interpreter untuk menjalankannya. Ketika anda menggunakan suatu compiler, ia akan membaca perintah source code dan menulis kode mesin. Setelah selesai keseluruhan kode mesin akan disimpan untuk pemakaian selanjutnya. Ketika anda ingin menjalankan program tersebut, system operasi akan menjalankan kode mesin yang telah disimpan dalam hal ini source code tidak diperlukan lagi. Eksekusi menjadi lebih cepat, dan dapat dijalankan dikomputer lain (dalam hal ini pada komputer dan system operasi yang sama) KOMPUTER DAN ALGORITMA Untuk membuat komputer melakukan sesuatu, anda perlu untuk menulis program komputer. Dalam menulis suatu program komputer, kita perlu memberitahukan kepada komputer, langkah-langkah persis apa yang harus ia lakukan. Ketika komputer menjalankan program tersebut, ia akan melakukan setiap langkah secara mesin untuk mencapai tujuan akhir. Ketika anda memberitahu kepada komputer apa yang harus dilakukan, anda perlu memilih bagaimana hal tersebut dilakukan. Dari sinilah Algoritma Komputer muncul. Algoritma adalah teknik dasar untuk menyelesaikan suatu pekerjaan. Perhatikan contoh berikut untuk membantu pengertian anda tentang konsep dari algoritma. Katakanlah misalnya anda mempunyai teman yang baru tiba di airport, dan teman anda ingin berangkat dari airport ke rumah anda. Berikut ini adalah empat algoritma yang berbeda yang mungkin dilakukan teman anda:Algoritma taxi: Pergi ke pemberhentian taxi. Masuk ke taxi. Berikan alamat rumah anda. Algoritma Telepon untuk dijemput: Ketempat pemberhentian, telepon ke handphone anda. Menunggu saja ditempat pengambilan bagasi. Algoritma Bus: Keluar dari tempat pengambilan bagasi, naik bus nomor 70. Turun dan naik bus nomor 14 pada jalan utama. Turun di jalan pada jalan AB. Jalan kaki dua blok arah utara ke rumah anda.

Ketiga algoritma diatas memiliki tujuan yang sama, tetapi masing-masing melakukannya dengan cara yang berbeda. Masing-masing algoritma diatas juga menghabiskan waktu dan biaya yang berbeda. Naik taxi, adalah contoh yang paling cepat, tetapi paling mahal. Naik bus mungkin adalah paling hemat, tetapi lambat. Tentu saja anda perlu memilih algortima sesuai dengan situasi dan kondisi. Dalam pemrograman komputer, juga terdapat banyak cara algoritma yang berbeda. Masing-masing algoritma memiliki keuntungan dan kerugian untuk situasi yang berbeda. Kata algoritma (algorithm) berasal dari nama matematikawan Persia pada abad 9 Abu Abdullah Muhammad bin Musa al-Khwarizmi. Kata aslinya algorism mengacu pada aturan dari melakukan aritmetika menggunakan bilangan Arab dan berkembang menjadi algoritma pada abad 18. Kata ini sekarang berevolusi untuk mencantumkan semua STMIK IBBI

4

Algoritma & Pemrograman

Hendra, MT.

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

STMIK IBBI

5

Algoritma & Pemrograman

Hendra, MT.

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

STMIK IBBI

6

Algoritma & Pemrograman

Hendra, MT.

How the customers How the Project explained it Leader understood it

How the Analyst designed it

How the Programmer wrote it

How the Business How the project Consultant was described documente it d

What operations installed

How the customer was billed

How it was supported Aturan Penulisan Teks Algoritma

What the customer really needed

Tidak ada notasi yang baku dalam penulisan teks algoritma. Algoritma bukanlah program yang harus mengikuti aturan-aturan tertentu. Meski demikian, algoritma dituliskan mendekati gaya bahasa pemrograman umumnya. Misal, tulis nilai X dan Y, dituliskan dalam algoritma sebagai write(X,Y). Perhatikan dalam notasi write(X,Y) ini hanya memerintahkan penyajian nilai X ke piranti keluaran (output). Dalam notasi itu juga tidak memasalahkan format ataupun bentuk-bentuk tampilan lainnya, seperti dicetak dalam satu baris X dan Y, pemakaian pemisah antara X dan Y menggunakan koma atau spasi. Hal-hal yang bersifat teknis ini baru dipikirkan waktu penulisan program. Algoritma adalah bebas bahasa pemrograman. Teks Algoritma Mengikuti alur konsep pemrograman prosedural, suatu teks algoritma disusun dalam tiga bagian, yaitu: A aaaaaaaaaaa 1. Bagian kepala algoritma, 2. Bagian deklarasi, dan 3. Bagian deskripsi algoritma. STMIK IBBI

7

Algoritma & Pemrograman

Hendra, MT.

Setiap bagian disertai dengan penjelasan atau dokumentasi tentang maksud pembuatan teks. Bagian penjelasan diawali dan diakhiri dengan simbol { dan }. Algoritma NAMA_ALGORITMA { Penjelasan tentang algoritma yang menguraikan secara singkat hal-hal yang dilakukan oleh a lgoritma } DEKLARASI { Semua nama yang digunakan, meliputi nama-nama: tipe, konstanta, variabel. Juga nama sub-program dinyatakan di sini } DESKRIPSI { Semua langkah atau aksi algoritma dituliskan di sini } Contoh: 1). Kepala algoritma: Algoritma Luas_Lingkaran { Menghitung luas lingkaran dengan ukuran jejari tertentu. Algoritma menerima masukan jejari lingkaran, menghitung luasnya, dan menyajikan hasilnya ke piranti keluaran } Perhatian, dalam menulis nama-nama dalam algoritma harus mempunyai makna yang mencerminkan proses, sifat atau identitas lainnya yang melekat dengan suatu proses, tipe, konstanta, variabel, sub-program dan lainlainnya.Nama-nama yang bermakna disebut mnemonic. 2) Deklarasi algoritma: DEKLARASI { nama konstanta } const PHI = 3.14; { Nilai phi = 22/7 } { nama peubah } var R : real; { input jejari lingkaran bilangan riil } l_Lingkaran : real; { luas lingkaran bilangan riil } { nama sub program } procedure TUKAR(input/output A:integer, input/output B:integer) { Mempertukankan nilai A dan B.Parameter A dan B sudah terdefinisi nilainya.Setelah pertukaran, A berisi nilai B dan B berisi nilai A } 3) Deskripsi algoritma: Bagian ini merupakan bagian inti algoritma yang berisikan uraian langkah-langkah penyelesaian suatu masalah. Setiap langkah algoritma dibaca dari atas ke bawah. Urutan penulisan menentukan urutan pelaksanaan perintah. { Baca data jejari lingkaran R.Jika R 100000 Then Belanja := Belanja * 0.97; Writeln('Jumlah yang harus anda bayar ',Belanja:10:2); Readln; End.

Ok, saya mengerti bahwa pada prinsipnya Statement setelah Then akan dijalankan kalau condition setelah If menghasilkan nilai True. Bagaimana kalau condition True Statement1 dijalankan, dan sebaliknya Statement2 dijalankan ? Untuk keputusan seperti ini, pascal menyediakan struktur pengambilan keputusan berikut:If condition Then Statement1 Else Statement2;

Atau lebih baik ditulis sebagaiIf conditon Then Statement1 Else Statement2;

Langsung saya buatkan contoh :Uses Crt; Var Bilangan : Integer;

STMIK IBBI

23

Algoritma & PemrogramanBegin Clrscr; Write('Masukan Bilangan ? '); Readln(Bilangan); If (Bilangan Mod 2) = 0 Then Writeln ('Genap') Else Writeln ('Ganjil'); Readln; End.

Hendra, MT.

He-he-he, bagaimana kalau keputusannya lebih dari 2, misalnya 4 Statement yang harus dijalankan berdasarkan masing-masing condition ? Oh, hal itu bisa dilakukan dengan merangkai beberapa struktur If, misalnya :If condition1 Then Statement1 Else If condition2 Then Statement2 Else If condition3 Then Statement3 Else Statement4;

Jadi pada prinsipnya adalah terdiri dari tiga struktur If. Misalnya kita akan membuat nilai huruf dari angka dengan kriteria 80 keatas mendapat A, 70 s/d 79 mendapat B, 60 s/d 69 mendapat C, 50 s/d 59 mendapat D, dan dibawah 49 mendapat E, maka dapat ditulis menjadi :if mark>=80 then grade:='A' else { 79 or below goes here } if mark>=70 then grade:='B' else { 69 or below goes here } if mark>=60 then grade:='C' else { 59 or below goes here } if mark>=50 then grade:='D' else { 49 or below goes here } grade:='E';

Wah panjang banget, adakah cara lain untuk melakukan hal tersebut ? Selain struktur kendali If, pascal juga menyediakan suatu struktur Case, yang akan menjalankan statement berdasarkan range tertentu, adapun syntaxnya adalah sebagai berikut :Case variabel Of Range1 : Statement1; Range2 : Statement2; Range3 : Statement3; Else StatementN; End;

Saya akan menggulangi contoh diatas dengan struktur Case :

STMIK IBBI

24

Algoritma & PemrogramanCase mark of 80..100: 70..79 : 60..69 : 50..59 : Else End; grade:='A'; grade:='B'; grade:='C'; grade:='D'; grade:='E';

Hendra, MT.

Lebih sederhana bukan. Tetapi sesuatu hal yang perlu diperhatikan bahwa variabel yang akan dievaluasi dengan Case haruslah Ordinal type. Opss, hampir lupa, bagaimana kalau statement yang harus dijalankan pada masingmasing condition lebih dari 1 ? Ya, benar, sering kita perlu menjalankan beberapa Statement pada masing-masing condition, untuk keperluan tersebut kita dapat memblok perintah-perintah tersebut dengan Begin End; Contoh :If Belanja > 100000 Then Begin Belanja := Belanja * 0.97; Writeln ('Anda berhak mendapat potongan 3%'); End;

Pertanyaan yang terakhir, bagaimana penulisan condition yang terdiri dari beberapa logika ? Pertanyaan yang tepat sekali, untuk condition yang terdiri dari beberapa logika dapat anda gabungkan dengan operasi AND, OR. Misalnya kita akan mencari tahun kabisat. In the Gregorian calendar, which is the calendar used by most modern countries, the following rules decides which years are leap years: 1. Every year divisible by 4 is a leap year. 2. But every year divisible by 100 is NOT a leap year 3. Unless the the year is also divisible by 400, then it is still a leap year. Maka penulisan programnya menjadi :If ((tahun Mod 4) = 0) And Not (tahun Mod 100 = 0)) Or ((tahun Mod 400) = 0) Then Writeln ('Tahun Kabisat !') Else Writeln ('Bukan Tahun Kabisat !');

Catatan Instruktur Berdasarkan hasil pengamatan, kesalahan yang sering dilakukan oleh mahasiswa dalam pemakaian struktur IfThenElse, adalah didepan Else tidak ada pemakaian titik koma (;).

Latihan 21. What does Pascal provide in order to perform conditional branching ? 2. Explain briefly each syntax !

STMIK IBBI

25

Algoritma & Pemrograman

Hendra, MT.

3. How could we do nested branching ? Is it legal ? 4. Determine the output if i=5 and j=3 for the following excerpt :if i "You are a kid !" ==> "You are a teenager !" ==> "You are a young adult !" ==> "You are an adult !" ==> "You are middle aged !" ==> (Give comments yourself)

* age to 65

==> (Give comments yourself)

6. Using ABC formula, make a program to solve aX2 + bX + C problem.

STMIK IBBI

26

Algoritma & Pemrograman

Hendra, MT.

Modul 3Hallo, ketemu lagi, pada pertemuan ini kita akan membahas tentang Looping. Apa itu Looping Secara sederhana looping diartikan sebagai proses berulang terhadap statement maupun serangkaian statement lebih dari satu kali. Aduh, kurang jelas, dapatkah anda memberikan contoh pemakaian looping? Tentu saja anda telah menjalankan program pada pertemuan-pertemuan sebelumnya, dan program tersebut berjalan hanya sekali, seterusnya selesai. Pernahkan anda bayangkan kalau anda ingin membuat program yang dapat menanyakan kepada pemakai apakah dia ingin ulang program tersebut sekali lagi ? Kalau ya maka program akan diulang kembali, dalam hal ini looping akan berperan. Ok, sekarang saya sudah punya gambaran. Apakah hal tersebut tidak dapat dilakukan tanpa looping ? Tentu saja bisa, tetapi akibatnya program kita menjadi panjang dan tidak efisien, coba bayangkan misalnya anda ingin mencetak tulisan STMIK IBBI sebanyak 10 baris di layar, bisa saja anda menggunakan perintah Writeln(' STMIK IBBI '); sebanyak 10 kali. Bukankah lebih baik kita memerintahkan komputer untuk secara berulang menjalankan perintah Writeln(' STMIK IBBI '); sebanyak 10 kali. Benar juga ya, tetapi bagaimana struktur perintah perulangan pada pascal ? Salah satu struktur perintah perulangan pada pascal adalah yang menggunakan counter.For variabel := nilai awal To nilai akhir Do Statement;

AtauFor variabel := nilai awal DownTo nilai akhir Do Statement;

Dimana variabel harus ordinal type Contoh :Var I : Integer; Begin For I := 1 To 10 Do Writeln(' End.

STMIK IBBI ');

Tapi tadi saya lihat yang satu pakai To dan yang satu lagi pakai DownTo, apa sih bedanya ? Kita menggunakan To kalau nilai awal < nilai akhir, dan sebaliknya pakai DownTo Contoh :Var I : Integer; Begin For I := 10 DownTo 1 Do Writeln(' End.

STMIK IBBI');

Apa maksudnya variabel counter harus ordinal type ? Maksudnya variabel counter harus berupa salah satu type seperti Byte, Shortint, Integer, Longint, Char, Boolean. Misalnya Ch adalah Char, maka dapat dilakukan

STMIK IBBI

27

Algoritma & PemrogramanFor Ch := 'a' to 'z' Do Write(Ch,' ');

Hendra, MT.

Dan bahkan misalnya Bo adalah boolean, dapat jugaFor Bo :=false to true do writeln(Bo);

Adakah struktur perulangan lainnya pada bahasa pascal ? Ya, ada lagi, yaitu yang melakukan perulangan yang menggunakan condition. While condition Do Statement; Contoh :I := 1; While I 0 then hasil := hasil + angka[ratusan] + 'ratus'; sisa := x - (ratusan*100); if (sisa > 0) and (sisa < 20) then hasil := hasil + angka[sisa] else begin puluhan := sisa div 10; if puluhan > 0 then hasil := hasil + angka[puluhan] + 'puluh'; satuan := sisa - (puluhan*10); if satuan > 0 then hasil := hasil + angka[puluhan]; end; BacaBilangan := hasil; end; (*program utama*) begin writeln(BacaBilangan(200)); readln; end.

STMIK IBBI

55

Algoritma & Pemrograman

Hendra, MT.

Modul 9Pada modul-modul sebelumnya kita telah membahas algoritma sort, yaitu bubble sort, selection sort, insertition sort, dan shell sort. Sebenarnya masih banyak algoritma sort yang telah diciptakan oleh para ahli. Pada pertemuan ini kita akan membahas algoritma Quick sort9 yang mana diakui sebagai yang tercepat didunia. Tetapi sebelum kita akan membahas fasilitas rekursi yang tersedia pada bahasa Pascal. Apa yang dimaksud dengan rekursi ? Rekursi merupakan salah satu fasilitas pemrograman yang sangat efektif yang mana memperbolehkan function ataupun procedure untuk memanggil dirinya sendiri. Hal ini memungkinkan solusi pemrograman menjadi lebih baik dan efisien, serta menghindari pemakaian looping yang membingungkan. Dapatkan anda memberikan sebuah contoh dari pemakaian rekursi ? Boleh, dan hal tersebut banyak ditemukan pada persamaan matematika, misalnya dalam menghitung faktorial.5! 4! 2! 1! = = = = 4! * 5 3! * 4 1! * 2 1

Jadi kita secara programming dapat dilakukan dengan :function factorial (n:byte):factorial; begin if nleft then qsort(left ,upper); { Sort the RIGHT part end;

left } right}

} }

Pemakaian : qsort(1,NumberOfData); Contoh program menggunakan procedure dan function dengan implementasi Quick Sort dan Interpolation Search.program urut_data_qsort_dan_cari_data_interpolation_search; (*oleh : hendra soewarno*) const jd = 10000; var Data : array[1..jd] of integer; procedure swap(var data1,data2 : integer); var temp : integer; begin temp := data1; data1:= data2; data2:= temp; end; procedure qsort(lower, upper : integer); var left, right, pivot : integer; begin pivot:=data[(lower+upper) div 2]; left:=lower; right:=upper; while left pivot do right:=right-1;{ Parting for right} if leftlower then qsort(lower,right); { Sort the LEFT part } if upper>left then qsort(left ,upper); { Sort the RIGHT part } end;

STMIK IBBI

57

Algoritma & Pemrogramanprocedure grandom; var i : integer; begin randomize; for i := 1 to jd do data[i] := random(jd); end; function isearch(findvalue:integer) : integer; var low, high,j : integer; begin low := 1; high := jd; while (data[high] >= findvalue) and (findvalue > data[low]) do begin j:=trunc((findvalue-data[low])/(data[high]-data[low])*(high-low))+low; if findvalue > data[j] then low := j+1 else if findvalue < data[j] then high := j-1 else low := j; end; if data[low] = findvalue then isearch := low else isearch := -1; end; (*Program Utama*) var j,findvalue,posisi : integer; begin grandom; {generate 10000 bilangan random} qsort(1,jd); {urut data dengan algoritma quick sort} {tanya data yang dicari} write('Nilai yang dicari 0-10000 :'); readln(findvalue); posisi := isearch(findvalue); {cari data dengan interpolation search} if posisi > -1 then writeln('ditemukan diposisi ',posisi) else writeln('tidak ditemukan !'); readln; end.

Hendra, MT.

Latihan 91. Explain how recursive. 2. Suppose we have an array contain 8 data (7,8.5,4,2,1,3,6), please write down step by step data changing when sorting using Quick Sort! Latihan di Laboratorium 1. Make a recursive algorithm of fibonacci series !

STMIK IBBI

58

Algoritma & Pemrogramanprogram mencari_suku_fibonacci_dengan_rekursi; function fibo(n:integer):longint; begin if n < 3 then fibo := 1 else fibo := fibo(n-1)+fibo(n-2); end; begin writeln(fibo(3)); readln; end.

Hendra, MT.

3. Write a program to generate 10000 random number, and then sort it using Quick sort examine how many data comparing and data exchange.

STMIK IBBI

59

Algoritma & Pemrograman

Hendra, MT.

Modul 10Hallo, kita akan melanjutkan pembahasan tentang type ciptaan yang akan membuat program anda lebih terstruktur didalam pengolahan data yang dikenal dengan istilah Record type. Apa itu Record type? Record type adalah suatu type data terstruktur yang merupakan pengelompokan beberapa type data lainnya. Dapatkah anda memberi contoh suatu Record type ? Baiklah, misalnya kita akan mengolah data nilai ujian pascal programming siswa sebagai berikut: Nis 02001 02002 Nama Hendra Soewarno Susan Dewichan Tugas 80 90 Teori 90 85 Praktek 90 85

Dari tabel diatas kita dapat menyusun variabel data sebagai berikut :NIS : String[9]; NAMA : String[30]; Tugas, Teori, Praktek : Byte;

Misalnya jumlah siswa adalah 10 orang, maka kita perlu mendeklarasikan variabel tersebut menjadi array:Var NIS : Array [1..10] Of String[9]; NAMA : Array [1..10] Of String[30]; Tugas, Teori, Praktek : Array [1..10] Of Byte;

Sedangkan kalau kita menggunakan fasilitas Record Type, maka :Type TSiswa = Record NIS : String[9]; NAMA : String[30]; Tugas, Teori, Praktek : Byte; End; Var Siswa : Array [1..10] of TSiswa;

Bukankan menjadi lebih sederhana dan terstruktur. Ok, I got It, tetapi bagaimana cara pemakaiannya dalam program ? Misalnya kita anda mengisi data untuk Siswa yang pertama.Siswa[1].Nis := "02001"; Siswa[1].Nama := "Hendra Soewarno"; Siswa[1].Tugas := 80; Siswa[1].Teori := 90; Siswa[1].Praktek := 90;

Bisakah anda bayangkan kalau yang tidak pakai Record Type !

STMIK IBBI

60

Algoritma & Pemrograman

Hendra, MT.

Adakah cara untuk melakukan hal yang sama ? Ya, kita dapat menggunakan block With End;With Siswa[1] Do Begin Nis := "02001"; Nama := "Hendra Soewarno"; Tugas := 80; Teori := 90; Praktek := 90; End;

Bagaimana untuk proses input-outputnya ? Untuk proses input-output sama saja dengan variabel biasanya. Contoh :For I := 1 To 10 Do Begin Write('No. Induk siswa :'); Readln(Siswa[I].Nis); Write('Nama siswa :'); Readln(Siswa[I].Nama); Write('Tugas :'); Readln(Siswa[I].Tugas); Write('Teori :'); Readln(Siswa[I].Teori); Write('Praktek :'); Readln(Siswa[I].Praktek); End; For I := 1 To 10 Do Begin With Siswa[I] Do Begin Rata := (Tugas+Teori+Praktek)/3; Write(Nis:9,' '); Write(Nama:30,' '); Write(Tugas:6:2,' '); Write(Teori:6:2,' '); Write(Praktek:6:2,' '); Write(Rata:6:2); End; End;

Contoh Kongkrit pemanfaatan data terstruktur dengan pendekatan pemrograman terstruktur.program data_terstruktur; (*oleh : hendra soewarno*) uses CRT; Type TSiswa = Record NIS : String[9]; NAMA : String[30]; Tugas, Teori, Praktek : Integer; End; const jd = 200; (*variabel global*) var Siswa : Array [1..jd] of TSiswa; Js : Integer; procedure bacasiswa(I : integer); begin Writeln('Record ke-',I); With Siswa[I] do begin Nis := ''; Write('No. Induk siswa :'); Readln(Nis); If Nis '' Then begin Write('Nama siswa :'); Readln(Nama); Write('Tugas :'); Readln(Tugas); Write('Teori :'); Readln(Teori); Write('Praktek :'); Readln(Praktek); end; end; end; procedure tampilsiswa(I : integer); begin Writeln('Record ke-',I); With Siswa[I] do begin Writeln('No. Induk siswa :',Nis); Writeln('Nama siswa :',Nama); Writeln('Tugas :',Tugas); Writeln('Teori :',Teori); Writeln('Praktek :',Praktek); end; end; procedure hapusdata(I : integer); var J : Integer; begin For J := I to Js-1 do {geser 1 record ke atas}

STMIK IBBI

61

Algoritma & PemrogramanSiswa[J] := Siswa[J+1]; Js := Js-1; end; procedure tampildaftarnilai; var I : Integer; Rata : Real; begin For I := 1 To JS Do begin With Siswa[I] Do begin Rata := (Tugas+Teori+Praktek)/3; Write(Nis:9,' '); Write(Nama:30,' '); Write(Tugas:6,' '); Write(Teori:6,' '); Write(Praktek:6,' '); Write(Rata:6:2); writeln; end; end; readln; end; function caridata(findvalue:String):integer; var first,last,mid : Integer; continue : boolean; begin first:=1; last :=js; continue := true; while (first siswa[mid].nis) then first := mid + 1 else if (findvalue < siswa[mid].nis) then last := mid - 1 else continue := false; end; if first > last then caridata := -1 else caridata := mid; end; procedure prosesurutdata; var gap,j : integer; t : Tsiswa; begin for gap := (js div 2) downto 1 do for j := 1 to (js-gap) do if siswa[j].nis > siswa[j+gap].nis then begin t := siswa[j]; siswa[j] := siswa[j+gap]; siswa[j+gap] := t; end; end; procedure prosestambahdata; var

Hendra, MT. I : Integer; begin repeat I := JS+1; bacasiswa(I); if Siswa[I].NIS '' Then Js := Js + 1; until JS < I; prosesurutdata; {langsung urut data} end;

procedure prosesperbaikidata; var TNis : String[9]; Posisi: Integer; begin write('Nis yang ingin diperbaiki :'); readln(TNis); Posisi := caridata(TNis); If Posisi = -1 Then Writeln('Data tidak ditemukan !') else begin tampilsiswa(Posisi); Writeln('Diubah menjadi'); bacasiswa(Posisi); end; end; procedure proseshapusdata; var TNis : String[9]; Posisi: Integer; Tanya : Char; begin write('Nis yang ingin dihapus :'); readln(TNis); Posisi := caridata(TNis); If Posisi = -1 Then Writeln('Data tidak ditemukan !') else begin Write('Apakah yakin dihapus [Y/T] :'); repeat Tanya := Upcase(Readkey); until Tanya in ['Y','T']; if Tanya = 'Y' Then begin hapusdata(posisi); Writeln('Proses hapus berhasil !'); end; end; end; (*Program utama*) var Pilihan : Integer; Continue: Boolean; begin Js := 0; Continue := True; Repeat Clrscr; Writeln('Menu Utama'); Writeln('1. Tambah Data'); Writeln('2. Perbaiki Data');

STMIK IBBI

62

Algoritma & PemrogramanWriteln('3. Hapus Data'); Writeln('4. Daftar Nilai'); Writeln('5. Selesai'); Write('Pilihan Anda :'); Readln(Pilihan); Case Pilihan of 1 : prosestambahdata; 2 : prosesperbaikidata; 3 : proseshapusdata; 4 : tampildaftarnilai; 5 : continue := false; end; Until not Continue; end.

Hendra, MT.

Latihan 101. Explain what is Record Type and give an example ! 2. Explain what With End block function ! Latihan di Laboratoriun 3. Make a database. The record tag, TStudent consists of these fields : Field Length ~~~~~ ~~~~~~ Name 20 Address 40 Phone 15 Quiz number, from 1 to 100 Midtest number, from 1 to 100 Finaltest number, from 1 to 100 User could : add new student, edit existing student, view student in a list, delete the record, sort the record according to : * Quiz * Midtest * Finaltest * Overall value (Overall value = 0.1*Quiz + 0.4*Mid + 0.5*Final) You must : * Make simple menu. * At least be able to handle 200 students. * Apply quick sort for at least one key-sort. * Apply search for student name first before editing the data. Tip : Use array of records.

STMIK IBBI

63

Algoritma & Pemrograman

Hendra, MT.

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

STMIK IBBI

64

Algoritma & Pemrograman

Hendra, MT.

Bagaimana kalau kita telah selesai bekerja dengan file tersebut ? Kalau anda telah selesai, maka anda perlu menutupnya, contoh : close(F); Jadi contoh kongkrit membaca suatu text file dari awal sampai akhir dari file adalah :uses crt; var F : text; s : string; begin clrscr; write('Input file name to read : '); readln(s); assign(F,s); { associate it } reset(F); { open it } while not EOF(F) do { read it until it's done } begin readln(F,s); writeln(s); end; close(F); { close it } end.

Mudah bukan ? Bagaimana kalau saya ingin membuat sebuah text file baru ? Wah, pertanyaan yang baik, untuk membuat sebuah text file baru anda dapat menggunakan perintah berikut : rewrite(F); Sebagai penganti dari reset, dan perintah writeln(F,s) { s is a string variable }

Sebagai pengganti dari readln, dan untuk menutupnya tetap 'close'. Berikut ini adalah contoh menyimpan apa yang anda ketik ke sebuah text file :uses crt; var F : text; s : string; begin clrscr; write('Input file name to create : '); readln(s); assign(F,s); { associate it } rewrite(F); { create it } writeln('Just enter any text and followed by enter.'); writeln('To quit : Input an empty line.'); repeat readln(s); if s='' then break; writeln(F,s); until true; close(F); end. { write it until done }

{ close it }

STMIK IBBI

65

Algoritma & Pemrograman

Hendra, MT.

Perhatian : Perintah rewrite akan menghapus file yang telah ada. Mengenai close, apakah wajib dilakukan pada setiap akhir operasi file ? Ya, hal itu harus dilakukan, terutama pada proses penulisan file, pada dasarnya system operasi menyediakan suatu buffer untuk proses I/O file, tujuan pemakaian buffer adalah untuk mempercepat proses I/O. Jadi kalau kita menulis data ke file, hal tersebut tidak secara otomatis dilakukan oleh system operasi, jadi pastikan penulisan isi buffer ke file dengan close. Jika saya perhatikan, kalau kita membuka suatu file, dan file tersebut belum ada, maka akan terjadi runtime error, bagaimana caranya menangani masalah ini ? Ha-ha-ha, jangan takut, turbo pascal telah mengantisipasi masalah ini dengan mematikan sementara I/O checking, dan selanjutnya kita dapat memeriksanya dengan Ioresult, jika bernilai 0, artinya tidak ada error. Contoh :uses crt; var F : text; s : string; begin clrscr; write('Input file name to read : '); readln(s); assign(F,s); { associate it } {$I-} reset(F); { open it } {$I+} if IOresult0 then begin writeln('Error encountered in reading file ',s); halt; end; while not EOF(F) do begin readln(F,s); writeln(s); end; close(F); end. { read it until it's done }

{ close it }

Sebenarnya, selain 0, IOResult dapat berisi nilai lain yang memiliki arti, perhatikan contoh berikut :uses crt; var F : text; s : string; begin clrscr; write('Input file name to read : '); readln(s); assign(F,s); { associate it } {$I-} reset(F); {$I+} n:=IOResult; if n0 then begin writeln('Error encountered in reading file ',s); case n of 2: writeln('File not found'); 3: writeln('Path not found'); 4: writeln('Too many open files');

STMIK IBBI

66

Algoritma & Pemrograman5: 100: 101: 150: 152: 154: 156: 157: 162: else end; halt; end; writeln('File access denied'); writeln('Disk read error'); writeln('Disk write error'); writeln('Disk is write protected'); writeln('Drive is not ready'); writeln('CRC error in data'); writeln('Disk seek error'); writeln('Unknown media type'); writeln('Hardware failure'); writeln('Various error');

Hendra, MT.

end.

Latihan 111. Make a program to convert the content of a text file to uppercase, lowercase, and Sentence case. 2. Make a program to count number of word and line in a text file. Tantangan: Write a 'readme' program that could access just every text file. You may limit the maximum number of lines of the file say 400 lines.program readme_file; (*oleh : hendra soewarno*) uses crt; type Tbaris = String[80]; const jd = 400; var Baris : array [1..jd] of TBaris; Jb, atas : integer; procedure bacatextfile(fname:string); var ftext : text; begin assign(ftext,fname); {$I-} reset(ftext); {$I+} if ioresult 0 then begin writeln('error open file !'); halt; end else begin jb := 0; while not eof(ftext) and (jb < jd) do begin jb := jb + 1; readln(ftext,baris[jb]); end; close(ftext); end; end; procedure cetaktext; var i,brs : integer; begin brs := 1; for i := atas to atas+23 do begin gotoxy(1,brs); clreol; if i 1 then dec(atas); #80 : if atas+24 < jb then inc(atas); end; until key = #27; end; (*Program Utama*) begin clrscr; bacatextfile('c:\editor.pas'); readme; end.

STMIK IBBI

67

Algoritma & Pemrograman

Hendra, MT.

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

STMIK IBBI

68

Algoritma & PemrogramanTemployee = record name address phone age salary end; var F c r s : : : : file of Temployee; char; Temployee; string; : : : : : string[20]; string[40]; string[15]; integer; longint;

Hendra, MT.

begin clrscr; write('Input file name to record databases : '); readln(s); assign(F,s); rewrite(F); repeat clrscr; write('Name write('Address write('Phone write('Age write('Salary write(F,r); { Associate it } { Create it }

= = = = =

'); '); '); '); ');

readln(r.name); readln(r.address); readln(r.phone); readln(r.age); readln(r.salary);

{ Input data }

{ Write data to file }

write('Input data again (Y/N) ?'); repeat c:=upcase(readkey); { Ask user : Input again or not } until c in ['Y','N']; writeln(c); until c='N'; close(F); end.

Apakah suatu file of records juga diolah secara sequential ? Ha-ha, ini pertanyaan yang sangat bagus. Pada file of records, anda dapat membaca data berdasarkan record tertentu. Sesuatu yang menentukan posisi record yang akan dibaca/tulis adalah record pointer. Pointer ini dapat dipindah-pindahkan sebelum proses pembacaan maupun penulisan. Adapun syntaxnya adalah sebagai berikut : seek(F,recordno); Perhatian : recordno dimulai dari 0 untuk record 1 Contoh pemakaiannya :seek(F,9); read(F,r); { Data record number started from 0 } { r is the record variable }

Istilah pengolahan file yang dapat mengakses sembarang posisi record, dikenal sebagai istilah "Random File Access". Apakah saya bisa menambah data baru ke suatu file of records ? Tentu saja, adapun triknya adalah : 1. Buka file tersebut dengan 'reset',

STMIK IBBI

69

Algoritma & Pemrograman

Hendra, MT.

2. Pindahkan pointer file ke record terakhir dengan seek, 3. Lakukan proses penulisan Kalau begini, saya perlu mengetahui jumlah record yang telah ada, dan bagaimana caranya ? Jangan takut, pascal ada menyediakan sebuah fungsi yaitu filesize, contoh : totalrecord := filesize(f); Apakah kita bisa menghapus record tertentu pada file of records ? Pada dasarnya pascal tidak menyediakan fungsi tertentu untuk menghapus record, tetapi anda dapat membuat suatu rutin sendiri untuk melakukan hal tersebut, perhatikan potongan algoritma berikut : for i:=n to totalrecord-1 do begin seek(f,i); read(f,r); seek(f,i-1); write(f,r); end; seek(f,totalrecord-1); truncate(f); dec(totalrecord); Saya melihat ada perintah truncate, apa fungsinya ? Perintah truncate dapat digunakan untuk membuat EOF pada posisi record ditentukan, atau dengan kata lain memotong file mulai posisi record tertentu. Dapatkah saya mengetahui posisi record pointer yang sedang aktif ? Ya, anda dapat menggunakan fungsi 'filepos' , contoh : n:=filepos(F); Contoh program kongkrit :program data_record_terstruktur; (*oleh : hendra soewarno*) uses crt; Type TSiswa = Record

yang

STMIK IBBI

70

Algoritma & Pemrogramanbegin Seek(FSiswa,J+1); read(FSiswa,siswa); Seek(FSiswa,J); write(FSiswa,siswa); end; truncate(FSiswa) end;

Hendra, MT.

procedure tampildaftarnilai; var Rata : Real; begin Seek(FSiswa,0); While not eof(FSiswa) do begin read(FSiswa,Siswa); With Siswa Do begin Rata := (Tugas+Teori+Praktek)/3; Write(Nis:9,' '); Write(Nama:30,' '); Write(Tugas:6,' '); Write(Teori:6,' '); Write(Praktek:6,' '); Write(Rata:6:2); writeln; end; end; readln; end; function caridata(findvalue:String):integer; var first,last,mid : integer; continue : boolean; begin first:=0; last :=Filesize(FSiswa)-1; continue := true; while (first siswa.nis) then first := mid + 1 else if (findvalue < siswa.nis) then last := mid - 1 else continue := false; end; if first > last then caridata := -1 else caridata := mid; end; procedure prosesurutdata; var js,gap,j : integer; s1,s2,t : Tsiswa; begin js := Filesize(FSiswa); for gap := ((js-1) div 2) downto 0 do for j := 0 to ((js-1)-gap) do begin

STMIK IBBI

71

Algoritma & PemrogramanSeek(FSiswa,j); read(FSiswa,s1); Seek(FSiswa,j+gap); read(FSiswa,s2); if s1.nis > s2.nis then begin Seek(FSiswa,j); read(FSiswa,s2); Seek(FSiswa,j+gap); read(FSiswa,s1); end; end; end; procedure prosestambahdata; var I : integer; begin Seek(FSiswa,Filesize(FSiswa)); repeat I := FilePos(FSiswa)+1; bacasiswa(I); if Siswa.Nis '' Then Write(FSiswa,Siswa); until Siswa.Nis = ''; prosesurutdata; {langsung urut data} end; procedure prosesperbaikidata; var TNis : String[9]; Posisi: integer; begin write('Nis yang ingin diperbaiki :'); readln(TNis); Posisi := caridata(TNis); If Posisi = -1 Then Writeln('Data tidak ditemukan !') else begin tampilsiswa(Posisi); Writeln('Diubah menjadi'); bacasiswa(Posisi); Seek(FSiswa,Posisi); Write(FSiswa,Siswa); end; end; procedure proseshapusdata; var TNis : String[9];

Hendra, MT. Posisi: integer; Tanya : Char; begin write('Nis yang ingin dihapus :'); readln(TNis); Posisi := caridata(TNis); If Posisi = -1 Then Writeln('Data tidak ditemukan !') else begin Write('Apakah yakin dihapus [Y/T] :'); repeat Tanya := Upcase(Readkey); until Tanya in ['Y','T']; if Tanya = 'Y' Then begin hapusdata(posisi); Writeln('Proses hapus berhasil !'); end; end; end; (*Program utama*) var Pilihan : integer; Continue: Boolean; begin Continue := True; BukaFile('C:\Siswa.rec'); Repeat Clrscr; Writeln('Menu Utama'); Writeln('1. Tambah Data'); Writeln('2. Perbaiki Data'); Writeln('3. Hapus Data'); Writeln('4. Daftar Nilai'); Writeln('5. Selesai'); Write('Pilihan Anda :'); Readln(Pilihan); Case Pilihan of 1 : prosestambahdata; 2 : prosesperbaikidata; 3 : proseshapusdata; 4 : tampildaftarnilai; 5 : continue := false; end; Until not Continue; TutupFile; end.

Latihan 121. Give explanation what is the different between Text file and File of records. 2. Extended program_data_terstruktur which only can store unique data for Nis, and use Quick Sort algorithm. 3. Write a program to store your friend name, address, telephone number in a Typed file. Provide it add, edit, delete, sort, and search function.

STMIK IBBI

72

Algoritma & Pemrograman

Hendra, MT.

Modul 13Akhirnya kita sampai juga pada pembahasan tentang Untyped file. Sebenarnya cara pengolahan Untyped file mirip dengan Typed file, dalam hal ini masingmasing record berukuran 1 integer. Adapun cara deklarasi suatu untyped file : var F : file; Sedangkan fungsi 'Assign', 'Reset', 'Rewrite', and 'Close' adalah tetap sama. Sedangkan perintah 'read' dan 'write' harus diganti dengan 'blockread' dan 'blockwrite'. Adapun syntax penulisannya adalah sebagai berikut blockread (f,buffer,count,actual); blockwrite(f,buffer,count,actual); dimana : f , adalah variable file. Buffer, adalah variable buffer dalam bentuk array. count , adalah jumlah integer yang akan dibaca/tulis. Actual, adalah jumlah integer yang berhasil dibaca/tulis. Berikut ini saya akan mendeklarsikan variable sebagai buffer, contoh :: var buffer : array[1..2048] of integer; count, actual : word; f : file; Dan proses pembacaan dapat sebagai berikut : count:=sizeof(buffer); blockread(f,buffer,count,actual); Variabel actual, akan berisi jumlah integer yang benar-benar berhasil dibaca dari file, demikian juga untuk proses 'blockwrite' :program enkripsi_dekripsi_file; (*oleh : hendra soewarno*) uses crt; const Blen = 1024; (*variabel global*) var FSource, FTarget : file; Bread,Bkey : array [1..BLen] of byte; Key : String; procedure bukafilesource; var fname : string; begin write('Nama file asal :'); readln(fname); assign(FSource,fname); {$I-} reset(FSource,1); {$I+} if IoResult0 then begin writeln('Tidak dapat buka ',fname); halt; end; end; procedure tutupfilesource; begin close(FSource); end;

STMIK IBBI

73

Algoritma & Pemrogramanprocedure buatfiletarget; var fname : string; begin write('Nama file tujuan :'); readln(fname); assign(FTarget,fname); {$I-} rewrite(FTarget,1); {$I+} if IoResult0 then begin writeln('Tidak dapat buat ',fname); halt; end; end; procedure tutupfiletarget; begin close(FTarget); end; procedure persiapankey; var i,j : integer; begin write('masukkan key anda :'); readln(key); if length(key) = 0 then begin writeln('key tidak sah !'); halt; end; i := 1; while i