belajar turbo pascal 7

79

Upload: others

Post on 20-Mar-2022

13 views

Category:

Documents


0 download

TRANSCRIPT

1

Belajar Turbo Pascal 7.0 SMA Methodist Binjai

I. PEMROGRAMAN TURBO PASCAL 7.0

1. Mengenal Flowchart Diagram alur (flowchart) merupakan gambar atau bagan yang memperlihatkan

urutan dan hubungan antar proses beserta instruksinya. Bagan ini dinyatakan dengan simbol. Dengan demikian setiap simbol menggambarkan proses tertentu sedangkan hubungan antar proses digambarkan dengan garis penghubung. Simbol-simbol diagram alur yang digunakan penulis dalam modul ini diperlihatkan pada tabel berikut ini.

Simbol Nama Fungsi

Simbol input / output

Digunakan untuk mewakili proses keluar masuknya informasi pada sistem.

Simbol keputusan/ percabangan

Digunakan untuk mewakili proses keputusan yang dilakukan dalam sistem.

Simbol tampilan

Digunakan untuk mewakili proses penampilan output pada suatu terminal.

Simbol proses

Digunakan untuk menunjukkan aktifitas utama/ proses pada sistem.

Simbol terminal

Digunakan untuk menunjukkan awal mulai dan akhir dari kegiatan.

Simbol penghubung

Bila flowchart terpotong dan masih mempunyai sambungan.

2. Penggunaan Turbo Pascal Dari modus prompt DOS, hal yang dilakukan sbb: A:\> turbo Menu dalam Pascal : a. File (Alt-F) Load / Pick : untuk mengambil program yang sudah ada di disk kerja. New : untuk membuat program baru. Save : untuk menyimpan program. Write to : untuk merekam program ke suatu file. Directory : untuk menampilkan directory. Change dir : untuk mengganti direktory yang aktif. OS Shell : untuk menjalankan perintah-printah DOS Quit : mengakhiri turbo Pascal dan kembali keprompt DOS

2

Belajar Turbo Pascal 7.0 SMA Methodist Binjai

b. Edit (Alt-E) Digunakan untuk keperluan memperbaiki program. c. Run (Alt-R) Digunakan untuk menjalankan program yang ada dijendela edit. d. Compile (Alt-C) Digunakan untuk mengkompilasi program. Destination Memory (disimpan di

memory). Destination Disk (disimpan di disk dengan ext .EXE). e. Options (Alt-O) Digunakan untuk mengatur/menentukan kembali bagaimana F1-help, F2-Save F3-new

file, F4-import data, F9-expand, F10-contract dan Esc-exit integrated environment bekerja.

f. Debug dan Break/Watch (Alt-D & Alt-B) Digunakan untuk melacak program.mengaktifkan Debug & Break/Watch. 3. Struktur Program Pascal

Secara ringkas, struktur suatu program Pascal dapat terdiri dari : 1. Judul Program 2. Tubuh Program Tubuh program dibagi menjadi dua bagian utama :

a. Bagian deklarasi - deklarasi label - deklarasi konstanta - deklarasi tipe - deklarasi variabel/perubah - deklarasi prosedur - deklarasi fungsi b. Bagian Pernyataan/Terproses Cat : baris-baris komentar untuk memperjelas program diletakkan diantara tanda (* dan *) atau { dan } . 1. Judul program

Judul program ini digunakan untuk memberi nama program dan sifatnya optional. Jika ditulis harus terletak pada awal dari program dan diakhiri dengan titik koma (;). Contoh penulisan judul program :

PROGRAM latihan; PROGRAM latihan(input,output); PROGRAM lat_1; PROGRAM lat_satu(output);

2. Bagian Pernyataan/Terproses Bagian ini adalah bagian yang akan terproses dan terdapat dalam suatu blok yang diawali dengan BEGIN dan diakhiri dengan END (penulisan END diikuti dengan tanda titik). Bagian ini berisi pernyataan / statamen yang merupakan instruksi program. Setiap statemen diakhiri dengan tanda titik koma (;). Bentuk umumnya adalah sbb :

BEGIN ... statemen; statemen;

END.

3

Belajar Turbo Pascal 7.0 SMA Methodist Binjai

3. Bagian deklarasi Bagian ini menjelaskan / memperkenalkan secara rinci semua data yang akan digunakan pada suatu program. Dalam penulisannya tidak boleh sama dengan kata-kata cadangan (reserved words) dan selalu diakhiri dengan titik koma (;).

4. Deklarasi label Deklarasi label digunakan Jika pada penulisan program akan menggunakan statemen GOTO (untuk meloncat ke suatu statement tertentu).

Contoh : PROGRAM cetak; LABEL satu,akhir; BEGIN

WRITELN('STMIK'); GOTO SATU; WRITELN('SMA');

satu: WRITELN('METHODIST'); GOTO akhir; WRITELN('MEDAN');

akhir: END.

Bila program di atas dijalankan, output sbb : STMIK METHODIST

5. Deklarasi konstanta Deklarasi ini digunakan untuk mengidentifikasikan data yang nilainya sudah ditentukan dan pasti, tidak dapat dirubah dalam program.

Contoh : PROGRAM CETAK_2(OUTPUT); CONST a = 50; (* selalu menggunakan tanda = *)

b = 'INDONESIA Merdeka'; BEGIN

WRITELN(a,' TAHUN '); WRITELN(b);

END.

Bila program dijalankan, output sbb : 50 TAHUN INDONESIA Merdeka

6. Deklarasi tipe Deklarasi ini digunakan untuk menyebutkan tipe setiap data yang akan digunakan pada program Pascal. Tipe data menentukan jangkauan nilai yang mungkin dari data yang digunakan

Contoh : PROGRAM SATU; TYPE bulat = INTEGER; { selalu menggunakan = }

hasil,pecahan = REAL; ket = STRING[20];

BEGIN pecahan := 2.52; bulat := 2; hasil := pecahan + bulat; ket := 'hasil penjumlahan = '; WRITE(ket,hasil:4:2);

END.

Output program, sbb : hasil penjumlahan = 4.52

4

Belajar Turbo Pascal 7.0 SMA Methodist Binjai

7. Deklarasi variabel/perubah Deklarasi ini berisi data-data yang bisa berubah-ubah nilainya di dalam program. Deklarasi variabel harus di letakkan setelah deklarasi tipe (jika ada). Contoh : VAR satu : INTEGER; Dua : INTEGER; A : REAL; B : REAL; { selalu menggunakan : } BEGIN

satu := 5; dua := 4; a := 2.3; b := 5+4*2.3; { hasil real } WRITE('hasil = ',b:4:1);

END.

Output program : hasil = 14.2 Program diatas bisa ditulis sbb :

VAR satu,dua : INTEGER; a,b : REAL; BEGIN ... statement; END.

Contoh jika terdapat deklarasi tipe : TYPE

bilangan = integer; VAR

satu,dua,a : bilangan; b : real;

BEGIN

... statement;

END.

8. Tipe Data

Tipe Data dapat terletak pada deklarasi variabel maupun padadeklarasi tipe. Pascal menyediakan beberapa macam tipe data, yang terdiri dari : A. Type data Standard

Tipe data integer Tipe integer adalah bilangan yang tidak mempunyai titik desimal/bilangan pecahan. Integer terdiri dari beberapa tipe, yaitu : - byte, dengan jangkauan nilai 0..255 - shortint, dengan jangkauan nilai -128..127 - integer, dengan jangkauan nilai -32768..32767 - word, dengan jangkauan nilai 0..65535 - longint, dengan jangkauan nilai -2147483648..2147483647 Operator yang dapat digunakan pada data tipe integer :

+, penjumlahan -, pengurangan *, perkalian div, pembagian mod, sisa pembagian

5

Belajar Turbo Pascal 7.0 SMA Methodist Binjai

Contoh : VAR

a,b,jumlah1,jumlah2 : INTEGER; BEGIN

jumlah1:=10; jumlah2:=3; a:=jumlah1 DIV jumlah2; b:=jumlah1 MOD jumlah2; WRITELN('HASIL A = ',a); WRITELN('HASIL B =',b);

END.

hasil program : HASIL A = 3 HASIL B = 1

Tipe data real Tipe real adalah bilangan yang mengandung pecahan, palingsedikit harus ada satu digit sebelum dan sesudah titik desimal. Operator yang dapat digunakan pada data tipe real adalah :

+ penjumlahan - pengurangan * perkalian / pembagian

Contoh : VAR nilai1,nilai2,hasil : REAL; BEGIN

nilai1 := 2.52; nilai2 := 3.2; hasil := nilai1 + nilai2; WRITE('HASIL PENJUMLAHAN = ',hasil:4:2);

END.

Output program, sbb : HASIL PENJUMLAHAN = 5.72 Tipe data karakter Nilai data karakter berupa sebuah karakter yang ditulis diantara tanda petik tunggal, misalnya : 'A', 'b', '@', dan sebagainya. Karakter yang dapat diterima oleh komputer :

huruf besar/kecil : A,B,C,...,Z / a,b,...,z digit : 1,2,3,...,9 operator aritmatika : * / + - tanda baca : , . ; : ? ! simbol khusus : $ @ { } ( ) [ ] % # spasi

Contoh :

VAR nilai : CHAR; BEGIN

nilai :='A'; WRITELN('NILAI TERBAIK = ',nilai);

END.

Hasilnya : NILAI TERBAIK = A Tipe data string Nilai data string adalah satu atau lebih karakteryang terletak diantara tanda petik tunggal, misal : 'GUNADARMA'. Bila panjang dari suatu string di dalam deklarasi variabel tidak disebutkan, maka dianggap panjangnya 255 karakter.

6

Belajar Turbo Pascal 7.0 SMA Methodist Binjai

Contoh : VAR kata1 : STRING[5];

kata2 : STING[9]; kata : CHAR;

BEGIN kata1 :='STMIK'; kata2 :='METHODIST'; kata :=' '; { karakter berupa spasi } WRITELN(kata1,kata,kata2);

END.

hasil : STMIK METHODIST Tipe data boolean Data tipe boolean mempunyai dua nilai, yaitu True dan False. Contoh :

VAR benar : BOOLEAN;

BEGIN benar := TRUE; WRITELN('benar = ',benar);

END.

hasil : benar = TRUE B. Tipe data Terdefinisi

Tipe data sub jangkauan Tipe data ini adalah tipe data yang dapat didefinisikan sendiri oleh pemakai. Nilai data pada tipe ini mempunyai jangkauan tertentu. Misalkan nilai ujian mempunyai harga 0 sampai 100, maka nilai ujian dapat didefinisikan sbb Contoh :

TYPE nilai= 0..100;

VAR sks : 1..4; angkatan : 89..95; nilai : 'A'..'E';

Tipe data terbilang Tipe data ini juga dapat didefinisikan sendiri oleh pemakai. Disebut tipe terbilang karena semua nilai disebut satu persatu. Contoh :

TYPE hari = (Senin,Selasa,Rabu,Kamis,Jum'at,Sabtu,Minggu); hari_kerja = (Senin,Selasa,Rabu,Kamis,Jum'at); situasi = (senang,gembira,sedih,susah);

C. Tipe data larik (array)

Larik (array) adalah kumpulan data yang mempunyai tipe data sejenis. Daftar nomor telpon, daftar kode mata kuliah, vektor, matrik merupakan contoh larik. Contoh penulisan tipe larik berdimensi satu sbb :

CONST batas = 20; VAR telpon : ARRAY[1..3] OF STRING[7]; { larik dengan nama telpon mempunyai 3 data dengan tipe string } nilai : ARRAY[1..5] OF INTEGER; { larik dengan nama nilai mempunyai 5 data dengan tipe integer } gaji : ARRAY[1..batas] OF REAL; { larik dengan namagaji mempunyai 20 data dengan tipe real }

