Sabtu, 26 Maret 2011

Tipe Struktur Paskal

Tipe data terstruktur

tipe ini terdiri atas : array, record, set, dan file. String adalah tipe data jenis array, tetapi karena string memiliki kekhasan tersendiri sebagai array dari karakter maka penulis perlu memberikan penjelasan tersendiri. Sedangkan untuk array, record, dan file perlu dijelaskan dalam bab yang lain karena agak banyak hal-hal yang perlu dibahas.
a. Tipe Data String String
merupakan suatu data yang menyimpan array (larik), sebagai contoh 'ABCDEF' merupakan sebuah konstanta string yang berisikan 6 byte karakter. Ukuran Tempat untuk tipe data ini adalah 2 s/d 256 byte, dengan jumlah elemen 1 s/d 255. String dideklarasikan dengan string [ konstanta ] atau string. Bila ukuran string tidak didefinisikan maka akan banyak memakan ruang, karena ukuran string menyesuaikan dengan defaultnya. Misalkan
var kata: string [20]; atau var kata: string; karena string merupakan array dari karakter. Maka kata[1] merupakan karakter pertama dari string, kemudian kata[2], merupakan elemen kedua, dst.
Contoh:
Program hal_string;
Uses wincrt;
var s : string;
begin s:='Hello';
writeln(s);
writeln('panjang dari string adalah: ',ord(s[0]));
end.
Karakter nol merupakan karakter yang menyatakan panjang string. Sehingga ord(s[0]) menyatakan panjang dari string tersebut. Panjang string juga bisa dinyatakan sebagai length(s).
routines pada Pascal untuk manipulasi string :
-Length : menghasilkan panjang string.
Syntax : length(s)
Contoh : n:=length(s);
Misal s:='pemrograman'; n akan sama dengan 11.
-Copy : mengkopi suatu ekstrak karakter dari sebuah string.
Syntax : copy(s,dari,banyaknya)
Contoh : st:=copy(s,5,3); mengekstrak 3 karakter dari s, dimulai dari karakter kelima.
Misal s:='Who are you ?'; st adalah 'are'.
catatan: bila indek lebih bear dari panjang string maka hasilnya akan kosong:
Contoh : st:=copy(s,15,4); { kosong} jika banyaknya string yang akan diekstrak lebih besar dari s, maka hasilnya adalah bagian yang tersisa dari string.
Contoh : st:=copy(s,9,10); st hasilnya adalah 'you ?'
-Pos : menghasilkan posisi dari suatu substring dari suatu string.
Syntax : Pos(substr,s)
Contoh : n:=pos('are','Who are you ?'); { n:=5; }
Jika substring tidak ditemukan, maka hasilnya 0.
-Val : mengkonversi string ke numerik.
Syntax : val(strvar,numvar,errorcode)
strvar adalah variabel string yang akan dikonversi, numvar variabel numerik ( bisa integer atau real, dan errorcode adalah variabel integer yang menyimpan error code (kode kesalahan). Jika errorcode adalah 0, konversi berhasil. Sebaliknya, hal ini akan menunjukan posisi dimana pada strvar yang menyebabkan kegagalan.
Contoh :
program konversiangka;
uses wincrt;
var s : string;
e : integer; r : real;
begin
write('masukkan angka : '); 
readln(s);
val(s,r,e);
if e<>0 then writeln('salah pada posisi : ',e) 
else writeln('itu adalah : ',r:4:3);
end.
-Str : mengkonversi numerik ke string.
Syntax : str(numvar,strvar)
Contoh :
program konversiangka_1; 
uses wincrt;
var s : string;
i : integer;
begin
write('masukkan angka: ');
readln(i);
str(i,s);
writeln('itu adalah: ',s);
end.
-Concat : Menggabungkan dua atau lebih string.
Syntax : concat(s1,s2,...,sn) 
Contoh : st:=concat(s1,s2); Jikas1='ABC' dan s2='DEF',
st akan menjadi 'ABCDEF' st:=concat('Borland ','Pascal ','ver. ','7.0'); akan menjadi 'Borland Pascal ver. 7.0'
-Insert : Menyisipkan suatu string ke dalam string yang lain.
Syntax : insert(asal,target,indek)
Contoh :

program sisip ;
uses wincrt;
var s1, s2 : string;
begin
s1:='tidak ';
s2:='saya bekerja';
insert(s1,s2,6);
writeln(s2); {saya tidak bekerja }
end.
Jika hasilnya lebih dari 255 maka akan terpotong menjadi 255.
-Delete : menghapus n karakter dari string s berawal dari indek i.
Syntax : delete(s,i,n);
Contoh :
program hapus;
uses wincrt;
var s : string;
begin
s:='saya seorang insinyur';
delete(s,6,3);
writeln(s); { 'saya sang insinyur'}
end.
-Fillchar : mengisi string s dengan karakter c sampai s sama dengan n-1 panjang karakternya.
Syntax : fillchar(s,n,c); Hati-hati : s[0] akan tertumpuki, jangan lupa menambahkan s[0]:=chr(n-1); untuk menormalkannnya.
Contoh :
program isikarakter; 
uses wincrt;
var s : string;
begin
fillchar(s,51,'=');
s[0]:=chr(50); 
end.
b. Tipe Data Set
Sebuah set merupakan suatu himpunan yang berisi nilai (anggota). set merupakan Tipe data yang khusus untuk Pascal. Set dalam pemrograman sangat mirip dengan himpunan dalam ilmu matematika,
contoh: A = { 1, 2, 3, 4, 5 }
Syntax: set of contoh:
type Digits = set of 0..9;
Letters = set of 'A'..'Z';
type Day = (Sun, Mon, Tue, Wed, Thu, Fri, Sat);
CharSet = set of Char; 
Digits = set of 0..9;
Days = set of Day;
const EvenDigits: Digits = [0, 2, 4, 6, 8];
Vowels: Letters = ['A', 'E', 'I', 'O', 'U', 'Y'];
Kita tidak bisa menulis atau membaca isi dari set, tetapi kita bisa melakukan operasi yang lain dengan data yang ada pada set (mis. relasional). 
Contoh:
Program contoh_set;
Uses wincrt;
type hari = (ahad, sen, sel, rab, kam,jum, Sab);
var semua_hari : set of hari;
hari_kerja : set of sen .. jum;
hari_ini : hari;
begin
hari_ini:=sen;
if hari_ini in hari_kerja then
writeln('HARI INI HARI KERJA')
else
writeln('HARI LIBUR');
end.
Salah satu manfaat dari penggunaan tipe data set adalah untuk mengecek apakah suatu nilai muncul dalam suatu range tertentu. Misalnya, untuk mementukan apakah suatu karakter berupa lower case letter (huruf kecil), mis. Ch adalah tipe Char, kita bisa menulis,
if (Ch >= 'a') and (Ch <= 'z') then Writeln( Ch,' merupakan huruf kecil.');
atau, dengan notasi set, kita bisa menulis ,
if Ch in ['a'..'z'] then Writeln( Ch,' merupakan huruf kecil.');
-Tipe Data Pointer
pointer merupakan variabel khusus yang berisi suatu address (alamat) di lokasi lain didalam memory. Suatu variabel yang points(menunjuk) ke sesuatu sehingga disebut pointer. Ada dua macam pointer:
-typed(tertentu): merupakan pointer yang menunjuk pada tipe data tertentu pada variable.
-generic(umum): merupakan pointer yang tidak menunjuk pada tipe data tertentu pada variable.
Contoh deklarasi pointer:
var p : ^integer;
Contoh di atas merupakan deklarasi variabel p sebagai pointer dari integer. Dengan menambahkan tanda caret (^) di depan nama tipe data variabel yang dideklarasikan:
contoh :
program contoh_pointer1;
uses wincrt;
var p : ^integer;
m, n : integer;
begin
m:=10;
n:=15;
p:=@m; { p sekarang menunjuk ke m }
p^:=12; { hal ini sama dengan m:=12; }
p:=@n; { p sekarang menunjuk ke n }
p^=m; { { hal ini sama dengan n:=m; }
writeln('m = ',m,', n = ',n); { m = 12, n = 12 }
end.
Ketika p menunjuk ke m ( p:=@m;), mengakses p^ sama dengan mengakses m. Dalam membuat program, dalam penggunaan pointer kita memerlukan alokasi memori tertentu: Ketika kita mendeklarasikan variabel pointer dalam "var" sehingga merupakan suatu static variable, yang mana Static variable ini dibatasi oleh kapasitas 64KB untuk tiap module. Yang berarti dalam program utama kita hanya bisa menggunakan hanya 64KB dan tiap unit Pascal hanya bisa memakai 64KB. Sehingga kita perlu memecahkan program kebeberapa unit. Salah satu teknik yang dipakai untuk mengatasi persoalan ini adalah seperti program berikut.
Program contoh_pointer2;
uses wincrt;
Type Pemployee = ^Temployee;
Temployee = record Name : string[10];
Position : char;
Salary : longint;
end;
var p : pemployee;
begin
new(p);
p^.name:='Saddam';
p^.position:='S';
p^.salary:=3000;
writeln(p^.name,' ',p^.position,' ',p^.salary);
dispose(p);
end.
Pada blok begin...end blok, kita bisa melihat meskipun p tidak menunjuk pada suatu variable tetapi dapat diisi dengan nilai. Pernyataan new(p); tidak memerlukan alokasi memori. Setelah itu kita bisa melakukan apapun pada variabel tersebut sampai kita membuangnya dari memori dengan memakai perintah dispose(p);. Variable dengan cara ini dinamakan dengan dynamic variable. 
Generic Pointer adalah pointer tanpa tipe data tertentu. Biasanya, pointer berkaitan dengan tipe data khusus, sedangkan generic pointer tidak.
Deklarasi:
Var P : pointer;
Dipergunakan sebagai buffer sementara (tidak permanen). Sehingga kita bisa melepasnya untuk suatu saat tidak diperlukan. Untuk itu pointer sangat bagus karena sifatnya yang dinamis. Tetapi, generic pointer tidak sama dengan typed pointer. Typed pointer menggunakan "new" untuk menampung memori dan "dispose"untuk melepasnya. Generic pointer menggunakan "getmem" untuk mendapatkan memori dan "freemem" untuk melepasnya. Pada pointer dengan tipe tertentu, program Pascal mengetahui ukuran dari memori yang harus dilaokasikan, sedangkan tipe umum (generic pointer) Pascal tidak bisa, karena Pascal tidak mengetahui variabel apa yang akan dipakai. Sehingga dengan getmem kita perlu untuk menentukan berapa besar memori yang akan kita alokasikan. Ukuran terbesar adalah 65532 bytes (hampir 64K).
Program contoh_pointer2;
uses wincrt;
Var P : pointer;
Begin
Getmem(p,8192); { Reserve 8192 bytes }{ We use it then }
freemem(p,8192); { Release it, 8192 bytes }
end.
4. Operator
Beberapa operator yang disediakan oleh PASCAL:
1. Aritmatika
2. Boolean
3. Relasional
4. Set
Tabel 2. Operator Aritmatika PASCAL
Operator
Operasi
Tipe Operand
Tipe Hasil Operasi
+
Penjumlahan
Integer, real
Integer, real
-
Pengurangan
Integer, real
Integer, real
*
Perkalian
Integer, real
Integer, real
/
Pembagian
Integer, real
Integer, real
div
Pembagian
integer, integer
integer
mod
Sisa pembagian
integer, integer
integer
Contoh :
9 + 2 (hasil: 11)
9 - 2 (hasil: 7)
9 * 2 (hasil: 18) 9 / 2 (hasil: 4.5)
9 div 2 (hasil: 4)
9 mod 2 (hasil: 1)
Tabel 3. Operator Boolean PASCAL
Operator
Operasi
Tipe Operand
Tipe Hasil Operasi
not
negasi
boolean
boolean
and
logika ‘and’
boolean
boolean
or
logika ‘or’
boolean
boolean
xor
logika ‘xor’
boolean
boolean
Contoh: A dan B suatu variabel boolean
A
not (A)
TRUE
FALSE
FALSE
TRUE

A
B
A and B
A or B
A xor B
TRUE
TRUE
TRUE
TRUE
FALSE
TRUE
FALSE
FALSE
TRUE
TRUE
FALSE
TRUE
FALSE
TRUE
TRUE
FALSE
FALSE
FALSE
FALSE
FALSE
Tabel 3. Operator Relasional
Operator
Operasi
Tipe Operand
Tipe Hasil Operasi
=
Sama dengan
tipe sederhana, string, pointer dan set
boolean
<> 
Tidak sama dengan
tipe sederhana, string, pointer dan set
boolean
< 
Lebih kecil dari
tipe sederhana, string
boolean
> 
Lebih besar dari
tipe sederhana, string
boolean
<=
Lebih kecil atau =
tipe sederhana, string
boolean
>=
Lebih besar atau =
tipe sederhana, string
boolean
Contoh: Misal suatu variable A:=9 dan B:=2,
maka: A = B (hasil: FALSE);
A <= B (hasil: FALSE) A <> B (hasil: TRUE);
A >= B (hasil: TRUE)
A <> B (hasil: TRUE)
4. Operasi pada Seta. Operasi Relasional pada Set
Ada empat perbandingan relasional yang diperkenankan pada set.
Tabel 4. Operator Relasional pada set
Operator
Operasi
Tipe Operand
Tipe Hasil Operasi
=
Sama dengan
Set, set
boolean
<> 
Tidak sama dengan
Set, set
boolean
<=
Lebih kecil atau =
Set, set
boolean
>=
Lebih besar atau =
Set, set
boolean

Misal A dan B adalah merupakan dua buah set. A = B : mempunyai hasil True jika A dan B memiliki anggota-anggota yang sama.
 
Contoh: [Sun, Tue, Fri] = [Tue, Fri, Sun].
A <> B: mempunyai hasil True jika A dan B memiliki anggota-anggota yang tidak sama.
A <= B : menunjukkan bahwa A adalah subset dari B. Contoh: Jika A berisi [Sun, Mon, Tue] dan B berisi [Sun, Mon, Tue, Wed, Thu], maka A adalah merupakan subset dari B dan ekspresi menghasilkan nilai True. A >= B : menunjukkan bahwa A adalah superset dari B.
Contoh: Jika A berisi [Sun..Sat] dan B berisi [Mon..Fri], maka A adalah merupakan superset dari B dan ekspresi menghasilkan nilai True.
b. Operasi Logika pada SetAda tiga operasi logika pada set.
Tabel 5. Operator Logika pada set
Operator
Operasi
Tipe Operand
Tipe Hasil Operasi
+
Union
Set
Set
-
Difference
Set
Set
*
Intersection
Set
Set
Misal:
+ atau Union: [Sun, Mon, Tue, Wed] + [Mon, Thu, Fri] menghasilkan [Sun, Mon, Tue, Wed, Thu, Fri].
- atau Difference: [Sun, Mon, Tue, Wed] - [Mon, Tue, Fri] menghasilkan [Sun, Tue, Wed], yang merupakan anggota adari set pertama yang bukan anggota set yang kedua.
* atau Intersection: [Sun, Mon, Tue, Wed] * [Mon, Tue, Fri] menghasilkan [Mon,Tue], yang merupakan anggota kedua set.
5. Ekspresi Merupakan kombinasi antara operator dan operand. Ekspresi matematik yang terjadi dalam dunia nyata diterjemahkan kedalam bahasa Pascal dengan sedikit perubahan tanda.
Contoh:
Ekspresi matematika
Ekspresi PASCAL
• a + b
• a + b
• x ( y + z )
• x * ( y + z )
• b2 - 4ac
• b * b - 4*a*c
Contoh: Bila dideklarasikan var i, j: integer; maka, i + j adalah ekspresi aritmatik (menghasilkan suatu bilangan integer) i <>
6. Fungsi Matematik Standar dalam PASCAL
Tabel 6. Beberapa fungsi matematik standar yang disediakan oleh PASCAL
Nama Fungsi
Deskripsi
Tipe Argumen
Tipe Hasil Operasi
abs
absolute value
real/integer
real/integer
arctan
arctan (radian)
Real/integer
real
cos
cosine (radian)
real/integer
real
sin
sin (radian)
real/integer
real
exp
fungsi Perpangkatan e
real/integer
real
ln
ln
real/integer
real
round
Pembulatan terdekat
real
integer
sqr
kuadrat
real/integer
real/integer
sqrt
Akar kuadrat
real/integer
real
trunc
Pembulatan ke bawah
real/integer
integer
Contoh :
Abs(-11) (hasil: 11)
Round(10.6) (hasil: 11)
Trunc(10.6) (hasil: 10)
 
Sqrt(4) (hasil: 2)
Sqr(4) (hasil: 16)
Untuk fungsi trigonometri:
x = sin phi menjadi x:=sin (3.1416);

Tidak ada komentar:

Posting Komentar