Modul Pascal 2pg
Modul Pascal 2pg
Pemrograman Pascal
Created 07 Mei 2007
Updated 14 Desember 2008
E-mail: dhrmuiz@gmail.com, imam_muiz@gunadarma.ac.id, muiz_imam@yahoo.com
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
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
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
Beginners 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
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:
Dengan
Variabelnya
Tipe
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 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.
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)
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
78
15 16
19 20
19 - 20
Ukuran
6 byte
4 byte
8 byte
10 byte
8 byte
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
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
ada 5 macam tipe real, yaitu real, single, double, extended dan comp.
VAR
Var_baru
: ARRAY[1..200,1..200] OF REAL;
WHILE akhir<=100 DO
BEGIN
write(akhir,' ');
simpan:=akhir;
akhir:=simpan+awal;
awal:=simpan;
END
my_rec = RECORD
Nama : STRING[90];
Npm
: STRING[8];
Nilai : REAL;
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
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
END.
2. Beberapa statemen boleh ditulis menjadi satu baris dipisahkan dengan tanda baca titk koma (;).
Simpan := akhir;
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;
VAR
Z,X,Y
c,d,a,b
: REAL;
: INTEGER;
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 }
BEGIN
Writeln(akhir);
Simpan := akhir;
Akhir:= simpan + awal;
Awal:=simpan;
END
VAR
nama : STRING[100];
BEGIN
Writeln(awal);
WHILE akhir <=100 DO
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);
11
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)
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 *)
C. URUTAN OPERASI
Operator
* / div mod
+-
Prioritas
Lebih tinggi (dikerjakan dulu)
Lebih rendah (dikerjakan kemudian)
Contoh:
x=
Operasi
benar
salah
12
Ungkapan A B / C, berarti
B
C
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
Sqrt (x)
Trunc (x)
Round (x)
Sqr (x)
Integer/real
Real
Real
Integer
Real
Real
Integer
Integer
Integer
Real
13
Hasil :=
Else If (Nilai
Hasil :=
Else If (Nilai
Hasil :=
Else
Hasil :=
Writeln;
writeln(Hasil
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.
1. Operator Not
Operator Not digunakan untuk mengingkari nilai suatu statemen boolean.
14
Nama Mahasiswa
Npm
Mid Test
Final Test
:
:
:
:
Pengki
66709878
40
30
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
10
kolom,
dan
nilai
15
16
Contoh:
Writeln (B:5);
5
Readln(A,B,C);
Read(D);
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:
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
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 sekarang
Fn = P1 +
: tingkat bunga per tahun
: jumlah tahun
: frekuensi pembayaran bunga dalam setahun
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);
Read(X,Y,Z);Writeln;
END.
:
:
:
:
17
5000000
3
2
2
18
2003
1200000
2010
6
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;
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
----------------------------
19
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
x2 adalah :
x1 , x 2 = B
D
2A
Dan
D = B 2 4 AC
20
Jika A = 0, maka
menjadi
Bx + C = 0
Contoh Program:
Contoh:
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.
21
= 1
= 2
= -8
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);
22
Nama Mahasiswa
Npm
Mid Test
Final Test
:
:
:
:
Pengki
66709878
40
30
23
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
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);
25
end
end.
26
5. Kata downto akan dikerjakan jika nilai variabel masih lebih besar atau sama dengan nilai
ungkapan2.
Cacah Data
Jumlah Data
Nilai Rata-rata
Nilai Maksimum
Nilai Minimum
=
=
=
=
=
6
27
4.50
7
2
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
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;
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
-----------------------------------------
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
: array[1..10] of real;
: array[-4..8] of real;
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
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
1
3
6
10
1
4
10
29
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
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
nama
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;
Begin
Clrscr;
Writeln('PENJUMLAHAN MATRIK');
Writeln('------------------');
Write('Tentukan ordo Matriks <x,y> : ');readln(ordo_x,ordo_y);
Writeln('Input Matrik <A>:');
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 <B>:');
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
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 !
PENJUMLAHAN MATRIK
-----------------Tentukan ordo Matriks <x,y> : 3 2
Input Matrik <A>:
6
-2
-1
3
4
9
Input Matrik <B>:
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
33
Percoba
Percob
Perco
Perc
Per
Pe
P
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.
: string[100];
: string[100];
Begin
kalimat:='ABCDEFGHIJKLMNOPQRSTUVWXYZ';
writeln(kalimat);
hasil:=Copy(kalimat,4,6);
35
writeln(hasil);
writeln(Copy(kalimat,9,1));
End.
ABCDEFGHIJKLMNOPQRSTUVWXYZ
DEFGHI
I
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.
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.
37
38
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.
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.
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.
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;
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;
STRING[10];
STRING[30];
STRING[50];
REAL;
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
:
:
:
:
:
:
Jhon Keboy
77704567
3KX-20
56.00
78.00
62.60
: REAL;
40
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:
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
42
43
End;
BikinGaris(1,wherey,72,'=');
End;
Begin
clrscr;
Input;
Proses;
Cetak;
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;
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);
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
45
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 }
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);
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 [<Y>a/<T>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
:
:
:
:
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);
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 |
---------------------------------------------------------------------
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.
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.
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 !
51
=======================================
Ini Hanyalah sebuah Kata-kata..........
dan mungkin tak ada maknanya..
Namun tiada salahnya untuk diuraikan....
karena ini hanyalah ungkapan.....
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 <File Input> <File Output>
Program dibatalkan.....!
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( <variabel berkas>, <buffer panampung>, <jumlah dibaca> , <jumlah
yang telah dibaca>);
BLOCKWRITE( <variabel berkas>, <buffer panampung>, <jumlah ditulis> ,
<jumlah yang telah ditulis>);
: 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 <File Input> <File Output>');
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;
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.
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.
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.
55
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
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;
Base:=Base^.Next;
GoNext:=Base;
End;
56
If Head=Nil Then
Begin
Head:=Baru;
Tail:=Baru;
End
HEAD
PREV
TAIL
TEMP
Ganti informasi next pada Prev (Node B) ke node yang ditunjuk oleh informasi next pada node C
yang berisi alamat node D
HEAD
PREV
57
TAIL
TEMP
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 <Y>a / <T>idak : ');
readln(Pilihan);
Until Pilihan in ['T','t'];
End;
procedure Cetak;
var
Temp:Ptr_SList;
No:integer;
Begin
Clrscr;
No:=1;
Writeln('
Cetak Data
: ');
writeln('---------------------------------');
Temp:=GoHead;
While(Temp<>NIL) Do
Begin
Write(No:3);
gotoxy(6,wherey);Write(Temp^.Nama);
gotoxy(36,wherey);Write(Temp^.Npm);
gotoxy(46,wherey);Write(Temp^.Ipk:4:2);writeln;
Temp:=GoNext;
inc(No);
End;
Readln;
End;
procedure Hapus;
var
npm:string;
Begin
clrscr;
writeln('
Hapus Data : ');
writeln('------------------------------');
write('Ketik Nomor NPM : ');readln(npm);
If Delete(npm) Then
Writeln('Data sudah di hapus........')
else
Writeln('Data tidak ditemukan.......');
readln;
end;
procedure Cari;
Var
npm:string;
pilihan:char;
Temp:Ptr_SLIst;
Begin
Pilihan:='Y';
Repeat
clrscr;
writeln('
Cari Data');
writeln('----------------------');
write('Ketik Nomor Npm : ');readln(npm);
Temp:=GoHead;
while (Temp<> NIL) DO
Begin
If Temp^.Npm = npm Then
break;
Temp:=GoNext;
End;
If Temp<> NIL Then
Begin
Writeln('Nama
: ',Temp^.Nama);
Writeln('Npm
: ',Temp^.Npm);
Writeln('Ipk
: ',Temp^.ipk:4:2);
End
else
writeln('Data tidak ditemukan.........');
writeln;
58
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