Contoh larik yang mempunyai tipe data terbilang atau subjangkauan :

7

Belajar Turbo Pascal 7.0 SMA Methodist Binjai

TYPE batas = 0..100; keadaan = (baru,lama,bagus,jelek); VAR nilai : ARRAY[1..30] OF 'A'..'B'; angka : ARRAY[1..50] OF batas; baju : ARRAY[1..10] OF keadaan;

Contoh program :

VAR jumlah : INTEGER; nilai : ARRAY[1..3] OF 'A'..'E'; angka : ARRAY[1..3] OF INTEGER;

BEGIN nilai[1] := 'C'; nilai[2] := 'B'; nilai[3] := 'A'; angka[1] := 75; angka[2] := 60; angka[3] := 90; jumlah := angka[1]+angka[2]+angka[3]; WRITELN('NILAI = ',angka[2],' MENDAPAT ',nilai[1]); WRITELN('JUMLAH = ',jumlah);

END.

hasil : nilai 60 mendapat C jumlah = 225

Contoh penulisan tipe larik berdimensi dua sbb :

VAR tabel : ARRAY[1..3,1..2] OF BYTE; {larik tabel mempunyai 3 baris dan 2 kolom dengan tipe byte } BEGIN

tabel[1,1] := 5; { baris 1, kolom 1 } tabel[1,2] := 7; tabel[2,1] := 21; { baris 2, kolom 1 } tabel[2,2] := 18; tabel[3,1] := 8; tabel[3,2] := 7;

WRITELN('BARIS 1 KOLOM 2 = ',tabel[1,2]); END.

H asil : BARIS 1 KOLOM 2 = 7 SOAL-SOAL : 1. Apa yang kamu ketahui tentang pascal ? jelaskan ! 2. Sebutkan & jelaskan secara rinci deklarasi-deklarasi dalam pascal ! 3. Sebutkan langkah-langkah pembuatan program pascal ! 4. Terangkan langkah-langkah penyimpanan, pemanggilan, pengeditan, dan

menjalankan program pascal ! 5. Bagaimana cara mengcompile program pascal menjadi program .EXE! 6. Buat program untuk menampilkan Nama, dan Nomor Induk anda ! 7. Buatlah Program untuk menjumlahkan nilai A dengan B dan tampilkan hasil

perhitungan ke layar. 8. Buatlah program untuk perhitungan lainnya.

8

Belajar Turbo Pascal 7.0 SMA Methodist Binjai

II. STATEMEN-STATEMEN PADA PASCAL (Untuk 3 Pertemuan)

1. Reserved Word Reserved Word adalah kata-kata baku yang digunakan dalam program dan mempunyai bentuk serta kegunaan tertentu yang telah didefinisikan oleh Pascal. Reserved Word tidak boleh didefinisikan kembali oleh pemakai, sehingga tidak dapat digunakan sebagai pengenal (Identifier). Dalam bahasa pemrograman Pascal, beberapa Reserved Word tersebut adalah : AND DOWNTO IN OF STRING ASM ELSE INHERITED OR THEN ARRAY END INLINE PACKED TO BEGIN EXPORTS INTERFACE PROCEDURE TYPE CASE FILE LABEL PROGRAM UNIT CONST FOR LIBRARY RECORD UNTIL CONSTRUCTOR FUNCTION MOD REPEAT DESTRUCTOR GOTO NIL SET DIV IF NOT SHL WHILE DO IMPLEMENTATION OBJECT SHR WITH VAR USES

Selain dari Reserved Word di atas, Turbo Pascal masih memiliki tambahan Reserved Word berikut :

ABSOLUTE ASSEMBLER() FAR FORWARD INDEX

2. Beberapa Statemen / Perintah Pada Pascal Statemen adalah perintah untuk pengerjaan program pascal. Statemen terletak di bagian deklarasi statemen dengan diawali oleh kata cadangan BEGIN dan diakhiri dengan kata cadangan END. Akhir dari setiap statemen diakhiri dengan titik koma(;). Statemen- statemen dalam bahasa Pascal terdiri dari pernyataan yang berupa fungsi dan prosedur yang telah disediakan sebagai perintah standar Turbo Pascal. 1. Statemen-statemen yang digunakan untuk input/output 1.1. READ/READLN(prosedur) Digunakan untuk memasukkan (input) data lewat keyboard ke dalam suatu variabel. Sintaks: READ/READLN(V); Keterangan :

V = variabel. READ = pada statemen ini posisi kursor tidak pindah ke baris selanjutnya. READLN = pada statemen ini posisi kursor akan pindah ke baris selanjutnya

setelah di input 1.2. READKEY(fungsi) Untuk pembacaan sebuah karakter dari keyboard. Tipe data yang dihasilkan adalah char. Sintaks: READKEY; 1.3. WRITE/WRITELN(prosedur) Digunakan untuk menampilkan isi dari suatu nilai variabel di layar. Sintaks: WRITE/WRITELN(V);

9

Belajar Turbo Pascal 7.0 SMA Methodist Binjai

Keterangan : V = variabel. WRITE/WRITELN = sama dengan READ/READLN. Contoh :

PROGRAM in_out; USES CRT; VAR nm : STRING;

npm : STRING; BEGIN

CLRSCR; WRITELN('masukkan nama dan NPM '); WRITELN('------------------------------'); WRITE('nama anda : '); READLN(nm); WRITELN('NPM anda : '); READLN(npm);

END.

Bila dijalankan hasilnya adalah: masukkan nama dan NPM ------------------------------ nama anda : ( di input ) NPM anda : ( di input ) 2. Statemen-statemen yang digunakan untuk pengaturan letak di layer 2.1. CLRSCR(prosedur) Digunakan untuk membersihkan layar. sintaks: CLRSCR; 2.2. GOTOXY(prosedur) Untuk menempatkan posisi kursor pada layar. Sintaks: GOTOXY(X, Y: Byte); Keterangan : X = sumbu X (posisi horisontal), Y = sumbu Y (posisi vertikal) 2.3. DELLINE(prosedur) Untuk menghapus sebuah baris pada posisi kursor dan menaikkan baris-baris dibawahnya. Sintaks: DELLINE; 2.4. INSLINE(prosedur) Untuk menyisipkan sebuah baris pada posisi kursor dan menggeser kebawah tampilan- tampilan baris dibawahnya. Sintaks: INSLINE; 2.5. DELAY(prosedur) Untuk menghentikan sejenak proses program. Sintaks: DELAY(MS: Word); Keterangan : MS = ukuran waktu dalam milisecond. Contoh :

PROGRAM LAYAR; USES CRT; VAR x : CHAR; BEGIN

CLRSCR;

10

Belajar Turbo Pascal 7.0 SMA Methodist Binjai

