DhrMuiz. 2007. Pemrograman Pascal Created 07 Mei 2007 Updated 14 Desember 2008 E-mail:
[email protected],
[email protected],
[email protected]
1
DhrMuiz. 2007. Pemrograman Pascal Created 07 Mei 2007 Updated 14 Desember 2008 E-mail:
[email protected],
[email protected],
[email protected]
PEMROGRAMAN PASCAL Daftar Isi BAHASA KOMPUTER..................................................................................................................................... 2 BAHASA PEMROGRAMAN PASCAL. .................................................................................................. 3 DEKLARASI VARIABEL DAN PENGENAL............................................................................................... 7 BARIS KOMENTAR ................................................................................................................................. 8 DEKLARASI VARIABEL .......................................................................................................................... 8 DEKLARASI KONSTANTA ..................................................................................................................... 9 NAMA PENGENAL (VARIABEL) ............................................................................................................ 9 STATEMEN MAJEMUK........................................................................................................................... 9 MEMILIH PIRANTI/LIBRARY................................................................................................................ 10 ARITMATIKA .............................................................................................................................................. 11 A. OPERASI ARITMATIKA ................................................................................................................... 11 B. PENULISAN UNGKAPAN ARITMATIKA ........................................................................................ 12 C. URUTAN OPERASI .......................................................................................................................... 12 D. FUNGSI-FUNGSI STANDAR OPERASI ARITMATIKA ................................................................ 12 TIPE DATA BOOLEAN .............................................................................................................................. 13 STATEMEN MASUKAN DAN KELUARAN ............................................................................................. 14 STATEMEN KELUARAN WRITE DAN WRITELN.............................................................................. 14 UNGKAPAN LITERAL ........................................................................................................................... 14 STATEMEN MASUKAN READ DAN READLN ................................................................................... 15 PEMILIHAN PROSES ............................................................................................................................... 18 IF... THEN ............................................................................................................................................... 18 STATEMEN CASE ................................................................................................................................. 21 GOTO (Percabangan Non Kondisi) ...................................................................................................... 22 PROSES BERULANG (LOOPING) .......................................................................................................... 23 STATEMEN WHILE ... DO .................................................................................................................... 23 STATEMEN REPEAT ... UNTIL............................................................................................................ 24 STATEMEN FOR ... DO ........................................................................................................................ 25 LARIK (ARRAY) DIMENSI SATU ......................................................................................................... 27 LARIK DIMENSI BANYAK..................................................................................................................... 30 OPERASI STRING..................................................................................................................................... 32 PENYELEKSIAN STRING..................................................................................................................... 32 PROSEDUR STANDAR OPERASI STRING ...................................................................................... 32 FUNGSI STANDAR OPERASI STRING .............................................................................................. 34 PROSEDUR ............................................................................................................................................... 36 FUNGSI (FUNCTION) ............................................................................................................................... 38 RECORD..................................................................................................................................................... 38 DEKLARASI RECORD .......................................................................................................................... 39 MENGGUNAKAN TIPE DATA RECORD ............................................................................................ 39 FILE ............................................................................................................................................................. 43 MENDEKLARASIKAN FILE .................................................................................................................. 43 OPERASI PADA FILE............................................................................................................................ 44 FILE (BERKAS) TEXT ........................................................................................................................... 48 FILE TIDAK BERTIPE ........................................................................................................................... 51 POINTER DAN STRUKTUR DATA DINAMIK......................................................................................... 52 VARIABEL POINTER ............................................................................................................................ 52 VARIABEL DINAMIK ............................................................................................................................. 53 STRUKTUR DATA DINAMIK (LINK LIST)........................................................................................... 53
2
BAHASA KOMPUTER Agar manusia dapat berkomunikasi dengan komputer maka dibutuhkan suatu bahasa komunikasi yaitu bahasa komputer. Dengan bahasa ini komputer dapat memahami dan mengerti perintahperintah yang kita berikan kepadanya. Sebenarnya, komputer tidak mengerti perintah-perintah yang kita tulis menggunakan bahasa tertentu. Namun di dalam komputer tersebut terdapat penterjemah bahasa yang kita gunakan menjadi bahasa yang dimengerti oleh komputer yaitu compiler atau interpreter, keduanya merupakan suatu program. Perbedaannya antara keduanya adalah sebagai berikut: • Compiler menerjemahkan kode sumber menjadi objek bahasa mesin dalam bentuk file objek, kemudian di-link dengan pustaka-pustaka lain yang berhubungan dengan kode sumber agar dapat dijalankan pada setiap sistem operasi • Interpreter menerjemahkan kode sumber per baris demi baris dan langsung di eksekusi tanpa menjadikannya dalam bentuk file objek Jenis bahasa pemrograman komputer dibagi menjadi dua bagian yaitu bahasa tingkat rendah (yang agak sulit dimengerti bagi orang awam) dan bahasa tingkat tinggi (yang dapat di mengerti oleh manusia). Bahasa Pemrograman Tingkat Rendah Bahasa ini dibagi menjadi dua macam, yaitu Bahasa Mesin dan Bahasa Rakitan. Dalam Bahasa Mesin semua perintah disandikan dengan deretan-deretan bit (binary digit) yang hanya mempunyai nilai digit 1 atau 0. Sedangkan dalam Bahasa Rakitan, perintah-perintah tersebut bisa digantikan dengan kode sandi yang bisa dipahami oleh manusia yaitu mnemonic code, Setiap mikroprosesor, mempunyai mnemonic code yang berlainan. Bahasa Pemrograman Tingkat Tinggi Bahasa pemrograman ini merupakan bahasa komputer yang mudah dipahami karena menggunakan bahasa percakapaan manusia sehari-hari. Diantaranya adalah. Ada
ALGOL APL BASIC
C
COBOL FORTRAN LISP Pascal
PL/I PROLOG RPG SNOBOL
Diambil dari nama Augusta Ada Bryton, bangsawan dari Loveland, puteri Lord Byron; bahasa ini dikembangkan sekitar tahun 1974 dan 1980 untuk Departemen Pertahanan Amerika Serikat. ALGOrithmic Language (Bahasa Algoritma) A Programming Language Beginner’s All Purpose Symbolic Intsruction Code. Bahasa ini dikembangkan oleh John Kemeny dan Thomas Kutrz, digunakan untuk memberi kuliah mahasiswa di Dartmouth College tentang bagaimana menggunakan komputer. Dikembangkan oleh Bell Laboratories pada tahun 1970, bahasa ini sangat powerfull dan sering digunakan untuk membuat program Sistem Operasi contohnya MS-DOS, LINUX, UNIX serta program aplikasi DBASE, AUTOCAD dan gamegame yang banyak kita jumpai. Ada yang mengatakan bahasa ini merupakan bahasa tingkat menengah karena sintaks bahasanya mirip bahasa tingkat tinggi dan kemampuanya bahasa tingkat rendah. Common Business-Oriented Language. Bahasa ini dikembangkan di Departemen Pertahanan Amerika Serikat pada tahun 1960 Formula Translation, dikembangkan sekitar tahun 1956. List Processor Diambil dari nama seorang sarjana Perancis Blaise Pascal. Pertama kali dikembangkan oleh Niklauss Wirth, seorang ahli ilmu komputer dari Swiss, pada tahun 1970. Programing Langugae I, dikembangkan oleh IBM pada tahun 1964 Programming Logig, bahasa yang digunakan untuk menyusun Expert System Report Program Generator String Oriented Symbolic Language
DhrMuiz. 2007. Pemrograman Pascal Created 07 Mei 2007 Updated 14 Desember 2008 E-mail:
[email protected],
[email protected],
[email protected]
3
DhrMuiz. 2007. Pemrograman Pascal Created 07 Mei 2007 Updated 14 Desember 2008 E-mail:
[email protected],
[email protected],
[email protected]
4
BAHASA PEMROGRAMAN PASCAL.
TIPE DATA
Program adalah kumpulan instruksi atau perintah yang disusun sehingga mempunyai urutan logika yang benar untuk menyelesaikan suatu persoalan. Program penerjemah atau compiler untuk Bahasa Pascal banyak contohnya, diantaranya Turbo Pascal (Borland), Microsoft Pascal dan lain sebagainya. Yang akan kita gunakan untuk mempelajari Bahasa Pascal adalah Turbo Pascal.
Dalam Pascal, semua variabel yang akan digunakan harus ditentukan tipe datanya. Tipe data tersebut ada yang sudah ditentukan oleh Pascal dan ada yang ditentukan oleh kita sendiri. Untuk menentukan tipe yang kita buat sendiri digunakan sintaks (type):
Ada beberapa aturan dalam penulisan program Pascal, berbeda sekali dengan aturan pada BASIC. Pascal merupakan bahasa pemrograman yang terstruktur, maksudnya jika suatu proses telah sampai pada suatu titik tertentu, maka proses selanjutnya tidak boleh melompati lagi ke baris sebelumnya, kecuali untuk proses berulang. Sehingga hindari pemakaian GOTO sebanyak mungkin. Struktur bahasa Pascal dapat anda lihat dibawah ini: PROGRAM nama_program; { nama program, boleh ada atau boleh tidak ada } USES ….. ( deklarasi library/pustaka fungsi } LABEL …. { deklarasi label } CONST …. { deklarasi konstanta } TYPE…. { deklarasi tipe data } VAR … { deklarasi variabel } PROCEDURE satu; PROCEDURE dua; FUNCTION tambah; BEGIN { awal program utama } . . < Statemen-statemen dari program nama_program> . . END. { akhir program utama }
BU:
TYPE variabelnya = tipe;
Dengan Variabelnya Tipe
: nama variabel yang menyatakan tipe data. : tipe data yang berlaku dalam Pascal.
Tipe data dalam Turbo Pascal bisa digambarkan sebagai berikut:
Integer
Boolean Tipe String
Char Tipe Ordinal Subrange
Tipe Sederhana Tipe Real
Tipe Data
Enumerate d
Larik (Array)
Contoh: PROGRAM contoh; USES crt; VAR nama: STRING;
Tipe Terstruktur Rekaman (Record) Tipe Pointer
Himpunan (Set)
BEGIN Berkas (File)
clrscr; write('Ketik nama Anda : '); readln(nama); writeln('Selamat '+nama+', anda kini akan belajar PASCAL...!'); END.
Tipe Sederhana (tipe data skalar)
Ketik nama Anda : Pengki Selamat Pengki, anda kini akan belajar PASCAL…!
Tipe sederhana terbagi menjadi dua, yaitu tipe ordinal dan tipe real. 1. Tipe Ordinal Semua tipe sederhana dalam Pascal disebut tipe ordinal kecuali tipe Real. Tujuh tipe ordinal standar yaitu integer, shortint, longint, byte, word, boolean dan char. Dan ada dua tipe ordinal yang bisa didefinisikan sendiri oleh kita, yaitu tipe sub range dan enumerated.
DhrMuiz. 2007. Pemrograman Pascal Created 07 Mei 2007 Updated 14 Desember 2008 E-mail:
[email protected],
[email protected],
[email protected]
5
a. Tipe Integer Adalah tipe data yang nilainya tidak mempunyai titik desimal. Ada 5 tipe data yang termasuk kelompok ini, yaitu shortint, integer, longint, byte dan word. Batas nilai tipe integer Tipe SHORTINT INTEGER LONGINT BYTE WORD
Batas Nilai -128 .. 127 -32768 .. 32767 -2147483648 .. 2147483647 0 .. 255 0 .. 65535
Format Signed 8-bit ( 1 byte) Signed 16-bit (2 byte) Signed 32 bit (4 byte) Unsigned 8-bit (1 byte) Unsigned 16-bit (2 byte)
DhrMuiz. 2007. Pemrograman Pascal Created 07 Mei 2007 Updated 14 Desember 2008 E-mail:
[email protected],
[email protected],
[email protected]
Batasan nilai tipe real. Tipe REAL SINGLE DOUBLE EXTENDED COMP
Arti Penjumlahan Pengurangan Perkalian Pembagian Modulus (sisa pembagian)
b. Tipe Boolean Tipe ini hanya mempunyai dua nilai yaitu TRUE atau FALSE, tipe ini biasanya digunakan untuk operasi logika dengan ungkapan AND, OR atau NOT. c. Tipe Char Char digunakan untuk mendefinisikan tipe data yang nilainya merupakan sebuah karakter yang telah tersaji dalam tabel ASCII. Dalam program nilai konstanta karakter diapit oleh tanda petik (‘ ‘) , misal: ‘A’, ‘2’. d. Tipe Enumerated Disebut tipe enumerated (terbilang) karena semua nilai disebut satu persatu, contoh: TYPE hari = {MINGGU, SENIN, SELASA, RABU, KAMIS, JUMAT, SABTU, MINGGU}; e. Tipe Sub Range Merupakan pemberian batas nilai yang mungkin untuk suatu variabel dari tipe data yang telah didefinisikan. Sebagai contoh, jangkauan yang mungkin dari nilai ujian adalah dari 0 sampai 100,
Batas Nilai 2.9 x 10-39 .. 1.7 x 1038 -45 38 1.5 x 10 .. 3.4 x 10 5.0 x 10-324 .. 1.7 x 10308 -4932 4932 3.4 x 10 .. 1.1 x 10 63 63 -2 + 1 .. 2 - 1
Digit signifikan 11 – 12 7–8 15 – 16 19 – 20 19 - 20
Ukuran 6 byte 4 byte 8 byte 10 byte 8 byte
Operator pada tipe Real Operator + * /
Operator-operator pada data tipe integer: Operator + * DIV MOD
6
Arti Penjumlahan Pengurangan Perkalian Pembagian
Contoh: 29.5 /5.0 = 5.8 29 div 5 = 5 (* terjadi pemotongan nilai desimal *) 3. Tipe String Data yang bertipe string adalah data yang berisisi sederetan karakter yang banyaknya karakter bisa berubah-ubah sesuai kebutuhan, yaitu dari 1 sampai 255 karakter. Contoh: Nama : STRING[60]; {variabel nama menampung karakter max. 60 karakter } Nama : STRING; {variabel nama menampung karakter max. 255 karakter}
4. Tipe Terstruktur Terdapat 4 tipe data terstruktur, yaitu larik (array), rekaman (record), himpunan dan file (berkas). a. Tipe Array (Larik) Array atau larik adalah tipe terstruktur yang mempunyai komonen dalam jumlah yang tetap dan setiap komponen mempunyai tipe data yang sama. Posisi masing-masing komponen dalam array dinyatakan sebagi nomor index. Contoh: •
satu dimensi
TYPE nilai = 0..100;
2. Tipe Real Konstanta tipe real adalah bilangan yang mempunyai titik desimal. Bilangan real bisa dinyatakan dalam bentuk eksponensial. Dalam pemakaiannya pangkat dari bilangan dasar 10 (yang digunakan untuk menunjukkan eksponensial) dinyatakan dengan notasi E. contoh: 0.00017543 (1.7543x10 -4) adalah 1.7543E-4
TYPE tipe_saya : ARRAY [1..200] OF INTEGER; { menampung bil. Integer max. 200 }. VAR Var_baru : tipe_saya; Atau VAR Var_baru •
: ARRAY [1..200] OF INTEGER;
dua dimensi atau lebih
ada 5 macam tipe real, yaitu real, single, double, extended dan comp. VAR Var_baru
: ARRAY[1..200,1..200] OF REAL;
DhrMuiz. 2007. Pemrograman Pascal Created 07 Mei 2007 Updated 14 Desember 2008 E-mail:
[email protected],
[email protected],
[email protected]
7
DhrMuiz. 2007. Pemrograman Pascal Created 07 Mei 2007 Updated 14 Desember 2008 E-mail:
[email protected],
[email protected],
[email protected]
WHILE akhir<=100 DO BEGIN write(akhir,' '); simpan:=akhir; akhir:=simpan+awal; awal:=simpan; END
b. Tipe Rekaman (Record) Definisi Record hampir sama dengan Array, tetapi yang membedakan antara keduanya adalah kalau Array semua komponennya bertipe data yang sama sedangkan Record setiap komponennya bisa bertipe data yang beda-beda. Contoh: TYPE
my_rec = RECORD Nama : STRING[90]; Npm : STRING[8]; Nilai : REAL;
8
END. Deret Fibonacci ---------------
END; VAR Data_nya
: my_rec;
c. Tipe Himpunan Himpunan (set) adalah kumpulan obyek yang mempunyai tipe data yang sama dan urutan penulisannya tidak diperhatikan. Setiap obyek dalam suatu himpunan disebut dengan anggota atau elemen himpunan. Contoh: TYPE
0 1 1 2 3 5 8 13 21 34 55 89
irama = (JAZZ, POP, ROCK ,DANGDUT, SKA); Musik = SET OF irama;
Judul program digunakan untuk identifikasi program. Bagian deklarasi berisi informasi tentang piranti atau library yang akan digunakan, variabel yang akan digunakan dalam program tersebut, dan juga mungkin berisi definisi konstanta. Bagian terproses berupa sekelompok statemen yang diawali dengan BEGIN dan diakhiri dengan END, diikuti tanda baca titik. Beberapa aturan dalam menulis sebuah program adalah:
Jenis_musik : Musik;
1. Akhir sebuag program Pascal ditandai dengan tanda baca titik (.) setelah END yang paling akhir.
VAR
d. Tipe File (Berkas) File (Berkas) adalah kumpulan sejumlah komponen yang bertipe data sama, yang jumlahnya tidak tertentu, dan biasanya tersimpan dalam suatu media penyimpan luar. e. Pointer Tipe data pointer merupakan tipe data yang berbeda dengan yang lainnya. Semua tipe data yang lainnya bersifat STATIS sedangkan tipe Pointer bersifat DINAMIS. Tipe ini merupakan tipe data untuk suatu variabel, dimana isi variabel ini berupa alamat variabel lain, dalam artian variabel pointer adalah variabel yang menunjuk nilai atau alamat variabel lainnya.
DEKLARASI VARIABEL DAN PENGENAL Struktur program dalam Pascal dikelompokkan menajadi Judul Program, bagian deklarasi dan bagian terproses. Contoh: PROGRAM FIBONACCI; (* Bagian Deklarasi Pustaka/Library *) USES crt; { Bagian Deklarasi Variabel }
END. 2. Beberapa statemen boleh ditulis menjadi satu baris dipisahkan dengan tanda baca titk koma (;). Simpan := akhir;
akhir := akhir + awal;
3. Spasi, baris komentar atau akhir sebuag baris dianggap pemisah. Sejumlah pemisah dapat muncul diantara simbol-simbol Pascal, tetapi tidak boleh digunakan dalam sebuah nama atau bilangan. BARIS KOMENTAR Baris komentar merupakan suatu penjelasan dalam program, dan bukan bagian yang akan diproses. Baris komentar diletakan di antara tanda { dan } atau tanda (* dan *). DEKLARASI VARIABEL Bagian deklarasi variabel diawali dengan katak baku VAR. aturan penulisan bagian VAR antara lain adalah: 1. VAR harus muncul dalam bagian deklarasi. 2. VAR harus dituliskan setelah definisi TYPE (jika ada) dan sebelum deklarasi PROCEDURE atau FUNCTION (jika ada). 3. Variabel-variabel yang mempunyai tipe berbeda dapat dijadikan satu dalam deklarasi VAR.
VAR awal, akhir, simpan
: INTEGER;
VAR a,b,c,d X,Y,Z
{ Bagian Terproses } BEGIN
: REAL; : INTEGER;
4. Dalam deklarasi VAR susunan data bisa sembarang. clrscr; writeln('Deret Fibonacci'); writeln('---------------');writeln; awal:=0; akhir:=1; write(awal,' ');
VAR Z,X,Y c,d,a,b
: REAL; : INTEGER;
DhrMuiz. 2007. Pemrograman Pascal Created 07 Mei 2007 Updated 14 Desember 2008 E-mail:
[email protected],
[email protected],
[email protected]
9
DhrMuiz. 2007. Pemrograman Pascal Created 07 Mei 2007 Updated 14 Desember 2008 E-mail:
[email protected],
[email protected],
[email protected]
10
MEMILIH PIRANTI/LIBRARY 5. Suatu tipe data dapat digunakan berulang kali dalam deklarasi VAR. Deklarasi Piranti diawali dengan kata USES diikuti nama piranti yang akan digunakan, misalnya:
VAR a,b,c : REAL;
Crt
atau
Dos
VAR a b c
Graph
: REAL; : REAL; : REAL;
Overlay Printer System
DEKLARASI KONSTANTA Dalam Pascal konstanta dibagi menjadi dua macam, yaitu konstanta tak bertipe dan konstanta bertipe.
Memanfaatkan semua fasilitas yang dimiliki oleh monitor dan keyboard, termasuk screen mode control, extented keyboard codes, color, window dan sound. Untuk memanfaatkan fungsi-fungsi DOS, ternasuk pengendalian tanggal dan jam sistem, pencarian direktori dan eksekusi program Paket grafik yang powerful dengan dukungan CGA, EGA, VGA, HERC,IBM3270PC, MCGA dan AT&T 6300. Mengimpelmentasikan Overlay manager Menggunakan fungsi-fungsi yang berhubungan dengan printer Pemanfaatan pustaka-pustaka pada saat program dijalankan. Unit ini secara otomatis digunakan oleh unit-unit lain atau program.
LATIHAN 1. Konstanta Tidak Bertipe Konstanta tak bertipe adalah suatu konstanta yang nilainya tertentu dan tipenya tidak secara jelas disebutkan. Contoh: CONST
faktor
USES crt; CONST kata=' Belajar PASCAL sangat Menyenangkan....##!';
= 1.1;
2. Konstanta Bertipe Konstanta bertipe adalah suatu konstanta yang selain ditunjukkan nilainya juga dinyatakan tipe datanya. Konstanta bertipe sesungguhnya adalah variabel dengan nilai yang tetap, maka tidak bisa saling dipertukarkan dengan konstanta biasa (konstanta tak bertipe). Contoh:
( Salah }
CONST awal = 1; akhir = 100; TYPE vektor = ARRAY [awal..akhir] OF REAL
( Benar }
NAMA PENGENAL (VARIABEL) 1. Nama Pengenal harus diawali dengan huruf. 2. Karakter kedua dan selanjutnya bisa berupa kombinasi angka dengan huruf, tidak boleh ada tanda baca lain dan spasi. Beberapa kompiler bisa menerima tanda garis bawah ( _ ). Huruf bisa ditulis menggunakan huruf besar atau huruf kecil. 3. Cacah karakter dalam pengenal bisa sembarang, tetapi dalam beberapa versi semua karakter setelah karakter ke-8 diabaikan. 4. Beberapa kata yang disebut keyword sudah ditentukan artinya dan tidak bisa digunakan sebagai nama variabel. Contoh AND, ARRAY, WHILE, THEN dll. STATEMEN MAJEMUK Beberapa statemen yang harus dikerjakan berturutan dalam sebuah lokasi hanya boleh ditempati oleh satu statemen. Statemen yang demikian biasa disebut sebagai statemen tunggal. Jika ada beberapa statemen yang berturutan yang juga harus diletakkan dalam lokasi tunggal diletakkannya di antara pengenal BEGIN dan END yang disebut dengan statemen MAJEMUK. Contoh: { satu statement }
BEGIN Writeln(akhir); Simpan := akhir; Akhir:= simpan + awal; Awal:=simpan; END
VAR nama : STRING[100]; BEGIN
CONST awal : INTEGER = 1; akhir : INTEGER = 100; TYPE vektor = ARRAY [awal..akhir] OF REAL
Writeln(awal); WHILE akhir <=100 DO
A. Tuliskan OUTPUT pada program dibawah ini:
Beberapa statemen di jadikan statemen tunggal ( statemen Majemuk )
clrscr; write('Tuliskan Nama anda di samping : '); readln(nama); write('Kata si ',nama);writeln; write(kata); writeln; write('Kata si ',nama); write(kata); writeln('Kata si',nama); write(kata); writeln; writeln('Kata si',nama,kata); readln; END. Jelaskan perbedaan penggunana WRITE dan WRITELN ! B. Perbaiki kesalahan pada program di bawah ini: USES crt; VAR angka1,angka2,hasil:REAL; BEGIN clrscr; write('Masukan Angka A : ); readln(angka1); write('Masukan Angka B : '); readln(angka3); hasil=angka1 + angka2; writeln('A + B = ',hasil:4:2);
DhrMuiz. 2007. Pemrograman Pascal Created 07 Mei 2007 Updated 14 Desember 2008 E-mail:
[email protected],
[email protected],
[email protected]
11
DhrMuiz. 2007. Pemrograman Pascal Created 07 Mei 2007 Updated 14 Desember 2008 E-mail:
[email protected],
[email protected],
[email protected]
4. Operand-operand yang mempunyai tipe berbeda dapat menggunakan operator +, -, * dan /; hasil dari operasi aritmatika menggunakan operand yang berbeda adalah nilai yang bertipe Real. Contoh: Var A : Integer; X : Real;
hasil:=angka1 - angka2 writeln('A - B = ',hasil:5:3); hasil:=angka1 x angka2; writeln('A x B = ',hasil:3:6);
X := X + 1 A := A + 1.0
hasil:=angka1 / angka2; writeln('A / B = ',hasil:2:3); END;
A := A + A / 3 * 3
ARITMATIKA A. OPERASI ARITMATIKA Dalam ungkapan operasi Aritmatika terdapat dua komponen yang terlibat langsung, yaitu Operator dan Operand. Operator adalah suatu simbol yang digunakan untuk menyatakan suatu operasi; Operand adalah besaran yang terlibat dalam suatu operasi, yang bisa berupa konstanta, variabel, pengenal dan lain-lain. Tabel Operator
Penjumlahan Pengurangan Perkalian Pembagian Modulus (sisa pembagian)
Operand Integer + * Div atau / mod
Operand Real + * /
Untuk operand bertipe Integer hasil pembagian menggunakan operator / akan memberikan hasil bertipe Real. Dalam pembentukan ungkapan aritmatika perlu memperhatikan beberapa hal: 1. Semua operasi harus dinyatakan secara eksplisit. Contoh yang Benar: A + B A / B A * B A * (B / C) K div L 5.0 * A K mod L (2.0 * X – 4.0 * B) / (A + 3.0 * Y * Y)
kurang operator diantara 5.0 dan A diperlukan operator antara (A) dan (B)
2. Dua operator atau lebih tidak boleh saling berdampingan. Contoh: A *-B seharusnya A*(-B) --A seharusnya –(-A) 3. Nilai integer dapat diberikan ke variabel Real, tetapi tidak untuk sebaliknya. Var A : Real; L : Integer; A := L; L := A;
− b ± b 2 − 4ac 2a
Dalam menulis program terutama ungkapan Aritmatika harus ditulis menjadi 1 baris, jika terlihat ruwet, bisa dipecah menjadi beberapa baris. Contoh: Dalam pemrograman ditulis: X := (-B+sqrt(B*B-4.0*A*C))/(2.0*A); suatu variabel *)
(* sqrt = akar kwadrat dari
Bisa dipecah menjadi: P := B *B – 4.0 *A * C; Q := 2.0 * A; X := (-B+ sqrt(P)) / Q;
C. URUTAN OPERASI Operator * / div mod +-
Prioritas Lebih tinggi (dikerjakan dulu) Lebih rendah (dikerjakan kemudian)
Contoh:
Contoh yang Salah: 5.0 A (A)(B)
benar, tetapi sebaiknya dihindari. salah, hasil perhitungan memberikan hasil bertipe Real yang tidak bisa diberikan ke variabel bertipe integer. Salah, pembagian menggunaka operator / selalu memberikan hasil bertipe Real. Hasilnya tidak bisa diberikan pada variabel bertipe integer
B. PENULISAN UNGKAPAN ARITMATIKA
x= Operasi
benar salah
12
Ungkapan A – B / C, berarti
A−
B C
D. FUNGSI-FUNGSI STANDAR OPERASI ARITMATIKA Fungsi Abs (x) Arctan (x) Cos ( x) Exp (x)
Argumen Integer Real Integer/real Integer/real Integer/real
Hasil Integer Real Real Real Real
Ln (x)
Integer/real
Real
Sin (x)
Integer/real
Real
Keterangan Mengambil harga mutlak dari X Menghitung arctangent X Menghitung cosinus x Menghitung pangkat dengan bilangan pokok bil. Natural (e) dengan pangkat x Menghitung logaritma dengan bilangan pokok bil. Natural (e) dari x Menghitung sinus x
DhrMuiz. 2007. Pemrograman Pascal Created 07 Mei 2007 Updated 14 Desember 2008 E-mail:
[email protected],
[email protected],
[email protected]
Sqrt (x) Trunc (x) Round (x) Sqr (x)
Integer/real Real Real Integer Real
Real Integer Integer Integer Real
13
DhrMuiz. 2007. Pemrograman Pascal Created 07 Mei 2007 Updated 14 Desember 2008 E-mail:
[email protected],
[email protected],
[email protected]
Hasil := Else If (Nilai Hasil := Else If (Nilai Hasil := Else Hasil := Writeln; writeln(‘Hasil
Menghitung akat kuadrat dari x Memotong nilai x Membulatkan nilai x Menghitung kuadrat (pangkat dua) dari x
Contoh: Trunc(19.8) Trunc(19.0001) Round(19.8) Round(19.0001)
menghasilkan menghasilkan menghasilkan menghasilkan
19 19 20 (pembulatan ke atas) 19 (pembulatan ke bawah)
Input Input Nilai Nilai
Ungkapan boolean adalah sembarang ungkapan yang selalu bernilai True atau False. Ungkapanungkapan yang dibentuk menggunakan operator pembanding, ( < , <=, >=, > ,<>) merupakan salah satu ungkapan boolean.
2. Operator And Operator and digunakan untuk mentest kondisi yang memerlukan lebih dari 1 syarat dimana semua syarat harus dipenuhi. 3. Operator Or Jika pada operator And suatu kondisi akan bernilai True jika dan hanya jika semua syarat yang diberikan dipenuhi, maka operator Or jika salah satu dari syarat yang diberikan dipenuhi, maka kondisi yang ditest akan bernilai True. Tabel Kebenaran
‘B’ <= 60) And (Nilai > 40) Then ‘C’ <= 40) And (Nilai > 20) Then ‘D’ ‘E’; akhir ‘,Nama_siswa,’ adalah ‘,hasil);
End.
TIPE DATA BOOLEAN
1. Operator Not Operator Not digunakan untuk mengingkari nilai suatu statemen boolean.
14
Nama Mahasiswa Npm Mid Test Final Test
: : : :
Pengki 66709878 40 30
Hasil akhir Pengki adalah D
STATEMEN MASUKAN DAN KELUARAN STATEMEN KELUARAN WRITE DAN WRITELN Statemen Write dan Writeln dapat berisi sembarang argumen. Penggunaan kedua statemen ini adalah: • Write digunakan untuk mencetak beberapa argumen pada baris yang sama. • Writeln yang tidak diikuti argumen hanya akan mencetak satu baris kosong. • Writeln yang diikuti argumen akan mencetak nilai argumen tersebut dan berpindah ke baris berikutnya. BU: Write/Writeln (berkas,ungkapan1,ungkapan2,…)
A False False True True
B False True False True
A AND B False False False True
A OR B False True True True
NOT A True True False False
NOT B True False True False
Contoh Program: Uses crt; Var Nama_siswa : string[30]; Npm : string[8]; Nilai_mid, nilai_final : integer; Nilai : integer; Hasil : Char; Begin Clrscr; Write(‘Input Nama Mahasiswa : ‘);readln(Nama_siswa); Write(‘Input Npm : ‘);readln(npm); Write(‘Nilai Mid Test : ‘);readln(Nilai_mid); Write(‘Nilai Final Test : ‘);readln(Nilai_final); Nilai := (Nilai_mid + Nilai_final) div 2; { DIV : pembagian data integer } If Nilai > 80 Then Hasil := ‘A’ Else If (Nilai <= 80) And (Nilai > 60) Then
Dengan Berkas : nama berkas keluaran. Parameter ini bersifat optional, jika tidak diisi maka keluarannya adalah standar yaitu layar monitor. Ungkapan1, ungkapan2 … : bisa berupa variabel, string, literal atau sembarang ungkapan. Contoh: Write ( ‘ Cetak kalimat ’ ); { string harus diapit di antara tanda petik } Writeln ( ‘Hasil keluaran : ‘,Hasil , ‘ ‘,A,B); Writeln (A,B+C,4+5); Writeln; { cetak satu baris kosong }
UNGKAPAN LITERAL Ungkapan ini digunakan jika mencetak dengan cacah kolom yang telah ditentukan dan akan dicetak Rata Kanan. Contoh: Writeln(‘NILAI’:10); ‘ dicetak rata kanan } N B:=56;
{menyediakan
I
L
A
10
kolom,
I
{ B adalah variabel bertipe integer }
dan
‘
nilai
DhrMuiz. 2007. Pemrograman Pascal Created 07 Mei 2007 Updated 14 Desember 2008 E-mail:
[email protected],
[email protected],
[email protected]
15
DhrMuiz. 2007. Pemrograman Pascal Created 07 Mei 2007 Updated 14 Desember 2008 E-mail:
[email protected],
[email protected],
[email protected]
16
Contoh:
Writeln (B:5); 5
Readln(A,B,C); Read(D);
6
X:=78.95842 { X adalah variabel bertipe Real } Writeln(X:10:2) { Menyediakan 10 kolom diantaranya 3 kolom untuk desimal dan titik } 7
8
.
9
Nilai yang diberikan: 12.43 145.65 65.986 432.14 322.34 56.3 maka nilai-nilai variabel diperoleh adalah: A = 12.43 B = 145.65 C = 65.986
6
Untuk Mencetak ke printer, cukup dengan menambahkan lst, pada argumen berkas dan tambahkan unit printer pada USES. USES printer; Begin Writeln(lst,’Kalimat ini akan dicetak ke printer…!’); End.
Kasus 1: Seorang nasabah meminjam uang di bank sebanyak Rp 5 juta untuk jangka waktu 3 tahun, dengan tingkat bunga 2% per tahun. Berapa jumlah pelunasan yang harus dibayarkan jika pembayaran dilakukan sebanyak 2 kali ? Formulasi:
STATEMEN MASUKAN READ DAN READLN
Fn P i n m
Statemen Read tidak memperhatikan batas baris, rinci data (yang tersedia) akan selalu dibaca tidak tergantung apakah mereka ada di baris yang sama atau tidak. Statemen Readln memulai pembacaan data pada posisi baris saat itu dan meneruskan ke awal baris baru setelah pembacaan selesai. Kedua statemen ini beranggapan bahwa data masukan terdiri dari aliran rinci data yang kontinyu (continue).
Contoh Program:
BU: Read/Readln(var1,[var2, ... ]); Di mana variabel-variabel yang akan dibaca harus bertipe ordinal (integer, Real, char atau string). Contoh: Read (X ,Y ,Z); Data yang diinput : 67.8 88.9
55.7
{ X,Y,Z bertipe Real)
67.9
45.8
maka nilai yang diterima ketiga variabel tersebut adalah: X=67.8 Y=88.9 Z=55.7 Data untuk variabel-variabel tersebut dapat diketikan pada satu baris dimulai dari nomor kolom sembarang dengan setiap nilai dipisahkan oleh paling sedikit satu spasi.
D = 78.43
: jumlah yang dibayarkan : jumlah sekarang Fn = P1 + : tingkat bunga per tahun : jumlah tahun : frekuensi pembayaran bunga dalam setahun
i m
mn
{ ************************************** * Contoh program Model Bunga Majemuk * **************************************} USES crt; FUNCTION Pangkat(base : Real; p:integer):Real; VAR i:INTEGER; n:REAL; BEGIN n := base; FOR i:=1 TO p-1 DO n := n * base; Pangkat:=n; END; VAR
Jika menggunakan statemen Read ada beberapa hal yang perlu diingat bahwa: • Nilai-nilai variabel harus disusun dengan urutan yang sesuai dengan susunan variabel dalam statemen Read. • Jika variabel yang dibaca bertipe integer atau real data yang ada di baris berikutnya akan terus dibaca selama masih ada variabel variabel yang akan menerima nilai, • Nilai-nilai yang dibacakan harus berada dalam satu baris; tidak boleh disambung ke baris lain. • Variabel dari tipe yang berbeda (integer, real, char atau string, kecuali boolean) dapat dibaca dengan urutan sembarang. • Variabel dalam read dan nilai yang bersesuaian harus mempunyai tipe data yang sama.
P,F,i : Real; n,m : Integer; BEGIN clrscr; writeln('PENGEMBALIAN UANG PINJAMAN BANK'); writeln('-------------------------------'); write('Jumlah uang pinjaman sekarang : write('Jangka pembayaran (x tahun) : write('Tingkat bunga per tahun (%) : write('Pembayaran dilakukan berapa kali ? :
Penggunaan statemen Readln sangat mirip dengan statemen Read dengan perbedaanya adalah bahwa setelah semua nilai pada satu baris dibaca, cursor akan diset pada posisi baris berikutnya. Maka statemen: Readln (X,Y,Z);
ekivalen dengan
');readln(P); ');readln(n); ');readln(i); ');readln(m);
{ proses penghitungan bunga majemuk } i:= i / 100.0; F:= P * Pangkat(1+i/m,n*m); writeln; writeln('Pelunasan setelah ',n,' tahun sejumlah Rp ',trunc(F):10);
Read(X,Y,Z);Writeln; END.
DhrMuiz. 2007. Pemrograman Pascal Created 07 Mei 2007 Updated 14 Desember 2008 E-mail:
[email protected],
[email protected],
[email protected]
PENGEMBALIAN UANG PINJAMAN BANK ------------------------------Jumlah uang pinjaman sekarang Jangka pembayaran (x tahun) Tingkat bunga per tahun (%) Pembayaran dilakukan berapa kali ?
: : : :
17
5000000 3 2 2
DhrMuiz. 2007. Pemrograman Pascal Created 07 Mei 2007 Updated 14 Desember 2008 E-mail:
[email protected],
[email protected],
[email protected]
JUMLAH PERTUMBUHAN PENDUDUK ---------------------------Tahun Pertama : Jumlah Penduduk Th. Pertama : Tahun Terakhir Pertumbuhan : Presentase Pertumbuhan/thn :
18
2003 1200000 2010 6
Jumlah Penduduk pada tahun 2010 sebanyak 1804356 jiwa. Pelunasan setelah 3 tahun sejumlah Rp
5307600
PEMILIHAN PROSES Kasus 2: Penduduk suatu kota berjumlah 1200000 jiwa pada tahun 2003, tingkat pertumbuhannya 6% per tahun. Hitunglah jumlah penduduk kota tersebut pada tahun 2010 ! Formulasi: P1 : Jumlah pada tahun pertama Pt = P1 R t −1 Pt : Jumlah Pada tahun ke-t Di mana : R = 1 + r r : Persentase pertumbuhan per tahun t : Indeks waktu (tahun) Contoh Program: { ********************************************* * Contoh program Model pertumbuhan penduduk * *********************************************} USES crt;
Dalam pemrograman terstruktur ada 3 macam proses ekekusi statemen, yaitu: 1. Proses eksekusi secara berurutan (sequential), 2. Proses pemilihan (selection) dan 3. Proses berulang Proses eksekusi secara berurutan dimulai dari statemen paling awal sampai kepada statemen paling akhir secara berurutan. Terkadang ada kalanya proses eksekusi harus dilompatkan ke suatu statemen yang berada jauh di bawah, atau diperlukan adanya proses berulang. Karenanya digunakan statemen kendali. Statemen kendali adalah statemen yang digunakan untuk mengubah urutan eksekusi program dari pola eksekusi normal (secara berurutan) ke pola yang lain ( secara tidak berurut), yaitu statemen pemilihan proses dan proses berulang. Statemen pemilihan proses dalam Pascal ada dua buah statemen, yaitu if... then... dan case. Variasi bentuk if...then diantaranya adalah pilihan tunggal, pilihan ganda dan pilihan jamak.
FUNCTION Pangkat(base : Real; p:integer):Real; VAR i:INTEGER; n:REAL; BEGIN n := base; FOR i:=1 TO p-1 DO n := n * base; Pangkat:=N; END;
Operator Pembanding.
VAR
IF... THEN
p1,rr,R,Pt : Real; th1,th2,t : Integer; BEGIN clrscr; writeln('JUMLAH PERTUMBUHAN PENDUDUK'); writeln('----------------------------'); write('Tahun Pertama : ');readln(th1); write('Jumlah Penduduk Th. Pertama : ');readln(p1); write('Tahun Terakhir Pertumbuhan : ');readln(th2); write('Presentase Pertumbuhan/thn : ');readln(rr); {proses penghitungan} rr:=rr / 100.0; R :=1 + rr; t :=(th2-th1)+1; Pt:=p1*Pangkat(R,t-1); writeln; writeln('Jumlah Penduduk pada tahun ',th2,' sebanyak ',trunc(Pt),' jiwa.'); END.
Simbol = <> > >= < <=
•
Arti Sama dengan Tidak sama dengan Lebih besar dari Lebih besar atau sama dengan Lebih kecil dari Lebih kecil atau sama dengan
Pilihan Tunggal Bentuk paling sederhana dari statemen if...then adalah pilihan tunggal, yakni jika hanya ada satu pilihan yang disediakan. Contoh: USES crt; VAR Angka, asal : Real; Begin Clrscr; Write (‘Masukkan sembarang angka = ‘); Readln(Angka); { If kondisi Then } Writeln; { statemen } Asal := Angka; If Angka < 0 then Angka := -1 * angka; Writeln (‘Nilai Mutlak dari ‘, Asal:1:3,’ = ‘,Angka:1:3); End. JUMLAH PERTUMBUHAN PENDUDUK ----------------------------
DhrMuiz. 2007. Pemrograman Pascal Created 07 Mei 2007 Updated 14 Desember 2008 E-mail:
[email protected],
[email protected],
[email protected]
•
19
Masukkan sembarang angka = -78
•
Nilai Mutlak dari –78 = 78
Ax 2 + Bx + C = 0 •
Pilihan Ganda Yakni memilih salah satu dari 2 pilihan yang disediakan. Bentuk umum: If kondisi Then Statemen1 Else Statemen2;
USES crt; VAR Pertama, kedua, hasil : Real; Begin Clrscr; Write(‘Input angka pertama : ‘); Readln(Pertama); Write(‘Input angka kedua : ‘); Readln(Kedua); Writeln; If kedua <= 0 then Hasil := -1 * kedua Else Hasil := kedua – (2 * Pertama – kedua) / (1 – kedua); Writeln(‘Hasil = ‘,hasil:2:3); End. Input angka pertama : 10.0 Input angka kedua : 5.0 Hasil = 1.250
Pilihan Jamak Pilihan jamak merupakan variasi statemen IF yang lebih lengkap. Dalam pemilihan proses disediakn lebih dari 2 pilihan yang harus dipilih salah satu. Bentuk umumnya: If kondisi1 then Statemen1 Else if kondisi2 then Statemen2 Else if kondisi3 then Statemen3 Else ... ... Contoh program untuk menghitung akar persamaan kuadrat. Akan dihitung akar persaman kuadrat
Ax 2 + Bx + C = 0
Dengan koefisien A,B dan C. Dan formulasi untuk menghitung x1 dan
x2 adalah :
x1 , x 2 = − B ±
•
D 2A
Dan
Dengan ketentuan-ketentuan sbb:
D = B 2 − 4 AC
20
Jika A = 0, maka menjadi
Bx + C = 0
Dan persamaan ini bukan persamaan kuadrat. Jika D (diskriminan) := B * B – 4 * A * C mempunyai nilai positif, maka akarnya adalah: X1 := (-B + sqrt(D)) / (2.0 * A) dan X2 := (-B – sqrt(D))/(2.0 * A) Jika D := B * B – 4 * A * C mempunyai nilai negatif, maka akarnya adalah: X1 := -B/ (2.0 * A) + sqrt(abs(D))/(2.0 * A))i (imajiner) X2 := -B/ (2.0 * A) - sqrt(abs(D))/(2.0 * A))i (imajiner)
Contoh Program:
Contoh:
•
DhrMuiz. 2007. Pemrograman Pascal Created 07 Mei 2007 Updated 14 Desember 2008 E-mail:
[email protected],
[email protected],
[email protected]
Uses Crt; Var A,B,C,D :Real; x1,x2,x1i :Real; Begin clrscr; writeln('MENGHITUNG AKAR PERSAMAAN KUADRAT'); writeln('---------------------------------'); writeln('Ax^2 + Bx + Cx = 0'); writeln; write('Koefisien A = ');readln(A); write('Koefisien B = ');readln(B); write('Koefisien C = ');readln(C); writeln; If A = 0 Then Begin writeln('Koefisien A = 0, bukan persamaan kuadrat !'); x1:=-C / B; writeln('Harga X = ',x1:1:3); End Else Begin D:=B*B-4*A*C; If D > 0 Then Begin x1:=(-B + sqrt(D)) / (2.0*A); x2:=(-B - sqrt(D)) / (2.0*A); writeln('Nilai Diskriminan = ',D:1:3); writeln('Akar x1 = ',x1:1:3); writeln('Akar x2 = ',x2:1:3); End Else If D = 0 Then Begin x1:=-B/(2.0*A); writeln('Nilai Diskriminan = 0'); writeln('Dua akar yang sama = ',x1:1:3); End Else Begin x1:=-B/(2.0*A); x1i:= - sqrt(abs(D))/(2.0*A); writeln('Nilai Diskriminan = ',D:1:3); writeln('Dua Akar Imajiner :'); writeln('Akar x1 = ',x1:1:3,' + ',abs(x1i):1:3,'i'); writeln('Akar x2 = ',x1:1:3,' - ',abs(x1i):1:3,'i'); End End End.
DhrMuiz. 2007. Pemrograman Pascal Created 07 Mei 2007 Updated 14 Desember 2008 E-mail:
[email protected],
[email protected],
[email protected]
21
MENGHITUNG AKAR PERSAMAAN KUADRAT --------------------------------Ax^2 + Bx + Cx = 0 Koefisien A Koefisien B Koefisien C
= 1 = 2 = -8
Nilai Diskriminan = 36.000 Akar x1 = 2.000 Akar x2 = -4.000
STATEMEN CASE Sejumlah statemen if dalam pilihan jamak terlihat agak membingungkan terutama bagi pemula, beberapa pemilihan proses untuk sejumlah pilihan jawaban bisa dilakukan dengan statemen Case. Bentuk umum: Case ungkapan of Label 1 : statemen 1; Label 2 : statemen 2; ... ... Label n : statemen n; End Dengan: 1. Ungkapan yang mengikuti kata case dapat berupa sembarang ungkapan yang memberikan hasil integer, char, boolean atau tipe terbilang. 2. Label, yang masing-masing disebut label kasus, adalah konstanta yang mempunyai tipe yang sama dengan ungkapan. Setiap label kasus dapat terdiri dari sejumlah konstanta dipisahkan dengan koma. Konstanta tertentu hanya bisa muncul dalam satu label kasus. 3. Antara label kasus dengan statemen yang mengikutinya dipisahkan dengan tanda baca titik dua (:) 4. Statemen yang mengikuti tanda titik dua dapat berupa statemen tunggal atau majemuk. 5. Dalam setiap statemen case bisa terdiri dari sejumlah label kasus diikuti dengan statemen yang berhubungan. 6. Kata end digunakan untuk mengakhiri setiap statemen case dan merupakan bagian dari statemen case. Pada saat statemen case dikerjakan, beberapa proses akan terjadi, yaitu: 1. Ungkapan yang mengikuti case akan dihitung. 2. Satu dari sejumlah statemen yang ada dalam struktur case akan dipilih berdasarkan nilai konstanta dalam label kasus yang nilainya sama dengan nilai ungkapan yang telah dihitung. 3. Statemen yang dimaksud akan dikerjakan. 4. Statemen yang mengikuti end akan dikerjakan. Contoh Program Uses crt; Var Nama_siswa : string[30]; Npm : string[8]; Nilai_mid, nilai_final : integer; Nilai : integer; Hasil : string[20]; Begin Clrscr; Write(‘Input Nama Mahasiswa : ‘);readln(Nama_siswa); Write(‘Input Npm : ‘);readln(npm); Write(‘Nilai Mid Test : ‘);readln(Nilai_mid);
DhrMuiz. 2007. Pemrograman Pascal Created 07 Mei 2007 Updated 14 Desember 2008 E-mail:
[email protected],
[email protected],
[email protected]
22
Write(‘Nilai Final Test : ‘);readln(Nilai_final); Nilai := (Nilai_mid + Nilai_final) div 2; { DIV : pembagian data integer } Case Nilai Of 1..20 : hasil := ‘Jelek’; 21..40 : hasil := ‘Kurang’; 41..60 : hasil := ‘Cukup’; 61..80 : hasil := ‘Baik’; else hasil := ‘Istimewa’; (* 81 <= I <= 100 *) End; Writeln; writeln(‘Hasil akhir ‘,Nama_siswa,’ adalah ‘,hasil); End. Input Input Nilai Nilai
Nama Mahasiswa Npm Mid Test Final Test
: : : :
Pengki 66709878 40 30
Hasil akhir Pengki adalah Kurang
GOTO (Percabangan Non Kondisi) Statemen GOTo digunakan untuk melompat dari satu posisi ke posisi lain tanpa harus menggunakan ekspresi kondisi. Sintaks GOTO adalah GOTO label; Label dapat berupa angka atau identifikasi lain dengan terlebih dahulu dideklarasikan dengan statemen label. Contoh: Uses Crt; var Karakter: Char; label INPUT_LAGI,BERAKHIR; Begin INPUT_LAGI: Clrscr; Write('Ketikan sebuah karakter '); Readln(Karakter); if (Ord(Karakter)>64) and (ord(karakter)<91) then begin writeln('Anda menginput Huruf Besar!'); Goto BERAKHIR; end else if (Ord(Karakter)>96) and (ord(karakter)<123) then begin writeln('Anda menginput Huruf Kecil!'); goto BERAKHIR; end else if (Ord(Karakter)>47) and (ord(karakter)<58) then begin writeln('Anda menginput Angka!'); goto BERAKHIR; end else begin
DhrMuiz. 2007. Pemrograman Pascal Created 07 Mei 2007 Updated 14 Desember 2008 E-mail:
[email protected],
[email protected],
[email protected]
23
writeln('Input anda bukanlah karakter alphabet!'); readln; Goto INPUT_LAGI; end; BERAKHIR: End. Ketikan sebuah karakter : t Anda menginput Huruf Kecil!
PROSES BERULANG (LOOPING) STATEMEN WHILE ... DO Statemen ini digunakan bila satu atau lebih statemen akan dieksekusi berulang kali sampai kondisi yang dinyatakan dalam statemen WHILE tidak dipenuhi. Bentuk umumnya: While kondisi do Statemen
DhrMuiz. 2007. Pemrograman Pascal Created 07 Mei 2007 Updated 14 Desember 2008 E-mail:
[email protected],
[email protected],
[email protected]
Masukan Masukan Masukan Masukan
data data data data
ke-2 ke-3 ke-4 ke-5
Cacah Data Jumlah Data Nilai Rata-rata
= = =
= = = =
24
3 4 5 -1 4 15 3.75
STATEMEN REPEAT ... UNTIL Cara kerja statemen ini merupakan kebalikan dari statemen while. Karena untuk statemen while, test penghentian looping ada di awal kalang, tetapi untuk repeat ini ada di akhir kalang. Dan dalam statemen repeat ini proses berulang akan dilaksanakan terus selama kondisi dipenuhi. Bentuk umumnya: Repeat Statemen Until kondisi Contoh:
Dengan Kondisi : ungkapan boolean yang digunakan sebagai syarat agar statemen dikerjakan berulang kali. Statemen : statemen tunggal atau statemen majemuk yang akan diproses ulang. Contoh: uses crt; var i,jumlah,nilai:integer; rerata:real; begin clrscr; writeln('MENGHITUNG HARGA RATA-RATA SEJUMLAH DATA NILAI'); writeln('----------------------------------------------'); writeln; writeln('Isi Nilai dengan bilangan Positif dan negatif untuk Selesai..'); I:=0; Jumlah:=0; write('Masukan data ke-',I+1,' = ');readln(nilai); while nilai>=0 do begin inc(i); { bisa diganti dgn i := i + 1; } inc(jumlah,nilai); { bisa juga dgn jumlah := jumlah + nilai; } write('Masukan data ke-',I+1,' = ');readln(nilai); end; rerata := jumlah / i; writeln; writeln('Cacah Data = ',I:5); writeln('Jumlah Data = ',jumlah:5); writeln('Nilai Rata-rata = ',rerata:8:2); end. MENGHITUNG HARGA RATA-RATA SEJUMLAH DATA NILAI ---------------------------------------------Isi Nilai dengan bilangan Positif dan negatif untuk Selesai.. Masukan data ke-1 = 3
uses crt; var i,jumlah,nilai:integer; maksimum,minimum:integer; rerata:real; begin clrscr; writeln('MENGHITUNG HARGA RATA-RATA,MIN,MAX SEJUMLAH DATA NILAI'); writeln('----------------------------------------------'); writeln; writeln('Isi Nilai dengan bilangan Positif dan negatif untuk Selesai..'); I:=0; Jumlah:=0; write('Masukan data ke-',I+1,' = ');readln(nilai); if nilai < 0 then writeln('Tidak ada nilai yang dimasukkan...!') else begin minimum:=nilai; maksimum:=nilai; repeat if nilai<minimum then minimum:=nilai; if nilai>maksimum then maksimum:=nilai; i := i + 1; jumlah := jumlah + nilai; write('Masukan data ke-',I+1,' = ');readln(nilai); until nilai < 0; rerata := jumlah / i; writeln; writeln; writeln('Cacah Data = ',I:5); writeln('Jumlah Data = ',jumlah:5); writeln('Nilai Rata-rata = ',rerata:8:2); writeln('Nilai Maksimum = ',maksimum:5); writeln('Nilai Minimum = ',minimum:5);
DhrMuiz. 2007. Pemrograman Pascal Created 07 Mei 2007 Updated 14 Desember 2008 E-mail:
[email protected],
[email protected],
[email protected]
25
end end.
26
5. Kata downto akan dikerjakan jika nilai variabel masih lebih besar atau sama dengan nilai ungkapan2.
MENGHITUNG HARGA RATA-RATA,MIN,MAX SEJUMLAH DATA NILAI ---------------------------------------------Isi Nilai dengan bilangan Positif dan negatif untuk Selesai.. Masukan data ke-1 = 6 Masukan data ke-2 = 4 Masukan data ke-3 = 5 Masukan data ke-4 = 3 Masukan data ke-5 = 7 Masukan data ke-6 = 2 Masukan data ke-7 = -1
Cacah Data Jumlah Data Nilai Rata-rata Nilai Maksimum Nilai Minimum
DhrMuiz. 2007. Pemrograman Pascal Created 07 Mei 2007 Updated 14 Desember 2008 E-mail:
[email protected],
[email protected],
[email protected]
= = = = =
6 27 4.50 7 2
Interprestasi statemen-statemen for...do adalah sebagai berikut: var I : integer; for I:= 1 to 100 do statemen; statemen akan dikerjakan 100 kali. var I,L,N : integer; for I:= L to N do statemen; statemen akan dikerjakan sbanyak (N-L+1) kali. var KK : integer; for KK := 25 downto 1 do statemen statemen akan dikerjakan sebanyak 25 kali dimulai dari KK = 25, 24, 23..., 1. var Berikut : integer; for berikut := 2.0 to 100 do statemen; salah, karena nilai awalnya adalah Real.
STATEMEN FOR ... DO Dalam statemen for pengawalan nilai variabel kendali kalang, penambahan nilai dan test batas nilai akan dilaksanakan secara otomatis oleh komputer. Contoh: Jumlah := 0; For bulat := 1 to 25 do Jumlah := Jumlah + bulat; Writeln(‘JUMLAH = ‘, jumlah:1); Dalam program di atas, statemen: For Bulat := 1 to 25 do
var Kata : char; for Kata := ‘A’ to ‘F’ do statemen statemen akan dikerjakan 6 kali dimulai K = ‘A’, ’B’,...,’F’. type Namahari = (SENIN,SELASA,RABU,KAMIS,JUMAT,SABTU,MINGGU); var Hari : Namahari; for Hari:= SELASA to SABTU do statemen; statemen akan dikerjakan 5 kali. Contoh Program Menghitung Nilai Faktorial
Bisa diartikan sebagai: dimulai dengan nilai variabel bulat = 1, kerjakan statemen yang ditulis setelah kata do. Tambahkan 1 pada nilai variabel Bulat pada setiap pengerjaan statemen, dan keluar dari looping jika nilai variabel bulat telah melebihi 25.
USES crt; VAR Faktor : Real; Cacah,Bil_Awal, Bil_Akhir,Counter,Baris : Integer;
BU:
BEGIN clrscr; writeln('TABEL FAKTORIAL'); write('Bilangan Awal = ');readln(Bil_Awal); write('Bilangan Akhir = ');readln(Bil_Akhir); writeln; writeln(' TABEL FAKTORIAL'); writeln('-----------------------------------------'); writeln(' Bilangan Harga Faktorial'); writeln('-----------------------------------------'); Baris:=9;
For variabel := ungkapan1 to ungkapan2 do Statemen;
Aturan-aturan penggunaan for: 1. variabel, ungkapan1 dan ungkapan2 harus mempunyai tipe sama, dan harus bertipe ordinal. 2. Kata to menunjukkan nilai variabel berubah menjadi nilai penerus setiap kali operasi looping dikerjakan. 3. Kata to akan dikerjakan jikai nilai variabel masih lebih kecil atau sama dengan nilai akhir (nilai ungkapan2). 4. Kata downto menunjukkan nilai variabel berubah menjadi nilai pendahulunya setiap kali operasi looping dikerjakan. Dengan kata lain kata downto harus digunakan jikai nilai awal lebih besar dari nilai akhir.
For Cacah:=Bil_Awal to Bil_Akhir do Begin Faktor:=1; For Counter:= 1 to Cacah do
DhrMuiz. 2007. Pemrograman Pascal Created 07 Mei 2007 Updated 14 Desember 2008 E-mail:
[email protected],
[email protected],
[email protected]
27
Faktor:=Faktor*Counter; gotoxy(2,Baris);Write(Cacah:8); gotoxy(20,Baris);Writeln(Faktor:1:1); Baris:=Baris+1; End; writeln('-----------------------------------------'); END. TABEL FAKTORIAL Bilangan Awal Bilangan Akhir
= 1 = 12
TABEL FAKTORIAL ----------------------------------------Bilangan Harga Faktorial ----------------------------------------1 1.0 2 2.0 3 6.0 4 24.0 5 120.0 6 720.0 7 5040.0 8 40320.0 9 362880.0 10 3628800.0 11 39916800.0 12 479001600.0 -----------------------------------------
DhrMuiz. 2007. Pemrograman Pascal Created 07 Mei 2007 Updated 14 Desember 2008 E-mail:
[email protected],
[email protected],
[email protected]
Const batas=100; Var Angka : array[1..batas] of integer; Const batas=1..200; Var kalimat : array [batas] of char; Contoh Pengoperasian variabel array: Var Kalimat : array[1..100] of char; Vektor : array[1..25] of real; Jawaban : array[1..10] of real; Nilai : array[1..80] of integer; Frekuensi : array[1..100] of integer; Jumlah, Hasil_kali,selisih : real; Kata,huruf : char; I,j,k,total,hasil : integer; . . kata := kalimat[1]; selisih := Vektor[1]-Vektor[2]; jumlah := jumlah + Vektor[K]; hasil_kali := jawaban[J] * jawaban[K] * Vektor[I]; kalimat[25] :=’P’; Frekuensi[5]:=2 * Vektor[5]; Contoh Program
LARIK (ARRAY) DIMENSI SATU Salah satu tipe data terstruktur yang telah kita pelajari dari modul materi terdahulu adalah array atau dengan istilah lainnya adalah larik. Terminologi dari larik itu sendiri, yaitu: 1. Larik adalah deretan rinci data yang mempunyai tipe data sejenis. Untai karakter (string) merupakan contoh array. 2. Setiap rinci data disebut dengan komponen atau elemen array. 3. Setiap larik (array) bisa dioperasikan menggunakan pemilih elemen array yang disebut index atau subskrip. Dalam program, index atau subskrip tersebut diletakkan dalam tanda kurung kotak, [ ], setelah nama array yang akan dioperasikan. Untuk mendeklarasikan variabel array ditentukan dengan: Var nama : array [index] of tipe; Dengan Var,array, of : kata kunci yang harus ada. Nama : nama array yang akan dideklarasikan Index : batasan index yang akan ada pada array yang akan dideklarasikan Tipe : tipe array; Contoh deklarasi: Var Gaji Upah Atau
: array[1..10] of real; : array[-4..8] of real;
1. Mencetak deret bilangan PASCAL: uses crt; var i,angka,a,b : bil : next : deret,kolom,kol:
integer; array[1..100] of integer; array[1..100] of integer; integer;
Begin clrscr; kolom:=40; write('Masukan Jumlah Deret = ');readln(deret); next[1]:=0; next[2]:=1; next[3]:=0; kol:=kolom; gotoxy(kol,wherey); writeln(1); For a:=2 to deret do Begin kolom:=kolom-2; kol:=kolom; For b:=1 to 100 do
28
DhrMuiz. 2007. Pemrograman Pascal Created 07 Mei 2007 Updated 14 Desember 2008 E-mail:
[email protected],
[email protected],
[email protected]
bil[b]:=next[b]; For b:=1 to a do Begin angka:=bil[b]+bil[b+1]; gotoxy(kol,wherey); {WHEREY: fungsi untuk mendapatkan koordinat baris kursor yg aktif } write(angka); next[b+1]:=angka; next[b+2]:=0; kol:=kol+4; End; writeln; End; End. Masukan Jumlah Deret = 6 1 1 1 1 1 1
1 2
3 4
5
1 3
6 10
1 4
10
29
DhrMuiz. 2007. Pemrograman Pascal Created 07 Mei 2007 Updated 14 Desember 2008 E-mail:
[email protected],
[email protected],
[email protected]
30
Writeln('------------------------------------'); Writeln; j:=1; For i:=2 to Batas do Begin If prima[i] then Begin If J > 8 Then Begin j:=1; Writeln; End Else Begin write(' ',i:3); j:=j+1; End; End; End; writeln;writeln('Selesai...'); end.
1 5
1
2. Mencetak bilangan PRIMA Uses crt; const Batas=500; var prima : array[1..batas] of boolean; { bilangan prima } batas_geser, { batas penggeseran } i,j : integer; { counter / cacah } Begin Clrscr; For i:=1 to Batas do prima[i]:=true; batas_geser:=trunc(sqrt(batas)); i:=2; { proses penggeseran } While i<=batas_geser do Begin If prima[i] then Begin j:=i+i; While j<=batas do Begin prima[j]:=false; j:=j+i; End; End; i:=i+1; End; { Cetak hasil proses.... } Writeln('Bilangan Prima antara 1 s/d ',Batas);
Bilangan Prima antara 1 s/d 500 -----------------------------------2 29 67 107 157 199 257 311 367 421 467 Selesai...
3 31 71 109 163 211 263 313 373 431 479
5 37 73 113 167 223 269 317 379 433 487
7 41 79 127 173 227 271 331 383 439 491
11 43 83 131 179 229 277 337 389 443 499
13 47 89 137 181 233 281 347 397 449
17 53 97 139 191 239 283 349 401 457
19 59 101 149 193 241 293 353 409 461
LARIK DIMENSI BANYAK Contoh yang paling mudah untuk array dimensi banyak adalah tabel. Kalau anda perhatikan sebuah tabel, maka posisi setiap elemen dalam tabel ditentukan 2 posisi, yaitu posisi baris dan posisi kolom. Untuk mendeklarasikan variabel array tersebut yaitu: Var
nama
: array [index1,index2,...] of tipe;
Tipe data index1 atau index2 bisa berupa sembarang tipe subjangkauan (subrange) skalar kecuali real. Contoh program: Menghitung Penjumlahan MATRIK Uses Crt; Var Mat_A,Mat_B,Mat_C ordo_x,ordo_y x,y,koor_brs
: Array[1..10,1..10] Of Integer; : Integer; : Integer;
DhrMuiz. 2007. Pemrograman Pascal Created 07 Mei 2007 Updated 14 Desember 2008 E-mail:
[email protected],
[email protected],
[email protected]
Begin Clrscr; Writeln('PENJUMLAHAN MATRIK'); Writeln('------------------'); Write('Tentukan ordo Matriks <x,y> : ');readln(ordo_x,ordo_y); Writeln('Input Matrik
:'); For y:=1 to ordo_y do Begin koor_brs:=wherey; For x:=1 to ordo_x do Begin gotoxy(x*5,koor_brs); Read(Mat_A[x,y]); End; End; Writeln; Writeln('Input Matrik :'); For y:=1 to ordo_y do Begin koor_brs:=wherey; For x:=1 to ordo_x do Begin gotoxy(x*5,koor_brs); Read(Mat_B[x,y]); End; End; Writeln; Writeln('Hasil Penjumlahan Matrik A + B = '); For y:=1 to ordo_y do Begin For x:=1 to ordo_x do Begin Mat_C[x,y]:=Mat_A[x,y]+Mat_B[x,y]; Write(Mat_C[x,y]:5); End; Writeln; End; End.
31
DhrMuiz. 2007. Pemrograman Pascal Created 07 Mei 2007 Updated 14 Desember 2008 E-mail: [email protected], [email protected], [email protected]
OPERASI STRING PENYELEKSIAN STRING Dua buah string dikatakan sama bila nilai string yang pertama isi dan panjangnya sama dengan nilai kedua. Blank dianggap nilai yang signifikan. Bila dua buah string dibandingkan, maka urutan nilainya akan digunakan urutan karakter yang sesuai dengan kode ASCII. Jadi karakter ‘A’ lebih kecil dari karakter ‘B’. Contoh: uses crt; var NamaAnda, NamaTeman : string[30]; Begin clrscr; write('Nama Anda : ');Readln(NamaAnda); write('Nama Teman : ');Readln(NamaTeman); if NamaAnda = NamaTeman Then writeln('Nama Anda sama dengan Nama Teman Anda !'); if NamaAnda < NamaTeman Then writeln('Nama Anda urutannya lebih kecil dari nama teman anda !'); if NamaAnda > NamaTeman Then writeln('Nama Anda urutannya lebih besar dari nama teman anda !'); End. Nama Anda : Tukul Nama Teman : Tessi Nama Anda urutannya lebih besar dari nama teman anda !
PROSEDUR STANDAR OPERASI STRING 1. Delete Bentuk umum: Delete(var s:string;index: integer;count:integer); Prosedur standar ini digunakan untuk membuang (delete) sejumlah karakter (jumlah karakter yang dibuang ditunjukkan oleh nilai count) mulai dari posisi tertentu (ditunjukkan oleh nilai index) dari suatu nilai string (ditunjukkan oleh variabel s). jika posisi index lebih besar dari panjang string s, maka tidak ada karakter yang akan dihapus. Contoh:
PENJUMLAHAN MATRIK -----------------Tentukan ordo Matriks <x,y> : 3 2 Input Matrik : 6 -2 -1 3 4 9 Input Matrik : 5 2 1 -4 2 7 Hasil Penjumlahan Matrik A + B = 11 0 0 -1 6 16
32
uses crt; Var kalimat : string[50]; urutan,posisi : integer; panjang_kalimat : integer; Begin clrscr; kalimat:='Percobaan'; panjang_kalimat:=length(kalimat); {fungsi length: panjang sebuah karakter} for urutan:=1 to panjang_kalimat do Begin posisi:=(panjang_kalimat+2)-urutan; delete(kalimat,posisi,1); writeln(kalimat); end; end. Percobaan Percobaa
DhrMuiz. 2007. Pemrograman Pascal Created 07 Mei 2007 Updated 14 Desember 2008 E-mail: [email protected], [email protected], [email protected]
33
Percoba Percob Perco Perc Per Pe P
DhrMuiz. 2007. Pemrograman Pascal Created 07 Mei 2007 Updated 14 Desember 2008 E-mail: [email protected], [email protected], [email protected]
n1 + n2 = 75 s1 + s2 = 4035 s1 + s2 = 40
34
35
4. Val Bentuk Umum : Val(s:string;v ;var code);
2. Insert Bentuk Umum : Insert(source:string; var s:string; index:integer); Digunakan untuk menyisipi (insert) suatu string (ditunjukkan oleh nilai string source), ke nilai string lainnya (ditunjukkan oleh nilai string s) mulai dari posisi yang ditunjukkan oleh nilai integer index. Bila hasil dari penyisipan menjadi string yang panjangnya lebih dari 255 karakter, maka hanya sampai dengan 255 karakter saja. Contoh: uses crt; var kalimat : string[100]; Begin kalimat:='GUMA'; clrscr; writeln(kalimat); Insert('NADAR',kalimat,3); writeln(kalimat); End. GUMA GUNADARMA 3. Str Bentuk Umum : Str(x[:width[:decimals]; var s:string);
Digunakan untuk mengkonversikan suatu nilai string(ditunjukkan oleh nilai s) menjadi nilai numerik (ditunjukkan oleh nilai variabel numerik v). Walaupun s merupakan nilai string, tetapi harus berisi angka atau tanda (+) atau (-), bila tidak berarti salah dan letak kesalahannya ditunjukkan oleh nilai variabel code. Nilai variabel code akan bernilai nol bila tidak mengandung kesalahan. Contoh: uses crt; var NilaiString : string[10]; NilaiReal : Real; PosisiSalah : integer; Begin clrscr; NilaiString:='123.45'; val(NilaiString,NilaiReal,PosisiSalah); writeln('Nilai String : ',NilaiString); writeln('Nilai Real : ',NilaiReal); writeln('Posisi Salah : ',PosisiSalah); End. Nilai String Nilai Real Posisi Salah
: 123.45 : 1.2345000000E+02 : 0
Jika NilaiString=’123.A5’ Digunakan untuk mengubah nilai numerik (ditunjukan oleh nilai x) menjadi nilai string (ditunjukkan oleh variabel string s). nilai x dapat berupa nilai integer atau real. Hasil dari ubahan dapat terformat atau tidak terformat. Bila width atau decimals disebutkan, maka akan dihasilkan nilai string dengan format panjang tertentu.
Nilai String Nilai Real Posisi Salah
: 123.A5 : 0.0000000000E+00 : 5
Contoh: uses crt; var n1,n2 s1,s2
: integer; : string[10];
begin clrscr; n1:=40; n2:=35; writeln('n1 + n2 = ',n1+n2); str(n1,s1); str(n2,s2); writeln('s1 + s2 = ',s1+s2); str(n1:4,s1); str(n2:4,s2); writeln('s1 + s2 = ',s1+s2); end.
FUNGSI STANDAR OPERASI STRING 1. Copy Bentuk Umum : Copy(s:string; index:integer;count:integer):string; Fungsi ini digunakan untuk menyalin(copy) sejumlah karakter yang disalin ditunjukkan oleh nilai count mulai dari posisi yang ditunjukkan oleh index dari nilai string yang ditunjukkan oleh s. Contoh: var kalimat hasil
: string[100]; : string[100];
Begin kalimat:='ABCDEFGHIJKLMNOPQRSTUVWXYZ'; writeln(kalimat); hasil:=Copy(kalimat,4,6);
DhrMuiz. 2007. Pemrograman Pascal Created 07 Mei 2007 Updated 14 Desember 2008 E-mail: [email protected], [email protected], [email protected]
35
writeln(hasil); writeln(Copy(kalimat,9,1)); End. ABCDEFGHIJKLMNOPQRSTUVWXYZ DEFGHI I
DhrMuiz. 2007. Pemrograman Pascal Created 07 Mei 2007 Updated 14 Desember 2008 E-mail: [email protected], [email protected], [email protected]
36
4. Length Bentuk Umum : Length(s:string):integer; Digunakan untuk menghitung panjang atau jumlah karakter yang ada di nilai string yang ditunjukkan oleh s. hasil dari fungsi ini adalah nilai numerik integer positif. Contoh:
2. Concat Bentuk Umum : Concat(s1[,s2,...,sn]:string):string; Digunakan untuk menggabungkan beberapa string yang ditunjukkan oleh variabel s(n). Contoh: Const Nama = ‘Pascal’; Dll = ‘dan keluarga’; Begin Writeln(concat(‘Bahasa ‘,Nama,’ untuk Anda ‘,Dll); End.
Bahasa Pascal untuk Anda dan keluarga
3. Pos Bentuk Umum : Pos(substr:string; s:string):byte; Digunakan untuk mencari posisi letak dari suatu string (ditunjukkan oleh substr) yang ada di dalam nilai string yang lain (ditunjukkan oleh s). nilai yang dihasilkan adalah berupa nilai byte yang menunjukkan letaknya. Bila bernilai nol berarti nilai string yang dicari tidak ada.
Var NamaAnda : String[50]; Begin Write(‘Nama Anda : ‘);Readln(NamaAnda); Writeln(‘Panjang nama anda adalah ‘,Length(NamaAnda),’ karakter.’); End. Nama Anda : Tukul Panjang nama anda adalah 5 karakter.
PROSEDUR Prosedur adalah suatu program terpisah dalam blok sendiri yang berfungsi sebagai subprogram (program bagian). Prosedur diawali dengan kata reserved (cadangan) procedure di dalam bagian deklarasi. Prosedur dipanggil dan digunakan di dalam blok program yang lainnya dengan menyebutkan judul prosedurnya. Prosedur banyak digunakan pada program terstruktur, karena: • •
Contoh: const Alfabet = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'; kar1 = 'FGHI'; kar2 = 'F'; kar3 = 'JUGA'; kar4 = 'PQRST'; Begin writeln(Alfabet); writeln; writeln(kar1,' ada di posisi ke ',Pos(kar1,Alfabet)); writeln(kar2,' ada di posisi ke ',Pos(kar2,Alfabet)); writeln(kar3,' ada di posisi ke ',Pos(kar3,Alfabet)); writeln(kar4,' ada di posisi ke ',Pos(kar4,Alfabet)); End. ABCDEFGHIJKLMNOPQRSTUVWXYZ FGHI ada di posisi ke 6 F ada di posisi ke 6 JUGA ada di posisi ke 0 PQRST ada di posisi ke 16
Merupakan penerapan konsep program modular, yaitu memecah-mecah program yang rumit menjadi program-program bagian yang lebih sederhana dalam bentuk prosedur-prosedur. Untuk hal-hal yang sering dilakukan berulang-ulang, cukup dituliskan sekali saja dalam prosedur dan dapat dipanggil atau dipergunakan sewaktu-waktu bila diperlukan.
Contoh: Procedure Garis; Begin Writeln(‘------------‘); End; Begin Garis; Writeln(‘Turbo Pascal’); Garis; End. -----------Turbo Pascal ------------
Nilai di dalam suatu modul program Pascal sifatnya lokal, artinya hanya dapat digunakan pada modul yang bersangkutan saja, tidak dapat digunakan pada modul lainnya. Sebaliknya, agar dapat digunakan oleh seluruh modul maka variabel harus dideklarasikan secara global, yaitu dideklarasikan diluar modul program.
DhrMuiz. 2007. Pemrograman Pascal Created 07 Mei 2007 Updated 14 Desember 2008 E-mail: [email protected], [email protected], [email protected]
37
DhrMuiz. 2007. Pemrograman Pascal Created 07 Mei 2007 Updated 14 Desember 2008 E-mail: [email protected], [email protected], [email protected]
38
Contoh program yang salah: Procedure Proses; Var X,Y : real; { x dan y adalah proses } Begin Write(‘Nilai x : ‘);readln(X); Y:=x*x; End;
Hasil A + B = 12 Hasil Y + 10 = 22 variabel
lokal
untuk
modul Prosedur dapat memanggil prosedur lainnya dan dapat pula memanggil dirinya sendiri atau istilah lainnya adalah proses rekursi. Contoh:
Begin Proses; Writeln(‘Nilai y : ‘,Y:2:1); { salah, karena variabel Y belum dideklarasikan untuk modul utama} End.
Procedure Rekursi(I:integer); Begin Writeln(‘proses yang ke-‘,I); Dec(I); If I>0 Then Rekursi(I); End; Begin Rekursi(5); End.
Contoh program yang benar tetapi bernilai salah Var Y : real; Procedure Proses; Var X,Y : real; { x dan y adalah proses } Begin Write(‘Nilai x : ‘);readln(X); Y:=x*x; End;
proses proses proses proses proses variabel
lokal
untuk
Nilai x : 5 Nilai y : 0.0 { Y bernilai 0, karena Y yang dicetak adalah variabel Y milik modul utama}
Prosedur dapat dibuat dengan menggunakan parameter-parameter variabel, baik dalam bentuk nilai atau referensi (acuan).
Var Y: Integer; Begin Hitung(5,7,Y); Writeln(‘Hasil Y + 10 ‘,Y); End.
ke-5 ke-4 ke-3 ke-2 ke-1
modul
Begin Proses; Writeln(‘Nilai y : ‘,Y); End.
Procedure Hitung(A,B:integer; Var C:integer); {A dan B adalah parameter nilai dan C adalah parameter acuan} Begin C:=A + B; Writeln(‘Hasil A + B = ‘,C); End;
yang yang yang yang yang
OUTPUT:
FUNGSI (FUNCTION) Blok fungsi hampir sama dengan blok prosedur, hanya saja fungsi dapat mengembalikan nilai dari tipe yang dideklarasikannya. Contoh: Function Hitung(Var A,B : integer):Integer; Begin Hitung:=A + B; End; Var X,Y : Integer; Begin Write(‘Nilai X = ‘); Readln(X); Write(‘Nilai Y = ‘); Readln(Y); Writeln; Writeln(X,’ + ‘,Y,’ = ‘,Hitung(X,Y); End. Nilai X = 2 Nilai Y = 9 2 + 9 = 11
RECORD Record merupakan tipe data terstruktur, yang terdiri dari item data dan masing-masing dapat mempunyai tipe data yang berbeda-beda. Item data itu dinamakan FIELD.
DhrMuiz. 2007. Pemrograman Pascal Created 07 Mei 2007 Updated 14 Desember 2008 E-mail: [email protected], [email protected], [email protected]
39
DEKLARASI RECORD Tipe data Record diawali dengan keyword RECORD yang diikuti oleh suatu daftar field dan diakhiri dengan keyword END. Contoh: TYPE Rec_Langganan KODE NAMA ALAMAT PIUTANG END; VAR PELANGGAN
= : : : :
RECORD STRING[10]; STRING[30]; STRING[50]; REAL;
DhrMuiz. 2007. Pemrograman Pascal Created 07 Mei 2007 Updated 14 Desember 2008 E-mail: [email protected], [email protected], [email protected]
End; Function Hitung_Nilai_Rata(mid,final:real):real; Var rasio1,rasio2:real; Begin rasio1:=mid*(70/100); { 70% dari nilai mid} rasio2:=final*(30/100); { 30% dari nilai final} Hitung_Nilai_Rata:=rasio1+rasio2; End; Procedure Proses; Begin mhs.nilai_rata :=Hitung_Nilai_Rata(mhs.nilai_mid,mhs.nilai_fin); End;
: Rec_Langganan;
Atau mendeklarasikan langsung di bagian deklarasi variabel VAR PELANGGAN : RECORD KODE : NAMA : ALAMAT : PIUTANG : END;
STRING[10]; STRING[30]; STRING[50]; REAL;
MENGGUNAKAN TIPE DATA RECORD Tipe data recordnya adalah “Rec_Langganan” dan variabel yang menggunakan tipe tersebut adalah “PELANGGAN”, jika ingin memberikan nilai ke salah satu field, contohnya field “NAMA” maka cara penulisannya adalah: PELANGGAN.NAMA := ‘Bla-bla bin bla’;
Variabel Record Contoh: Uses crt; type myRec = Record nama : npm : kelas : nilai_mid : nilai_fin : nilai_rata : end; Var mhs
Titik Penghubung
Variabel Field
string[30]; string[8]; string[6]; real; real; real;
: myRec;
Procedure Input; Begin writeln('Input Data Mahasiswa:');writeln; write('Nama Mahasiswa : ');readln(mhs.nama); write('NPM : ');readln(mhs.npm); write('Kelas : ');readln(mhs.kelas); write('Nilai Mid Test : ');readln(mhs.nilai_mid); write('Nilai Final Test : ');readln(mhs.nilai_fin);
Procedure Cetak; Begin writeln('Cetak Data Mahasiswa:');writeln; writeln('Nama Mahasiswa : ',mhs.nama); writeln('NPM : ',mhs.npm); writeln('Kelas : ',mhs.kelas); writeln('Nilai Mid Test : ',mhs.nilai_mid:2:2); writeln('Nilai Final Test : ',mhs.nilai_fin:2:2); writeln('Nilai Rata-rata : ',mhs.nilai_rata:2:2); End; Begin clrscr; Input; Proses; writeln; Cetak; End. Input Data Mahasiswa: Nama Mahasiswa NPM Kelas Nilai Mid Test Nilai Final Test
: : : : :
Jhon Keboy 77704567 3KX-20 56 78
Cetak Data Mahasiswa: Nama Mahasiswa NPM Kelas Nilai Mid Test Nilai Final Test Nilai Rata-rata
: : : : : :
Jhon Keboy 77704567 3KX-20 56.00 78.00 62.60
Penulisan variabel record dapat dipersingkat dengan menggunakan statemen WITH. Contoh: Type Hasil = RECORD Jari_jari
: REAL;
40
DhrMuiz. 2007. Pemrograman Pascal Created 07 Mei 2007 Updated 14 Desember 2008 E-mail: [email protected], [email protected], [email protected]
Keliling Luas
: REAL’ : REAL;
END; Var Lingkaran : Hasil; Begin With Lingkaran Do Begin Write(‘Jari-jari lingkaran : ‘);Readln(Jari_jari); Keliling := 2*PI*Jari_jari; Luas := PI*SQR(Jari_Jari); Writeln; Writeln(‘Keliling Lingkaran = ‘,Keliling:7:2); Writeln(‘Luas Lingkaran =’,Luas:7:2); End; End; Jari-jari Lingkaran : 10 Keliling Lingkaran Luas Lingkaran
= 62.83 = 314.16
OUTPUT:
Contoh Program Record menggunakan Array Uses crt; Type myRec = Record nama : npm : kelas : nilai_mid : nilai_fin : nilai_rata : end; Var mhs tombol nomor
string[30]; string[8]; string[6]; real; real; real;
: array[1..100] of myRec; : char; : integer;
Procedure BikinGaris(x,y,max:integer;k:char); var a : Integer; Begin for a:=0 to max-1 do begin gotoxy(x+a,y); write(k); end; writeln; End; Procedure Input; Begin Repeat clrscr; inc(nomor);
41
DhrMuiz. 2007. Pemrograman Pascal Created 07 Mei 2007 Updated 14 Desember 2008 E-mail: [email protected], [email protected], [email protected]
writeln('Input Data Mahasiswa yang ke:',nomor);writeln; With mhs[nomor] do begin write('Nama Mahasiswa : ');readln(nama); write('NPM : ');readln(npm); write('Kelas : ');readln(kelas); write('Nilai Mid Test : ');readln(nilai_mid); write('Nilai Final Test : ');readln(nilai_fin); end; writeln; write('Anda Mo Nginput Lagi[Y/T] : '); tombol:=readkey; { readkey-> fungsi untuk membaca 1 karakter dari keyboard } Until tombol in ['T','t']; End; Function Hitung_Nilai_Rata(mid,final:real):real; Var rasio1,rasio2:real; Begin rasio1:=mid*(70/100); { 70% dari nilai mid} rasio2:=final*(30/100); { 30% dari nilai final} Hitung_Nilai_Rata:=rasio1+rasio2; End; Procedure Proses; Var i :integer; Begin for i:=1 to nomor do mhs[i].nilai_rata :=Hitung_Nilai_Rata(mhs[i].nilai_mid,mhs[i].nilai_fin); End; Procedure Cetak; var i : integer; Begin clrscr; writeln('Cetak Data Mahasiswa:');writeln; BikinGaris(1,wherey,72,'='); gotoxy(1,wherey);write('NO'); gotoxy(6,wherey);write('NPM'); gotoxy(16,wherey);write('NAMA'); gotoxy(46,wherey);write('KELAS'); gotoxy(54,wherey);write('MID'); gotoxy(60,wherey);write('FINAL'); gotoxy(66,wherey);write('RATA'); writeln; BikinGaris(1,wherey,72,''); for i:=1 to nomor do Begin with mhs[i] do begin gotoxy(1,wherey);write(i:3); gotoxy(6,wherey);write(npm); gotoxy(16,wherey);write(nama); gotoxy(46,wherey);write(kelas); gotoxy(54,wherey);write(nilai_mid:2:2); gotoxy(60,wherey);write(nilai_fin:2:2); gotoxy(66,wherey);write(nilai_rata:2:2);writeln; end;
42
DhrMuiz. 2007. Pemrograman Pascal Created 07 Mei 2007 Updated 14 Desember 2008 E-mail: [email protected], [email protected], [email protected]
43
End; BikinGaris(1,wherey,72,'='); End; Begin clrscr; Input; Proses; Cetak;
DhrMuiz. 2007. Pemrograman Pascal Created 07 Mei 2007 Updated 14 Desember 2008 E-mail: [email protected], [email protected], [email protected]
TIPE_DATA = RECORD NAMA : ALAMAT : NO_TELP : USIA : END; VAR File_Data D_Data
End.
44
string[25]; string[50]; string[15]; INTEGER;
: FILE OF TIPE_DATA; : Tipe_Data;
Input Data Mahasiswa yang ke:6
OPERASI PADA FILE
Nama Mahasiswa NPM Kelas Nilai Mid Test Nilai Final Test
1. Statemen ASSIGN Statemen ini digunakan untuk memilih/membuka berkas yang akan dioperasikan sesuai dengan tipe berkas yang kita deklarasikan.
: : : : :
Jo'eng 64502453 3KY-03 57 89
ASSIGN(variabel_berkas, nama_berkas);
Anda Mo Nginput Lagi[Y/T] : Contoh: Assign(File_Data,’biodata.dat’); Cetak Data Mahasiswa: ======================================================================== NO NPM NAMA KELAS MID FINAL RATA -----------------------------------------------------------------------1 45301767 Cecep Sarecep 2KT-13 45.00 89.00 58.20 2 23401897 Didin Ba Didin 2KT-13 56.00 75.00 61.70 3 44203787 Karlina de Jenggel 3YH-04 56.00 34.00 49.40 4 33802565 Maman Sukarman 3TK-02 80.00 76.00 78.80 5 45302456 Urip Rahman 2KT-10 77.00 65.00 73.40 6 64502453 Jo'eng 3KY-03 57.00 89.00 66.60 ========================================================================
2. Statemen CLOSE Close digunakan untuk menutup berkas yang telah dibuka oleh statemen assign. Dan hanya menyebutkan variabel_berkas nya saja tanpa nama berkas. Contoh: CLOSE(File_Data); 3. Statemen REWRITE Digunakan untuk membuat berkas baru yang telah dinyatakan dengan variabel berkas. Jika berkas tersebut sudah ada dalam media penyimpan, maka berkas tersebut akan digantikan dengan berkas yang baru. Contoh: REWRITE(File_Data);
FILE File (Berkas) adalah kumpulan sejumlah komponen yang bertipe data sama, yang jumlah tidak tertentu. Pengertian file atau berkas di analogikan dengan simpanan arsip.
4. Statemen RESET Digunakan untuk mengeset penunjuk komponen kembali ke nomor 0. Contoh: RESET(File_Data);
Di dalam Pascal, berkas menyediakan data yang nantinya akan digunakan oleh suatu program. Berkas dapat berupa disk file yaitu media penyimpanan yang berupa cakram magnetis, pita magnetis, kartu plong dan media-media penyimpanan lainnya. Berkas mempunyai sifat sebagai berkas berurutan (Sequential File), dimana untuk membaca record ke-10 misalnya, maka pembacaan harus dilakukan dari record 1, 2, 3 dan seterusnya. Atau dapat pula sebagai berkas acak (Random File). MENDEKLARASIKAN FILE TYPE Var1 = FILE OF var2; Atau VAR var1 = FILE OF var2;
5. Statemen WRITE Statemen ini digunakan untuk menuliskan komponen berkas (data) ke dalam media penyimpan. Dan akan menempatkan komponen baru tersebut di akhir record. WRITE(variabel_berkas,variabel_komponen_berkas); Contoh: WRITE(File_Data,D_Data); 6. Statemen READ Read digunakan untuk membaca komponen berkas dari dalam media penyimpan. Pembacaan disesuaikan dengan posisi penunjuk komponen, setelah selesai membaca, posisi penunjuk komponen akan ditempatkan ke komponen berkas berikutnya.
Contoh READ(variabel_berkas,variabel_komponen_berkas); TYPE
DhrMuiz. 2007. Pemrograman Pascal Created 07 Mei 2007 Updated 14 Desember 2008 E-mail: [email protected], [email protected], [email protected]
45
DhrMuiz. 2007. Pemrograman Pascal Created 07 Mei 2007 Updated 14 Desember 2008 E-mail: [email protected], [email protected], [email protected]
Contoh: READ(File_Data,D_Data); 7. Statemen SEEK Digunakan untuk menggerakkan penunjuk komponen ke nomor komponen tertentu. Dengan nomor awal record adalah 0.
Contoh: ERASE(File_Data); 13. Statemen RENAME Digunakan untuk memberi nama baru pada berkas yang dinyatakan oleh variabel berkas. Dan hanya dapat dilakukan pada berkas yang tertutup.
SEEK(variabel_berkas,nomor_record);
RENAME(variabel_berkas, nama_baru);
Contoh: SEEK(File_Data,3); { diarahkan ke komponen yang ketiga);
Contoh: RENAME(File_Data,’baru.dat’);
8. Fungsi FILEPOS Fungsi ini digunakan untuk mengetahui letak penunjuk komponen berada. Dan hasilnya berupa bilangan bulat yang menunjukkan posisi penunjuk komponen pada saat itu. FILEPOS(variabel_berkas); Contoh: Posisi := FILEPOS(File_Data);
Contoh: { ****************************************** ** PROGRAM MEMASUKKAN DATA KE DALAM FILE * ** NAMA FILENYA ADALAH mhs.dat * ****************************************** } Uses Crt; Type Nilai = Record Nama Npm Nilai_Mid Nilai_Fin Nilai_Rata End;
9. Fungsi FILESIZE Digunakan untuk mengetahui ukuran dari suatu berkas. Jika fungsi ini bernilai 0 berarti berkas tersebut masih kosong. FILESIZE(variabel_berkas); Contoh: Ukuran := FILESIZE(File_Data); { ukuran data dalam satuan byte }
10. Fungsi EOF Fungsi ini digunakan untuk mengetahui apakah penunjuk komponen berada di akhir berkas (End Of File = EOF), jika YA maka bernilai TRUE dan jika TIDAK maka bernilai FALSE. EOF(variabel_berkas); Contoh: Akhir_File := EOF(File_Data); 11. Statemen FLUSH Flush digunakan untuk mengosongkan penyangga (buffer) dari berkas, dengan demikian akan memastikan bahwa isi penyangga telah dituliskan dalam media penyimpan setelah statemen WRITE selesai dikerjakan. FLUSH(variabel_berkas); Contoh: FLUSH(File_Data); 12. Statemen ERASE Erase digunakan untuk menghapus file atau berkas yang telah tertutup atau sedang tidak digunakan. ERASE(variabel_berkas);
46
: : : : :
string[25]; string[8]; Real; Real; Real;
: : : :
File Of Nilai; Nilai; Integer; Char;
Var File_Nilai Nilai_Mhs i,j Lagi
Function Hitung_Nilai_Rata(mid,final:real):real; Var rasio1,rasio2 :real; Begin rasio1:=mid*(70/100); { 70% dari nilai mid} rasio2:=final*(30/100); { 30% dari nilai final} Hitung_Nilai_Rata:=rasio1+rasio2; End; Begin Assign(File_Nilai,'Mhs.Dat'); Rewrite(File_Nilai); i:=0; Repeat Inc(i); Clrscr; Writeln('Mengisi data pada File "Mhs.Dat"....'); Writeln('------------------------------------'); Writeln('Mengisi Data ke-',i:2); Writeln; With Nilai_Mhs Do Begin Nilai_Rata:=0.0; Write('Nama Mahasiswa : ');Readln(Nama);
DhrMuiz. 2007. Pemrograman Pascal Created 07 Mei 2007 Updated 14 Desember 2008 E-mail: [email protected], [email protected], [email protected]
47
Write('NPM Mahasiswa : ');Readln(Npm); Write('Nilai Mid Test : ');Readln(Nilai_Mid); Write('Nilai Final Test : ');Readln(Nilai_Fin); Nilai_Rata:=Hitung_Nilai_Rata(Nilai_Mid,Nilai_Fin); End; Write(File_Nilai,Nilai_Mhs); Writeln; Write('Akan Mengisi Lagi [a/Idak] : ');Readln(Lagi); Until Not (Lagi In ['Y','y']); Close(File_Nilai); End. Mengisi data pada File "Mhs.Dat".... -----------------------------------Mengisi Data ke- 1 Nama Mahasiswa NPM Mahasiswa Nilai Mid Test Nilai Final Test
: : : :
Yudhi Sumanto Akbar 45689778 56 78
Akan Mengisi Lagi [a/Idak] : Y
Contoh: { ****************************************** ** PROGRAM MEMBACA DATA DARI FILE * ** NAMA FILENYA ADALAH mhs.dat * ****************************************** } Uses Crt; Const Garis='--------------------------------------------------------------------'; Type Nilai = Record Nama : string[25]; Npm : string[8]; Nilai_Mid : Real; Nilai_Fin : Real; Nilai_Rata : Real; End; Var File_Nilai Nilai_Mhs i,j,jumlah_data Lagi
: : : :
File Of Nilai; Nilai; Integer; Char;
Function Hitung_Nilai_Rata(mid,final:real):real; Var rasio1,rasio2 :real; Begin rasio1:=mid*(70/100); { 70% dari nilai mid} rasio2:=final*(30/100); { 30% dari nilai final} Hitung_Nilai_Rata:=rasio1+rasio2; End; Begin Assign(File_Nilai,'Mhs.Dat'); Reset(File_Nilai);
DhrMuiz. 2007. Pemrograman Pascal Created 07 Mei 2007 Updated 14 Desember 2008 E-mail: [email protected], [email protected], [email protected]
48
Jumlah_Data:=FileSize(File_Nilai); Clrscr; Writeln(' ':20,'DAFTAR NILAI UJIAN MAHASISWA'); Writeln(' ':20,'----------------------------'); Writeln;Writeln(Garis); Write('| No | Nama Mahasiswa | NPM |'); Writeln(' MID | FIN | RATA |'); Writeln(Garis); For i:=1 To Jumlah_Data Do Begin Read(File_Nilai,Nilai_Mhs); Gotoxy(1,wherey);Write('| ',i:2,' |'); With Nilai_Mhs Do Begin Gotoxy(8,wherey);Write(Nama); Gotoxy(35,wherey);Write('| ',Npm); Gotoxy(46,wherey);Write('| ',Nilai_Mid:2:1); Gotoxy(54,wherey);Write('| ',Nilai_Fin:2:1); Gotoxy(62,wherey);Write('| ',Nilai_Rata:2:1,' |'); End; Writeln; End; Writeln(Garis); Close(File_Nilai); End. DAFTAR NILAI UJIAN MAHASISWA -----------------------------------------------------------------------------------------------| No | Nama Mahasiswa | NPM | MID | FIN | RATA | --------------------------------------------------------------------| 1 | Yudhi Sumanto Akbar | 45689778 | 56.0 | 78.0 | 62.6 | | 2 | Rani Sianturi | 55198543 | 78.0 | 67.0 | 74.7 | | 3 | Verry Van Vasten | 33297888 | 65.0 | 34.0 | 55.7 | | 4 | Wisnu | 88895342 | 77.0 | 48.0 | 68.3 | | 5 | Eliesah | 22196332 | 76.0 | 89.0 | 79.9 | | 6 | Hattahat | 64399542 | 45.0 | 55.0 | 48.0 | | 7 | Aim | 66594656 | 63.0 | 72.0 | 65.7 | | 8 | Yahya Kopet | 44597556 | 76.0 | 54.0 | 69.4 | | 9 | Enik Mugiharto | 22190778 | 56.0 | 33.0 | 49.1 | | 10 | Koen-Koen | 33296456 | 86.0 | 32.0 | 69.8 | | 11 | A-One | 33196432 | 87.0 | 81.0 | 85.2 | | 12 | Djoko | 22187899 | 54.0 | 22.0 | 44.4 | | 13 | Yuliar | 21095342 | 55.0 | 56.0 | 55.3 | | 14 | Sulis | 21395651 | 88.0 | 52.0 | 77.2 | ---------------------------------------------------------------------
FILE (BERKAS) TEXT Selain yang telah dijelaskan di atas, Pascal menyediakan tipe berkas yang lain, yaitu berkas TEXT, berkas ini berisi deretan karakter. Komponen-komponen pada berkas teks membentuk suatu baris dan setiap baris diakhiri tanda akhir baris (end-of-line, carriage return, atau line feed). Setiap akhir file (berkas) diakhir dengan tanda akhir berkas (end-of-file, CTRL-Z). Cara pendeklarasiannya adalah: TYPE var1 = TEXT;
DhrMuiz. 2007. Pemrograman Pascal Created 07 Mei 2007 Updated 14 Desember 2008 E-mail: [email protected], [email protected], [email protected]
49
Atau VAR Var1 : TEXT; Operasi-operasi yang digunakan dalam file teks sama dengan operasi-operasi sebelumnya, yaitu assign, rewrite, reset, read, eof dan write. Dengan tambahan statemen-statemen di bawah ini: 1. Statemen WRITELN Digunakan untuk menuliskan satu baris data, setelah selesai, penunjuk akan turun ke baris berikutnya.
DhrMuiz. 2007. Pemrograman Pascal Created 07 Mei 2007 Updated 14 Desember 2008 E-mail: [email protected], [email protected], [email protected]
Uses Crt; Var File_Text d_text
50
: Text; : String;
Begin Assign(File_Text,'MyText.txt'); Rewrite(File_Text); Clrscr; Writeln('Ketikan beberapa kalimat bebas, dan Ketik "$"+<ENTER> untuk selesai !');
WRITELN(variabel_berkas,teks); Contoh: WRITELN(File_text,’Setelah kalimat ini di tulis, pointer akan menunjuk ke bawah’); 2. Statemen READLN Digunakan untuk membaca satu baris data, dan penunjuk akan turun ke baris berikutnya.
Writeln('================================================================== ==='); Repeat Readln(d_text); If d_text[1]<>'$' Then Writeln(File_Text,d_text); Until d_text[1]='$'; Close(File_Text); End.
READLN(variabel_berkas,teks); Contoh: READLN(File_Text,text_nya); WRITELN(text_nya); 3. Fungsi EOLN Fungsi ini digunakan untuk mengetes apakah penunjuk ada di akhir suatu baris atau tidak, jika ya maka akan mengembalikan nilai TRUE dan jika tidak akan mengembalikan nilai FALSE.
Ketikan beberapa kalimat bebas, dan Ketik "$"+<ENTER> untuk selesai ! ===================================================================== Ini Hanyalah sebuah Kata-kata.......... dan mungkin tak ada maknanya.. Namun tiada salahnya untuk diuraikan.... karena ini hanyalah ungkapan..... $
EOLN(variabel_berkas); Contoh: Contoh: Akhir_baris := EOLN(File_Text); 4. Fungsi SEEKEOF Kegunaannya sama dengan fungsi EOF, tetapi akan melompati blank dan tab sebelum mengetes tanda akhir berkas. Tipe fungsi ini adalah boolean. Contoh: SEEKEOF(File_Text); 5. Fungsi SEEKEOLN Hampir sama dengan fungsi EOLN, tetapi akan melompati blank dan tab sebelum mengetes tanda akhir baris. Tipe fungsi ini adalah boolean. Contoh: SEEKEOLN(File_Text);
Contoh: { ************************************** ** PROGRAM MENYIMPAN TEXT KE FILE ** ** DENGAN NAMA FILENYA "MyText.TXT" ** **************************************}
{ ************************************** ** PROGRAM MEMBACA TEXT DARI FILE ** ** DENGAN NAMA FILENYA "MyText.TXT" ** **************************************} Uses Crt; Var File_Text d_text
: Text; : String;
Begin Assign(File_Text,'MyText.txt'); Reset(File_Text); Clrscr; Writeln('Hasil Pembacaan dari File MyText.txt !'); Writeln('======================================='); While Not Eof(File_Text) Do Begin Readln(File_Text,d_Text); Writeln(d_text); End; Close(File_Text); End. Hasil Pembacaan dari File MyText.txt !
DhrMuiz. 2007. Pemrograman Pascal Created 07 Mei 2007 Updated 14 Desember 2008 E-mail: [email protected], [email protected], [email protected]
51
======================================= Ini Hanyalah sebuah Kata-kata.......... dan mungkin tak ada maknanya.. Namun tiada salahnya untuk diuraikan.... karena ini hanyalah ungkapan.....
FILE TIDAK BERTIPE Ada satu jenis berkas atau file, yaitu berkas yang tidak bertipe, artinya tipe data pada berkas ini adalah sembarang. Biasanya tipe berkas ini digunakan untuk menyimpan data-data yang tidak terdefinisikan dalam Pascal atau file-file binary, contohnya file suara (WAV, MP3, MOD, MID, WMA, dll), file gambar (BMP, JPEG, JPG, TIFF, RAW, PCX, dll), file enkripsi, file executable, file video (MPEG, MOV, DAT, dll). Cara pendeklarasian berkas tersebut adalah: TYPE var1 = FILE; Atau VAR Var1 : FILE;
DhrMuiz. 2007. Pemrograman Pascal Created 07 Mei 2007 Updated 14 Desember 2008 E-mail: [email protected], [email protected], [email protected]
52
Repeat BlockRead(File_Input, Buf, SizeOf(Buf), Jumlah_DIbaca); BlockWrite(File_Output, Buf, Jumlah_Dibaca, Jumlah_DiRekam); Until (Jumlah_Dibaca = 0) or (Jumlah_DiRekam <> Jumlah_Dibaca); Close(File_Input); Close(File_Output); End. Setelah program MyCopy.pas di compile, akan menghasilkan MyCopy.exe (Perintah External DOS). Cara penggunaanya adalah menyebutkan nama file yang akan dicopy dan nama file yang akan menjadi duplikatnya. jika tidak menggunakan parameter. A:\>MyCopy Program Untuk Mengcopy File.... ------------------------------Use: MyCopy Program dibatalkan.....!
Jika menggunakan parameter.
Operasi-operasi yang digunakan untuk membuka dan menutup file sama dengan tipe berkas yang lainnya. Namun untuk penulisan dan pembacaan harus mengunakan statemen di bawah ini: BLOCKREAD( , , <jumlah dibaca> , <jumlah yang telah dibaca>); BLOCKWRITE( , , <jumlah ditulis> , <jumlah yang telah ditulis>);
A:\>MyCopy writef.exe coba.dat Program Untuk Mengcopy File.... ------------------------------Mengcopy File writef.exe ke coba.dat => Ukuran File: 7728 bytes...
POINTER DAN STRUKTUR DATA DINAMIK Contoh program (MyCopy.pas) berfungsi untuk mengcopy sebuah file: Program MyCopy; Uses Crt; Var File_Input, File_Output Jumlah_Dibaca, Jumlah_DiRekam Buf
: FILE; : Word; : array[1..2048] of Char;
Begin Clrscr; Writeln('Program Untuk Mengcopy File....'); Writeln('-------------------------------'); If ParamCount<=1 Then { Jika parameter tidak disebutkan } Begin Writeln('Use: MyCopy '); Writeln('Program dibatalkan.....!'); Halt(0); { Halt berfungsi untuk menghentikan program dan kembali ke DOS } End; Assign(File_Input, ParamStr(1)); { Membuka File input dan nama file di tentukan dari Parameter Pertama } Reset(File_Input, 1); { Record size = 1 Byte }
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:
Assign(File_Output, ParamStr(2)); { Membuka File Output dan nama file di tentukan dari Parameter Kedua } Rewrite(File_Output, 1); { Record size = 1 } Writeln('Mengcopy File ',ParamStr(1),' ke ',ParamStr(2),' => Ukuran File: ', FileSize(File_Input), ' bytes...');
Type TipeString = string[15]; Ptr_String = ^ TipeString; Var Nama
: Ptr_String;
DhrMuiz. 2007. Pemrograman Pascal Created 07 Mei 2007 Updated 14 Desember 2008 E-mail: [email protected], [email protected], [email protected]
53
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.
DhrMuiz. 2007. Pemrograman Pascal Created 07 Mei 2007 Updated 14 Desember 2008 E-mail: [email protected], [email protected], [email protected]
54
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
Node
PROGRAM SINGLE_LIST; USES CRT; Type
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.
Nama,Npm,Ipk Ipk Next
Next
Ptr_SList = ^SList; SList = Record Nama : String[30]; Npm : String[8];
: Real; : Ptr_SList;
End; Var Head,Tail,Base : Ptr_SList; 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;
DhrMuiz. 2007. Pemrograman Pascal Created 07 Mei 2007 Updated 14 Desember 2008 E-mail: [email protected], [email protected], [email protected]
55
Baru^.Nama:=Nama; { Mengisi data pada node yang baru } Baru^.Npm:=Npm; Baru^.Ipk:=ipk; Baru^.Next:=NIL; Node baru HEAD = TAIL
Else Begin Tail^.Next:=Baru; Tail:=Baru; End;
Jika Head sudah ada data, maka untuk menambahkan data baru, kita hanya menggantikan informasi variabel next pada Tail untuk menunjuk ke node baru. Sebelum: TAIL
Node baru
Sesudah: HEAD
TAIL
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 GoNext: Ptr_SList; Begin
{ Fungsi untuk mendapatkan data berikutnya }
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”.
End;
Function GoTail: Ptr_SList; Var Temp:Ptr_SList; Begin Temp:=Head; While(Temp<>NIL) Do Temp:=Base^.Next; GoTail:=Temp; End;
Base:=Base^.Next; GoNext:=Base; End;
56
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.
If Head=Nil Then Begin Head:=Baru; Tail:=Baru; End
HEAD
DhrMuiz. 2007. Pemrograman Pascal Created 07 Mei 2007 Updated 14 Desember 2008 E-mail: [email protected], [email protected], [email protected]
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 dengan data yang 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; 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: HEAD
PREV
TAIL
TEMP
{ Fungsi untuk mendapatkan data akhir } A
B
C
D
E
Ganti informasi next pada Prev (Node B) ke node yang ditunjuk oleh informasi next pada node C yang berisi alamat node D
DhrMuiz. 2007. Pemrograman Pascal Created 07 Mei 2007 Updated 14 Desember 2008 E-mail: [email protected], [email protected], [email protected]
HEAD
A
PREV
B
57
TAIL
TEMP
C
D
E
Prev^.Next:=Temp^.Next; 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 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 a / idak : '); readln(Pilihan); Until Pilihan in ['T','t']; End; procedure Cetak; var Temp:Ptr_SList; No:integer;
DhrMuiz. 2007. Pemrograman Pascal Created 07 Mei 2007 Updated 14 Desember 2008 E-mail: [email protected], [email protected], [email protected]
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 else writeln('Data tidak ditemukan.........'); writeln;
58
DhrMuiz. 2007. Pemrograman Pascal Created 07 Mei 2007 Updated 14 Desember 2008 E-mail: [email protected], [email protected], [email protected]
writeln('Cari data lagi a / 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 di atas....<ENTER>'); readln; End; Until (Pilihan>='1') AND(Pilihan<='5'); Until (Pilihan='5'); End.
Referensi : Ananta Sjartuni, Lebih Lanjut dengan C ,Elex Media Komputindo,1995 Insap Santosa, Ir. M.SE, Dasar-dasar Pemrograman Pascal, Andi Yogyakarta, 1997 Jogiyanto H.M., Turbo Pascal , Andi Offset Yogyakarta, 1994 Sam A. Abolrous, Learn Pascal, Wordware Publishing, Inc, 2000
59