PENDAHULUAN
Bahasa Pascal adalah bahasa pemrograman tingkat tinggi (high level language) yang cukup populer, khususnya di Indonesia. Hal ini disebabkan bahasa Pascal lebih mudah dipahami dibanding bahasa pemrograman lainnya, seperti bahasa C, bahasa assembler, dan lain sebagainya. Selain itu, bahasa Pascal adalah bahasa pemrograman yang terstruktur dan lebih mendekati bahasa manusia (bahasa Inggris) sehingga sangat cocok diterapkan dalam dunia pendidikan. Dalam latihan ini, digunakan compiler FreePascal (www.freepascal.org) yang bersifat open source dan tersedia di banyak operating system (DOS, Windows, Linux, Macintosh, FreeBSD, dan lain sebagainya).
Sebelum mempelajari pemrograman dengan bahasa Pascal, sebaiknya mengerti terlebih dahulu tentang konsep dan teknik pemrograman. Konsep pemrograman adalah bentuk dasar dari suatu program yaitu algoritma program. Algoritma adalah urutan proses yang dilakukan oleh sebuah program, umumnya algoritma ini berbentuk flowchart (diagram alir). Teknik pemrograman adalah cara mengubah suatu algoritma menjadi program yang sebenarnya dengan bahasa pemrograman tertentu. Konsep dan teknik pemrograman adalah dasar dari pemrograman komputer, dengan menguasai kedua hal tersebut maka mempelajari pemrograman menjadi lebih mudah.
A. Struktur Program Pascal
Struktur dari suatu program pascal terdiri dari sebuah judul program dan suatu blok program atau badan program. Blok program dibagi lagi menjadi dua bagian, yaitu : bagian deklarasi dan bagian pernyataan.
Secara ringkas, struktur suatu program pascal dapat terdiri dari :
1. Judul program
2. Blok program
a. Bagian deklarasi
- deklarasi label
- deklarasi konstanta
- deklarasi tipe
- deklarasi variable
- deklarasi prosedur
- deklarasi fungsi
b. Bagian pernyataan
Program pascal yang paling sederhana adalah program yang hanya terdiri dari sebuah bagian pernyataan saja.
Begin
End.
Bentuk umum dari bagian pernyataan adalah :
Begin
Statement;
End .
Contoh :
Begin
Writeln ( ‘Saya pascal’ );
Writeln ( ‘————–‘ )
End .
Outputnya : Saya pascal
—————
Program pascal tidak mengenal aturan penulisan di kolom tertentu, jadi boleh ditulis mulai kolom berapapun. Penulisan statement-statement pada contoh program yang menjorok masuk beberapa kolom tidak mempunyai pengaruh diproses, hanya
dimaksudkan supaya mempermudah pembacaan program, sehingga akan lebih terlihat bagian-bagiannya, dan baik untuk dokumentasi.
Judul program sifatnya optional dan tidak signifikan didalam program. Jika ditulis dapat digunakan untuk memberi nama program dan daftar dari parameter tentang komunikasi program dengan lingkungannya yang sifatnya sebagai dokumentasi saja. Judul program bila ditulis harus terletak pada awal dari program dan diakhiri dengan titik koma.
Program contoh ;
Begin
Writeln ( ‘pascal’ );
Writeln( ‘—————‘ );
End
B. Operasi / Operator & Asignment
Tanda operasi (operator) di dalam bahasa Pascal dikelompokkan ke dalam 9 kategori, yaitu :
1. Assignment operator.
2. Binary operator.
3. Unary operator.
4. Bitwise operator.
5. Relational operator.
6. Logical operator.
7. Set operator.
8. String operator.
1.Assignment operator
Assignment operator (operator pengerjaan) menggunakan simbol titik dua diikuti oleh tanda sama dengan (:=).
Contoh :
A:=B
2.Binary operator
Digunakan untuk mengoperasikan dua buah operand. Operand dapat berbentuk konstanta ataupun variabel. Operator ini digunakan untuk operasi aritmatika yang berhubungan dengan nilai tipe data integer dan real.
Operator
Operasi
Tipe operand
Tipe hasil
* Perkalian real,real
integer,integer
real,integer real
integer
real
DIV Pembagian bulat integer,integer integer
/ Pembagian real real,real
integer,integer
real,integer real
real
real
MOD Sisa pembagian integer,integer integer
+ Pertambahan real,real
integer,integer
real,integer real
integer
real
- pengurangan real,real
integer,integer
real,real real
integer
real
Contoh :
15*5 hasilnya 75
20/3 hasilnya 6.6666666667E+00
20 div 3 hasilnya 6
20 mod 3 hasilnya 2
3.Unary operator
Operator ini hanya menggunakan sebuah operand saja. Dapat berupa unary minus dan unary plus. Unary minus digunakan untuk menunjukkan nilai negatif, baik pada operang numerik real maupun integer. Unaru plus adalah operator untuk memberai tanda plus.
Contoh :
-5 +7
-2.5 +2.5
4.Bitwise operator
Digunakan untuk operasi bit per bit pada nilai integer. Terdiri dari operator NOT, AND, OR, XOR, Shl, Shr.
5.Relational operator
Relational operator digunakan untuk membandingkan hubungan antara dua buah operand dan akan didapatkan hasil tipe boolean, yaitu True atau False. Terdiri dari operator : =, <, >, <=, >=, <>
6.Logical operator
Terdapat 4 buah logical operator yaitu : NOT, AND, OR dan XOR. Operator ini bekerja dengan nilai-nilai logika, yaitu True dan False.
7.Set operator
Digunakan untuk operasi himpunan.
8.String operator
Digunakan untuk operasi string. Hanya ada sebuah operator string saja, yaitu operator + yang digunakan untuk menggabungkan dua buah nilai string.
Contoh :
Nama1 := ‘Arief ‘;
Nama2 := ‘Kurniawan’;
Nama3 := Nama1 + Nama2;
C. Tipe-Tipe Data Pascal
Dalam Pascal, tipe data yang biasa digunakan adalah sebagai berikut :
Tipe Data :
1. Tipe Sederhana
Tipe Sederhana dibedakan menjadi :
1.Tipe Ordinal, yang dibedakan menjadi :
1.Interger
2.Shortint
3.Longint
4.Boolean
5.Char
] 6.Byte
7.Word
8.Subrange
9.Enumerated
2.Tipe Real
2. Tipe String
3. Tipe Terstruktur
Tipe Terstruktur dibedakan menjadi :
1.Array
2.Record
3.Set
4.File
4. Tipe Pointer
1. Tipe Data Sederhana
Disebut juga dengan tipe data skalar, yang bisa diartikan bahwa dalam sebuah perubah
hanya dimungkinkan untuk menyimpan sebuah nilai data. Tipe data sederhana terbagi dua
yaitu, tipe ordinal dan tipe real.
1. Tipe ordinal adalah subset dari tipe sederhana. Semua tipe sederhana disebut tipe ordinal kecuali real. Karakteristik tipe data ordinal adalah :
• Semua kemungkinan nilai dari sutu tipe ordinal merupakan himpunan berurutan (ordered set), dan setiap nilai berkaitan dengan ordinalitasnya, yaitu nilai integral. Dalam semua tipe, kecuali tipe integer, nilai pertama mempunyai ordinalitas 0, yang berikutnya 1 dan seterusnya. Ordinalitas dari tipe integer adalah nilai integer itu sendiri. Dalam hal ini semua nilai, kecuali yang pertama, mempunyai nilai pendahulu atau predesesor, dan semua nilai kecuali yang terakhir mempunyai suksesor.
• Fungsi standard ord dapat diterapkan pada sembarangan tipe ordinal untuk mengetahui ordinalitasnya.
• Fungsi standard pred dapat diterapkan untuk mengetahui predesesornya. Jika fungsi ini diterapkan pada nilai pertama, akan menyebabkan kesalahan.
• Fungsi standard succ dapat diterapkan untuk mengetahui suksesornya. Jika fungsi ini diterapkan pada nilai terakhir akan menyebabkan kesalahan.
2. Konstanta bertipe real adalah bilangan yang berisi titik desimal. Dalam pascal paling sedikit harus ada satu digit sebelum dan sesudah titik desimal. Tidak boleh ada koma dan nilainya bisa positif atau negatif. Bilangan riil juga bisa dinyatakan dalam bentuk eksponensial. Dalam pemakaiannya pangkat dari bilangan dasar 10 (yang digunakan untuk menunjukkan eksponensial) dinyatakan dengan notasi E. Jika dinyatakan dalam notasi Eksponensial, maka bilangan :
0.00017543 adalah 1.7543E-4
Dalam Turbo Pascal terdapat lima macam tipe riil, yaitu : real, single, double, extended dan comp. Tipe single, double, extended dan comp hanya bisa digunakan jika komputer anda dilengkapi dengan koprosesor numeris 80x87. Tabel 1 dibawah ini menunjukkan tipe-tipe riil lengkap dengan batasan nilainya. Dari tabel 1 tersebut, tipe comp hanya bisa menyimpan nilai bulat (whole value) yang mempunyai batasan -263 + 1 sampai 263 – 1. Operator yang dapat dioperasikan pada data tipe riil tersaji dalam tabel 2. Perhatikan bahwa operator pembagian untuk data integer (div) dan untuk real (/) akan memberikan hasil berbeda. Operator / dapat digunakan baik untuk data integer atau untuk data real, yang hasilnya berupa data real.
Operator-operator pada tipe riil
Operator Kegunaan
+ Penjumlahan
- Pengurangan
* Perkalian
/ Pembagian
Bilangan-bilangan riil banyak digunakan dalam perhitungan-perhitungan matematika, sains dan rekayasa dimana derajat ketelitian kadang-kadang sangat diperhatikan. Beberapa kesalahan mungkin akan terjadi sehubungan dengan pemakaian bilangan riil karena bilangan riil biasanya dinyatakan dalam notasi saintifik yang mempunyai cacah digit yang tetap. Beberapa bilangan memerlukan cacah digit yang tak terhingga. Sebagai contoh, pecahan 1/3 yang jika dinyatakan dalam bilangan riil. Akan mempunyai bentuk 0.3333333….
2. Tipe String
Data yang bertipe string adalah data yang berisi sederetan karakter yang banyaknya karakter bisa berubah-ubah sesuai dengan kebutuhan, yaitu dari 1 sampai 255 karakter. Tipe string yang tidak dinyatakan panjang karakternya dianggap mempunyai 255 karakter.
3. Tipe Terstruktur
Dalam tipe terstruktur setiap perubah bisa menyimpan lebih dari sebuah nilai data. Masing-masing nilai data tersebut disebut dengan komponen. Tipe terstruktur karakteristiknya ditentukan berdasar cara penstrukturan dan tipe masing-masing komponen. Jika komponennya juga bertipe terstruktur, tipe terstruktur yang dihasilkan mempunyai lebih dari sebuah tingkat penstrukturan. Tingkat penstrukturan bisa tak terbatas. Ukuran tipe terstruktur dalam Turbo Pascal maksimum 65520 byte.
4. Tipe Pointer
Semua tipe data yang disebutkan di atas, apabila digunakan untuk mendeklarasikan suatu perubah, maka sifat perubah tersebut adalah perubah yang statis. Pascal dilengkapi fasilitas yang memungkinkan pemakai untuk menggunakan perubah yang sifatnya dinamis, yang disebut dengan pointer.
D. Deklarasi (Konstanta, Variabel dan Ekspresi).
1. Konstanta
Konstanta adalah suatu identifier non-standar yang nilainya telah ditetapkan dalam suatu program dan dideklarasikan pada bagian deklarasi. Bagian umum deklarasinya adalah :
CONST identifier = nilai;
Contoh :
CONST phi = 3.14;
x= 2;
y = ‘S’;
2. Variabel
Variabel adalah suatu identifier non-standar yang nilainya tidak tetap atau nilainya merupakan hasil dari suatu proses. (variabel yang dimaksudkan disini sama seperti halnya arti variabel pada aljabar). Bentuk umum deklarasinya adalah :
1. Jika hanya 1 (satu) variabel yang dideklarasikan :
VAR identifier : jenis data;
2. Jika lebih dari 1 (satu) variabel dan masing-masing memiliki jenis data yang sama :
VAR id-1, id-2, …., id-3 : jenis data;
3. Jika beberapa variabel yang berbeda jenis datanya :
VAR identifier-1 : jenis data;
identifier-2 : jenis data;
.
.
.
identifier-n : jenis data;
4. Jika variabel yang dideklarasikan berjenis data non-standar :
TYPE id = (data_item_1,data_item_2,…,data_item_n);
VAR id-v : id;
SUB-RANGE :
TYPE id = data_item_pertama .. data_item_terakhir;
VAR id-v : id;
Contoh :
1. VAR x : integer;
2. VAR p,q,r : real;
3. VAR a,b : char;
m,n : boolean;
4. TYPE warna = (merah,hitam,biru,putih,kuning);
VAR x1,x2 : warna;
5. TYPE tahun = 1900 .. 1993;
VAR thn-1,thn-2,thn-3 : tahun;
3. Ekspresi
Sebuah ekspresi merupakan kumpulan dari operand-operand (seperti : bilangan, konstanta, variabel dll) yang bersama-sama dengan operator membentuk suatu bentuk aljabar dan menyatakan suatu nilai.
Ada 2 (dua) jenis ekspresi dalam bahasa Pascal, yaitu :
1. Ekspresi numerik / aritmatika, yaitu suatu ekspresi yang menghasilkan nilai numerik / aritmatika.
2. Ekspresi Boolean atau ekspresi logika, yaitu suatu ekspresi yang menghasilkan nilai boolean / logika (true/false).
Contoh :
1. (b * b – 4 * a * c) / (2*a) / (2 * a) ekspresi numerik, jika a,b dan c adalah bilangan (variabel bernilai numerik).
2. Upah < 1000.0 ekspresi boolean (“upah” adalah suatu variabel bernilai real). E. Kondisi (If, Case, For, While, Repeat) Seleksi kondisi adalah proses penentuan langkah berikutnya berdasarkan proses yang terjadi sebelumnya. Seleksi kondisi ini sangat penting dalam pemrograman sebab dengan adanya seleksi kondisi, program dapat menentukan proses apa yang harus dilakukan selanjutnya berdasarkan keadaan sebelumnya. Sehingga nampak seolaholah program dapat berpikir dan mengambil keputusan. Disinilah letak kekurangan komputer yaitu tidak mampu berpikir sendiri, semua hal yang dilakukan adalah berdasarkan perintah. Dalam Pascal ada tiga macam perintah seleksi kondisi, yaitu statement if…then, if…then…else dan case…of. Seleksi kondisi dengan if…then digunakan untuk mengambil satu keputusan diantara dua pilihan sedang seleksi kondisi dengan if…then…else digunakan untuk mengambil satu keputusan diantara banyak pilihan. case…of Untuk lebih memahami tentang seleksi kondisi, perhatikan contoh program di bawah ini : program Iterasi2; var Nilai : string; begin Writeln('Latihan Pascal 1: Perulangan dan Seleksi Kondisi'); Writeln('------------------------------------------------'); Writeln('Nama : ____________________'); Writeln('NIM : __________'); Writeln; Write('Masukkan nilai mata kuliah DKP Anda (huruf) : '); Readln(Nilai); if Length(Nilai) > 2 then
Writeln('Nilai tidak mungkin lebih dari dua karakter !');
else
begin
if Nilai = 'A' then
Writeln('Anda berbakat menjadi programer !')
else if Nilai = 'B+' then
Writeln('Anda bisa menjadi programer handal.')
else if Nilai = 'B' then
Writeln('Anda mampu menjadi programer.')
else if Nilai = 'C+' then
Writeln('Anda cukup mampu menjadi programer.')
else if Nilai = 'C' then
Writeln('Anda kurang tertarik pada pemrograman.')
else if Nilai = 'D+' then
Writeln('Anda tidak suka pemrograman, ya !')
else if Nilai = 'D' then
Writeln('Anda pasti benci lihat program !')
else if Nilai = 'E' then
Writeln('Anda pasti nggak niat kuliah !')
else
Writeln('Anda salah memasukkan nilai !');
end;
Readln;
end.
Sebagaimana pada program Iterasi1, jalankan program dengan F7. Kemudian ubah
baris perintah seleksi kondisi
if…then…else setelah
if…then…else yang pertama
menjadi case…of,
tentunya diikuti pula dengan beberapa perubahan yang lain sehingga program tetap dapat dijalankan.
F. Prosedur dan Fungsi
Pendahuluan
Sebuah program yang baik adalah program yang membagi permasalahan utama menjadi bagian-bagian kecil dimana setiap bagian kecil ditangani oleh sebuah subprogram, cara ini disebut dengan modular programming (pemrograman terbagi/terpecah). Cara ini termasuk pemrograman terstruktur dan sangat didukung oleh bahasa Pascal. Untuk itu, Pascal telah menyediakan dua jenis subprogram, yaitu procedure dan function (prosedur dan fungsi).
Dengan modular programming, program lebih mudah dibaca dan dimengerti Selain itu, pembenahan program dan penelusuran jalannya program (debugging) menjadi lebih mudah sebab dapat langsung diketahui subprogram mana yang berjalan tidak sesuai dengan yang diharapkan.
P r o s e d u r
Prosedur adalah subprogram yang menerima masukan tetapi tidak mempunyai keluaran secara langsung. Cara mendeklarasikan sebuah prosedur adalah sebagai berikut :
procedure A; { nama prosedur adalah A }
begin
{ statement }
end;
Pendeklarasian prosedur di atas adalah untuk prosedur yang tidak memerlukan parameter. Parameter adalah data masukan untuk subprogram yang nantinya akan diproses lebih lanjut dalam subprogram tersebut. Dalam Pascal, dikenal dua macam parameter yaitu :
1. parameter nilai (value parameter), dan
2. parameter referensi (reference parameter).
Cara mendeklarasikan parameter tersebut adalah sebagai berikut :
procedure B(X : integer; var Y : integer);
begin
{ statement }
end;
ada deklarasi prosedur di atas, parameter X adalah parameter nilai sedang parameter Y adalah parameter referensi. Jadi, pendeklarasian parameter referensi didahului oleh reserved word var. Parameter referensi ini nantinya dapat dijadikan sebagai variabel keluaran dari prosedur.
Untuk lebih memahami penggunaan prosedur dalam Pascal, perhatikan contoh program di bawah ini :
program Prosedur;
uses CRT;
var
Bil_1, Bil_2, Hasil : integer;
procedure Awal;
begin
Writeln('Latihan Pascal 2 : Prosedur dan Fungsi');
Writeln('--------------------------------------');
Writeln;
Writeln('Nama : ____________________');
Writeln('NIM : __________');
Writeln;
end;
procedure Baca_Data;
begin
Write('Masukkan bilangan pertama : ');
Readln(Bil_1);
Write('Masukkan bilangan kedua : ');
Readln(Bil_2);
Writeln;
end;
procedure Kali(A,B : integer);
var
I : integer;
begin
Hasil := 0;
for I := 1 to B do Hasil := Hasil + A;
end;
procedure Kalikan(A,B : integer; var C : integer);
var
I : integer;
begin
C := 0;
for I := 1 to B do C := C + A;
end;
begin
ClrScr;
Awal;
Baca_Data;
Kali(Bil_1, Bil_2);
Writeln(Bil_1:3,' x ',Bil_2:3,' = ',Hasil:5);
Kalikan(Bil_1, Bil_2, Hasil);
Writeln(Bil_1:3,' x ',Bil_2:3,' = ',Hasil:5);
Writeln;
Write('Tekan Enter...');
Readln;
end.
Perhatikan program di atas. Dua prosedur terakhir memiliki kemiripan, bedanya hanya pada jumlah parameter dan variabel hasil perkaliannya. Untuk lebih jelas, jalankan program dan perhatikan apa yang dilakukan oleh dua prosedur tersebut maka akan nampak perbedaan keduanya.
F u n g s i
Fungsi adalah subprogram yang menerima masukan dan mempunyai keluaran secara langsung. Cara mendeklarasikan sebuah fungsi adalah sebagai berikut :
function A : integer; { nama fungsi adalah A dengan }
begin { tipe data keluaran adalah integer }
{ statement }
A := 3; { nilai yang dikeluarkan fungsi }
end;
Sebagaimana dalam prosedur, fungsi juga dapat diberikan parameter. Cara mendeklarasikan fungsi dengan parameter juga tidak jauh berbeda dengan pendeklarasian parameter pada prosedur.
function B(X : integer) : integer;
begin
{ statement }
B := X * 2;
end;
Perbedaan utama antara prosedur dan fungsi adalah dalam menghasilkan keluaran. Walaupun prosedur bisa menghasilkan nilai keluaran, tetapi nilai tersebut tidak dapat diambil secara langsung, melainkan harus diambil melalui parameter referensi. Sedangkan keluaran dari fungsi dapat diambil langsung dari fungsi tersebut. Untuk lebih memahami perbedaan prosedur dan fungsi, perhatikan contoh berikut ini :
program Fungsi;
uses CRT;
var
Bil_1, Bil_2, Hasil : integer;
procedure Awal;
begin
Writeln('Latihan Pascal 2 : Prosedur dan Fungsi');
Writeln('--------------------------------------');
Writeln;
Writeln('Nama : ____________________');
Writeln('NIM : __________');
Writeln;
end;
procedure Baca_Data;
begin
Write('Masukkan bilangan pertama : ');
Readln(Bil_1);
Write('Masukkan bilangan kedua : ');
Readln(Bil_2);
Writeln;
end;
function Kali(A,B : integer) : integer;
var
I,J : integer;
begin
J := 0;
for I := 1 to B do J := J + A;
Kali := J;
end;
procedure Kalikan(A,B : integer; var C : integer);
var
I : integer;
begin
C := 0;
for I := 1 to B do C := C + A;
end;
begin
ClrScr;
Awal;
Baca_Data;
Writeln(Bil_1:3,' x ',Bil_2:3,' = ',Kali(Bil_1,Bil_2):5);
Kalikan(Bil_1, Bil_2, Hasil);
Writeln(Bil_1:3,' x ',Bil_2:3,' = ',Hasil:5);
Writeln;
Write('Tekan Enter...');
Readln;
end.
Perhatikan program di atas. Prosedur Kalikan dan fugsi Kali mempunyai keluaran yang sama, tetapi cara mengambil keluarannya berbeda. Perhatikan dan jelaskan apa yang terjadi jika baris keempat dalam program utama yang semula perintah :
Writeln(Bil_1:3,' x ',Bil_2:3,' = ',Kali(Bil_1,Bil_2):5);
diubah menjadi :
Writeln(Bil_1:3,' x ',Bil_2:3,' = ',Kalikan(Bil_1,Bil_2,Hasil):5);
Dalam Pascal, ada satu kelebihan dalam cara pemanggilan subprogram. Pascal mengijinkan pemanggilan suatu subprogram dari dalam subprogram itu sendiri. Tidak semua bahasa pemrograman mengijinkan cara pemanggilan subprogram seperti itu karena akan banyak memakan memori. Untuk lebih jelasnya perhatikan potongan program di bawah ini :
procedure Z;
begin
{ statement }
Z;
end;
Pada baris terakhir prosedur Z di atas, terdapat pemanggilan kembali terhadap prosedur Z, sehingga prosedur di atas tidak akan pernah selesai dijalankan sebab begitu sampai pada baris terakhir dari prosedur, program akan kembali lagi ke awal prosedur. Yang terjadi adalah semacam perulangan tanpa perintah perulangan Pascal, dan perulangan dengan cara ini disebut dengan rekursi. Rekursi berlaku terhadap semua subprogram dalam Pascal, yaitu prosedur dan fungsi.
Dengan adanya rekursi ini, banyak algoritma komputer menjadi lebih mudah dibuat programnya. Berikut ini adalah program menghitung suku banyak Legendre, salah satu contoh perhitungan yang dapat diselesaikan dengan menggunakan rekursi :
program Rekursi;
uses CRT;
var
Jum_Suku, I : integer;
Bil_X : real;
function Legendre(X : real; N : integer) : real;
var
Suku_1, Suku_2 : real;
begin
if N = 0 then
Legendre := 1
else if N = 1 then
Legendre := X
else
begin
Suku_1 := ((2*N - 1) * (X * Legendre(X, N-1))) / N;
Suku_2 := ((N-1) * Legendre(X, N-2)) / N;
Legendre := Suku_1 + Suku_2;
end;
end;
procedure Awal;
begin
Writeln('Latihan Pascal 2 : Prosedur dan Fungsi');
Writeln('--------------------------------------');
Writeln;
Writeln('Nama : ____________________');
Writeln('NIM : __________');
Writeln;
end;
procedure Baca_Data;
begin
Writeln('Menghitung Suku Banyak Legendre');
Writeln;
Write('Sampai suku ke : ');
Readln(Jum_Suku);
Write('Masukkan nilai X : ');
Readln(Bil_X);
Writeln;
end;
begin
ClrScr;
Awal;
Baca_Data;
for I := 0 to Jum_Suku do
begin
Writeln('Suku ke-',I:2,', Nilainya = ',Legendre(Bil_X, I):8:3);
end;
Writeln;
Write('Tekan Enter...');
Readln;
end.
Untuk lebih jelas memahami program, jalankan program dengan F7. Perhatikan pula apa yang dilakukan oleh fungsi Legendre.Amati perubahan variabel-variabel yang terlibat dalam fungsi.
G. Array
Array adalah tipe data terstruktur yang terdiri dari sejumlah komponen-komponen yang mempunyai tipe sama. Komponen-komponen tersebut disebut sebagai komponen type, larik mempunyai jumlah komponen yang jumlahnya tetap. Banyaknya komponen dalam larik ditunjukkan oleh suatu index, dimana tiap komponen di array dapat diakses dengan menunjukkan nilai indexnya atau subskript. Array dapat bertipe data sederhana seperti byte, word, integer, real, bolean, char, string dan tipe data scalar atau subrange. Tipe larik mengartikan isi dari larik atau komponen- komponenya mempunyai nilai dengan tipe data tersebut.
Contoh:
Var
Untai : array[1..50] of Integer;
Pada contoh Array dengan nama untai telah dideklarasikan dengan tipe integer, dengan jumlah elemen maksimum 50 elemen, nilai dari elemen array tersebut diatas harus bertipe integer.
Contoh Program :
Program Contoh_Array_Input;
Uses Crt;
Var
Bilangan : array[1..50] of Integer;
Begin
ClrScr;
Bilangan[1]:=3;
Bilangan[2]:=29;
Bilangan[3]:=30;
Bilangan[4]:=31;
Bilangan[5]:=23;
Writeln('nilai varibel bilangan ke 3 =',Bilangan[3]);
Readln;
End.
Array juga dapat dideklarasikan bersama dengan tipe yang beragam seperti contoh dibawah ini :
Program Contoh_Deklarasi_Array_Beragam;
Uses Crt;
Var
NPM : array[1..20] of string[10];
Nama : array[1..20] of string[25];
Nilai : array[1..20] of real;
Umur : array[1..20] of byte;
banyak,i : integer;
Begin
ClrScr;
Write('Isi berapa data array yang diperlukan :');Readln(banyak);
For i := 1 to banyak Do
Begin
Write('NPM =');Readln(NPM[i]);
Write('Nama =');readln(Nama[i]);
Write('Nilai=');readln(Nilai[i]);
Write('Umur =');readln(Umur[i]);
End;
{cetak varibel array}
Writeln('NPM NAMA NILAI UMUR ');
For i:= 1 to banyak Do
Begin
Writeln(Npm[i]:10,Nama[i]:25,Nilai[i]:3:2,' ',Umur[i]:3);
End;
Readln;
End.
Untuk deklarasi array dapat digunakan beberapa cara seperti berikut ini :
Type
Angka = String[20];
Var
Nama : Array [1..50] of Angka;
Begin
.
.
End.
Deklarasi tipe indeks subrange integer Indeks pada array dapat tipe skalar atau subrange, tetapi tidak bisa real. Contoh:
Var
Nilai : Array[1..10] of Integer;
pada contoh ini array nilai mempunyai 10 buah elemen yaitu dari 1 sampai 10. Array tersebut dapat dideklarasikan dengan type seperti berikut ini :
Type
Skala = 1..10;
Var
Nilai : Array [skala] of Integer;
atau :
Type
Skala = 1..10;
Y = Array[skala] of Integer;
Var
Nilai : Y;
atau :
Type
Y = Array[1..10] of Integer;
Var
Nilai : Y;
atau :
Const
Atas =1;
Bawah = 5;
type
Y = Array[Atas..Bawah] of Integer;
Var
Nilai : Y;
Deklarasi Type Indeks Skalar , Indeks dari larik dapat berupa tipe skalar.
Contoh. :
Program Deklarasi_Indeks_Array_Skalar;
Uses Crt;
Var
Jum : Array[(jan,feb,mar,apr,mei)] of Integer;
Begin
Jum[jan]:=25;
Jum[feb]:=45;
Jum[mar]:=21;
Jum[apr]:=23;
Jum[mei]:=50;
Writeln('Jumlah nilai bulan maret =',Jum[mar]);
Readln;
End.
dapat juga ditulis :
type
Bln = (jan,feb,mar,apr,mei);
Var
Jum : Array[bln] of Integer;
atau :
type
Bln =(jan,feb,mar,apr,mei);
Var
Jum : Array[jan..mei] of Integer;
Deklarasi Konstanta Array
Array tidak hanya dapat berupa suatu varibel yang dideklarasikan di bagian deklarasi variabel, tetapi dapat juga berupa konstanta (const).
Contoh Program :
Program Contoh_Deklarasi_Array_Konstan;
Uses Crt;
Const
Tetap : Array[1..4] of Integer=(7,10,21,20);
Var
i : Integer;
Begin
For i:= 1 to 4 Do
Writeln('Nilai Konstan array ke ',i:2,' =',Tetap[i]);
Readln;
End.
konstanta array dapat juga berupa ketetapan dalam bentuk karakter seperti berikut. Contoh Program :
Program Contoh_Konstan_Array_Char_;
Uses Crt;
Const
Huruf : Array[0..5] of Char=('A','B','C','D','E','F');
Var
i : Integer;
Begin
For i:= 0 to 5 Do
Writeln('Nilai konstan array ke',i:2,' = ',Huruf[i]);
Readln;
End.
Konstanta array dapat juga berupa string seperti berikut ini.
Contoh Program :
Program Constanta_Array_String;
Uses Crt;
Type
A = Array [1..5] of String;
Const
Nama : A = ('basic','pascal','cobol','paradox','dbase');
Var
i : Integer;
Begin
For i:= 1 to 5 Do
Writeln('Nilai Array ke-',i:2,'= ',Nama[i]);
readln;
end.
Dalam pascal string merupakan array dari elemen- elemen karakter seperti berikut :
Contoh Program :
Program String_Adalah_Array_Tipe_Char;
Uses Crt;
Var
Nama : string;
i : Integer;
Begin
Nama:='Turbo Pascal';
For i:= 1 to Length(nama) Do
Writeln('Elemen ',i,' dari ',Nama,'= ',Nama[i]);
Readln;
End.
contoh program bilangan prima dengan menggunakan bantuan array.
Contoh program :
Program Mencari_Bilangan_Prima_Dengan_Array;
Uses Crt;
Var
Prima : Array[1..100] of Integer;
i,j : Integer;
bil : Integer;
Begin
ClrScr;
For i := 2 to 100 Do
Begin
Prima[i]:=i;
For j:= 2 to i-1 Do
Begin
bil := (i mod j); {* i dibagi j dicek apakah 0*}
If bil = 0 then Prima[i]:=0; {*jika habis dibagi,berarti bkn prima*}
End;
If Prima[i]<> 0 Then Write(Prima[i],' '); {*cetak array yg prima*}
End;
Readln;
End.
Contoh pengurutan data dengan metode buble sort, yaitu dengan cara penukaran, dapat dilihat pada contoh dibawah ini :
Program Penggunaan_Array_Untuk_Sortir_Buble_Sort;
Uses Crt;
Var
nil1 : Array[1..100] of Integer;
n,i,j,dum : Integer;
Begin
ClrScr;
Write('mau isi berapa data acak (integer) ='); readln(n);
For i := 1 to n Do
Begin
Write('Data Ke ',i,':');Readln(nil1[i]);
End;
{* penyapuan proses}
for i:= 1 to n-1 do
begin
for j:= i to n do
begin
if nil1[j]
begin
dum:=nil1[j];
nil1[j]:=nil1[i];
nil1[i]:=dum;
end;
end;
end;
writeln;
writeln('Hasil Sortir');
for i := 1 to n do
write(nil1[i]:3);
readln;
end.
Array Dua Dimensi
Di dalam pascal Array dapat berdimensi lebih dari satu yang disebut dengan array dimensi banyak (Multidimensional array), disini akan dibahas array 2 dimensi saja. Array 2 dimensi dapat mewakili suatu bentuk tabel atau matrik, yaitu indeks pertama menunjukkan baris dan indeks ke dua menunjukkan kolom dari tabel atau matrik.
1 2
1 2 3
Untuk mengetahui cara mendeklarasikan dari penggunaan array dua dimensi dapat dilihat pada listing program dibawah ini .
Contoh Program:
Program Deklarasi_Array_Dua_Dimensi;
Uses Crt;
Var Tabel : Array[1..3,1..2] of Integer;
i,j : Integer;
Begin
ClrScr;
Tabel[1,1]:=1;
Tabel[1,2]:=2;
Tabel[2,1]:=3;
Tabel[2,2]:=4;
Tabel[3,1]:=5;
Tabel[3,2]:=6;
For I := 1 to 3 Do Begin For J:= 1 to 2 Do Begin Writeln('Elemen ',i,',',j,'= ',tabel[i,j]);
End;
End;
Readln;
End.
Alternatif Deklarasi Array Dua Dimensi.
Ada beberapa cara dalam mendeklarasikan array dua dimensi, beberapa cara tersebut dapat dilihat dibawah ini :
Contoh :
Var
Tabel : Array[1..3] of Array[1..2] of Byte;
atau :
Type
Matrik = Array[1..3,1..2] of Byte;
Var
Tabel : Matrik;
atau :
Type
Baris = 1..3;
Kolom = 1..2;
Matrik = Array[Baris,Kolom] of Byte;
Var
Tabel : Matrik;
atau :
Type
Baris = 1..3;
Kolom=1..2;
Matrik= Array[Baris] of Array[Kolom] of Byte;
Var
Tabel : Matrik;
Dibawah ini akan diberikan listing program penggunaan array dua dimensi dalam aplikasi penjumlahan matrik :
Contoh Prorgam:
Program Penjumlahan_Matrik;
Uses Crt;
Var
Matrik1,Matrik2, Hasil : Array[1..3,1..2] of Integer;
i,j : Integer;
Begin
ClrScr;
{ input matrik ke satu }
Writeln(' Elemen matrik satu');
For i := 1 to 3 Do
Begin
For j := 1 to 2 Do
Begin
Write('Elemen baris -',i,' Kolom -',j,'= ');
Readln(matrik1[i,j]);
End;
End;
{input matrik ke dua}
Writeln('input elemen matrik dua');
For i:= 1 to 3 Do
Begin
For j:= 1 to 2 Do
Begin
Write('Elemen baris -',i,' kolom -',j,'= ');
Readln(matrik2[i,j]);
End;
End;
{proses penjumlahan tiap elemen}
For i := 1 to 3 Do
Begin
For j:= 1 to 2 Do
Begin
Hasil[i,j]:=Matrik1[i,j]+Matrik2[i,j];
End;
End;
{proses cetak hasil}
For i:= 1 to 3 Do
Begin
For j:= 1 to 2 Do
Begin
Write(Hasil[i,j]:6);
End;
Writeln;
End;
Readln;
End.
Array Sebagai Parameter
Array dapat digunakan sebagai parameter yang dikirimkan baik secara nilai (by value) atau secara acuan (by reference) ke procedure atau ke function. Procedure yang menggunakan parameter berupa array harus dideklarasikan di dalam judul procedure yang menyebutkan parameternya bertipe array.
Contoh Program :
Program Contoh_Pengiriman_Parameter_Array_Di_Procedure;
Uses Crt;
Const
Garis ='---------------------------------------------------';
Type
Untai = Array[1..10] of String[15];
Bulat = Array[1..10] of Integer;
Huruf = Array[1..10] of Char;
Var
i,Banyak : Integer;
Procedure Proses(Nama:Untai;Nilai:Bulat);
Var
Ket : String;
Abjad : Char;
Begin
Writeln(Garis);
Writeln('Nama Nilai Abjad Keterangan');
Writeln(Garis);
For i := 1 to Banyak Do
Begin
If Nilai[i] > 90 Then
Begin
Abjad:='A';
Ket :='Istimewa';
End;
If (Nilai[i]<90) And (Nilai[i]>70) Then
Begin
Abjad:='B';
Ket :='Memuaskan';
End;
If (Nilai[i]<70) And (Nilai[i]>60) Then
Begin
Abjad:='C';
Ket :='Cukup';
End;
If (Nilai[i]<60) And (Nilai[i]>45) Then
Begin
Abjad:='D';
Ket :='Kurang';
End;
If Nilai[i]< 45 Then
Begin
Abjad:='E';
Ket :='Sangat kurang';
End;
Writeln(Nama[i]:15,' ',Nilai[i]:4,' ',Abjad,' ',Ket:15);
End;
Writeln(Garis);
End;
Procedure Masuk_Data;
Var
Nama : Untai;
Nilai : Bulat;
Begin
Write('Banyak data =');Readln(Banyak);
For i:= 1 to Banyak Do
Begin
ClrScr;
Writeln('Data ke - ',i);
Write('Nama =');readln(Nama[i]);
Write('Nilai =');readln(Nilai[i]);
End;
Proses(Nama,Nilai);
End;
{modul Utama}
Begin
Masuk_Data;
Readln;
End.
Referensi :
H. File Akses
Di dalam bahasa Pascal dikenal 3 macam tipe dari file, yaitu file teks, file bertipe dan file tak bertipe.
1. File Teks
File teks(text file) merupakan file yang berisi kumpulan dari karakter yang dibentuk dalam baris-baris dan masing-masing baris diakhiri dengan tanda akhir-dari-baris (end-of-line marker) berupa karakter carriage return dan karakter line feed (CR/LF). Sedangkan akhir dari file ditunjukkan oleh tanda akhir-dari-file (end of file marker) berupa karakter Ctrl-Z.
File teks sebenarnya merupakan file dengan tipe char, tetapi mempunyai perbedaan, yaitu nilai yang bukan tipe char dapat direkam dan dibaca oleh file teks. Nilai yang bukan tipe char ini akan secara otomatis dirubah ke atau dari tipe char.
File variable pada file teks ditunjukkan dengan sesuatu variabel yang dideklarasikan dengan tipe text.
Contoh :
Var
TipeFile : Text;
Begin
Assign(TipeFile,’Data.dat’);
Prosedur dan fungsi yang digunakan pada File teks. Prosedur Append Digunakan untuk membuka file yang telah ada untuk keperluan menambah data ke dalam file.
Sintak :
Append(var f:text);
Prosedur write dan writeln
Digunakan untuk merekamkan data ke file.
Sintak :
Write ([var f:text] v1[,v2,…,vn]);
Writeln ([var f:text] v1[,v2,…,vn]);
Prosedur read dan readln
Digunakan untuk membaca satu atau lebih nilai dari file ke dalam satu atau lebih variabel. Pada Readln sama dengan read tetapi kemudian akan menggeser pembacaan ke awal dari baris berikutnya dalam file.
Sintak :
Read ([var f:text] v1[,v2,…,vn]);
Readln ([var f:text] v1[,v2,…,vn]);
Prosedur SettextBuf
Digunakan untuk membuat buffer yang baru sebagai pengganti dari internal buffer untuk file variable.
Sintak :
SetTextBuff(var f:text; var buf[;size:word]);
Fungsi Eoln
Digunakan untuk mengetahui apakah posisi dari file berada di end-of-line marker atau tidak.
Sintak :
Eoln [(var f:text)]:boolean;
Fungsi SeekEof
Akan menghasilkan status akhir dari file.
Sintak :
SeekEof[(var f:text)]:boolean;
Fungsi SeekEoln
Fungsinya sama dengan fungsi standar Eoln, yaitu akan menghasilkan status akhir dari baris.
Sintak :
SeekEoln[(var f:text)]:boolean;
2. File Bertipe
File bertipe dapat diakses secara urut dan secara acak. File bertipe dapat dibuka dengan prosedur rewrite atau reset. Prosedur rewrite untuk membuat dan sekaligus membuka file baru dan prosedur reset untuk membuka file yang telah ada.
Contoh :
Var
FileData : file of byte;
Begin
Assign(FileData,’Abc’);
Rewrite(fileData);
Prosedur dan fungsi yang digunakan pada File teks. Prosedur standar write dan read
Prosedur standar write digunakan untuk merekamkan satu atau lebih nilai ke dalam file dan prosedur standar read digunakan untuk membaca satu atau lebih nilai dari file.
Sintak :
Write(f,v1[,v2,…,vn]);
Read(f,v1[,v2,…,vn]);
Prosedur standar seek
Digunakan untuk mengarahkan penunjuk file ke suatu komponen tertentu di dalam file.
Sintak :
Seek(f;n:longint);
Prosedur standar Truncate
Digunakan untuk menghapus sejumlah komponen atau record mulai dari posisi tertentu dengan Sintak :
Truncate(f);
Fungsi standar Filepos
Digunakan untuk menghasilkan letak posisi sekarang dari penunjuk file
Sintak :
FilePos(f) : longint;
Fungsi standar Filesize
Digunakan untuk menghasilkan jumlah dari komponen atau record yang sudah ada di file.
Sintak :
Filesize(f) : longint;
3. File tak bertipe.
File tak bertipe (untyped file) adalah channel I/O (Input/output) level rendah yang terutama digunakan untuk mengakses langsung suatu file di disk tidak perduli bagaimana tipe dan strukturnya. Contoh : FileData : File;
Prosedur standar read dan write diganti dengan prosedur standar BlockRead dan Blokwrite.
Procedure BlockRead
Digunakan untuk membaca sejumlah record yang ditunjukkan oleh count dari file yang ditunjukkan oleh variabel file f ke dalam memori mulai dari byte pertama yang ditempati oleh variabel buf. Jumlah record yang telah selesai dibaca akan dicatat di variabel result.
Sintak :
BlokRead(var f:file;var buf;count:word[;result:word]);
Procedure BlockWrite
Akan merekamkan sejumlah record yang ditunjukkan oleh count ke file yang ditunjukkan oleh variabel f dari memori mulai dari byte pertama yang ditempati oleh variabel buf.Jumlah dari record yang telah selesai direkamkan akan dicatat di variabel result.
Sintak :
BlokWrite(var f:file; var buf; count:word[;result:word]);
Procedure dan fungsi standar untuk semua tipe file.
Prosedur Assign,Rewrite,Reset,Close,Erase,Rename,GetDir,ChDir,MkDir dan RmDir,
sedangkan fungsi standar yang digunakan untuk ke 3 tipe file adalah fungsi standar Eof dan IOResult.