GOTOXY(35,10); WRITELN('STMIK METHODIST'); WRITE(tunggu sebentar...!!'); DELAY(5000); INSLINE; GOTOXY(35,11); WRITELN('Top Banget Dech ...'); GOTOXY(01,13); WRITELN('Tekan Enter !'); DELAY(1000); GOTOXY(15,12); DELLINE; READ(x);

END.

Hasilnya adalah : STMIK METHODIST Top Banget Dech ...

tunggu sebentar...! Tekan Enter !

3. Statemen yang digunakan untuk memanipulasi string 3.1. CONCAT(fungsi) Untuk menggabungkan 2 atau beberapa variabel string. Sintaks: CONCAT(s1 [,s2,...,sn]: String) : STRING; contoh: CONCAT('ABC','DEF') { ABCDEF } 3.2. COPY(fungsi) Mengambil satu(1) atau beberapa karakter dari sebuah string. Sintaks: COPY(S,Index,Count) : String; Keterangan : S = sebuah string (string). Index = posisi awal kita akan mengambil beberapa karakter (integer) Count = banyaknya karakter yang akan diambil (integer). 3.3. DELETE(prosedur) Menghapus sebagian karakter dari sebuah string. Sintaks: DELETE(S,Index,Count); Keterangan : sama dengan statemen COPY. 3.4. INSERT(prosedur) Menyisipkan satu(1) atau beberapa karakter ke dalam sebuah string. Sintaks: INSERT(Source,var S,Index); Keterangan : Source = sumber string untuk disisipi (string) var S = string tujuan yang akan disisipi oleh string Source (string) Index = posisi mulai (integer). 3.5. LENGTH(fungsi) Memberikan nilai panjang dari suatu string (jumlah karakterdalam string). Sintaks: LENGTH(S); Keterangan : S = string LENGTH(S) menghasilkan nilai integer.

11

Belajar Turbo Pascal 7.0 SMA Methodist Binjai

3.6. POS(fungsi) Mencari posisi sebuah bagian string (substring) didalam sebuah string. Sintaks: POS(Substr,S); {menghasilkan nilai Byte} Keterangan : Substr = substring yang akan dicari posisinya di dalam sebuah string S. Bila bernilai 0 berarti nilai string yang dicari tidak ada. 3.7. STR(prosedur) Merubah nilai numerik ke dalam nilai string. Sintaks: STR(N,S); Keterangan : N = data tipe integer, S = data tipe string. 3.8. VAL(prosedur) Merubah nilai string ke dalam nilai numerik. Sintaks: VAL(S,N,P); Keterangan : S = nilai string, N = nilai real, P = posisi salah. Nilai string harus berisi angka, plus atau minus, bila tidak berarti kesalahan dan letak kesalahannya ditunjukkan oleh variabel posisi salah. Jika benar, maka nilai variabel tsb = 0 (nol). 3.9. UPCASE(fungsi) Memberikan huruf kapital dari argumen. Sintaks: UPCASE(S); Keterangan : S = variabel bertipe karakter. Contoh :

PROGRAM main_string; USES CRT; VAR s : STRING; l : INTEGER; h : STRING; CONST a='SMP';

b='SMA '; c='METHODIST';

BEGIN CLRSCR; s:=CONCAT(a,b,c); WRITELN(s); INSERT(' & ',s,4); WRITELN(s); DELETE(s,1,6); WRITELN(s); h:=COPY(s,1,3); WRITELN(h); l:=LENGTH(s); WRITELN('Panjangnya string S : ',l); WRITELN('Posisi "SMA" pada nilai S : ',POS(SMA',s));

END.

12

Belajar Turbo Pascal 7.0 SMA Methodist Binjai

Hasilnya adalah : SMPSMA METHODIST SMP & SMA METHODIST SMA METHODIST SMA Panjangnya string S : 13 Posisi "SMP" pada nilai S : 1

4. Statemen-statemen untuk perhitungan aritmatik 4.1. ABS(fungsi) Memberikan nilai mutlak dari suatu argumen. Sintaks: ABS(x); 4.2. ARCTAN(fungsi) Memberikan nilai dari fungsi arctangent dari perhitungan goniometri. Sintaks: ARCTAN(x); Dimana x dapat bertipe real atau integer dan akan menghasil kan nilai bertipe real. 4.3. COS(fungsi) Memberikan nilai dari fungsi Cosinus. Sintaks: COS(x); 4.4. EXP(fungsi) Menghitung nilai pangkat dari bilangan e (bilangan alam), yaitu sebesar x. Sintaks: EXP(x); x dapat bertipe real atau integer dan akan menghasilkan nilai bertipe real. 4.5. FRAC(fungsi) Untuk mendapatkan nilai pecahan dari suatu bilangan. Sintaks: FRAC(x); Tipe dari x sama seperti yang diatas. 4.6. INT(fungsi) Memberikan nilai integer (bilangan bulat) dari suatu variabel dengan membuang bilangan di belakang koma. Sintaks: INT(X); 4.7. LN(fungsi) Digunakan untuk menghitung nilai logaritma alam (natural logarithm) dari nilai x. Sintaks: LN(x); 4.8. SIN(fungsi) Memberikan nilai dari fungsi Sinus. Sintaks: SIN(x); 4.9. SQR(fungsi) Digunakan untuk menghitung nilai pangkat kuadrat dari suatu bilangan. Sintaks: SQR(x); Tipe dari x bisa berupa real maupun integer. Dan hasilnya akan sama dengan tipe dari x.

13

Belajar Turbo Pascal 7.0 SMA Methodist Binjai

4.10. SQRT(fungsi) Digunakan untuk menghitung nilai akar dari suatu bilangan. Sintaks: SQRT(x); Contoh :

PROGRAM Aritmatik; USES CRT; VAR x : REAL; BEGIN

CLRSCR; WRITE('masukkan nilai dari X = '); READLN(x); IF x<0 THEN x:=ABS(x); WRITELN('Nilai X = ',x:5:2); WRITELN('Nilai eksponentialnya = ',EXP(x):9:3); WRITELN('Nilai logaritma alamnya = ',LN(x):9:3); WRITELN('Nilai integernya = ',INT(x):5:2); WRITELN('Nilai fraksionalnya = ',FRAC(x):5:2); WRITELN('Nilai X dipangkatkan = ',SQRT(x):9:3); WRITELN('Nilai X diakarkan = ',SQRT(x):9:3); WRITE('Nilai X jika dimasukkan dalam '); WRITELN('fungsi SIN,COS,TANGEN : '); WRITELN('- Sinus = ',SIN(x):9:3); WRITELN('- Cosinus = ',COS(x):9:3); WRITELN('- Tangen = ',ARCTAN(x):9:3);

END.

Hasilnya : masukkan nilai dari X = -2.5 Nilai X = 2.50 Nilai eksponensialnya = 12,182 Nilai logarima alamnya = 0,196 Nilai integernya = 2.00 Nilai fraksionalnya = 0.50 Nilai X dipangkatkan = 6.250 Nilai X diakarkan = 1.581 Nilai X jika dimasukkan dalam fungsi SIN,COS,TANGEN : - Sinus = 0.598 - Cosinus = -0.801 - Tangen = 1.190

5. Statemen-statemen untuk transfer nilai dari suatu variable 5.1. CHR(fungsi) Merubah nilai dari byte ke bentuk karakter yang sesuai dengan kode ASCII. Sintaks: CHR(x); Keterangan : x bertipe byte contoh : WRITELN(CHR(65); hasilnya : A 5.2. ORD(fungsi) Merubah nilai suatu variabel dari bentuk karakter ke bentuk longint. Sintaks: ORD(X); Keterangan : x bertipe char contoh : WRITELN(ORD('B'); hasilnya : 66

14

Belajar Turbo Pascal 7.0 SMA Methodist Binjai

5.3. ROUND(fungsi) Membulatkan data tipe real ke data tipe longint. Sintaks: ROUND(X); Keterangan : Jika nilai pecahan < 0,5 maka dibulatkan kebawah. Jika nilai pecahan > 0,5 maka dibulatkan keatas. contoh : WRITELN('10/3 dibulatkan = ',ROUND(10/3)); hasilnya : 10/3 dibulatkan = 3 5.4. TRUNC(fungsi) Membulatkan kebawah data tipe real ke data tipe longint. Sintaks: TRUNC(X); contoh : WRITELN('20/3 dibulatkan kebawah = ',TRUNC(20/3)); hasilnya : 20/3 dibulatkan kebawah = 6 6. Statemen-statemen untuk memanipulasi data 6.1. PRED(fungsi) Memberikan nilai sebelum nilai argumen dalam urutannya dalam ASCII. Sintaks: PRED(x); 6.2. SUCC(fungsi) Memberikan nilai sesudah nilai argumen dalam urutannya dalam ASCII. Sintaks: SUCC(x); 6.3. INC(fungsi) Menambah (increments) nilai suatu variabel. Sintaks: INC(x,i); {i >= 1} 6.4. DEC(fungsi) Mengurangi (decrements) nilai suatu variabel. Sintaks: DEC(x,i); {i >=1} Contoh :

PROGRAM Main_data; USES CRT; TYPE hari = (hr0,hr1,hr2,hr3,hr4,hr5,hr6,hr7); VAR urutanhr : hari; CONST namahr : ARRAY[hr1..hr7] OF STRING[6]= ('Senin', 'Selasa',

'Rabu', 'Kamis','Jumat','Sabtu','Minggu'); BEGIN

WRITELN('DAFTAR NAMA HARI'); urutanhr := hr0; WHILE Urutanhr < hr7 DO BEGIN

urutanhr := SUCC(urutanhr); WRITE('hari ke ',ORD(Urutanhr):2,' adalah '); WRITELN(namahr[urutanhr]);

END; END.

hasilnya adalah : DAFTAR NAMA HARI hari ke 1 adalah Senin hari ke 2 adalah Selasa hari ke 3 adalah Rabu

15

Belajar Turbo Pascal 7.0 SMA Methodist Binjai

hari ke 4 adalah Kamis hari ke 5 adalah Jumat hari ke 6 adalah Sabtu hari ke 7 adalah Minggu

7. Statemen-statemen tambahan (warna,suara dan window) 7.1. TEXTCOLOR(prosedur) Untuk mengatur warna dari karakter-karakter di layar. Sintaks: TEXTCOLOR(color : Byte); Catatan : untuk pilihan warna lihat pada buku Turbo Pascal. 7.2. TEXTBACKGROUND(prosedur) Untuk mengatur warna latar belakang dari karakter-karakter dilayar. Sintaks: TEXTBACKGROUND(Color : Byte); 7.3. WINDOW(prosedur) Untuk membuat suatu jendela (window) yang terletak pada layar. Sintaks: WINDOW(x1,x2,y1,y2 : Byte); x1,x2 = kordinat kiri atas dengan nilai maksimal sesuai dengan mode layar. y1,y2 = kordinat kanan bawah dgn nilai maksimal sesuai dengan mode layar. 7.4. TEXTMODE(prosedur) Untuk mengatur lebar layar, 80 kolom atau 40 kolom. Sintaks: TEXTMODE(Mode: Byte); Default = C80 7.5. SOUND(prosedur) Untuk mengaktifkan suara(beep) pada internal speaker. Sintaks: SOUND(Hz : word); Untuk mengnonaktifkannya, gunakan statemen NOSOUND. Contoh :

PROGRAM Layar2; USES CRT; BEGIN

CLRSCR; WINDOW(5,5,20,75); TEXTBACKGROUND(RED); TEXTCOLOR(YELLOW); SOUND(220); GOTOXY(10,7); WRITELN('Laboratorium Komputer'); GOTOXY(11,7); WRITELN('Manejemen Informatika'); NOSOUND;

END.

SOAL-SOAL : Soal I : Buatlah program dibawah ini dengan tampilan menggunakan perintah Window, Textcolor, Textbackground, Gotoxy, dan Sound untuk memperindah tampilan. 1. Mengubah derajat temperatur, dari derajat Celcius ke derajat Fahreinheit dan Reamur

(derajat Celcius diinput).

16

Belajar Turbo Pascal 7.0 SMA Methodist Binjai

2. Menghitung Luas dan Keliling lingkaran, dengan jari-jari diketahui (di-input). 3. Menghitung Luas dan Keliling segitiga sembarang yang diketahui ke tiga sisinya. 4. Mencari nilai Sinus, Cosinus, dan Tangen dengan sudut diinput. 5. Mencari akar dan kuadrat dari suatu nilai (nilai di-input). 6. Mencari nilai bulat dan pecahan dari suatu nilai yang dimasukkan melalui keyboard

(diinput). Nilai pecahan tersebut dibulatkan sampai 3 angka dibelakang koma (,). 7. Tampilkan nama dan NPM anda di dalam window, dan terletak pada tengah- tengah

layar. 8. Tampilkan tulisan 'STMIK METHODIST' di dalam window pada pojok kanan atas

dengan ukuran window sama dengan tulisan tersebut. Soal II : Buatlah program pada soal jenis I (no. 1-6) dengan tampilan menggunakan 2 window. Window yang pertama digunakan untuk nilai yang diinput. Window yang kedua untuk hasil dari program (output). Soal III : 1. Buatlah program untuk menggabungkan 2 buah kata yang diinput. Setiap kata yang

diinput harus berada di dalam window yang dan hasilnya berada pada window yang berbeda pula.

2. Buatlah program untuk menampilkan window secara acak dengan warna yang berbeda.

17

Belajar Turbo Pascal 7.0 SMA Methodist Binjai

III. BENTUK - BENTUK PERULANGAN (Untuk 2 Pertemuan)

Dalam hampir setiap program yang kompleks mutlak memerlukan suatu perulangan dan percabangan. Tujuan perulangan disini adalah untuk mengulang statement atau blok statement berulang kali sesuai sejumlah yang ditentukan pemakai. Dalam materi ini akan memberikan gambaran konsep dasar dari pengertian diatas.

1. Perulangan FOR Perulangan dengan statemen FOR digunakan untuk mengulang statemen atau suatu blok statemen berulang kali. Perulangan dengan statemen FOR dapat berupa perunlangan positif dan perulangan negatif. Perulangan FOR positif Contoh : Perulangan positif untuk satu statement :

USES CRT; VAR i : INTEGER; BEGIN FOR i := 1 TO 5 DO WRITELN('STMIK METHODIST'); END.

Maka bila program diatas dicompile hasilnya :

STMIK METHODIST STMIK METHODIST STMIK METHODIST STMIK METHODIST STMIK METHODIST

Penjelasan : Berati statemen STMIK METHODIST akan diulang sebanyak 5 kali yaitu dengan menghitung nilai i dari i ke 1 sampai nilai i terakhir yaitu i ke 5. Contoh dengan menggunakan blok statement: Cara penulisannya dengan pada awal blok diawali dengan BEGIN dan pada akhir blok diakhiri dengan END;

USES CRT; VAR i : INTEGER; BEGIN

FOR i:= 1 TO 10 DO BEGIN

WRITELN('STMIK METHODIST'); { blok statement } END;

END.

Hasil yang akan didapat akan sama dengan contoh yang pertama, tapi yang harus diingat disini untuk penggunaan blok pada perulangan FOR biasanya mempunyai banyak statement (lebih dari 1 statement)

18

Belajar Turbo Pascal 7.0 SMA Methodist Binjai

Contoh 3 : Peggunaan perulangan FOR dalam blok statement untuk membuat tabel

USES CRT; VAR a,b,c : INTEGER; bagi : REAL; BEGIN WRITELN('----------------------------------------------'); WRITELN(' a a*a a*a*a 1/a '); WRITELN('----------------------------------------------'); FOR a:= 1 TO 10 DO BEGIN b:= a*a; c:=a*a*a; bagi := 1/a; WRITELN(a:4,c:10,d:10,bagi:12:3); END; WRITELN('----------------------------------------------'); END.

maka hasilnya : ---------------------------------------------- a a*a a*a*a 1/a ---------------------------------------------- 1 1 1 1.000 2 4 8 0.500 3 9 27 0.333 4 16 64 0.250 5 25 125 0.200 6 36 216 0.167 7 49 343 0.143 8 64 512 0.125 9 81 729 0.111 10 100 1000 0.100 ----------------------------------------------

Perulangan FOR negatif Perulangan negatif adalah perulangan dengan menghitung (counter) dari besar ke kecil. Statement yang digunakan adalah FOR-DOWNTO-DO Contoh :

USES CRT; VAR i : INTEGER ; BEGIN

FOR i := 10 DOWNTO 1 DO WRITE(i:3);

END.

Hasil :

10 9 8 7 6 5 4 3 2 1 Perulangan FOR tersarang Perulangan FOR tersarang adalah perulangan FOR yang berada pada perulangan yang lainnya. Perulangan yang lebih dalam akan diproses terlebih dahulu sampai habis, kemudian perulangan yang lebih luar baru akan bertambah, mengerjakan perulangan yang lebih dalam lagi mulai dari nilai awalnya dan seterusnya.

19

Belajar Turbo Pascal 7.0 SMA Methodist Binjai

Contoh : VAR

a,b : INTEGER; BEGIN

FOR a := 1 TO 3 DO BEGIN

FOR b := 1 TO 2 DO WRITE(a :4,b:2); WRITELN;

END; END.

Hasil : 1 1 1 2 2 1 2 2 3 1 3 2

2. Perulangan WHILE-DO Penyeleksian kondisi digunakan untuk agar program dapat menyeleksi kondisi, sehingga program dapat menentukan tindakan apa yang harus dikerjakan, tergantung dari kondisi yang diseleksi tersebut. Perulangan WHILE-DO tidak dilakukan jika kondisi tidak terpenuhi. Contoh :

USES CRT; VAR i : INTEGER; BEGIN

i := 0; WHILE i < 5 do BEGIN

WRITE(i:3); INC(i); { sama dengan i:=i+1 }

END; END.

Hasilnya : 0 1 2 3 4

Perulangan WHILE-DO tersarang Perulangan WHILE-DO tersarang (nested WHILE-DO) merupakan perulangan WHILE-DO yang satu di dalam perulangan WHILE-DO yang lainnya. Contoh :

USES CRT; VAR

a, b : INTEGER; BEGIN

CLRSCR; a:=1; b:=1; WHILE a < 4 DO { loop selama a masih lebih kecil dari 4 } BEGIN

a := a+1; WHILE b < 3 DO BEGIN

WRITE(a:3,b:2); b:=b+1;

END; END; READLN;

END.

20

Belajar Turbo Pascal 7.0 SMA Methodist Binjai

3. Perulangan REPEAT-UNTIL. REPEAT-UNTIL digunakan untuk mengulang statement-statemen atau blok statement sampai (UNTIL) kondisi yang diseleksi di UNTIL tidak terpenuhi. Sintak dari statement ini adalah : Contoh

VAR i : INTEGER;

BEGIN i:=0; REPEAT

i:= i+1; WRITELN(i);

UNTIL i=5; END.

REPEAT-UNTIL tersarang REPEAT-UNTIL tersarang adalah suatu perulangan REPEAT-UNTIL yang satu berada didalam perulangan REPEAT-UNTIL yang lainnya. Contoh :

VAR a,b,c : REAL; BEGIN

WRITELN('========================================'); WRITELN(' sisi A sisi B Sisi C '); WRITELN(' ======================================='); a:= 1; REPEAT { perulangan luar }

b := 0; REPEAT { perulangan dalam }

c:=SQRT(a*a+b*b); WRITELN(a:6:2, b:9:2, c:9:2); b:=b+5;

UNTIL b>25; a:=a+1;

UNTIL a>3; WRITELN(' =======================================');

END.

Soal I.

1. Buatlah program untuk menampilkan tulisan ‘SMA Methodist’ sebanyak 20 x 2. Buatlah program untuk menampilkan bilangan ganjil kurang dari 12 ! 3. Buatllah program untuk menghitung jumlah bilangan 1 sampai 1000. 4. Buatlah program untuk menampilkan angka seperti berikut ini

1 5 2 4 3 2 4 1 5

5. Buatlah program untuk menghitung faktorial 10!

21

Belajar Turbo Pascal 7.0 SMA Methodist Binjai

Soal II 1. Buatlah program untuk menampilkan seperti berikut ini

****** ***** **** *** ** *

2. Buatlah program untuk menampilkan seperti berikut ini ************* *********** ********* ******* ***** *** *

3. Buatlah Program untuk menampilkan tabel perkalian dari 1 s/d 10 4. Kembangkan program soal untuk untuk bentuk love dan bentuk belah ketupat (♦). 5. Buatlah program untuk menkonversi bilangan desimal ke bilangan biner, okta dan

hexadesimal.

22

Belajar Turbo Pascal 7.0 SMA Methodist Binjai

IV. BENTUK PERCABANGAN / KONDISI (Untuk 2 Pertemuan)

1. IF-THEN Bentuk struktur IF-THEN adalah sebagai berikut : IF Kondisi THEN Statement Ungkapan adalah kondisi yang diseleksi oleh statement IF. Bila kondisi yang diseleksi terpenuhi, maka statement yang mengikuti THEN akan diproses, sebaliknya bila kondisi tidak terpenuhi, maka yang akan diproses statement berikutnya. Misalnya :

IF Pilihan = 2 THEN BEGIN { jika kondisi terpenuhi, Yaitu jika pilihan = 2 }

......

...... END ELSE { jika kondisi tidak terpenuhi, yaitu jika pilhan ≠ 2}

BEGIN ....... .......

END;

Contoh Program :

USES CRT; VAR Nilai : REAL; BEGIN

WRITE('Jumlah Nilai :'); READLN(nilai); IF nilai >60 THEN

WRITELN('Lulus') ELSE

WRITELN('Tidak lulus'); END.

Hasil : Jika kita Memasukan 40 pada varibel nilai, Maka program diatas akan mencetak Tidak lulus.

IF tersarang (nested IF) Struktur IF tersarang merupakan bentuk dari suatu statement IF berada di dalam lingkungan statemen IF yang lainya. Bentuk statement IF tersarang sebagai berikut :

IF kondisi1 THEN atau IF Kondisi1 THEN IF kondisi2 THEN BEGIN statemen1 IF kondisi2 THEN ELSE statemen1 statemen2; ELSE statemen2 END.

2. CASE-OF Struktur CASE-OF mempunyai suatu ungkapan logika yang disebut dengan selector dan sejumlah statemen yang diawali dengan suatu label permasalahan (case label) yang mempunyai tipe sama dengan selector. Statement yang mempunyai case label yang bernilai sama dengan case label yang bernilai sama dengan nilai selector akan diproses sedang statemen yang lainya tidak. Bentuk struktur dari CASE-OF :

CASE Variabel Kondisi OF CASE- LABEL 1; STATEMENT 1; CASE- LABEL 2; STATEMENT 2; ........ CASE- LABEL N; STATEMENT N; END; { end dari case }

23

Belajar Turbo Pascal 7.0 SMA Methodist Binjai

Daftar case label dapat berupa konstanta, range dari konstanta yang bukan bertipe real. Contoh program :

PROGRAM nilai; VAR nil : CHAR; BEGIN

WRITE('Nilai Numerik yang didapat :'); READLN(nil); CASE nil OF

'A': WRITELN('SANGAT BAIK'); 'B': WRITELN('BAIK'); 'C': WRITELN('CUKUP'); 'D': WRITELN('KURANG'); 'E': WRITELN('SANGAT KURANG ');

END; END.

hasil : Nilai Numerik yang didapat : B BAIK

Contoh listing program untuk dicoba : 1. Program input data dengan array

PROGRAM pemakaian_Array_Untuk_10_data_dengan_menggunakan_For; USES CRT; CONST

garis='------------------------------------------------------'; VAR

nil1,nil2 : ARRAY [1..10] OF 0..100; {Array dgn Type subjangkauan} npm : ARRAY [1..10] OF STRING[8]; nama : ARRAY [1..10] OF STRING[15]; n,i,bar : INTEGER; jum : REAL; tl : CHAR;

BEGIN CLRSCR; WRITE('MAU ISI BERAPA DATA :'); READLN(N); FOR i:= 1 TO n DO BEGIN

CLRSCR; GOTOXY(30,4+1); WRITE('DATA KE-:',i:2); GOTOXY(10,5+i); WRITE('NPM :'); READLN(NPM[i]); GOTOXY(10,6+i); WRITE('NAMA :'); READLN(NAMA[i]); GOTOXY(10,7+i); WRITE('NILAI 1 :'); READLN(NIL1[i]); GOTOXY(10,8+i); WRITE('NILAI 2 :'); READLN(NIL2[i]);

END; { proses data dalam array } CLRSCR; GOTOXY(5,4); WRITE(GARIS); GOTOXY(5,5); WRITE('NO'); GOTOXY(9,5); WRITE('NPM'); GOTOXY(18,5); WRITE('NAMA'); GOTOXY(34,5); WRITE('NIL.1'); GOTOXY(41,5); WRITE('NIL.2'); GOTOXY(47,5); WRITE('RATA'); GOTOXY(54,5); WRITE('ABJAD'); GOTOXY(5,6); WRITE(GARIS); { proses Cetak isi array dan seleksi kondisi } bar:=7; FOR i:= 1 TO n DO BEGIN

jum:=(nil1[i]+nil2[i])/2; IF jum>=90 THEN tl:='A' ELSE IF jum>80 THEN tl:='B' ELSE IF jum>60 then tl:='C'

24

Belajar Turbo Pascal 7.0 SMA Methodist Binjai

ELSE IF jum 50 THEN tl:='D' ELSE tl:='E'; GOTOXY(5,bar); WRITELN(i:2); GOTOXY(9,bar); WRITELN(NPM[i]); GOTOXY(18,bar); WRITELN(NAMA[i]); GOTOXY(34,bar); WRITELN(NIL1[i]:4); GOTOXY(41,bar); WRITELN(NIL2[i]:4); GOTOXY(47,bar); WRITELN(jum:5:1); GOTOXY(54,bar); WRITELN(tl); bar:=bar+1;

END; GOTOXY(5,bar+1);WRITELN(garis); READLN;

END.

2. Program jendela bergerak

PROGRAM Window_Bergerak_dgn_delay; USES CRT; VAR i : INTEGER; BEGIN

FOR i:=1 TO 15 DO BEGIN

SOUND(i*100); DELAY(100); NOSOUND; END; TEXTBACKGROUND(black); CLRSCR; FOR i := 1 TO 9 DO BEGIN

TEXTBACKGROUND(white); WINDOW(42-i*4,10-i,38+i*4,15+i); CLRSCR; DELAY(100);

END; TEXTCOLOR(15); GOTOXY(28,2); WRITELN('c'); GOTOXY(8,3); WRITELN('3'); GOTOXY(28,4); WRITELN('A'); TEXTCOLOR(black); GOTOXY(44,3); WRITELN('3'); GOTOXY(44,2); WRITELN('&'); GOTOXY(29,4); WRITELN('U'); TEXTCOLOR(red*25); GOTOXY(30,3); WRITELN('B E L A J A R'); TEXTCOLOR(black); GOTOXY(5,5); WRITE('c'); FOR i := 6 TO 64 DO BEGIN

GOTOXY(i,5);WRITELN(''); END; FOR i := 6 TO 20 DO BEGIN

GOTOXY(5,i); WRITELN('3 '); END; GOTOXY(5,21); WRITELN(' '); TEXTCOLOR(white); GOTOXY(65,5); WRITE('U'); FOR i := 6 TO 65 DO BEGIN

GOTOXY(i,21); WRITELN(' `); END; FOR i := 6 TO 20 DO BEGIN

GOTOXY(65,i); WRITELN('3'); END; GOTOXY(65,21); WRITELN('c'); TEXTCOLOR(yellow); READLN;

END.

25

Belajar Turbo Pascal 7.0 SMA Methodist Binjai

Soal I: Buatlah program untuk soal dibawah ini dengan tampilan sebagus mungkin (gunakan perintah Window, Textcolor dll). Jumlah suku sesuai dengan input dari keyboard. 1. Buat deret hitung 3,7,11,15,......................=?

Program akan berhenti jika pada pertanyaan "Hitung Lagi [Y/T] ?" diisi huruf T. 2. Buat deret ukur 3,9,27,................................=?

Program akan berhenti jika pada pertanyaan "Hitung Lagi [Y/T] ?" diisi huruf T. 3. Buat tabel deret bergoyang 1,-2,4,-8,...........=? Program akan berhenti jika pada pertanyaan "Hitung Lagi [Y/T] ?" diisi huruf T. 4. Buat deret suku harmonis 1,1/2,1/3,.............=? Program akan berhenti jika pada pertanyaan "Hitung Lagi [Y/T] ?" diisi huruf T. 5. Buat deret fibbonaci 1,1,2,3,5,.....................=? Program akan berhenti jika pada pertanyaan "Hitung Lagi [Y/T] ?" diisi huruf T. 6. Buat deret seperti berikut 1,-2,3,-4,.............=? Program akan berhenti jika pada pertanyaan "Hitung Lagi [Y/T] ?" diisi huruf T. Soal II 1. Buat deret kuadrat 1, 4, 9,............................=? Program akan berhenti jika pada pertanyaan "Hitung Lagi [Y/T] ?" diisi huruf T. 2. Buat deret seperti berikut 100, 90, 70 ,...........=? Program akan berhenti jika pada pertanyaan "Hitung Lagi [Y/T] ?" diisi huruf T. 3. Buat deret seperti berikut 256, 196, 144,............=? Program akan berhenti jika pada pertanyaan "Hitung Lagi [Y/T] ?" diisi huruf T. 4. Buat deret seperti berikut 1, 1, 1, 2, 2, 3, 6, 4, 24, 5..........=?

Program akan berhenti jika pada pertanyaan "Hitung Lagi [Y/T] ?" diisi huruf T. 5. Buatlah program untuk mencari faktorial, sesuai dengan input yang diminta. 6. Buatlah program huruf yang berjatuhan sehingga membentuk suatu kalimat yang

telah diinput dari keyboard.

26

Belajar Turbo Pascal 7.0 SMA Methodist Binjai

V. ARRAY (Untuk 3 Pertemuan)

Array adalah tipe data terstruktur yang terdiri dari sejumlah komponen komponen yang mempunyai tipe sama. Komponen tersebut disebut sebagai komponen type, larik mempunyai jumlah komponen yang jumlahnya tetap. Banyaknya komponen dalam larik ditunjukkan oleh suatu index, dimana tiap komponen di array dapat diakses dengan menunjukkan nilai indexnya atau subskript. Array dapat bertipe data sederhana seperti byte, word, integer, real, bolean, char, string dan tipe data scalar atau subrange. Tipe larik mengartikan isi dari larik atau komponen- komponenya mempunyai nilai dengan tipe data tersebut. Contoh :

var untai : array[1..50] of integer;

Pada contoh Array dengan nama untai telah dideklarasikan dengan tipe integer, dengan jumlah elemen maksimum 50 elemen, nilai dari elemen array tersebut diatas harus bertipe integer. Contoh :

Program contoh_array_input; uses crt; var

bilangan : array[1..50] of integer; begin

clrscr; bilangan[1]:=3; bilangan[2]:=29; bilangan[3]:=30; bilangan[4]:=31; bilangan[5]:=23; writeln('nilai varibel bilangan ke 3 =',bilangan[3]); readln;

end.

Array juga dapat dideklarasikan bersama dengan tipe yang beragam seperti contoh dibawah ini :

Program contoh_deklarasi_array_beragam; uses crt; var NPM : array[1..20] of string[10];

nama : array[1..20] of string[25]; nilai : array[1..20] of real; umur : array[1..20] of byte; banyak,i : integer;

begin clrscr; write('Isi berapa data array');readln(banyak); for i := 1 to banyak do begin

write('NPM =');readln(npm[i]); write('Nama =');readln(nama[i]); write('Nilai=');readln(nilai[i]); write('umur =');readln(umur[i]);

end; {cetak varibel array} writeln('NPM NAMA NILAI UMUR '); for i:= 1 to banyak do

27

Belajar Turbo Pascal 7.0 SMA Methodist Binjai

begin writeln(npm[i]:10,nama[i]:25,nilai[i]:3:2, ' ',umur[i]:3);

end; READLN;

end.

Untuk deklarasi array dapat digunakan beberapa cara seperti beri kut ini : Type Angka =string[20]; Var nama : array [1..50] of angka;

begin end.

Deklarasi tipe indeks subrange integer Indeks pada array dapat tipe skalar atau subrange, tetapi tidak bisa real. Contoh:

var nilai : array[1..10] of integer;

Pada contoh ini array nilai mempunyai 10 buah elemen yaitu dari 1 sampai 10. Array tersebut dapat dideklarasikan dengan type seperti berikut ini :

Type skala = 1..10; Var nilai : array [skala] of integer;

atau : Type skala = 1..10;

Y = array[skala] of integer; Var nilai : Y;

atau : Type Y = array[1..10] of integer; Var nilai : Y;

Atau : const

atas =1; bawah = 5;

type y = array[atas..bawah] of integer; var nilai : y;

1. Deklarasi type indeks skalar Indeks dari larik dapat berupa tipe skalar. Contoh :

program deklarasi_indeks_array_skalar; uses crt; var jum : array[(jan,feb,mar,apr,mei)] of integer;

begin jum[jan]:=25; jum[feb]:=45; jum[mar]:=21; jum[apr]:=23; jum[mei]:=50; writeln('Jumlah nilai bulan maret =',jum[mar]); readln;

end.

dapat juga ditulis : type bln = (jan,feb,mar,apr,mei); Var jum : array[bln] of integer;

atau : type bln =(jan,feb,mar,apr,mei); var jum : array[jan..mei] of integer;

28

Belajar Turbo Pascal 7.0 SMA Methodist Binjai

2. Deklarasi konstanta array Array tidak hanya dapat berupa suatu varibel yang dideklarasikan di bagian deklarasi variabel, tetapi dapat juga berupa konstanta (const). Contoh :

program contoh_deklarasi_array_konstan; uses crt; const tetap : array[1..4] of integer=(7,10,21,20); var i : integer;

begin for i:= 1 to 4 do

writeln('Nilai Konstan array ke ',i:2,' =',tetap[i]); readln;

end.

Konstanta array dapat juga berupa ketetapan dalam bentuk karakter seperti berikut. Contoh :

program contoh_konstan_array_char_; uses crt; const huruf : array[0..5] of char=('A','B','C','D','E','F'); VAR i : integer; begin

for i:= 0 to 5 do writeln('Nilai konstan array ke',i:2,' = ',huruf[i]);

readln; end.

Konstanta array dapat juga berupa string seperti berikut ini. Contoh :

program constanta_array_string; uses crt; type A = array [1..5] of string; const Nama : A = ('basic','pascal','cobol','paradox','dbase'); var I : integer; begin

for i:= 1 to 5 do writeln('Nilai array ke-',i:2,'= ',nama[i]);

readln; end.

Dalam pascal string merupakan array dari elemen- elemen karakter seperti berikut : Contoh :

program string_adalah_array_tipe_char; uses crt; var nama : string;

i : integer; begin

nama:='Turbo Pascal'; for i:= 1 to length(nama) do

writeln('Elemen ',i,' dari ',Nama,'= ',nama[i]); readln;

end.

Contoh program bilangan prima dengan menggunakan bantuan array. program mencari_bilangan_prima_dengan_array;

uses crt; var prima : array[1..100] of integer;

i,j : integer;

29

Belajar Turbo Pascal 7.0 SMA Methodist Binjai

bil : integer; begin

clrscr; for i := 2 to 100 do begin

prima[i]:=i; for j:= 2 to i-1 do begin

bil := (i mod j); { i dibagi j dicek apakah 0} if bil = 0 then prima[i]:=0; {jika habis dibagi,berarti bkn prima}

end; if prima[i]<> 0 then write(prima[i],' ');{cetak array yg prima}

end; readln;

end.

Contoh pengurutan data dengan metode buble sort, yaitu dengan cara penukaran, dapat dilihat pada contoh dibawah ini : Contoh program :

program penggunaan_array_untuk_sortir_buble_sort; uses crt; var nil1 : array[1..100] of integer;

n,i,j,dum : integer; begin

clrscr; write('mau isi berapa data acak (integer) ='); readln(n); for i := 1 to n do begin

Write('Data Ke ',i,':');readln(nil1[i]); end; {* penyapuan proses} for i:= 1 to n-1 do begin

for j:= i to n do begin

if nil1[j]<nil1[i] then begin

dum:=nil1[j]; nil1[j]:=nil1[i]; nil1[i]:=dum;

end; end;

end; writeln; writeln('Hasil Sortir'); for i := 1 to n do

write(nil1[i]:3); readln;

end.

3. Array dua dimensi Di dalam pascal Array dapat berdimensi lebih dari satu yang disebut dengan array dimensi banyak (Multidimensional array), disini akan dibahas array 2 dimensi saja. Array 2 dimensi dapat mewakili suatu bentuk tabel atau matrik, yaitu indeks pertama menunjukkan baris dan indeks ke dua menunjuk kan kolom dari tabel atau matrik.

30

Belajar Turbo Pascal 7.0 SMA Methodist Binjai

Untuk mengetahui cara mendeklarasikan dari penggunaan aray dua dimensi dapat dilihat pada listing program dibawah ini . Contoh :

Program deklarasi_array_dua_dimensi; uses crt; var tabel : array[1..3,1..2] of integer;

i,j : integer; begin

clrscr; tabel[1,1]:=1; tabel[1,2]:=2; tabel[2,1]:=3; tabel[2,2]:=4; tabel[3,1]:=5; tabel[3,2]:=6; for I := 1 to 3 do begin

for J:= 1 to 2 do begin

writeln('Elemen ',i,',',j,'= ',tabel[i,j]); end;

end; readln;

end.

4. Alternatif deklarasi array dua dimensi Ada beberapa cara dalam mendeklarasikan array dua dimensi, beberapa cara tersebut dapat dilihat dibawah ini : Contoh :

Var tabel : array[1..3] of array[1..2] of byte;

atau : type matrik = array[1..3,1..2] of byte; var tabel : matrik;

atau : Type baris = 1..3;

kolom = 1..2; matrik = array[baris,kolom] of byte;

var tabel : matrik;

atau : type baris = 1..3;

kolom=1..2; matrik=array[baris] of array[kolom] of byte;

var tabel : matrik;

Dibawah ini akan diberikan listing program penggunaan array dua dimensi dalam aplikasi penjumlahan matrik : Contoh:

Program Penjumlahan_matrik; uses crt; var matrik1,matrik2,hasil : array[1..3,1..2] of integer;

i,j : integer; begin

clrscr; { input matrik ke satu } writeln(' Elemen matrik satu'); for i := 1 to 3 do begin

for j := 1 to 2 do begin

write('Elemen baris -',i,' kolom -',j,'= '); readln(matrik1[i,j]);

end; end; {input matrik ke dua} writeln('input elemen matrik dua');

31

Belajar Turbo Pascal 7.0 SMA Methodist Binjai

for i:= 1 to 3 do begin

for j:= 1 to 2 do begin

write('Elemen baris -',i,' kolom -',j,'= '); readln(matrik2[i,j]);

end; end; {proses penjumlahan tiap elemen} for i := 1 to 3 do begin

for j:= 1 to 2 do hasil[i,j]:=matrik1[i,j]+matrik2[i,j];

end; {proses cetak hasil} for i:= 1 to 3 do begin

for j:= 1 to 2 do write(hasil[i,j]:6);

writeln; end; readln;

end.

5. Array sebagai parameter Array dapat digunakan sebagai parameter yang dikirimkan baik secara nilai (by value) atau secara acuan (by reference) ke procedure atau ke function. Procedure yang menggunakan parameter berupa array harus dideklara sikan di dalam judul procedure yang menyebutkan parameternya bertipe array. Contoh :

program contoh_pengiriman_parameter_array_di_procedure; uses crt; const garis ='---------------------------------------------------';

type untai = array[1..10] of string[15]; bulat = array[1..10] of integer; huruf = array[1..10] of char;

var i,banyak : integer; procedure proses(nama:untai;nilai:bulat); var ket : string;

abjad : char; begin

writeln(garis); writeln('Nama Nilai Abjad Keterangan'); writeln(garis); for i := 1 to banyak do begin

if nilai[i] > 90 then begin

abjad:='A'; ket :='Istimewa';

end; if (nilai[i]<90) and (nilai[i]>70) then begin

abjad:='B'; ket :='Memuaskan';

end; if (nilai[i]<70) and (nilai[i]>60) then

32

Belajar Turbo Pascal 7.0 SMA Methodist Binjai

begin abjad:='C'; ket :='Cukup';

end; if (nilai[i]<60) and (nilai[i]>45) then begin

abjad:='D'; ket :='Kurang';

end; if nilai[i]< 45 then begin

abjad:='E'; ket :='Sangat kurang';

end; writeln(nama[i]:15,' ',nilai[i]:4,' ',abjad,' ',ket:15);

end; writeln(garis);

end; procedure masuk_data; var nama : untai;

nilai : bulat; begin

write('banyak data =');readln(banyak); for i:= 1 to banyak do begin

clrscr; writeln('Data ke - ',i); write('Nama =');readln(nama[i]); write('Nilai =');readln(nilai[i]);

end; proses(nama,nilai);

end; {modul Utama} begin

masuk_data; readln; end.

Soal I.

1. Buatlah program untuk menerima data siswa dalam variabel array dan tampilkan data siswa tersebut.

2. Buatlah program untuk menghitung nilai rata-rata, nilai maximum, nilai minimum dari sekumpulan data yang terdaftar di dalam array.

3. Buatlah program untuk menghitung bilangan prima dengan membagi bilangan prima dibawahnya. (Proses perhitungan bilangan prima tercepat)

Soal II

1. Buatlah program untuk menghitung Penjumlahan, pengurangan dan perkalian 2 buah matrik.

2. Buat program untuk mengurutkan data yang ada dalam array

33

Belajar Turbo Pascal 7.0 SMA Methodist Binjai

VI. PENGURUTAN (SORTING) (Untuk 3 Pertemuan)

Selain pencarian, pengurutan data merupakan salah satu permasalahan umum yang juga sering dijumpai dalam pemrograman. Sebagai bukti nyata, tinjaulah metode pencarian bagi dua di atas yang menuntut kita untuk melakukan pengurutan terlebih dahulu sebelum kita melakukan pencarian. Dalam pemrograman, terdapat beberapa metode untuk melakukan pengurutan data. Namun terdapat 8 (delapan) metode yang umumnya banyak digunakan, yaitu :

1. Bubble Sort 2. Maximum/Minimum Sort 3. Selection Sort 4. Insertion Sort 5. Heap Sort 6. Quick Sort 7. Merge Sort 8. Shell Sort

Pada pembahasan ini, hanya 3 (tiga) metode yang akan dibahas yaitu metode pengurutan gelembung (bubble sort), pengurutan maksimum/minimum (maximum/minium sort) dan pengurutan seleksi (selestion sort).

1. Pengurutan Gelembung (Bubble sort) Menurut sumber yang ada, metode ini diinspirasi oleh adanya gelembung sabun yang mengapung di atas permukaan air. Hal ini tentunya disebabkan karena berat jenis gelembung sabun lebih kecil dari berat jenis air. Konsep dari fenomena tersebut kemudian diterapkan sebagai metode pengurutan data di dalam array. Dalam metode ini data dengan nilai terkecil akan diapungkan ke posisi teratas, dan sebaliknya data dengan nilai terbesar akan berada pada posisi terbawah. Sebagai contoh, asumsikan bahwa kita memiliki array A yang berisi lima buah elemen data, seperti yang tampak di bawah ini.

25 22 18 20 15

A[1] A[2] A[3] A[4] A[5]

Di sini kita akan mengurutkan array tersebut secara menaik, yaitu dengan mengapungkan nilai terkecil ke posisi teratas (paling kiri). Proses ini tentu akan dilakukan dengan menggunakan pertukaran antar elemen array. Tahapan-tahapan yang harus dilakukan adalah sebagai berikut.

Tahap 1 Mulai dari A[5] sampai A[2], lakukan perbandingan nilai antara A[k] dan A[k-1] dimana variabel k mewakili indeks array yang sedang aktif. Apabila nilai A[k] lebih kecil, maka tukarkan nilai A[k] dengan A[k-1]. Sampai di sini, array tersebut akan menjadi seperti berikut.

15 25 22 18 20 A[1] A[2] A[3] A[4] A[5]

34

Belajar Turbo Pascal 7.0 SMA Methodist Binjai

Tahap 2 Mulai dari A[5] sampai A[3], lakukan proses seperti pada tahap 1 sehingga array akan menjadi seperti berikut.

15 18 25 22 20 A[1] A[2] A[3] A[4] A[5]

Tahap 3 Mulai dari A[5] sampai A[4], lakukan proses seperti pada tahap 1 dan 2 sehingga array akan menjadi seperti berikut.

15 18 20 25 22 A[1] A[2] A[3] A[4] A[5]

Tahap 4 Tahap ini merupakan tahap terakhir dimana kita akan melakukan perbandingan terhadap nilai dari elemen terakhir (A5]) dengan elemen terakhir-1 (A[4]). Apabila nilai A[5] lebih kecil maka tukarkan nilainya dengan A[4] sehingga array A di atas akan terurut secara menaik seperti yang tampak di baeah ini.

15 18 20 22 25 A[1] A[2] A[3] A[4] A[5]

Pada proses yang terjadi di atas tampak jelas bahwa untuk melakukan pengurutan data dengan lima buah elemen, kita harus melakukan empat tahapan. Sekarang, apabila proses di atas kita translasikan ke dalam bahasa pascal, maka hasilnya adalah sebagai berikut.

Uses Crt; Var n, j, k, temp : integer; A : Array[1..100] of byte; begin Clrscr; Write(‘Banyaknya data yang akan diproses :’); readln(n); For i := 1 to n do Begin Write(‘Data ke ’,i,’ = ‘);readln(A[i]); End; for j:= 1 to N-1 do begin

for k:= N downto j+1 do begin

if A[k] < A[k-1] then begin

temp := A[k]; A[k] := A[k-1]; A[k-1] := temp;

End; End;

End; Writeln(‘Data setelah diurutkan’); For i := 1 to n d0

Writeln(‘Data ‘,i,’ : ‘, A[i]); End.

35

Belajar Turbo Pascal 7.0 SMA Methodist Binjai

2. Pengurutan Maksimum/Minimum Dengan metode ini, elemen array dengan nilai maksimum/minimum akan disimpan ke bagian ujung array (elemen pertama maupun terakshir). Selanjutnya nilai tersebut akan diisolasi atau diikat dan tidak diikutkan lagi dalam proses selanjutnya. Di sini, kita hanya akan menggunakan metode maksimum saja dan tidak akan membahas mengenai metode minimum. Hal ini disebabkan karena konsep yang terdapat pada metode minimum sama persis dengan metode maksimum. Untuk mempermudah pembahasan, coba perhatikan kembali array A yang terdapat pada bahasan sebelumnya.

25 22 18 20 15 A[1] A[2] A[3] A[4] A[5]

Pada bagian ini kita akan melakukan pengurutan data di dalam array tersebut dengan menggunakan metode maksimum, di mana kita akan melempar nilai maksimum ke bagian paling kanan array. Adapun tahapan-tahapan yang perlu dilalui untuk melakukan hal tersebut adalah sebagai berikut. Tahap 1 Mulai dari A[1] sampai A[5], cari nilai maksimum dan tukarkan nilainya dengan elemen terakhir (A[5]) sehingga array akan akan berubah menjadi seperti di bawah ini.

15 22 18 20 25 A[1] A[2] A[3] A[4] A[5]

Sampai di sini, elemen terakhir (A[5]) tidak akan diikutkan lagi ke dalam proses atau tahap selanjutnya. Tahap 2 Mulai dari A[1] sampai A[4], cari nilai maksimum dan tukarkan nilainya dengan elemen terakhir saat ini (A[4]) sehingga array akan akan berubah menjadi seperti di bawah ini.

15 20 18 2 25 A[1] A[2] A[3] A[4] A[5]

Sampai di sini, elemen ke-4 (A[4]) juga tidak akan diikutkan lagi ke dalam proses atau tahap selanjutnya. Tahap 3 Mulai dari A[1] sampai A[3], cari nilai maksimum dan tukarkan nilainya dengan elemen terakhir saat ini (A[3]) sehingga array akan tampak seperti di bawah ini.

15 18 20 22 25 A[1] A[2] A[3] A[4] A[5]

Sampai di sini, elemen ke-3 (A[3]) juga tidak akan diikutkan lagi ke dalam proses selanjutnya.

Tahap 4 Tahap terakhir, cari nilai maksimum antara A[1] sampai A[2] dan tukarkan nilainya dengan elemen A[2]. Untuk kasus ini nilai maksimum terdapat pada A[2] sehingga di sini benarnya terjadi proses yang seharusnya tidak perlu dilakukan, yaitu menukarkan nilai A[2] dengan A[2]. Berikut ini bentuk translasi metode di atas ke dalam bahasa Pascal.

Var n, x, j, k, maks, imaks,temp : integer; begin

x:= n; for j:= 1 to n-1 do

36

Belajar Turbo Pascal 7.0 SMA Methodist Binjai

begin maks := A[1]; imaks := 1; for k:= 2 to x do begin

if(A[k] > maks) then begin

maks := A[k]; imaks := k;

end; end; Temp := A[x]; A[x] := A[imaks]; A[imaks] := temp; x := x – 1;

end; end;

3. Pengurutan Seleksi Pengurutan dengan metode seleksi ini bekerja dengan cara memilih salah satu elemen serta menganggapnya sebagai nilai terkecil. Kemudian nilai tersebut aan dibandingkan dengan elemen-elemen pada posisi berikutnya. Apabila nilai yang dipilih pertama kali lebih besar dari nilai elemen pembanding maka tukarkan kedua buah nilai tersebut. Untuk memperjels pembahasan ini, marilah kita perhatikan kembali array A seperti pembahasan sebelumnya. Berikut gambarannya.

25 22 18 20 15 A[1] A[2] A[3] A[4] A[5]

Tahap 1 Mula-mula, A[1] akan dianggap sebagai nilai terkecil, yaitu dengan cara memasukkan nilai 1 ke dalam variabel, misalnya dengan nama min. Mulai dari j = min + 1 sampai n (jumlah elemen array), lakukan perbandingan antara A[j] dengan nilai A[min]. Apabila nilai dari A[min] > A[j], isikan min = j. Setelah pengulangan selesai, tukarkan nilai A[min] dan A[1]. Untuk kasus ini, nilai min adalah 5 karena nilai terkecil tersimpan pada indeks ke-5. hal tersebut akan menyebabkan array A tampak menjadi seperti berikut.

15 22 18 20 15 A[1] A[2] A[3] A[4] A[5]

Tahap 2 Mula-mula, A[2] akan dianggap sebagai nilai terkecil, yaitu dengan cara memasukkan nilai 2 ke dalam variabel, misalnya dengan nama min. Kemudian sama seperti di atas, lakukan pengulangan mulai dari j = min + 1 sampai n dan bandingkan setiap nilainya. Setelah didapatkan nilai min, maka tukarkan A[min] dengan A[2]. Untuk kasus ini, nilai minimum ditemukan pada indeks ke-3 sehingga min = 3. Tukarkan A[min] dengan A[2] sehingga array A akan tampak seperti berikut.

15 18 22 20 25 A[1] A[2] A[3] A[4] A[5]

Tahap 3 Mula-mula, A[3] akan dianggap sebagai nilai terkecil, yaitu dengan cara memasukkan nilai 3 ke dalam variabel min. Kemudian sama seperti di atas, lakukan pengulangan

37

Belajar Turbo Pascal 7.0 SMA Methodist Binjai

mulai dari j = min + 1 sampai n dan bandingkan setiap nilainya. Setelah didapatkan nilai min, maka tukarkan A[min] dengan A[3]. Untuk kasus ini, nilai minimum ditemukan pada indeks ke-4 sehingga min = 4. Tukarkan A[min] dengan A[4] sehingga array A akan tampak seperti berikut.

15 18 20 22 25 A[1] A[2] A[3] A[4] A[5]

Tahap 4 Mula-mula, A[4] akan dianggap sebagai nilai terkecil, yaitu dengan cara memasukkan nilai 4 ke dalam variabel min. Kemudian sama seperti di atas, lakukan pengulangan mulai dari j = min + 1 sampai n dan bandingkan setiap nilainya. Setelah didapatkan nilai min, maka tukarkan A[min] dengan A[4]. Untuk kasus ini, nilai minimum ditemukan pada indeks ke-4 sehingga min = 4. Tukarkan A[min] dengan A[4] sehingga array A akan tampak seperti berikut.

15 18 20 22 25 A[1] A[2] A[3] A[4] A[5]

Soal I 1. Buatlah program untuk menerima data mahasiswa yang terdiri dari no induk,

nama, alamat, kelas, telepon. Urutkan data siswa tersebut berdasarkan nama dengan metode gelembung.

Soal II

2. Buatlah program untuk menerima data mahasiswa yang terdiri dari no induk, nama, alamat, kelas, telepon. Urutkan data siswa tersebut berdasarkan No Induk dengan metode maximum.

Soal III

3. Buatlah program untuk menerima data mahasiswa yang terdiri dari no induk, nama, alamat, kelas, telepon. Urutkan data siswa tersebut berdasarkan kelas dengan metode seleksi.

38

Belajar Turbo Pascal 7.0 SMA Methodist Binjai

VII. RECORD (Untuk 2 Pertemuan)

Tipe data record merupakan tipe data terstruktur. Dalam penggunakan tipe data record dapat dikumpulkan beberapa item data yang masing- masing mempunyai tipe data berbeda- beda. Record dapat berisi beberapa field untuk sebuah subyek tertentu.

1. Deklarasi record Diawali kata cadangan Record, lalu diikuti daftar field dan diakhiri kata cadangan end; Contoh :

type data_pegawai = record kd_peg : string[5]; nama : string[15]; alamat : string[20]; gaji : longint;

end; var pegawai : data_pegawai;

atau langsung di deklarasikan di varibel :

var pegawai : record kd_peg : string[5]; nama : string[15]; alamat : string[20]; gaji : longint;

end;

Cara menggunakan tiap field dari record untuk input, cetak dan proses adalah sebagai berikut : Contoh : Nama_record.Nama_field

program contoh_record_sederhana; uses crt; type data_pegawai = record

kd_peg : string[5]; nama : string[15]; alamat : string[20]; gaji : longint;

end; Var pegawai : data_pegawai; begin

clrscr; write('Kode pegawai =');readln(pegawai.kd_peg); write('Nama pegawai =');readln(pegawai.nama); write('Alamat pegawai =');readln(pegawai.alamat); write('Gaji pegawai =');readln(pegawai.gaji); {cetak} writeln('Kode pegawai :',pegawai.kd_peg); writeln('Nama pegawai :',pegawai.nama); writeln('Alamat pegawai :',pegawai.alamat); writeln('Gaji pegawai :',pegawai.gaji); readln;

end.

2. Statemen with Penggunaan statemen nama_record.nama_field seperti contoh sebelumnya dapat diringkas menjadi :

39

Belajar Turbo Pascal 7.0 SMA Methodist Binjai

Contoh :

program contoh_record_menggunakan_statmen_with; uses crt; type data_pegawai = record

kd_peg : string[5]; nama : string[15]; alamat : string[20]; gaji : longint;

end; var pegawai : data_pegawai; begin

clrscr; with pegawai do begin

write('Kode pegawai =');readln(kd_peg); write('Nama pegawai =');readln(nama); write('Alamat pegawai =');readln(alamat); write('Gaji pegawai =');readln(gaji); {cetak} writeln('Kode pegawai :',kd_peg); writeln('Nama pegawai :',nama); writeln('Alamat pegawai :',alamat); writeln('Gaji pegawai :',gaji);

end; readln;

end.

Penjelasan : Dengan menggunakan staremen with maka blok statemen berikutnya setelah statemen With dapat menggunakan nama field tanpa menyebut kan nama recordnya lagi.

3. Record dalam array Dalam contoh sebelunya penggunan tipe data record hanya dapat menyimpan satu record. Untuk dapat menyimpan sejumlah record maka dapat digunakan array yang bertipe record yang sudah didifinisikan. Untuk itu dapat dilihat listing program berikut. Contoh :

program contoh_record_dalam_array; uses crt; type data_pegawai = record

kd_peg : string[5]; nama : string[15]; alamat : string[20]; gaji : longint;

end; var pegawai : array[1..10] of data_pegawai;

i : integer; begin

clrscr; for I:= 1 to 10 do begin

with pegawai[i] do begin

writeln('Record ke- ',i); write('Kode pegawai =');readln(kd_peg); write('Nama pegawai =');readln(nama);

40

Belajar Turbo Pascal 7.0 SMA Methodist Binjai

write('Alamat pegawai =');readln(alamat); write('Gaji pegawai =');readln(gaji); writeln;

end; end; {cetak} writeln('Kode pegawai Nama Alamat gaji'); for i:= 1 to 10 do begin

with pegawai[i] do begin

write(kd_peg:5); write(nama:15); write(alamat:20); writeln(gaji:10);

end; end; writeln('------------------------------------------'); readln;

end.

4. Field record bertipe array Jika dalam suatu record terdapat beberapa field yang sama tipenya dapat digunakan array. Contoh ada data barang yang mempunyai struktur. - Nama barang -> bertipe String - Jumlah unit barang ke 1 -> bertipe Byte - Jumlah unit barang ke 2 -> bertipe Byte - Jumlah unit barang ke 3 -> bertipe Byte Terlihat bahwa jumlah unit barang 1,2,3 bertipe sama. Dalam hal ini dapat digunakan array ber index 1.. 3 untuk mempersingkat filed jumlah unit barang. Contoh :

program penggunaan_field_record_tipe_array; uses crt; type data_brg = record

namaBrg : string[15]; unitBrg : array[1..3] of byte;

end; var Barang : array[1..10] of data_brg;

i,j,banyak, Jum1,jum2,jum3 : integer; begin

jum1 :=0; jum2 :=0; jum3 :=0; write('Banyak record Max 10 =');readln(banyak); for i:= 1 to banyak do begin

with barang[i] do begin

writeln('Record ke -',i); write('Nama barang =');readln(namabrg); for j:= 1 to 3 do begin

write('Unit barang ke- ',j,'= '); readln(unitbrg[j]);

end; end;

end; clrscr; writeln('---------------------------------');

41

Belajar Turbo Pascal 7.0 SMA Methodist Binjai

writeln('Nama barang unit 1 unit2 unit3'); writeln('---------------------------------'); { cetak data } for i:= 1 to banyak do begin

with barang[i] do begin jum1:=jum1+unitbrg[1]; jum2:=jum2+unitbrg[2]; jum3:=jum3+unitbrg[3]; writeln(namabrg:15,unitbrg[1]:5,unitbrg[2]:5,unitbrg[3]:5); end;

end; writeln('---------------------------------'); writeln('Jumlah unit 1 =',jum1:6); writeln('Jumlah unit 2 =',jum2:6); writeln('Jumlah unit 3 =',jum3:6); readln;

end.

5. Tipe data record dengan field tipe record Dalam Turbo Pascal tipe data record dapat didefinisikan juga sebagai field dari suatu record. Artinya suatu record dapat juga mempunyai field yang merupakan record. Contoh: sebuah data pegawai mempunyai struktur sebagai berikut : - Nama pegawai -> string - Mulai masuk -> - Tgl - Bln - Thn - Alamat pegawai -> - Jalan - Kota - Gaji -> - Gaji pokok - Lembur - Tunjangan

Maka dapat disusun program sebagai berikut : Contoh : program penggunaan_field_tipe_record;

uses crt; type masuk = record

tgl : 1..31; bln : 1..12; thn : integer;

end; alamat = record

jalan : string[20]; kota : string[10];

end; gajipeg = record

pokok,tunjangan,lembur : real; end; datapegawai = record

nama : string[20]; tglmasuk : masuk; almt : alamat; gaji : gajipeg;

end;

42

Belajar Turbo Pascal 7.0 SMA Methodist Binjai

var pegawai : array [1..10] of datapegawai; i,p,banyak : integer;

begin clrscr; write('Banyak data record =');readln(banyak); for i := 1 to banyak do begin

writeln('record ke -',i); with pegawai[i] do begin

write('nama pegawai :');readln(nama); write('Tanggal masuk:');readln(tglmasuk.tgl); write('Bulan Masuk :');readln(tglmasuk.bln); write('Tahun masuk :');readln(tglmasuk.thn); write('Alamat :');readln(almt.jalan); write('Kota :');readln(almt.kota); write('Gaji pokok :');readln(gaji.pokok); write('Tunjangan :');readln(gaji.tunjangan); write('Lembur :');readln(gaji.lembur);

end; end; { cetak data } for i := 1 to banyak do begin

writeln('record ke -',i); with pegawai[i] do begin

writeln('nama :',nama); writeln('Tanggal masuk:',tglmasuk.tgl); writeln('Bulan Masuk :',tglmasuk.bln); writeln('Tahun masuk :',tglmasuk.thn); writeln('Alamat :',almt.jalan); writeln('Kota :',almt.kota); writeln('Gaji pokok :',gaji.pokok); writeln('Tunjangan :',gaji.tunjangan); writeln('Lembur :',gaji.lembur);

end; end; readln;

end.

6. Record bervariasi Record yang telah dibahas sebelumnya merupakan struktur record yang pasti, artinya field-field di dalam record sudah tertentu dan pasti. Selain itu di program Pascal dapat juga dibuat suatu record yang mempunyai field yang tidak pasti atau dapat berubah, yang disebut sebagai record yang bervariasi. Dalam record yang bervariasi dapat mengandung suatu field yang tergantung dari suatu kondisi. Dalam penerapanya dalam program hanya dapat diterima satu buah field yang bervariasi saja. Field bervariasi ini harus terletak dibawah field yang tetap. Contoh : Ada sebuah struktur data pegawai yang terdiri dari :

- Nama pegawai - Alamat pegawai - Umur - Gaji -> untuk gaji dibedakan antara pegawai tetap dgn honorer Untuk tetap - Tunjangan - Lembur - Gaji pokok

43

Belajar Turbo Pascal 7.0 SMA Methodist Binjai

Untuk honorer - Gaji pokok Deklarasi dan program :

type Status_pegawai = (Honorer,Tetap); data_pegawai = record

nama : string[15]; alamat : string[20]; umur : byte; case status : status_pegawai of honorer : (gaji_h : real); tetap : (gaji_t : real; tunjangan : real;

lembur : real); end;

Contoh : Type Status_pegawai = (Honorer,Tetap);

data_pegawai = record nama : string[15]; alamat : string[20]; umur : byte; case status : status_pegawai of honorer : (gaji_h: real); tetap : (gaji_t : real;

tunjangan : real; lembur : real);

end; Var pegawai : array[1..10] of data_pegawai;

banyak,i : integer; kode : char;

begin { input data} write('Banyak Data max 10 :');readln(banyak); for i := 1 to banyak do begin

with pegawai[i] do begin

write('Nama pegawai =');readln(nama); write('Alamat =');readln(alamat); write('Umur =');readln(umur); write('pegawai tetap(T) atau Honorer(H) '); readln(kode); kode := upcase(kode); case kode of

'H' : begin Status:=Honorer; write('Gaji didapat= '); readln(gaji_h);

end; 'T' : begin

status:= Tetap; write('gaji tetap = '); readln(gaji_t); write('Tunjangan = '); readln(tunjangan); write('Lembur = '); readln(lembur);

end; end;

end; end; { cetak data} writeln('----------------------------------------------------'); writeln(' Nama Alamat Umur Status Gaji Tunjangan Lembur'); writeln('----------------------------------------------------'); for i:= 1 to banyak do begin

with pegawai[i] do begin

write(nama:15); write(alamat:20);

44

Belajar Turbo Pascal 7.0 SMA Methodist Binjai

write(umur:3,' '); case status of

honorer : writeln('Honorer',Gaji_h:8:2); Tetap : writeln('Tetap ',Gaji_t:8:2,tunjangan:8:2,lembur:8:2);

end; end;

end; writeln('---------------------------------------------'); readln;

end.

program contoh_record_bervariasi; uses crt; type status_karyawan = (lajang,menikah,cerai);

data_karyawan = record nama : string[15]; alamat : string[20]; gaji : integer; case status : status_karyawan of

lajang :(); menikah :(anakm : 0..20); cerai :(anakc : 0..20; lagi :char);

end; var karyawan : array [1..10] of data_karyawan;

i,banyak : integer; sts : char;

begin clrscr; write('Jumlah data record :');readln(banyak); for i := 1 to banyak do begin

with karyawan[i] do begin

write('Nama =');readln(nama); write('Alamat =');readln(alamat); write('Gaji =');readln(gaji); write('status M=menikah L=lajang C=cerai');readln(sts); if upcase(sts)='L' then status:=lajang; if upcase(sts)='M' then begin

status:=Menikah; write('Jumlah anak= '); readln(anakm);

end; if upcase(sts)='C' then begin

status:=Cerai; write('Jumlah anak = ');readln(anakc); write('Kawin lagi (Y/T) = ');readln(lagi);

end; end;

end; { tampil} for i := 1 to banyak do begin

with karyawan[i] do begin write(nama); write(alamat); write(gaji); case status of

lajang : writeln('lajang'); menikah : writeln('menikah',' ',anakm:4); cerai : writeln('cerai ', ' ',anakc:4,' ',lagi);

end; end;

end;

45

Belajar Turbo Pascal 7.0 SMA Methodist Binjai

readln; end.

program penggunaan_field_tipe_record; uses crt; type masuk = record

tgl : 1..31; bln : 1..12; thn : integer;

end; alamat = record

jalan : string[20]; kota : string[10];

end; gajipeg = record

pokok,tunjangan,lembur : real; end; datapegawai = record

nama : string[20]; tglmasuk : masuk; almt : alamat; gaji : gajipeg;

end; var pegawai : array [1..10] of datapegawai;

i,p,banyak : integer; begin clrscr; write('Banyak data record =');readln(banyak); for i := 1 to banyak do begin

writeln('record ke -',i); with pegawai[i] do begin

write('nama pegawai :');readln(nama); write('Tanggal masuk:');readln(tglmasuk.tgl); write('Bulan Masuk :');readln(tglmasuk.bln); write('Tahun masuk :');readln(tglmasuk.thn); write('Alamat :');readln(almt.jalan); write('Kota :');readln(almt.kota); write('Gaji pokok :');readln(gaji.pokok); write('Tunjangan :');readln(gaji.tunjangan); write('Lembur :');readln(gaji.lembur);

end; end; for i := 1 to banyak do begin

writeln('record ke -',i); with pegawai[i] do begin

writeln('nama :',nama); writeln('Tanggal masuk:',tglmasuk.tgl); writeln('Bulan Masuk :',tglmasuk.bln); writeln('Tahun masuk :',tglmasuk.thn); writeln('Alamat :',almt.jalan); writeln('Kota :',almt.kota); writeln('Gaji pokok :',gaji.pokok); writeln('Tunjangan :',gaji.tunjangan); writeln('Lembur :',gaji.lembur);

end; end;

46

Belajar Turbo Pascal 7.0 SMA Methodist Binjai

readln; end.

Soal I.

1. Buatlah progam untuk memasukkan sejumlah data nilai siswa dalam bentuk record. Data yang dimasukkan adalah NoInduk, Nama, Nilai Blok 1, Nilai Blok 2, Nilai Semester. Setelah semua data dimasukkan, semua data ditampilkan dalam bentuk tabel yang diurutkan secara descending berdasarkan nilai rata-rata tiap siswa, kemudian konversi nilai rata-rata ke dalam nilai angka dengan aturan. Rata-rata >= 80 nilai huruf A keterangan Lulus Rata-rata >= 70 nilai huruf B keterangan Lulus Rata-rata >= 60 nilai huruf C keterangan Lulus Rata-rata >= 50 nilai huruf D keterangan Tidak Lulus Rata-rata < 50 nilai huruf E keterangan Tidak Lulus

Soal II.

1. Tambahkan pada program soal diatas dengan menggunakan window untuk bagian pengisian data dan bagian tampilan data siswa pada window yang berbeda gunakan perintah textcolor dan textbackground untuk mendekorasi tampilan program diatas.

47

Belajar Turbo Pascal 7.0 SMA Methodist Binjai

VIII. PROCEDURE (Untuk 2 Pertemuan)

Procedure adalah suatu program yang terpisah dalam block tersendiri yang berfungsi sebagai subprogram (program bagian). Penggunaan prosedur diawali dengan kata cadangan procedure di dalam bagian deklarasi procedure. Pemanggilan procedure dengan menggunakan judul procedure. Pada program terstruktur banyak menggunakan procedure karena : - Sebagai penerapan program yang modular yaitu memecah program yang rumit

menjadi program-program bagian yang lebih sederhana dalam bentuk procedure. - Untuk beberapa perintah yang sering digunakan berulang, cukup dituliskan sekali

dalam procedure dan dapat dipanggil sewaktu-waktu. Contoh Procedure tanpa parameter,

Procedure garis; begin

writeln('-------------'); end; procedure Judul; begin

writeln('pascal'); end; {modul utama} begin

garis; judul; garis;

end.

hasil : ------------ pascal ------------

1. Parameter dalam procedure Nilai di dalam suatu procedure sifatnya adalah local, berarti hanya dapat digunakan oleh procedure tersebut saja dan tidak dapat digunakan oleh procedure yang lain. Contoh :

procedure hitung; var a,b,c : integer; begin

write('Nilai a =');readln(a); write('Nilai b =');readln(b); c:=a+b; writeln('hasilpenjumlahan=',c:5); readln;

end; begin

hitung; end.

Pada kasus diatas dapat diselesaikan dengan menggunakan deklarasi secara global, sehingga semua procedure dibawah deklarasi global dapat menggunakannya. Contoh penggunaan deklarasi global :

uses crt; procedure kali; var a,b,c : integer; begin

write('A =');readln(a);

48

Belajar Turbo Pascal 7.0 SMA Methodist Binjai

write('b =');readln(b); c:=a*b; writeln('hasil c =',c:5);

end; var d,e,f : integer; procedure jumlah; begin

write('nilai d =');readln(d); write('nilai e =');readln(e); f:=d+e; writeln('nilai f =',f:5);

end; procedure kurang; begin

write('Nilai d =');readln(d); write('nilai e =');readln(e); f:= d-e; writeln('Nilai f=',f:5);

end; { modul utama} begin

clrscr; kali; jumlah; kurang; readln;

end.

2. Pengiriman parameter secara Nilai Pada pengiriman parameter secara nilai (by value), parameter formal akan berisi nilai yang dikirimkan dari parameter nyata dan nilai parameter tersebut akan local diprocedure yang dikirim. sifat dari pengiriman nilai ini adalah satu arah, sehingga perubahan nilai dari parameter formal tidak akan mempengaruhi nilai parameter nyata. Contoh : Program pengiriman_parameter_secara_nilai; procedure kali(a,b : integer); {parameter formal} var hasil : integer; {local variabel} begin

hasil :=a*b; writeln('hasil =',hasil:6);

end; {modul Utama} Var bil1,bil2 : integer; begin

write('bilangan 1 =');readln(bil1); write('bilangan 2 ='); readln(bil2); kali(bil1,bil2); {parameter nyata} readln;

end.

Di bawah ini merupakan contoh bahwa perubahan pada parameter formal tidak akan mempengaruhi nilai parameter nyata, karena sifatnya adalah satu arah.

Procedure kali(a,b : integer); kali(bil1,bil2);

Contoh:

49

Belajar Turbo Pascal 7.0 SMA Methodist Binjai

Program parameter_nilai_tdk_mempengaruhi_parameter_nyata; uses crt; procedure test_hitung(a,b,hasil : integer); begin

hasil := a*b; writeln('A =',a:4,' B=',b:4,' Hasil=',hasil:6);

end; {modul utama} Var bil1,bil2,bil3 : integer; begin

bil1:=3;bil2:=4;bil3:=0; test_hitung(bil1,bil2,bil3); writeln('bil1=',bil1:4,' bil2=',bil2:4,' bil3=',bil3); readln;

end.

3. Pengiriman parameter secara acuan (by reference) Sifat dari pengiriman parameter secara acuan adalah dua arah artinya perubahan dari parameter formal akan mempengaruhi nilai dari parameter nyata. Cara deklarasi di procedure dengan kata cadangan Var seperti berikut :

procedure kali(Var a,b,c : integer); -> parameter formal kali(x,y,z); -> parameter nyata

Contoh :

program pengiriman_parameter_secara acuan; uses crt; procedure kali(var a,b,c : integer); {parameter formal acuan} begin

c:=a*b; end; {modul utama} Var x,y,z : integer; begin

write('nilai x=');readln(x); write('nilai y=');readln(y); kali(x,y,z); {mengirimkan parameter secara acuan} writeln('Nilai z =',z:5);

end.

Contoh penggunaan parameter secara acuan untuk perhitungan faktorial: program Contoh_penggunaan_parameter_acuan; uses crt; procedure faktor(var banyak,hasil : integer); var i : integer; begin

hasil := 1; for i := 1 to banyak do begin

hasil := hasil*I; end;

end; {modul utama} Var n,jumlah : integer; begin

write('Berapa faktorial =');readln(n); faktor(n,jumlah); writeln(n:5,' faktorial adalah =',jumlah:6); readln;

end.

50

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.

51

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.

52

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.

53

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.

54

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.

55

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.

56

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.

57

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 : A B C D E F G H I J K L M N O P Q R S T U V W X Y Z 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

58

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

59

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

60

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.

61

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’);

62

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

63

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

64

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.

65

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’;

Writeln(Nama^); End.

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.

66

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;

67

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;

68

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

69

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;

70

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;

71

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'];

72

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

73

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.

i

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,

ii

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

iii

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

iv

Belajar Turbo Pascal 7.0 SMA Methodist Binjai

Yayasan Pendidikan Methodist Binjai Lembaran Kehadiran Pratikum

No Induk

: ____________________________________________

Nama Siswa : ____________________________________________

Kelas : ____________________________________________

Semester : ____________________________________________

No. Tanggal Pembahasan Paraf Guru

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

Pas photo 3 x 4

Binjai, _______________ Diperiksa oleh, Guru

v

Belajar Turbo Pascal 7.0 SMA Methodist Binjai

Yayasan Pendidikan Methodist Binjai Lembaran Kehadiran Pratikum

No Induk

: ____________________________________________

Nama Siswa : ____________________________________________

Kelas : ____________________________________________

Semester : ____________________________________________

No. Tanggal Pembahasan Paraf Guru

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

Pas photo 3 x 4

Binjai, _______________ Diperiksa oleh, Guru