Belajar Turbo Pascal 7.0 SMA Methodist Binjai Contoh Program dengan penggunaan procedure dgn parameter secara acuan pada perhitungan pangkat lebih besar dari 2 : program pangkat; uses crt; procedure pangkat(var bil,hasil:real;pang:integer); var i : integer; begin hasil :=1; for i:= 1 to pang do begin hasil:=hasil*bil; end; end; {modul utama} Var angka,hasil : real; pang : integer; begin clrscr; write('bilangan yang dipangkat =');readln(angka); write('dipangkatkan =');readln(pang); pangkat(angka,hasil,pang); write('hasil =',hasil:5:2); readln; end. 4. Procedure memanggil procedure yang lain Di dalam pascal diperkenankan procedure memanggil procedure yang lain seperti contoh berikut : program procedure_memanggil_procedure_yang_lain; uses crt; procedure satu(a1: integer); begin writeln(' nilai a =',a1:2,' ada diprocedure satu'); end; procedure dua(a2: integer); begin writeln(' nilai a =',a2:2,' ada diprocedure dua'); satu(a2); end; procedure tiga(a3: integer); begin writeln(' nilai a =',a3:2,' ada diprocedure tiga'); dua(a3); end; procedure empat(a4: integer); begin writeln(' nilai a =',a4:2,' ada diprocedure empat'); tiga(a4); end; {modul Utama} Var a : integer; begin clrscr; write('nilai a=');readln(a); empat(a); readln; end. 50
Belajar Turbo Pascal 7.0 SMA Methodist Binjai 5. Procedure Tersarang Procedure tersarang adalah procedure yang terdapat di dalam procedure yang lain dan dipanggil oleh procedure diluarnya. program contoh_procedure_tersarang; uses crt; procedure satu; {deklarasi procedure satu} procedure dua; begin {awal procedure dua} writeln('procedure dua ada di procedure satu'); end; {akhir procedure dua} procedure tiga; begin {awal procedure tiga} writeln('procedure tiga ada di procedure satu'); end; {akhir procedure tiga} begin {awal procedure satu} writeln(' procedure satu'); dua; {memanggil procedure dua} tiga; {memanggil procedure tiga} end; {akhir procedure satu} {modul utama} begin clrscr; writeln(' modul utama'); satu; {memanggil procedure satu} readln; end. 6. Procedure memanggil dirinya sendiri (rekursi) Di dalam pascal diperkenankan memanggil procedurenya sendiri. istilah ini disebut sebagai recursion. Dalam penggunaanya membutuhkan memory yang besar. Karena pada setiap pemanggilan sejumlah memory tambahan dibutuhkan. Contoh : program procedure_memanggil_dirinya_sendiri; uses crt; var I : integer; procedure rekursi; begin writeln('pemangilan procedure ke-',i:5); i:=i+1; if i < 5 then rekursi; end; {modul utama} begin clrscr; i:=1; rekursi; readln; end. Soal I. 1. Buatlah Procedure untuk membuat window dengan dekorasi kotak Ascii yang ditambahkan pada window yang telah dibentuk. 2. Buatlah duatu procedure seperti fungsi procedure READLN, dimana karakter yang dapat diterima hanya berupa abjad. 51
Belajar Turbo Pascal 7.0 SMA Methodist Binjai 3. Buatlah procedure seperti soal nomor 2 tetapi karakter yang diterima hanya berupa angka. Soal II. 1. Buatlah program yang berisi procedure yang digunakan untuk menghitung gerak parabola. 2. Buatlah menu untuk menggabungkan semua procedure perhitungan yang telah dibuat. 52
Belajar Turbo Pascal 7.0 SMA Methodist Binjai IX. FUNCTION (Untuk 2 Pertemuan) Blok pada function hampir sama dengan blok pada procedure, hanya pada function harus dideklarasikan dengan tipe dari function tersebut yang merupakan tipe hasil dari function itu sendiri. Sehingga dikatakan function dapat mengembalikan nilai. Sintaks : FUNCTION identifier(daftar parameter) : type; 1. Parameter Nilai dalam function Parameter dalam function dapat dikirimkan secara nilai atau secara acuan. Penulisan judul function yang menggunakan parameter secara Nilai adalah : Function besar(a,b : real) : real; Contoh : program penggunaan_parameter_nilai; uses crt; function besar(a,b :real) : real; begin if a>b then besar:=a else besar:=b; end; {modul utama} var nil1,nil2 : real; begin write('bilangan 1=');readln(nil1); write('bilangan 2=');readln(nil2); writeln('bilangan terbesar =',besar(nil1,nil2):6:2); readln; end. 2. Function dengan parameter acuan Penulisan judul function dengan menggunakan parameter secara acuan adalah sama dengan procedure yaitu ditambah Var pada deklarasi parameter. Dengan demikian nilai parameter acuan ini dapat digunakan sebagai hasil balik. Sintaks : FUNCTION jumlah(var a,b : integer) : integer; Contoh : program pengiriman_parameter_secara_acuan; function kali(var bil1,bil2,jumlah : integer) : integer; begin kali:=bil1*bil2; jumlah:=bil1+bil2; end; var x,y,z : integer; begin write('bilangan 1=');readln(x); write('bilangan 2=');readln(y); writeln(x:3,'*',y:3,' = ',kali(x,y,z):5); writeln(x:3,'+',y:3,' = ',z); readln; end. 53
Belajar Turbo Pascal 7.0 SMA Methodist Binjai 3. Function tanpa parameter Suatu function tanpa parameter berarti nilai balik yang akan dihasilkan merupakan nilai yang sudah pasti. Jika pada function dengan parameter, parameternya digunakan untuk input pada function dan function akan memberikan hasil balik sesuai dengan parameter yang diberikan sehingga bisa diatur dari program pemanggil. Sedang pada function tanpa parameter hasil dari function tidak dapat diatur. Sehingga function tanpa parameter jarang digunakan. Contoh : function tiga : integer; begin tiga:=3; end; begin writeln(tiga); end; Jadi hasil : 3 Function type string untuk membuat garis, ini juga merupakan contoh function tanpa parameter. uses crt; function garis : string; begin garis:='----------'; end; {modul utama} begin writeln(garis); writeln('pascal'); writeln(garis); readln; end. Contoh : program pangkat_dgn_function; uses crt; function pangkat(bil :real; pang: integer) : real; var hasil : real; i : integer; begin hasil := 1; for i:= 1 to pang do begin hasil:= hasil*bil; end; pangkat:=hasil; end; var hitung,bil : real; pang : integer; begin write('bilangan =');readln(bil); write('pangkat=');readln(pang); hitung:= 2*pangkat(2,3); writeln(bil:5:2,' pangkat',pang:5,' = ',pangkat(bil,pang):6:2); writeln('2 * (2 pangkat 3) =',hitung:6:2); readln; end. 54
Belajar Turbo Pascal 7.0 SMA Methodist Binjai 4. Rekursi pada function Rekursi adalah dimana suatu function memanggil dirinya sendiri. Proses dapat dilihat pada contoh berikut. Dimana fungsi faktor dipanggil oleh dirinya sendiri. Contoh : program function_memanggil_funnction_yg_lain; uses crt; function faktor(bilangan : integer) : real; begin if bilangan=0 then faktor:=1 else faktor:=faktor(bilangan-1)*bilangan; end; var n : integer; begin write('berapa faktorial =');readln(n); writeln(N:5,' faktorial =',faktor(n):9:0); readln; end. Soal I. 1. Buatlah program function menghitung penjumlahan parameter a dan b. 2. Buatlah function untuk menampilkan tulisan yang bergerak dari kiri ke kanan layar. 3. Buatlah program function untuk menhitung luas dan keliling lingkaran. 4. Buatlah function untuk menghitung volume kubus, kerucut, tabung, prisma, dan bola (buat dalam bentuk menu) Soal II. 1. Buatlah program untuk menampilkan urutan 1 sd 10 dengan memanfaatkan fungsi. 2. Buatlah program function untuk konversi bilangan desimal ke bilangan biner, oktadesimal dan heksadesimal. 3. Buatlah function untuk menkonversi angka menjadi terbilang. 55
Belajar Turbo Pascal 7.0 SMA Methodist Binjai X. REKURSI (Untuk 3 Pertemuan) Rekursif adalah konsep pengulangan yang penting dalam ilmu komputer. Konsep ini dapat digunakan untuk merumuskan solusi sederhana dalam sebuah permasalahan yang sulit untuk diselesaikan secara iteratif dengan menggunakan loop for, while do. Pada saat tertentu konsep ini dapat digunakan untuk mendefinisikan permasalahan dengan konsisten dan sederhana. Pada saat yang lain, rekursi dapat membantu untuk mengekspresikan algoritma dalam sebuah rumusan yang menjadikan tampilan algoritma tersebut mudah untuk dianalisa. Rekursif berarti bahwa suatu proses bisa memanggil dirinya sendiri. Menurut definisi dalam Microsoft Bookshelf, Rekursif adalah kemampuan suatu rutin untuk memanggil dirinya sendiri. Dalam Rekursif sebenarnya terkandung pengertian prosedur dan fungsi. Perbedaannya adalah bahwa rekursif bisa memanggil ke dirinya sendiri, tetapi prosedur dan fungsi harus dipanggil lewat pemanggil prosedur dan fungsi. Rekursif merupakan teknik pemrograman yang penting dan beberapa bahasa pemrograman mendukung keberadaan proses rekursif ini. Dalam prosedur dan fungsi, pemanggilan ke dirinya sendiri bisa berarti proses berulang yang tidak bisa diketahui kapan akan berakhir. Kelebihan Perulangan Rekursif : • Sangat mudah untuk melakukan perulangan dengan batasan yang luas dalam artian melakukan perulangan dalam skala yang besar. • Dapat melakukan perulangan dengan batasan fungsi. Kekurangan Perulangan Rekursif: • Tidak bisa melakukan nested loop atau looping bersarang. • Biasanya membuat fungsi sulit untuk dipahami, hanya cocok untuk persoalan tertentu saja. • Trace error sulit. • Memerlukan stack yang lebih besar, sebab setiap kali fungsi dipanggil, variabel lokal dan parameter formal akan ditempatkan ke stack dan ada kalanya akan menyebabkan stack tak cukup lagi (Stack Overrun). • Proses agak berbelit-belit karena terdapat pemangilan fungsi yang berulang-ulang dan pemanggilan data yang ditumpuk. Soal I. 1. Buatlah program untuk menampilkan urutan 1 sd 10 dengan memanfaatkan fungsi rekursi 2. Buatlah program function rekursi untuk konversi bilangan desimal ke bilangan biner, oktadesimal dan heksadesimal. 3. Buatlah program dengan konsep rekursi untuk menghitung pangkat dari suatu bilangan. Soal II. 1. Buatlah function unuk menghitung faktorial dengan memanfaatkan proses rekursi. 2. Buatlah function utuk menampilkan bilangan fibonanci dengan menggunakan konsep rekursi. Soal III 1. Buatlah game menara hanoi dengan memanfaatkan fungsi rekursi. 56
Belajar Turbo Pascal 7.0 SMA Methodist Binjai XI. KRIPTOGRAFI (Untuk 3 Pertemuan) Kriptografi merupakan seni dan ilmu menyembunyikan informasi dari penerima yang tidak berhak. Kata cryptography berasal dari kata Yunani kryptos (tersembunyi) dan graphein (menulis).Cryptology adalah ilmu yang mencakup cryptography dan cryptanalysis. Proses utama dalam kriptografi yaitu: Enkripsi adalah proses dimana informasi/data yang hendak dikirim diubah menjadi bentuk yang hampir tidak dikenali sebagai informasi awalnya dengan menggunakan algoritma tertentu. Dekripsi adalah kebalikan dari enkripsi yaitu mengubah kembali bentuk tersamar tersebut menjadi informasi awal Berikut adalah istilah-istilah yang digunakan dalam bidang kriptografi : Plaintext (M) adalah pesan yang hendak dikirimkan (berisi data asli). Ciphertext (C) adalah pesan ter-enkrip (tersandi) yang merupakan hasil enkripsi. Enkripsi (E) adalah proses pengubahan plaintext menjadi ciphertext. Dekripsi (D) adalah kebalikan dari enkripsi yakni mengubah ciphertext menjadi plaintext, sehingga berupa data awal/asli. Kunci adalah suatu bilangan yang dirahasiakan yang digunakan dalam proses enkripsi dan dekripsi. 1. Sejarah sistem sandi Caesar Sekitar 50 SM, Julius Caesar, kaisar Roma, menggunakan cipher substitusi untuk mengirim pesan ke Marcus Tullius Cicero. Pada cipher ini, huruf-huruf apfabet disubstitusi dengan huruf-huruf yang lain pada alfabet yang sama. Karena hanya satu alfabet yang digunakan, cipher ini merupakan substitusi monoalfabetik. Cipher semacam ini mencakup penggeseran alfabet dengan 3 huruf dan mensubstitusikan huruf tersebut. Substitusi ini kadang dikenal dengan C3 (untuk Caesar menggeser 3 tempat). Secar umum sistem cipher Caesar dapat ditulis sbb.: Misalkan A = 0, B = 1, …, Z = 25, maka secara matematis caesar cipher dirumuskan sebagai berikut: Enkripsi: C = E(P) = (P + 3) mod 26 Dekripsi: P = D(C) = (C – 3) mod 26 Contoh: Pesan :ABCDEFGHIJKLMNOPQRSTUVWXYZ Ciphertext : D E F G H I J K L M N O P Q R S T U V W X Y Z A B C Pesan : AWASI ASTERIX DAN TEMANNYA OBELIX Cipherteks : DZDVL DVWHULA GDQ WHPDQQBA REHOLA Jika pergeseran huruf sejauh k, maka: Enkripsi: C = E(P) = (P + k) mod 26 Dekripsi: P = D(C) = (C – k) mod 26 k = kunci rahasia 57
Belajar Turbo Pascal 7.0 SMA Methodist Binjai Teknik kriptografi klasik secara umum terbagi atas: 2. Metode substitusi Pada metode substitusi, dilakukan pergeseran pada setiap karakter berdasarkan faktor penggeser dan nilai dari setiap karakter itu sendiri. Metode substitusi pertama yang dikenali dunia adalah Caesar Cipher dimana setiap huruf alfabet yang digunakan digeser sejauh 3 huruf. Sebagai contoh, pesan: LARI PAGI dengan Caesar Cipher dienkripsikan menjadi ODUL SDJL Pergeseran huruf pada metode ini memberikan fungsi enkripsi dan dekripsi pada setiap huruf sebagai berikut: E(P)=(P + 3) mod 26 D(P)=(P - 3) mod 26 dimana E menyatakan fungsi enkripsi dan D menyatakan fungsi dekripsi. Nilai P sendiri merupakan representasi nilai nominal setiap karakter alfabet. Secara umum metode substitusi dengan pergeseran sejauh k karakter memiliki fungsi enkripsi dan dekripsi sebagai berikut: E(P) = (P + k ) mod 26 D(P) = (P - k ) mod 26 3. Metode transposisi Pada metode transposisi, huruf-huruf dari pesan tidak diganti sama sekali. Hanya saja posisi penempatan huruf- huruf tersebut pada pesan diubah. Variasi dari metode transposisi ini banyak sekali, mulai dari mengikuti persegi dengan ukuran tertentu, segitiga, maupun bidang geometri lainnya dengan berbagai ukuran. Pada metode ini yang menjadi kunci enkripsi adalah jarak atau lebar media transposisi itu sendiri. Sebagai contoh, pada penggunaan Scytale kunci yang digunakan adalah diameter dari tabung penggulung pesan karena diameter tersebut menentuan letak huruf-huruf saat kertas pesan selesai digulung dan hendak dibaca. Contoh metode transposisi diperlihatkan sebagai berikut, misalkan pesan yang ingin dienkripsikan adalah AKU SENANG KRIPTOGRAFI Maka dengan kunci k=5, teks tersebut dienkripsikan dengan suatu susunan pada persegi panjang dengan lebar 5 satuan menjadi AKUS ENAN GKRI PTOG RAFI dan saat disusun ulang, teks yang akan disampaikan menjadi AEGPRKNKTAUAROFSNIGI Untuk mendekripsi pesan tersebut, cukup menyusun huruf-huruf yang ada secara memanjang dengan panjang yang sama dengan kunci, yakni 5. Pesan yang diterima akan tersusun sebagai AEGPR KNKTA UAROF SNIGI 58
Belajar Turbo Pascal 7.0 SMA Methodist Binjai Hasil dekripsi dapat dibaca dari kiri atas secara menurun 4. Super enkripsi Metode ini merupakan gabungan dari metode substitusi dan metode transposisi yang bertujuan untuk membangun algoritma enkripsi yang lebih baik. Mula- mula teks yang akan disamarkan dienkripsi dengan metode substitusi, lalu tata letaknya diubah dengan metode transposisi. Contohnya, saat kita memiliki teks sebagai berikut JAKARTA PANAS Mula-mula kita dapat menyamarkan teks tersebut dengan algoritma Caesar Cipher dan mendapatkan hasil enkripsi MDNDUWD SDQDV Lalu, susunan huruf yang didapat di tata ulang dengan kunci k=4 untuk mendapatkan MUD DWQ NDD DSY Dengan begitu, didapat hasil enkripsi akhir sebagai berikut MUDDWQNDDDSY Soal I. 1. Buatlah program enkripsi dan dekripsi dengan metode substitusi Soal II 1. Buatlah program enkripsi dan dekripsi dengan metode transposisi Soal III 1. Buatlah program enkripsi dan dekripsi dengan menggabungkan metode substitusi dan transposisi 59
Belajar Turbo Pascal 7.0 SMA Methodist Binjai XII. FILE TEKS Pascal mempunyai dua macam file. File teks dan file binary. Bagian ini membicarakan file teks. Fiel teks tidak mempunyai besar yang eteap. Untuk menandai akhir suatu file, komputer menempatkan karakter khusus end-of-file (<eof>) setelah karakter yang paling akhir. Untuk menandai akhir suatu baris, komputer menampatkan karakter khusus end- of-line pada akhir baris. Dalam perogram yang interaktif biasanya kita menuliskan nilai sentinel untuk menandai akhir suatu baris atau file. Sebagai contoh, pecahan program semacam ini digunakan membaca suatu nama (kumpulan karakter) dengan nilai sentinel titik. Read(nama); While(nama<>’.’) Do Read(nama); Dalam file teks, untuk mengetes apakah baris sudah berganti, kita bias menggunakan fungsi eoln. Berikut ini pecahan program diatas yang ditulis deng fungsi eoln. While not EoLn Do Read(nama); Untuk mengetes apakah akhir suatu file, kita bias menggunakan fungsi eof seperti berikut ini. While not Eof(InfileData) Do Begin While Not EoL Do Read(Nama); ReadLn(Gaji); End; InfileData diatas merupakan nama file yang bertipe teks. Program diatas membaca variable-variabel Nama dan gaji dalam File Infile. Apabila akhir baris dtidak ditemui, nilai Eoln berarti false yang berarti program membaca variable nama. Setelah akhir baris ditemui, nilai EoLn menjadi true dan program membaca variable berikutnya yaitu Gaji. Setelah akhir file ditemui, nilai Eof menjadi true dan program keluar dari loop. Membuat File Teks File teks bisa dibuat melalui beberapa cara. Kalau kita di DOS, maka dengan cara yang termudah adalah dengan menggunakan DOS tersebut. Perintah yang digunakan adalah sebagai berikut : A:\\> Edit <namafile> Dos editor kemudian muncul, dan kita bias mengetik angka-angka atau huruf yang akan disimpan sebagai file teks. Apabila kita mempunyai pascal Editor, file teks dapat dibuat dengan menggunakan editor pascal. Bentuk editor tersebut mirip dengan DOS Editor. Untuk mengaktifkan menu, kita bisa menekan tombol F10. File teks bisa disimpan dengan menu Save atau Save As. Deklarasi File Teks Seperti variable-variabel lain dalam pascal, file teks juga harus dideklarasikan terlebih dahulu sebelum digunakan. Berikut ini adalah deklarasi file teks bernama InfileData. 60
Belajar Turbo Pascal 7.0 SMA Methodist Binjai Program ProsesFile (InfileData,OutFIle) Var InfileData, Outfile : text; InfileData dan OutFile dideklarasikan sebagi file teks. Dalam judul program keduanya harus dituliskan. Apabila program juga akan menggunakan keyboard (sebagai input) dan monitor (sebagai Output), maka judul program dituliskan sebagai berikut : Program ProsesFile (InfileData,Input,OutFile,Output); Var InfileData,Outfile : Text; Pernyataan Reset Pernyataan Reset digunakan untuk menyiapkan suatu file teks untuk dibaca oleh program. File teks siap untuk diproses dengan pernyataan berikut : Reset(InfileData); Dengan pernyataan Reset, pointer digeser ke permulaan file Teks. Karakter pertama dalam suatu fiel akan diproses sesudah pernyataan Reset. Sebelum data dibaca, operasi Reset harus dilakukan , apabila tidak program akan gagal menjalankan tugasnya (error akan muncul). Pernyataan Rewrite Untuk menyiapkan Output (file teks yang akan menampung Output program kita), kita harus menuliskan pernyataan seperti berikut ini : Rewrite(OutFile); Pernyataan diatas menyiapkan file OutFile untuk menampung hasil pemrosesan. Kija tidak ada file OutFile sebelumnya, OutFile akan diciptakan. Apabila sebelumnya ada file OutFile, pointer akan ditempatkan pada awal File dan semua isi OutFile yang lama akan terhapus oleh hasil pemrosesan yang terbaru. Pernyataan Close Pernyataan Close dipakai untuk menutup file-file yang dibuka dan dipakai dalam suatu program. Program yang menggunakan operasi Output-Input (O/I) biasanya lebih lambat, karena program tersebut dengan menggunakan jasa DOS berhubungan dengan aspek Fisik dari disket. Pascal menyediakan memori untuk menampung atau menuliskan data ke file. Ketika program menuliskan data atau membaca data, program membaca atau menuliskan data ke file buffer., bukannya langsung ke file eksternal secara langsung. Pascal secara periodic memindahkan data tersebut dari file buffer ke file eksternal. Apabila kita tidak menuliskan pernyataan close, proses pemindahan data tidak akan sempurna, dengan akibat ada data yang hilang. Tidak disimpan dalam file. Dengan cara semacam itu, program yang melibatkan operasi I/O akan diproses lebih cepat daripada apabila program langsung memanggil file eksternal. Penulisan pernyataan Close adalah sebagai berikut : Close(InfileData); Contoh program : Program hasilPrinter (InfileData,Output): Var InfileData : text; I : Integer; Begin AssiGn(InfielData,’coba.txt’); 61
Belajar Turbo Pascal 7.0 SMA Methodist Binjai Rewrite(InfileData); WriteLn(InfileData,’Bilangan dari 10 ke 10); WriteLn; For I := 1 to 10 Do WriteLn(InfileData,I); WriteLn(InfileData,chr(12)); Close(InfileData); End. Hasil dari program diatas : 1 2 3 4 5 6 7 8 9 10 Soal I. 1. Buatlah program untuk mencatat data siswa ke dalam file text seperti berikut ini No. Nama Siswa Kelamin Kelas --------------------------------------------------- 1. Angelika Perempuan X.IA-2 2. Brian Tanadi Laki-Laki X.IA-1 3. CALVEN OPRAFIUS Laki-Laki X.IS-1 4. DENA ARISANDI Laki-Laki X.IS-2 5. SUSI DWI Perempuan X.IA-3 2. Buatlah program untuk membaca file text yang telah ada dan tampilkan ke layar monitor 62
Belajar Turbo Pascal 7.0 SMA Methodist Binjai XIII. FILE BINARY Sebagai alternatif penulisan file teks, pascal memungkinkan kita menuliskan file dengan menggunakan kata(konstruktor) file seperti berikut ini : Type DeretAngka = File of Integer; Var IntData : DeretAngka; Angka : Integer; File inData disebut juga sebagai File Binary. File Binary adalah file dimana representasi internal dari tiap-tiap komponen secara langsung. Misalkan nilai variable angka adalah 244, pernyataan : Write(InData,Angka); Mengkopi representasi binary internal variable angka dari memori ke file InData. Misalkan file OutData bertipe teks, pernyataan berikut ini : Write(OutData, angka:4); Akan menuliskan niali variable angka ke file OutData dengan empat Bytes. Komputer pertama harus mengubah representasi binary dari memori ke string ‘244’ dan kemudian menuliskan kode bnary unutk karakter blank(‘ ‘) ,2,4 dan 4 ke OutFile. Sebaliknya apabila angka ‘244’ mau ditampilkan dilayar monitor, komputer akan mengkopi representasi binary dair blank (‘ ‘),2,4 dan 4 kemudian menuliskan ke teks string ‘244’ yang kemudian ditampilkan dilayar monitor. Proses semacam ini memakan waktu lebih lama dibandingkan kalau langsung mengkopi representasi binary internal ke disk. Bentuk Umum dari file binary(sering juga disebut typed filed), adalah sebagai berikut : Var InFile : File of <tipe>; Dimana tipe bis merupakan tipe dasar file seperi Integer, Char, bahkan suatu record, dan bias juga suatu string. Berikut deklarasi file binary : Type String10 = string[10]; RecMhs = record Nama : string[10]; IP : Real; End; Var InChar : File of char; InMhs : File of recMhs; InItgr : File of Integer; InStrng : File of String[10]; Contoh program : Program Bin01(input,OutFile); Var OutFile : File of Integer; Angka,Jumlah : Integer; Begin AssiGn(OutFile,’a:\\latihan\\outline.txt’); Rewrite(OutFile); WriteLn; WriteLn(‘Berapa angka yang akan dimasukkan : ‘); ReadLn(Jumlah); For Angka := 1 to Jumlah Do 63
Belajar Turbo Pascal 7.0 SMA Methodist Binjai Write(OutFile,Angka); Reset(OutFIle); For Angka := 1 to Jumlah Do Begin Read(OutFile, Angka); Write(Output,Angka); ReadLn; End; End. Soal I. 1. Buatlah program yang bias menyimpan data karyawan. Data karyawan tersebut berisi NIP, Nama, Golongan, Gaji/Hari, Gaji Total. Gaji/Hari ditentukan melalui golongan karyawan tersebut, ketentuannya adalah : Golongan I Rp. 3.000/hari Golongan II Rp. 4.500/hari Golongan III Rp. 6.000/hari Golongan IV Rp. 7.500/hari Program tersebut bisa digunakan untuk menambah data, dan melihat data. 64
Belajar Turbo Pascal 7.0 SMA Methodist Binjai XIV. POINTER DAN STRUKTUR DATA DINAMIK (Untuk 3 Pertemuan) Tipe data sederhana dan tipe data terstruktur yang telah kita ketahui mempunyai beberapa keterbatasan, yaitu bersifat statis. Akibatnya, ukuran dan urutannya sudah pasti. Contohnya pada struktur Array misalnya, elemen satu selalu mendahului elemen berikutnya, serta mempunyai urutan sudah tertentu dan pasti. Sehingga ukuran tersebut tidak dapat melebihi ukuran maksimum seperti yang sudah dideklarasikan. Kelemahan yang lain dari variabel yang sudah dideklarasikan denga tipe data ini adalah ruang memori yang sudah digunakannya tidak dapat dihapus bila variabel tersebut sudah tidak digunakan lagi. Dan Turbo Pascal mempunyai keterbatasan, yaitu ukuran maksimum dari data segment (memori untuk menampung nilai-nilai variabel) adalah sebesar 64 Kb (Kilo bytes). Apabila suatu program membutuhkan ukuran memori yang sangat besar untuk datanya yang melebihi batas 64 Kb, maka kita harus menggunakan variabel dinamik artinya variabel ini dapat dibebaskan kembali dari memori jika sudah tidak digunakan lagi dan hal ini dapat menghemat memori. VARIABEL POINTER Variabel dinamik tidak dapat dideklarasikan secara eksplisit seperti halnya variabel statik dan tidak dapat secara langsung ditunjukkan oleh suatu pengenal (identifier). Variabel dinamik hanya dapat ditunjukkan oleh variabel khusus yang berisi alamat memori yang digunakan oleh variabel dinamik tersebut. Variabel khusus ini disebut dengan variabel pointer. Variabel pointer dapat dideklarasikan dengan tipe data pointer. Tipe data pointer dideklarasikan dengan menggunakan simbol pointer ( ^ ) simbol ini disebut carat atau circumflex. Contoh: Type TipeString = string[15]; Ptr_String = ^ TipeString; Var Nama : Ptr_String; Begin Nama^ := ‘Turbo Pacal’; End. Writeln(Nama^); Variabel Nama adalah variabel pointer. Variabel ini tidak berisi dengan data, tetapi berisi alamat letak dari data yang ditunjuk. Variabel Nama adalah variabel pointer dengan tipe Ptr_String sedang Ptr_String adalah suatu tipe data pointer yang menunjukkan letak dari suatu nilai string[15]. Dengan demikian, variabel pointer Nama juga akan menunjukkan alamat dari letak string[15]. Sedang Nama^ menunjukkan isi dari memori yang alamatnya ditunjukkan oleh variabel pointer Nama atau dengan kata lain menunjukkan nilai string[15] tersebut. 65
Belajar Turbo Pascal 7.0 SMA Methodist Binjai VARIABEL DINAMIK Variabel dinamik dapat dibuat dan dialokasikan dengan prosedur standar NEW dan menghapusnya dengan DISPOSE. Contoh: Uses Crt; Type MyRec = Record Nama : String[30]; Alamat : String[50]; Telp : String[15]; End; Var Data : ^MyRec; Begin Clrscr; New(Data); Write('Nama : ');readln(Data^.Nama); Write('Alamat : ');readln(Data^.Alamat); Write('Telepon : ');readln(Data^.Telp); Writeln; WITH Data^ DO Begin Writeln('Namanya ',Nama); Writeln('Beralamat di ',Alamat); Writeln('Dengan nomor telepon ',Telp); End; Dispose(Data); End. STRUKTUR DATA DINAMIK (LINK LIST) Link List merupakan suatu urutan item-item data ynag disebut “node”. Masing-masing node mempunyai karakteristik data yang sama walaupun isinya berbeda. Suatu list mengandung “awal” dan “akhir” node, sebagai pangkal dan ujung sebuah list. Pada masing-masing node terdapat petunjuk (pointer) node di depannya atau di belakangnya. Dalam pelaksanaannya petunjuk ini berupa alamat dari node tersebut. Prinsip link list dapat disamakan dengan tali yang mempunyai simpul-simpul pada jarak tertentu. Simpul inilah yang kita asosiasikan dengan node. Pada masing-masing node terdapat dua bagian utama. Bagian pertama merupakan data yang akan diisi ketika program bekerja. Data tersebut berupa variabel, struktur, array atau lainnya sesuai dengan aplikasi yang akan digunakan. Bagian yang lainnya adalah pointer alamat dari node berikutnya atau sebelumnya. Berdasarkan elemen-elemen yang dapat di-handle oleh sebuah node, dibagi menjadi 2, yaitu single linked list dan double linked list. Pada single linked list hanya terdapat sebuah pointer alamat yang menunjuk alamat di depannya. Double linked list mempunyai dua pointer (petunjuk alamat), yaitu alamat node di depannya dan node di belakangnya. Dan yang akan kita pelajari nanti adalah single linked list. 1. Menentukan struktur data PROGRAM SINGLE_LIST; USES CRT; Type Ptr_SList = ^SList; SList = Record Nama : String[30]; Npm : String[8]; Ipk : Real; Next : Ptr_SList; End; Var Head,Tail,Base : Ptr_SList; 66
Belajar Turbo Pascal 7.0 SMA Methodist Binjai Struktur record yang kita tentukan terdiri dari Nama, Npm dan Ipk, sedangkang Next berguna sebagi petunjuk alamat Node Berikutnya. Pembacaan data ini dilakukan secara sequential (berurutan), untuk itu dibutuhkan informasi head (awal) dari list dan tail (akhir) dari list. Karena Head dan tail digunakan untuk semua bagian program, maka kedua variabel tersebut dideklarasikan secara global. Base digunakan untuk menunjukkan node yang aktif. Procedure UpperCase(Var s:string);{Berguna untuk mengubah karakter} Var { dalam string menjadi huruf kapital } i:integer; Begin for i:=1 to Length(s) do s[i]:=Upcase(s[i]); End; Procedure InitList; Begin Head:=NIL; { Untuk proses pertama kalinya node dalam memori } Tail:=NIL; { yaitu Head, Tail dan Base kita berikan nilai } Base:=NIL; ( NIL (Kosong, belum ada data) } End; 2. Membuat List Baru Sebuah list baru dibuat jika belum ada data pada komputer. Hal ini terjadi jika Head masih bernilai NIL (Kosong). Procedure Append(Nama,Npm:String; ipk:Real); Var Baru: Ptr_SList; Begin New(Baru); { Mengalokasikan memori untuk node yang baru } If Baru=NIL Then { jika memori tidak tersedia } Begin Writeln('Error : Memori ndak Cukup...Program dibatalkan..'); halt(1); End; Baru^.Nama:=Nama; { Mengisi data pada node yang baru } Baru^.Npm:=Npm; Baru^.Ipk:=ipk; Baru^.Next:=NIL; If Head=Nil Then Begin Head:=Baru; Tail:=Baru; End Else Begin Tail^.Next:=Baru; Tail:=Baru; End; End; 67
Belajar Turbo Pascal 7.0 SMA Methodist Binjai Jika Head sudah ada data, maka untuk menambahkan data baru, kita hanya menggantikan informasi variabel next pada Tail untuk menunjuk ke node baru. Sebelum: Sesudah: 1. Fungsi-fungsi untuk memindahkan petunjuk data dalam pembacaan node Function GoHead: Ptr_Slist; Begin Base:=Head; { Fungsi untuk mendapatkan data awal } GoHead:=Head; End; Function GoTail: Ptr_SList; Var Temp:Ptr_SList; Begin Temp:=Head; While(Temp<>NIL) Do { Fungsi untuk mendapatkan data akhir } Temp:=Base^.Next; GoTail:=Temp; End; Function GoNext: Ptr_SList; Begin Base:=Base^.Next; { Fungsi untuk mendapatkan data berikutnya } GoNext:=Base; End; 2. Menghapus Node dalam list Untuk menghapus data, “data (node) sebelum node yang akan dihapus” harus ditemukan terlebih dahulu secara sekuensial dari awal list. Jika node berhasil ditemukan, maka node diputus dengan menunjuk ke node setelah node yang akan dihapus. Kita akan bertanya kenapa tidak mencari node yang dihapus saja. Inilah kelemahan single linked list, tidak dapat menunjuk ke belakang dari posisi dia berada, untuk dapat melakukan hal itu maka kita ganti dengan struktur data double linked list namun tidak kita bahas untuk kali ini. Contoh kita mempunyai sebuah list dengan data “a”, “b”, “c”, “d”. kemudian kita ingin menghapus data “c”. dalam pelaksanaanya, program harus menuju “b”, dan memutus hubungan “b” dengan “c”. hubungan yang terputus ini diganti dengan hubungan “b” dengan “d”. Function Delete(npm:string): Boolean; Var Temp,Prev:Ptr_Slist; Begin Temp:=GoHead; { Pindahkan petunjuk ke awal list } Prev:=Temp; While( Temp <> NIL) do Begin If Temp^.Npm=npm Then {jika sesuai dgn data yg akan dihapus} Begin 68
Belajar Turbo Pascal 7.0 SMA Methodist Binjai If Temp=Head Then { Jika data tersebut ada di awal list} Begin Head:=Temp^.Next; {Pindahakn Head ke data berikutnya } Dispose(Temp); End Else Begin Prev^.Next:=Temp^.Next; Dispose(Temp); End; Delete:=True; Exit; End; Prev:=Temp; Temp:=GoNext; End; Delete:=False; End; Jika kita mempunyai list “a”,”b”,”c”,”d”,”e” dan kita akan menghapus node “c” maka gambaran proses penghapusannya adalah sebagai berikut: Arahkan variabel Temp ke Node C, dan Prev ke node B: Ganti informasi next pada Prev (Node B) ke node yang ditunjuk oleh informasi next pada node C yang berisi alamat node D Kini Node C telah terputus dengan list, kemudian node tersebut kita hapus dari memori komputer. Untuk menghapus data (node) pada awal dan akhir dari list tidak terlalu rumit. Jika data yang di hapus terdapat pada awal list, kita cukup memindahkan pointer Head ke Node berikunya. Dan untuk menghapus akhir list maka node sebelum akhir node, informasi next-nya diberikan nilai NIL, sehingga node tersebut tidak menunjuk ke akhir list lagi, dan node tersebut kita jadikan Tail. 3. Program lengkapnya PROGRAM SINGLE_LIST; USES CRT; Type Ptr_SList = ^SList; SList = Record Nama : String[30]; Npm : String[8]; Ipk : Real; Next : Ptr_SList; End; Var Head,Tail,Base : Ptr_SList; 69
Belajar Turbo Pascal 7.0 SMA Methodist Binjai Procedure UpperCase(Var s:string);{Berguna untuk mengubah karakter} Var { dalam string menjadi huruf kapital } i:integer; Begin for i:=1 to Length(s) do s[i]:=Upcase(s[i]); End; Procedure InitList; Begin Head:=NIL; { Untuk proses pertama kalinya node dalam memori } Tail:=NIL; { yaitu Head, Tail dan Base kita berikan nilai } Base:=NIL; ( NIL (Kosong, belum ada data) } End; Procedure Append(Nama,Npm:String; ipk:Real); Var Baru: Ptr_SList; Begin New(Baru); { Mengalokasikan memori untuk node yang baru } If Baru=NIL Then { jika memori tidak tersedia } Begin Writeln('Error : Memori ndak Cukup...Program dibatalkan..'); halt(1); End; Baru^.Nama:=Nama; { Mengisi data pada node yang baru } Baru^.Npm:=Npm; Baru^.Ipk:=ipk; Baru^.Next:=NIL; If Head=Nil Then Begin Head:=Baru; Tail:=Baru; end Else Begin Tail^.Next:=Baru; Tail:=Baru; End; End; Function GoHead: Ptr_Slist; Begin Base:=Head; { Fungsi untuk mendapatkan data awal } GoHead:=Head; End; Function GoTail: Ptr_SList; Var Temp:Ptr_SList; Begin Temp:=Head; While(Temp<>NIL) Do { Fungsi untuk mendapatkan data akhir } Temp:=Base^.Next; GoTail:=Temp; End; Function GoNext: Ptr_SList; Begin Base:=Base^.Next; { Fungsi untuk mendapatkan data berikutnya } GoNext:=Base; 70
Belajar Turbo Pascal 7.0 SMA Methodist Binjai End; Function Delete(npm:string): Boolean; Var Temp,Prev:Ptr_Slist; Begin Temp:=GoHead; { Pindahkan petunjuk ke awal list } Prev:=Temp; While( Temp <> NIL) do Begin If Temp^.Npm=npm Then {jika sesuai dgn data yg akan dihapus} Begin If Temp=Head Then { Jika data tersebut ada di awal list} Begin Head:=Temp^.Next; {Pindahakn Head ke data berikutnya } Dispose(Temp); End Else Begin Prev^.Next:=Temp^.Next; Dispose(Temp); End; Delete:=True; Exit; End; Prev:=Temp; Temp:=GoNext; End; Delete:=False; End; Procedure RemoveList; { menghapus seluruh data pada list } Var Temp:Ptr_SList; Begin Temp:=GoHead; While (Temp <> NIL) Do Begin Dispose(Temp); Temp:=GoNext; End; End; procedure Input; var nama,npm:string; ipk:real; pilihan:char; Begin pilihan:='Y'; Repeat Clrscr; Writeln('Input Data :'); Writeln('----------------'); Write('Nama : ');readln(nama); write('Npm : ');readln(npm); write('Ipk : ');readln(ipk); UpperCase(Nama); Append(nama,npm,ipk); writeln; write('Input Data lagi <Y>a / <T>idak : '); readln(Pilihan); Until Pilihan in ['T','t']; 71
Belajar Turbo Pascal 7.0 SMA Methodist Binjai End; procedure Cetak; var Temp:Ptr_SList; No:integer; Begin Clrscr; No:=1; Writeln(' Cetak Data : '); writeln('---------------------------------'); Temp:=GoHead; While(Temp<>NIL) Do Begin Write(No:3); gotoxy(6,wherey);Write(Temp^.Nama); gotoxy(36,wherey);Write(Temp^.Npm); gotoxy(46,wherey);Write(Temp^.Ipk:4:2);writeln; Temp:=GoNext; inc(No); End; Readln; End; procedure Hapus; var npm:string; Begin clrscr; writeln(' Hapus Data : '); writeln('------------------------------'); write('Ketik Nomor NPM : ');readln(npm); If Delete(npm) Then Writeln('Data sudah di hapus........') else Writeln('Data tidak ditemukan.......'); readln; end; procedure Cari; Var npm:string; pilihan:char; Temp:Ptr_SLIst; Begin Pilihan:='Y'; Repeat clrscr; writeln(' Cari Data'); writeln('----------------------'); write('Ketik Nomor Npm : ');readln(npm); Temp:=GoHead; while (Temp<> NIL) DO Begin If Temp^.Npm = npm Then break; Temp:=GoNext; End; If Temp<> NIL Then Begin Writeln('Nama : ',Temp^.Nama); Writeln('Npm : ',Temp^.Npm); Writeln('Ipk : ',Temp^.ipk:4:2); End 72
Belajar Turbo Pascal 7.0 SMA Methodist Binjai else writeln('Data tidak ditemukan.........'); writeln; writeln('Cari data lagi <Y>a / <T>idak : '); readln(Pilihan); Until Pilihan in ['T','t']; End; Var Pilihan:char; Begin InitList; Repeat Repeat Clrscr; Writeln(' MENU PILIHAN'); Writeln('==============================='); Writeln('[1]. Input Data'); writeln('[2]. Cetak Data'); writeln('[3]. Cari Data'); writeln('[4]. Hapus Data'); Writeln('[5]. Exit'); Writeln; Write('Pilihan Anda : ');Readln(pilihan); case Pilihan Of '1' : Input; '2' : Cetak; '3' : Cari; '4' : Hapus; '5' : Begin RemoveList; exit; end; end; if (Pilihan< '1') OR (Pilihan > '5') Then Begin writeln('Pilihan anda tidak sesuai dengan menu diatas....<ENTER>'); readln; End; Until (Pilihan>='1') AND(Pilihan<='5'); Until (Pilihan='5'); End. 73
Belajar Turbo Pascal 7.0 SMA Methodist Binjai KATA PENGANTAR Pada saat ini dunia pendidikan di Indonesia berkembang semakin maju, hal ini dapat terbukti dengan ditetapkannya kurikulum baru yaitu Kurikulum 2013 (K-13). Kurikulum 2013 memiliki empat aspek penilaian, yaitu aspek pengetahuan, aspek keterampilan, aspek sikap, dan perilaku. Untuk mendukung Kurikulum K-13, maka dibutuhkan banyak referensi sebagai bekal siswa untuk mengembangkan kemampuannya semaksimal mungkin. Pengembangan dunia usaha dewasa ini sangat membutuhkan peranan pengetahuan Informasi dan Teknologi, berdasarkan besarnya kebutuhan akan dunia teknologi ini Perguruan Kristen Methodist Indonesia Binjai mulai mengarahkan siswa- siswi lebih mengenal dunia IT, sehingga kedepannya alumni yang dihasilkan dapat mengembangkan ataupun memanfaatkan IT untuk mendukung karier maupun dunia usaha yang akan dikerjakan. Mata pelajaran Prakarya dan Kewirausahaan yang memanfaatkan peranan IT menuntut suatu pemahaman yang luas. Kenyataan di lapangan untuk mendapatkan referensi materi pelajaran Prakarya dan Kewirausahaan berbasis IT tidak mudah, hal ini bisa disebabkan oleh karena keterbatasan buku-buku yang tersedia atau bahkan dikarenakan keterbatasan siswa untuk mendapatkan buku-buku dari penerbit-penerbit nasional yang harganya bisa saja tidak terjangkau. Berdasarkan kenyataaan di atas dengan berlandaskan niat untuk membantu dan mendukung proses belajar mengajar, dengan mendapat restu dari Kepala Sekolah maka dengan ini terlahirlah modul pembelajaran Prakarya dan Kewirausahaan berbasis IT yang berisi rangkuman dari berbagai sumber referensi baik dari buku-buku paket, buku-buku penerbit nasional dan dari bahan yang ditayangkan di internet. Modul ini juga dilengkapi dengan bahan-bahan evaluasi sebagai upaya untuk meningkatkan kemampuan siswa dalam memahami materi yang disajikan. Modul ini disusun untuk dimanfaatkan dalam kalangan sendiri,semata-mata hanya untuk membantu Siswa SMA Methodist Binjai mendapatkan ilmu pengetahuan, keterampilan dan nilai-nilai serta dapat meningkatkan kompetensinya. Demikianlah semoga dengan tersusunnya modul ini dapat memberi manfaat kepada siswa secara pribadi serta mendukung kelancaran kegiatan belajar mengajar, dan untuk lebih luasnya dapat meningkatkan mutu pendidikan di negara kita ini Binjai, Juli 2017 Penyusun, i
Belajar Turbo Pascal 7.0 SMA Methodist Binjai DAFTAR ISI KATA PENGANTAR....................................................................................................i DAFTAR ISI ......................................................................................................... ii I. PEMROGRAMAN TURBO PASCAL 7.0...........................................................1 1. Mengenal Flowchart ........................................................................................1 2. Penggunaan Turbo Pascal ................................................................................1 II. Statemen-statemen Pada Pascal ............................................................................8 1. Reserved Word ................................................................................................8 2. Beberapa Statemen / Perintah Pada Pascal .......................................................8 III. Bentuk - Bentuk Perulangan...............................................................................17 1. Perulangan FOR ............................................................................................17 2. Perulangan WHILE-DO.................................................................................19 3. Perulangan REPEAT-UNTIL.........................................................................20 IV. BENTUK PERCABANGAN / KONDISI ..........................................................22 1. IF-THEN .......................................................................................................22 2. CASE-OF ......................................................................................................22 V. Array..................................................................................................................26 1. Deklarasi type indeks skalar...........................................................................27 2. Deklarasi konstanta array...............................................................................28 3. Array dua dimensi .........................................................................................29 4. Alternatif deklarasi array dua dimensi............................................................30 5. Array sebagai parameter ................................................................................31 VI. Pengurutan (Sorting) ..........................................................................................33 1. Pengurutan Gelembung (Bubble sort) ............................................................33 2. Pengurutan Maksimum/Minimum..................................................................35 3. Pengurutan Seleksi ........................................................................................36 VII. Record................................................................................................................38 1. Deklarasi record.............................................................................................38 2. Statemen with ................................................................................................38 3. Record dalam array........................................................................................39 4. Field record bertipe array...............................................................................40 5. Tipe data record dengan field tipe record .......................................................41 6. Record bervariasi...........................................................................................42 VIII. Procedure ...........................................................................................................47 1. Parameter dalam procedure............................................................................47 2. Pengiriman parameter secara Nilai.................................................................48 3. Pengiriman parameter secara acuan (by reference).........................................49 ii
Belajar Turbo Pascal 7.0 SMA Methodist Binjai 4. Procedure memanggil procedure yang lain.....................................................50 5. Procedure Tersarang ......................................................................................51 6. Procedure memanggil dirinya sendiri (rekursi)...............................................51 IX. Function.............................................................................................................53 1. Parameter Nilai dalam function......................................................................53 2. Function dengan parameter acuan ..................................................................53 3. Function tanpa parameter...............................................................................54 4. Rekursi pada function ....................................................................................55 X. Rekursi...............................................................................................................56 XI. Kriptografi .........................................................................................................57 1. Sejarah sistem sandi Caesar ...........................................................................57 2. Metode substitusi...........................................................................................58 3. Metode transposisi .........................................................................................58 4. Super enkripsi................................................................................................59 XII. File Teks ............................................................................................................60 Membuat File Teks ............................................................................................60 Deklarasi File Teks.............................................................................................60 Pernyataan Reset ................................................................................................61 Pernyataan Rewrite ............................................................................................61 Pernyataan Close................................................................................................61 XIII. File Binary .........................................................................................................63 XIV. Pointer dan struktur data dinamik .......................................................................65 VARIABEL POINTER......................................................................................65 VARIABEL DINAMIK .....................................................................................66 STRUKTUR DATA DINAMIK (LINK LIST)...................................................66 iii
Belajar Turbo Pascal 7.0 SMA Methodist Binjai Yayasan Pendidikan Methodist Binjai Lembaran Kehadiran Pratikum No Induk : ____________________________________________ Nama Siswa : ____________________________________________ Pas photo 3x4 Kelas : ____________________________________________ Semester : ____________________________________________ No. Tanggal Pembahasan Paraf Guru 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 Binjai, _______________ Diperiksa oleh, Guru iv
Belajar Turbo Pascal 7.0 SMA Methodist Binjai Yayasan Pendidikan Methodist Binjai Lembaran Kehadiran Pratikum No Induk : ____________________________________________ Nama Siswa : ____________________________________________ Pas photo 3x4 Kelas : ____________________________________________ Semester : ____________________________________________ No. Tanggal Pembahasan Paraf Guru 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 Binjai, _______________ Diperiksa oleh, Guru v
Search