Modul Pelatihan Asisten

62
STRUKTUR KONTROL Kemampuan Kontrol Pascal adalah kemampuan bahasa Pascal dalam melakukan pengulangan, memilih suatu tindakan atau percabangan dalam suatu tindakan. Pascal sebagai bahasa yang terstruktur, mempunyai beberapa macam proses yang terdiri dari : proses sekuensial proses berulang proses seleksi/pengambilan keputusan. Hal ini berarti bahwa dalam merancang program bahasa yang terstruktur harus dikerjakan secara berurutan. Selain itu bahasa pascal juga menyediakan statemen GOTO untuk pemrograman yang tidak terstruktur, yang berarti dapat terjadi bahwa program akan melompat dari satu pernyataan ke pernyataan lain. Statemen GOTO Digunakan untuk mengarahkan eksekusi program ke pernyataan yang diawali oleh label sesuai yang ditunjuk oleh GOTO. Bentuk Umum : GOTO nama_label; Keterangan: Nama label yang digunakan dalam GOTO berupa identifier yang sudah didefinisikan dalam deklarasi Label. Contoh: Label Ulang; Begin Ulang; Writeln(‘Pascal’); GOTO Ulang; End. PENGULANGAN Proses pengulangan dalam bahasa Pascal terdiri dari : a. WHILE .... DO.... Pernyataan ini digunakan untuk melakukan proses pengulangan bila kondisi atau syarat tertentu yang terdapat pada awal blok terpenuhi atau sering dikatakan sebagai pengulang proses selama kondisi benar. Bentuk: WHILE kondisi_terpenuhi DO BEGIN Pernyataan/blok pernyataan; Modul Pelatihan Asisten Pemrograman Komputer Lanjut 1

Transcript of Modul Pelatihan Asisten

STRUKTUR KONTROL

Kemampuan Kontrol Pascal adalah kemampuan bahasa Pascaldalam melakukan pengulangan, memilih suatu tindakan ataupercabangan dalam suatu tindakan.Pascal sebagai bahasa yang terstruktur, mempunyai beberapa macam proses yang terdiri dari : proses sekuensial proses berulang proses seleksi/pengambilan keputusan.

Hal ini berarti bahwa dalam merancang program bahasa yangterstruktur harus dikerjakan secara berurutan. Selain itubahasa pascal juga menyediakan statemen GOTO untuk pemrogramanyang tidak terstruktur, yang berarti dapat terjadi bahwaprogram akan melompat dari satu pernyataan ke pernyataan lain.

Statemen GOTODigunakan untuk mengarahkan eksekusi program ke

pernyataan yang diawali oleh label sesuai yang ditunjuk olehGOTO.Bentuk Umum :

GOTO nama_label;

Keterangan:Nama label yang digunakan dalam GOTO berupa identifier yangsudah didefinisikan dalam deklarasi Label.Contoh:

Label Ulang;Begin

Ulang;Writeln(‘Pascal’);GOTO Ulang;

End.

PENGULANGANProses pengulangan dalam bahasa Pascal terdiri dari :a. WHILE .... DO....

Pernyataan ini digunakan untuk melakukan proses pengulanganbila kondisi atau syarat tertentu yang terdapat pada awalblok terpenuhi atau sering dikatakan sebagai pengulangproses selama kondisi benar.Bentuk:

WHILE kondisi_terpenuhi DOBEGIN

Pernyataan/blok pernyataan;

Modul Pelatihan Asisten Pemrograman Komputer Lanjut 1

END; Flowchart:

Contoh :Program While_do;uses wincrt;Const c = 1.609344;var a, b : real;begin writeln('konversi'); writeln('kilometer mil'); a:=0; while a<20 do begin a:=a+1; b:=c*a; writeln(a:8:2,b:8:2); end;end.

b. REPEAT .... UNTIL....Proses pengulangan terjadi setelah pernyataan REPEAT danberakhir pada pernyataan UNTIL. Bila kondisi pada penyataanUNTIL masih terpenuhi, proses pengulangan akan dilakukanlagi.Bentuk:

REPEAT

pernyataan/blok pernyataan;

UNTIL kondisi_tak_terpenuhi;

Contoh:Program Repeat_until;uses wincrt;Const c = 1.609344;var

Modul Pelatihan Asisten Pemrograman Komputer Lanjut 2

Proses yangharus diulang

Kondisi terpenuhi?

Y

T

a, b : real;begin writeln('konversi'); writeln('kilometer mil'); a:=0; repeat a:=a+1; b:=c*a; writeln(a:8:2,b:8:2); until a>19;end.

c. FOR...TO....DO dan FOR ... DOWNTO ....DOPernyataan ini digunakan bila kondisi pengulangan itu sudah diketahui lebih dahulu, berapa kali proses pengulangan itu harus terjadi. Sedangkan WHILE dan REPEAT digunakan bila tidak diketahui dengan pasti jumlah proses pengulangan.Bentuk:

FOR pengenal := harga_awal TO harga_akhir DOBEGIN

Kumpulan pernyataan;END;

FOR pengenal := harga_awal DOWNTO harga_akhir DOBEGIN

Kumpulan pernyataan;END;

Flowchart:

Contoh:Program for_to_do;uses wincrt;Const

Modul Pelatihan Asisten Pemrograman Komputer Lanjut 3

Jum

I = 1 to jum

Proses Hitung

I

Jum

I = jumdownto 1

Proses Hitung

I

c = 1.609344;var i : integer; a, b : real;begin writeln('konversi'); writeln('kilometer mil'); a:=0; for i:=1 to 20 do begin a:=a+1; b:=c*a; writeln(a:8:2,b:8:2); end;end.

Program for_downto_do;uses wincrt;Const c = 1.609344;var i : integer; a, b : real;begin writeln('konversi'); writeln('kilometer mil'); a:=0; for i:=20 downto 1 do begin a:=a+1; b:=c*a; writeln(a:8:2,b:8:2); end;end.

SELEKSIa. IF ... THEN ... ELSE ...

Digunakan untuk menentukan pilihan dengan dua ekspresi boolean TRUE dan FALSE.Bentuk :

IF ekspresi_boolean THEN blok_pernyataan1ELSE blok_pernyatan2;

Contoh : If skor > 8 then nilai:=’A’; if dengan satu

statemen

If skor > 8 then

Modul Pelatihan Asisten Pemrograman Komputer Lanjut 4

Begin Nilai := ’A’; if dengan banyak

statemenLulus := true;Bonus := 5000;

If skor > 8 then Nilai:=’A’ if then else dengan satu statemen

Else Nilai:=’B”;

If skor > 8 thenBegin Nilai := ’A’; Lulus := True; if dengan banyak

statemen, else dengan satu statemen Bonus := 40000;End;Else Nilai :=’B’;

If skor > 8 then Nilai := ‘A’Else

BeginNilai := ‘B’; if dengan satu

statemen, else dengan banyak statemenBonus := 4000;

End;

If skor > 8 then Begin

Nilai := ’A’;Lulus := true;Bonus := 5000;

End else if then else dengan banyak statemen

Begin Nilai := ’B’;Lulus := false;Bonus := 0;

End;

If skor > 8 then nilai:=’A’; Else If skor > 6 then nilai:=’B’; Else If skor > 4 then nilai:=’C’; if then else if Else If skor > 2 then nilai:=’D’; Else nilai:=’E’;

If skor > 8 then Modul Pelatihan Asisten Pemrograman Komputer Lanjut 5

If Tugas := true then if bersarangIf ProsentaseAbsen > 80 then nilai:=’A’;

Flowchart:

Contoh:Program if_then;uses wincrt;type tulisan = string[11];var a, b, c, x1, x2 : real; keterangan : tulisan;

procedure akar(a1, a2, a3 : real; var x1, x2 : real);var det : real; keterangan : tulisan;begin keterangan :='akar nyata'; det:=(a2*a2) - (4*a1*a3); if det < 0 then keterangan:='akar khayal' else begin x1:=(-a2+sqrt(det))/(2*a1); x2:=(-a2-sqrt(det))/(2*a1); end;end;begin writeln('mencari akar'); writeln('persamaan ax^2 + bx + c'); write('a = ');readln(a); write('b = ');readln(b); write('c = ');readln(c); akar(a,b,c,x1,x2); writeln(keterangan); while keterangan <> 'akar khayal' do begin writeln('akar 1 = ',x1:6:2);

Modul Pelatihan Asisten Pemrograman Komputer Lanjut 6

Y T

Proses yang harus diulang

Proses yang harus diulang

Kondisi

terpenuhi?

writeln('akar 2 = ',x2:6:2); end;end.

b. CASE...OFDigunakan dalam pengambilan keputusan lebih dari dua pilihan.Bentuk :

CASE pengenal OFLabel1 : blok_pernyataan1;Label2 : blok_pernyataan2;.Labeln : blok_pernyataann;

END;Contoh: Case Nilai Of

8 : write(‘Bagus sekali’);6 : write(‘Bagus’); case dengan satu statemen tiap kondisi4 : write(‘jelek’);else write(‘Jelek sekali’);

end;

Case Nilai Of8 : Begin

write(‘Bagus sekali’); write(‘Pertahankan’); end;

7 : Begin write(‘Bagus’); write(‘Tingkatkan’); Case dengan banyak

statemen pada tiap kondisi end;

else Begin

write(‘Jelek’); write(‘tingkatkan’); end;

Contoh :Program case_of;uses wincrt;type tulisan = string[11];var alas, tinggi, panjang, lebar, jejari, luas : real; pilihan : char;

Modul Pelatihan Asisten Pemrograman Komputer Lanjut 7

selesai : boolean;begin repeat clrscr; writeln(' menu pilihan'); writeln; writeln('1. menghitung luas segitiga'); writeln('2. menghitung luas segi empat'); writeln('3. menghitung luas lingkaran'); writeln('4. selesai'); writeln; write('pilihan [1..4] :'); readln(pilihan); clrscr; selesai:=false; case pilihan of '1' : begin writeln(' menghitung luas segitiga'); write('masukan nilai alas :'); readln(alas); write('masukan tinggi :'); readln(tinggi); luas:=alas*tinggi/2; writeln('luas=',luas:6:2); writeln('tekan enter untuk melanjutkan'); readln; end; '2' : begin writeln(' menghitung luas segiempat'); write('masukan nilai lebar :'); readln(lebar); write('masukan panjang:'); readln(panjang); luas:=panjang*lebar; writeln('luas=',luas:6:2); writeln('tekan enter untuk melanjutkan'); readln; end; '3' : begin writeln(' menghitung luas segitiga'); write('masukan jari-jari:'); readln(jejari); luas:=pi*sqr(jejari); writeln('luas=',luas:6:2); writeln('tekan enter untuk melanjutkan'); readln; end; '4' : selesai:=true; else writeln('salah pilih'); write('tekan enter untuk melanjutkan');readln; end;

Modul Pelatihan Asisten Pemrograman Komputer Lanjut 8

until selesai; writeln('selesai');end.

PROSEDUR DAN FUNGSI

a. PROCEDUREProsedur merupakan subprogram yang terdiri dari sekelompok perintah untuk mengolah suatu masalah dengan satu atau lebihmasukan untuk menghasikan satu atau lebih keluaran.Bentuk:PROCEDURE nama_procedure(parameter1, parameter2, ... : tipeparameter;

Var parameterX, parameterY, ...: tipeparameter);

Keterangan;

Modul Pelatihan Asisten Pemrograman Komputer Lanjut 9

o Didalam prosedur dapat dideklarasikan variabel lain sebagai variabel bantu dalam perhitungan dan hanya berlaku pada prosedur tersebut.

o Didalam prosedur boleh ada prosedur atau fungsi laino Suatu identifier yang dideklarasikan pada prosedur dan

fungsi yang lebih tinggi atau program utama akan dikenal pada prosedur yang lebih rendah. Hal itu tidak berlaku sebaliknya.

o Suatu program atau prosedur dapat memanggil prosedur lain yang merupakan bagian dirinya

Contoh :Procedure Jumlah_Faktorial;Uses WinCrt;Var

x1, x2 : integer;y1, y2, total : longint;

Procedure Faktorial(n : integer; Var B: longint);Var

I : integer;Begin

B:=1;For i:= 1 to n do B:=B*1;

End;

Procedure Jumlah(a1, a2 : integer; var jum : longint);Begin

Jum:=a1+a2;End;

BeginWriteln(‘Jumlah 2 buah faktorial ‘);Write(‘Bilangan pertama :’)readln(x1);Write(‘Bilangan kedua :’)readln(x2);Faktorial(x1,y1);Faktorial(x2,y2);Jumlah(y1,y2,total);Write(‘Jumlah Bil_1 + Bil_2 :’);

Modul Pelatihan Asisten Pemrograman Komputer Lanjut 10

Procedure Pertama(A, B : Real; VarX : Real);

Procedure Pertama_A(E, F : Integer);

Procedure Dua(G, H : Real; Var Z :Real);

Writeln(total); End.

Program Akar_Persamaan_Kuadarat;Usec WinCrt;TypeTulisan = String;

VarA, B, C, X1, X2 : Real;Ket : String[11];

Procedure Akar(A1, A2, A3 : Real; Var X1, X2 : Real);VarDet : Real;Ket : Tulisan;

Begin Ket :=’Akar Nyata’;Det := (A2*A2) – (4*A1*A3);If Det < 0 Then Ket:=’Akar Khayal’

ElseBegin

X1:=(-A2+SQRT(Det))/(2*A1);X2:=(-A2-SQRT(Det))/(2*A1);

End;End;

BeginClrScr;Writeln(’Mencari Akar Persamaan AX^2+BX+C’);Write(‘Nilai A = ‘);Readln(A);Write(‘Nilai B = ‘);Readln(B);Write(‘Nilai C = ‘);Readln(C);Akar(A,B,C,X1,X2);Writeln(Ket);If Ket <> ‘Akar Khayal’ Then

BeginWriteln(‘Akar 1 = ‘,X1:6:2);Writeln(‘Akar 2 = ‘,X2:6:2);

End;End.

b. FUNCTIONSubprogram yang mengolah suatu masalah tertentu untuk menghasilkan suatu keluaran tertentu. Keluaran fungsi harus mempunyai tipe.Perbedaan utama antara fungsi dengan prosedur adalah prosedur tidak harus mempunyai keluaran tetapi fungsi harus mempunyai keluaran.Bentuk:FUNCTION nama_fungsi(daftar_parameter : tipe): tipe_fungsi;

Modul Pelatihan Asisten Pemrograman Komputer Lanjut 11

Keterangan:o Di dalam fungsi dapat dideklarasikan variabel lain

sebagai variabel bantu dalam perhitungan dan hanya berlaku pada fungsi tersebut.

o Di dalam fungsi boleh ada fungsi laino Suatu identifier yang dideklarasikan pada fungsi yang

lebih tinggi atau program utama akan dikenal pada fungsi yang lebih rendah. Hal itu tidak berlaku sebaliknya.

o Suatu fungsi dapat memenggil fungsi lain yang merupakanbagian darinya.

Contoh :Program Fungsi;Uses WinCrt;Var

p, q, r : integer;s : real;

Function Faktorial(n : integer): longint;Var

i, k, fak : longint;Begin

k:=1;for i:=1 to n do k:=k*i;fak:=k;

end;

Function Faktorial2(m, n : integer): longint;Var i, k : longint;

Begink:=1;For i:= m downto (n+1) do

K:=k*1;Faktorial2:=k;

Modul Pelatihan Asisten Pemrograman Komputer Lanjut 12

Function Pertama(A, B : Real; Var X : Real);

Function Pertama_A(E, F : Integer);

Function Dua(G, H : Real; Var Z : Real);

End; Begin Clrscr; Writeln('Menghitung Kombinasi P, Q '); Writeln('Nilai P harus lebih besar dari Q'); Repeat Write('p:');Readln(p); Write('q:');Readln(q); Until p>=q; r:=p-q; s:=Faktorial2(p,r)/Faktorial(q); writeln('Harga kombinasi (',P,'-',Q,') adalah : ',s:6:0);End.

Parameter Dalam Prosedur dan FungsiDalam pemrograman Pascal nilai-nilai variabel dapat digunakan dalam modul/operasi/prosedur lain yang membutuhkan, hal ini dapat dilakukan dengan beberapa cara:1. Di buat bersifat global

Agar suatu nilai variabel bersifat global dan dapat digunakan oleh prosedur yang ada dalam modul, maka harus dideklarasikan diatas modul yang menggunakannya.

2. Dikirimkan sebagai parameter Parameter yang dikirimkan dari modul utama ke modul prosedurdisebut dengan parameter nyata dan parameter yang ada dan dituliskan pada judul prosedur disebut dengan parameter formal.o Pengiriman parameter secara nilai

Pengiriman secara nilai merupakan pengiriman searah, yaitu dari parameter nyata ke parameter formal, yang tidak dikirimkan balik dari parameter formal ke parameternyata.Gambaran:Procedure Hitung(A, B : integer);

Hitung(X,Y);

o Pengiriman parameter secara acuanPada pengiriman parameter secara acuan, perubahan yang terjadi pada nilai parameter formal di prosedur akan mempengaruhi nilai parameter di program utama.Pengiriman parameter secara acuan merupakan pengiriman secara dua arah.Gambaran:Procedure Hitung(Var A, B : integer);

Modul Pelatihan Asisten Pemrograman Komputer Lanjut 13

Hitung(X,Y);

o Pengiriman parameter sebagian secara nilai sebagian secara acuanParameter yang hanya dibutuhkan pada prosedur saja dpat dikirimkan secara nilai dan yang dikirimkan balik dilakukan secara acuan.Gambaran:Procedure Hitung(A, B : integer Var Z : Real);

Hitung(X,Y,Z);

STRUKTUR DATA ARRAY

Data terstruktur terdiri dari ARRAY, RECORD, SET, POINTER, FILEARRAY Didefinikan sebagai pengenal untuk menampung sekumpulan data yang bertipe sama.Ada 2 cara mendeklarasikan:

1. TYPE tipe_pengenal = ARRAY[batasan_indeks] OF tipedata;

Modul Pelatihan Asisten Pemrograman Komputer Lanjut 14

VAR nama_variabel = tipe_pengenal;2. VAR nama_variabel : ARRAY[batasan_indeks] OF tipe_data;

Catatan:Batasan indeks harus bertipe integer, character atau tipe yang terdefinisi.Contoh:

Type hari=(senin, selasa, rabo, kamis, jumat, sabtu, minggu);

Var tanda : array[senin..jumat] of integer;tanda : array[a..z] of real;

1. Array satu dimensiMerupakan array yang hanya mempunyai satu indeks.Contoh:Var tanda : array[1..10] of integer;

Contoh Program Array satu dimensi:Program Rata2;Uses WinCrt;Var A : Array[1..10] of Real; Total : Real; HargaRata : Real;

Procedure Masukan;Var I : Integer;Begin Writeln; For I:= 1 To 10 Do Begin Write('Data',I,':');Readln(A[I]); End;End;

Procedure Rerata;Var I : Integer;Begin Total:=0; For I:=1 To 10 Do Begin Total :=Total + A[I]; End; HargaRata:=Total/10;End;

Begin Writeln('Program Rata-Rata');

Modul Pelatihan Asisten Pemrograman Komputer Lanjut 15

Masukan; Rerata; Writeln('Harga Rata-rata :', HargaRata:6:4);End.

2. Array dua dimensiArray yang mempunyai dua buah indeks, dipakai untuk mempermudah pengertian posisi, ciri khas atau arti dari namavariabel tsb.Contoh :Var x : array[1..2, 1..3] of integer; berarti bahwa variabel x mempunyai 6 suku.

Contoh Program Array Dua Dimensi:Program PerkalianMatriks;Uses WinCrt;Type Larik = Array[1..25,1..25] of real;Var i,j,k : byte; m,n,l : byte; a, b, c : larik;Beginclrscr;Write('Banyak baris matriks pertama :');Readln(M);Write('Banyak kolom matriks pertama/baris matriks kedua :');Readln(N);Write('Banyak kolom matriks kedua :');Readln(L);Writeln;Writeln('Matriks pertama');For i:=1 to M dobegin for j:=1 to N do Begin write('Nilai[',i,',',j,']:');Readln(A[i,j]); end;end;Writeln('Matriks kedua');For i:=1 to N dobegin for j:=1 to L do Begin write('Nilai[',i,',',j,']:');Readln(B[i,j]); end;end;Writeln('Perkalian Matriks');For i:=1 to M do begin for j:=1 to N do Begin C[i,j]:=0; for k:= 1 to L do C[i,j]:=C[i,j]+A[i,k]*B[k,j]; end;

Modul Pelatihan Asisten Pemrograman Komputer Lanjut 16

end;writeln('hasil perkalian');writeln;for i:=1 to M do Begin for j:=1 to L do write(C[i,j]:9:2); writeln; end;end.

Contoh Program Array:Program Tes;Uses WinCrt;const maks_siswa = 20; maks_tes = 4;type PenampungNilai = array[1..maks_siswa] of array[1..maks_tes] of real;var DataNilai :PenampungNilai; JumSiswa, JumTes :byte;

Procedure PemasukanData(var JumSiswa, Jumtes : byte);var indeks_siswa, indeks_tes : byte;beginclrscr;write('jumlah siswa(1..20) :');readln(JumSiswa);write('cacah tes (1..4) :');readln(JumTes);For Indeks_Siswa :=1 to JumSiswa do Begin writeln('data siswa ke-',Indeks_Siswa); For indeks_tes:=1 to JumSiswa do begin write('nilai tes ke-',Indeks_Tes,':'); readln(DataNilai[Indeks_Siswa,Indeks_Tes]); end; end;end;

Procedure Proses_Cetak_Data(JumSiswa, JumTes : Byte);var indeks_siswa, indeks_tes : byte; Jumlah, Rata_rata : real; kelulusan : string[5];beginclrscr;

Modul Pelatihan Asisten Pemrograman Komputer Lanjut 17

writeln('daftar nilai ;');writeln; write('No':4); for indeks_tes:=1 to jumTes do write(' nilai ke-',Indeks_tes); writeln('rata-rata':11,' keterangan'); for indeks_siswa:=1 to jumSiswa do begin jumlah:=0; for indeks_tes:=1 to jumTes do jumlah:=jumlah+dataNilai[Indeks_siswa, indeks_tes]; Rata_rata:=jumlah/jumTes; if rata_rata>=60 then kelulusan :='lulus' else kelulusan:='tidak'; write(indeks_siswa:2); for indeks_tes:=1 to Jumtes do write(DataNilai[Indeks_Siswa, Indeks_Tes]:11:2); writeln(Rata_rata:11:2,kelulusan:10); end; end; begin PemasukanData(JumSiswa,JumTes); Proses_Cetak_Data(JumSiswa, JumTes);Readln; end.

Contoh Program Array:Program PerkalianMatriks;Uses WinCrt;Type Larik = Array[1..25,1..25] of real;Var i,j,k : byte; m,n,l : byte; a, b, c : larik;Beginclrscr;Write('Banyak baris matriks pertama :');Readln(M);Write('Banyak kolom matriks pertama/baris matriks kedua :');Readln(N);Write('Banyak kolom matriks kedua :');Readln(L);Writeln;Writeln('Matriks pertama');For i:=1 to M dobegin for j:=1 to N do Begin write('Nilai[',i,',',j,']:');Readln(A[i,j]); writeln; end;end;Writeln('Matriks kedua');For i:=1 to N dobegin

Modul Pelatihan Asisten Pemrograman Komputer Lanjut 18

for j:=1 to L do Begin write('Nilai[',i,',',j,']:');Readln(B[i,j]); writeln; end;end;Writeln('Perkalian Matriks');For i:=1 to M do begin for j:=1 to N do Begin C[i,j]:=0; for k:= 1 to L do C[i,j]:=C[i,j]+A[i,k]*B[k,j]; end; end;clrscr;writeln('hasil perkalian');writeln;for i:=1 to M do Begin for j:=1 to L do write(C[i,j]:9:2); end;end.

OPERASI PADA ARRAYOperasi Memasukkan dan Mengambil NilaiBila array sudah kita definisikan dan sudah diberi suatu nama,maka dapat kita manfaatkan sesuai fungsinya sebagai objek data. Operasi memasukkan nilai adalah operasi untuk memanfaatkan nilai data ke dalam elemen-elemen array. Biasanya hal ini dilakukan dengan operasi penugasan dengan objek array terletaksebagai operan disebelah kiri tanda :=Operasi mengambil nilai adalah operasi untuk mendapatkan /membaca nilai dari suatu array.

Contoh :Nilai[5] := 70;Nilai[7] := 80;If (nilai[5] > nilai[7] then

Nilai_max := nilai[7]Else nilai_max := nilai[5];Nilai[7] := nilai[7] + 20;Writeln(nilai[7]);Writeln(‘Rata-rata = ‘ , ratarata(nilai));

Operasi Mengakses Array

Modul Pelatihan Asisten Pemrograman Komputer Lanjut 19

Operasi mengakses suatu objek data array adalah operasi untukmemasukkan dan membaca nilai array baik secara keseluruhan ataupun pada suatu elemen data array tertentu. Operasi ini dapat dilakukan secara :1. Acak/Random

Setiap elemen array dapat diperlakukan secara individual dari elemen-elemen lainnya. Misalkan dalam memasukkan data, urutan array nilai[7] dapat dimasukkan terlebih dahulu daripada elemen-elemen lainnya, meskipun pada akhirnya semuaelemen array akan diproses.

2. Berurutan/SequentialStruktur array yang elemen-elemennya tersusun secara berurutan, memungkinkan kita mengakses sebagian atau seluruhelemen array secara berurutan.

Diskripsi Mengakses Array:D1 D2 D3 D4 ..... Dmax-2 Dmax-1 Dmax

Keterangan: Elemen-elemen array diakses mulai dari indeks array pertama,diteruskan ke indeks berikutnya yang lebih besar hingga terakhir (max).

Diskripsi Array Linier:Dmax Dmax-1 Dmax-2 Dmax-3 ..... D3 D2 D1

Keterangan: Elemen-elemen array diakses mulai dari indeks terakhir (max), diteruskan ke indeks berikutnya yang lebih kecil hingga indeks terkecil.

Diskripsi Array Melingkar:Di+1 .....

.Dmax-1 Dmax D1 ..... Di-1 Di

Keterangan: Elemen-elemen array diakses mulai dari indeks array tertentu(indeks awal), diteruskan ke indeks berikutnya yang lebih besar hingga indeks terakhir (max), dilanjutkan indeks pertama, dan dilanjutkan lagi hingga indeks sebelum indeks awal.

3. KeseluruhanSelain mengakses komponen rray, kita juga dapat mengakses array secara keseluruhan yang akan mempengaruhi semua elemennya sekaligus. Misalkan A dan B adalah dua variabel

Modul Pelatihan Asisten Pemrograman Komputer Lanjut 20

array yang tipenya sama, dan jumlah elemennya sama, maka kita dapat melakukan operasi penugasan A:=B yang berarti memasukkan nilai dari setiap elemen array B ke semua elemen A pada indeks-indeks yang bersesuaian.

Contoh-contoh Program ArrayPROGRAM RataArraySatuDimensi(INPUT,OUTPUT);Uses WinCrt;CONST No = 6; Tab = ' '; VAR Nilai:ARRAY[1..No] OF REAL; Rata_rata, Jum_Nilai:REAL; I :INTEGER;BEGIN{ Masukan Nilai array }{ --------------------- } FOR I:= 1 TO No DO BEGIN WRITE('Masukan Nilai ke ', I,': '); READLN(Nilai[I]); END;{ Hitung Jumlah }{ ----------------- } Jum_Nilai:= 0; FOR I:= 1 TO No DO Jum_Nilai:= Jum_Nilai + Nilai[I];{ Hitung Rata_rata }{ --------------------- } Rata_rata:= Jum_Nilai / No;{ Tampil Hasil }{ --------------- } WRITELN; WRITELN(Tab,'No #'); WRITE(' '); FOR I:= 1 TO No DO WRITE(I:7); WRITELN; WRITE(Tab); FOR I:= 1 TO No DO WRITE('-------'); WRITELN; WRITE('NilaiS '); FOR I:= 1 TO No DO WRITE(Nilai[I]:7:2); WRITELN;

Modul Pelatihan Asisten Pemrograman Komputer Lanjut 21

WRITE(Tab); FOR I:= 1 TO No DO WRITE('-------'); WRITELN; WRITELN(Tab,'Sum of Nilais = ', Jum_Nilai:0:2); WRITELN(Tab,'Rata_rata of Nilais = ', Rata_rata:0:2);END.

PROGRAM Nilai_Mahasiswa(INPUT,OUTPUT);Uses WinCrt;CONST JumKlas = 3; JumMah = 4; Tab = ' '; Garis = '-'; JumGaris = 23;TYPE NilaiArray = ARRAY[1..JumMah, 1..JumKlas] OF REAL; RataArray = ARRAY[1..JumMah] OF REAL;VAR Nilai :NilaiArray; Rata2 :RataArray; JumNilai :REAL; HitMah, HitNilai, Hit :INTEGER;

BEGIN{ Baca Nilai Array }{ --------------------------- } FOR HitMah:= 1 TO JumMah DO BEGIN WRITELN; WRITELN('Nilai Mahasiswa', HitMah,': '); FOR HitNilai:= 1 TO JumKlas DO BEGIN WRITE('Masukan Nilai untuk klas ', HitNilai,': '); READLN(Nilai[HitMah, HitNilai]); END; END;{ Hitung Rata-rata }{ --------------------------- }

Modul Pelatihan Asisten Pemrograman Komputer Lanjut 22

FOR HitMah:= 1 TO JumMah DO BEGIN JumNilai:= 0; FOR HitNilai:= 1 TO JumKlas DO JumNilai:= JumNilai + Nilai[HitMah, HitNilai]; Rata2[HitMah]:= JumNilai/JumKlas; END;{ Tampilan Hasil }{ ------------ } WRITELN; WRITELN(Tab, 'Mahasiswa #', Tab, 'Rata2'); WRITE(Tab); FOR Hit:= 1 TO JumGaris DO WRITE(Garis); WRITELN; FOR HitMah:= 1 TO JumMah DO WRITELN(Tab, HitMah:3, Tab, Rata2[HitMah]:12:2); WRITE(Tab); FOR Hit:= 1 TO JumGaris DO WRITE(Garis); WRITELN;END.

RECORD

Record adalah struktur data yang tersusun atas elemen-elemen yang jumlahnya tretentu dan tipe data elemennya dapat berbeda-beda. Elemen dalam suatu record disebut field.Record dan array merupakan struktur data yang panjangnya tertentu (statis), namun demikian terdapat perbedaan diantara keduannya, yakni:1. Elemen record bersifat heterogen, yaitu campuran benerapa

tipe data, sedangkan elemen array bersifat homogen2. Elemen record didefinisikan dengan simbol/identifier

sedangkan elemen array diidentifikasi dengan indeks.

DeklarasiRecord dideklarasikan dengan statemen record dan end.Bentuk Umum :

Type tipe_record = record;Nama_field_1 : tipe_field_1;

Modul Pelatihan Asisten Pemrograman Komputer Lanjut 23

Nama_field_2 : tipe_field_2;............... .........Nama_field_n : tipe_field_n;

End;Var nama_record : tipe_record;

Keterengan :o Tipe_record adalah nama/identifier yang digunakan untuk tipe

jenis record yang dibuat.o Nama_record adalah variabel bertipe record yang digunakan

untuk mengidentifikasi record suatu objek secara keseluruhano Nama_field adalah nama variabel yang digunakan untuk

mengidentifikasi sebuah atribut yang menjadi elemen record. Setiap atribut diidentifikasi dengan nama yang berbeda.

o Tipe_field adalah tipe data untuk setiap atribut elemen record.

Contoh Deklarsi Record:1. Untuk menyimpan nilai ujian mid dan ujian akhir dari 10

mahasiswa, maka dapat dibuat record rec_ujian dan kemudian dibuat array nilai bertipe rec_ujian.Contoh:

Const mak_mhs = 10;Type rec_ujian = record;

mid : integer;akhir : integer

end;Var Nilai : array[1..mak_mhs] of rec_ujian;

2. Untuk menyimpan data hari/tanggal, dapat dideklarasikan record tipe_tangal dengan elemen tanggal, bulan dan tahun.Contoh :

TypeTipe_tanggal = record;

Tanggal : 1..31;Bulan : 1..12;Tahun : 1990..2010;

End;

3. Record untuk menyimpan data-data sebuah bus antar propinsi yang berjumlah kursi 32 pada satu kali perjalanan, dapat di deklarasikan sebagai berikut:Contoh:

TypeRec_bus = Record;

No_bus : string[8];

Modul Pelatihan Asisten Pemrograman Komputer Lanjut 24

Tgl_perjalanan : tipe_tanggal;Sopir_1 : string;Sopir_2 : string;Kondektur : string;Nama_penumpang : array[1..32] of string;Jumlah_penumpang : integer;

End;Var

Data_bus : rec_bus;

Operasi pada Record1. Mengakses elemen record notasi titik

Elemen record (field) dapat diakses dengan notasi titik, yaitu menuliskan nama record diikuti tanda titik(.) dan namafield’Secara umum dapat dituliskan sebagai berikut:

Nama_record.nama_field

Contoh:Nilai[6].Nama :=’Lili’;Nilai[6].Mid :=75;Nilai[6].Akhir := 90;Writeln(Nilai[5].Akhir);For i:= 1 to 10 doBegin

Nilai[i].Akhir := (Nilai[i].Mid * 2 + Nilai[i].Akhir) div 3;Writeln(Nilai[i].nama, Nilai[i].Mid, Nilai[i].Akhir);

End;2. Mengakses record dengan pernyataan with

Bentuk umumnya adalah:With nama_record do

Pernyataan yang mengakses nama_field

o Bila nama record sudah disebut, maka pernyataan yang mengakses nama field dari elemen record sesudah pernyataan do tidak perlu menyebut nama recordnya.

o Pernyataan sesudah do tidak harus perintah tunggal, namaun dapat berupa pernyataan yang kompleks yang terletak di antara begin .....end, sehingga akan mengurangi penyebutan nama record secara berulang-ulang.

Contoh:With nilai[6] do

BeginNama : ‘nana’;Mid : 75;Akhir : 90;

End;

With nilai[5] do writeln(akhir);

Modul Pelatihan Asisten Pemrograman Komputer Lanjut 25

For i:= 1 to 10 doWith nilai[i] do

BeginAkhir :=(Nid * 2 + Akhir) div 3;Writeln(nama, Mid, Akhir)

End;

3. Mengakses record dalam recordMisalkan untuk mengisikan data 11 ke variabel bulan pada Tgl_perjalanan, variabel Data_Bus dapat dilakukan dengan cara:

o Data_Bus.Tgl_Perjalanan.Bulan := 11;o With Data_Bus do Tgl_Perjalanan.Bulan := 11;o With Data_Bus.Tgl_Perjalanan do Bulan := 11;

4. Mengakses record secara keseluruhanRecord juga dapat diakses secara keseluruhan dengan menggunakan nama record yang juga akan berpengaruh terhadap semua elemen record didalamnya. Misalkan Data_Bus1 dan Data_Bus2 adalah dua buah variabel record yang tipenya sama, maka dapat berlaku pernyataan :

Data_Bus2 := Data_Bus1;Yang akan berakibat semua elemen record pada variabel data_bus2 akan diisi dengan nilai dari semua elemen record data_bus1 pada field-field yang bersesuaian.

Contoh:Program Array_record_Nilai;Uses WinCrt;Const JumMhs = 10;Type Rec_Ujian = Record NoMhs : String[10]; Nama : String[15]; Mid : integer; Akhir : Integer; End;Type RangeIndek = 1..JumMhs; TipeData = Rec_Ujian; TipeArray = Array[RangeIndek] of TipeData;Var Nilai : TipeArray;

Procedure Inisialisasi_data(var ArData : TipeArray);Var i : RangeIndek;

Begin for i:= 1 to JumMhs do with ArData[i] do begin

Modul Pelatihan Asisten Pemrograman Komputer Lanjut 26

NoMhs := '00.00.0000'; Nama := 'xxxxxxxxxxxxxx'; Mid := 0; Akhir := 0; end;end;

Procedure CetakData(Data : TipeData);Begin With Data do Begin writeln(' No Mhs : ',NoMhs); writeln(' Nama : ',Nama); writeln(' Nilai Mid : ',Mid); writeln(' Nilai Akhir : ',Akhir); End;End;

Procedure Cetak_Semua_Data(ArData : TipeArray);Var i : integer;Begin for i := 1 to JumMhs do With ArData[i] do writeln(NoMhs:10, Nama:16, Mid:10, Akhir:10);End;

Procedure Mengisi_Identitas(var Data: TipeData);Begin Gotoxy(1,5);Writeln('No Mhs : ',Data.NoMhs); Gotoxy(1,6);Writeln('Nama : ',Data.Nama); Gotoxy(12,5);Readln(Data.NoMhs); Gotoxy(12,6);Readln(Data.Nama);End;

Procedure Mengisi_Nilai(var data : TipeData);Begin with data do begin Gotoxy(1,5);Writeln('No Mhs : ',NoMhs); Gotoxy(1,6);Writeln('Nama : ',Nama); Gotoxy(1,7);Writeln('Nilai Mid : ',Mid); Gotoxy(1,8);Writeln('Nilai Akhir : ',Akhir); Gotoxy(15,7);Readln(Data.Mid); Gotoxy(15,8);Readln(Data.Akhir); end;end;

Procedure Mengisi_data(var ArData : tipeArray; mode : integer);var i : integer;

Modul Pelatihan Asisten Pemrograman Komputer Lanjut 27

begin Repeat Clrscr; writeln('Mengisi Data ke Record.Masukkan No.Indek :'); write('Masukkan No.Indek : '); readln(i); until i in[1..10]; case mode of 1 : begin writeln('Memasukkan Identitas mahasiswa '); Mengisi_Identitas(ArData[i]); end; 2 : begin writeln('Memasukkan Nilai mahasiswa '); Mengisi_Nilai(ArData[i]); end; end;end;

Procedure Cetak_Data(ArData : TipeArray; Mode : integer);var j : integer;begin Gotoxy(20,1);writeln('Mencetak Data Nilai'); case mode of 1 : begin write('Memasukkan Indek record yg akan dicetak :'); readln(j); CetakData(ArData[j]); end; 2 : begin writeln(' Daftar Nilai Struktur Data 10 Mahasiswa'); Writeln('======================================================');

writeln('NoMhs Nama Nilai Mid Nilai Akhir');Writeln('======================================================'); Cetak_semua_data(ArData);writeln('======================================================'); end; end; writeln; repeat until keypressed;end;

Procedure Layar_Menu_Utama;var pilihan : char; selesai : boolean;begin repeat clrscr; writeln(' Menu Utama'); writeln('1. Inisialisasi Data'); writeln('2. Isi Identitas Mahasiswa');

Modul Pelatihan Asisten Pemrograman Komputer Lanjut 28

writeln('3. Memasukan data nilai'); writeln('4. Mencetak Data Tertentu'); writeln('5. Mencetak Daftar Nilai'); writeln('6. Selesai'); writeln; write('pilihan [1..6] :');readln(pilihan); clrscr; selesai:=false; clrscr; case pilihan of '1' : Inisialisasi_Data(Nilai); '2' : Mengisi_data(Nilai,1); '3' : Mengisi_data(Nilai,2); '4' : Cetak_data(Nilai,1); '5' : Cetak_data(Nilai,2); '6' : selesai:=true; end; until selesai; writeln('selesai');end;begin layar_menu_utama;end.

RECORD VARIANTBeberapa contoh diatas memberikan gambaran record dengan tipe data dari elemen bersifat tetap. Suatu alternatif yang lain yaitu berupa variant record, yang dimaksudkan untuk menghemat memori. Sebab dengan alternatif ini, data yang berbeda dapat menempati lokasi memori yang sama.Bentuk umum :Type

PengenalRecord = RecordField_1 : tipe_field_1;Field_2 : tipe_field_2;CASE pilihan : tipe_pilihan OF Pilihan1 : (field_4 : tipe_field_4;

field_5 : tipe_field_5; ............);

Pilihan2 : (field_6 : tipe_field_6; field_7 : tipe_field_7;

............); Pilihan_n : (...........: .........);End;Field_7 : tipe_field_7

End;Bentuk umum record variant menunjukkan bahwa record dapat terdiri dari 2 bagian yaitu:

Bagian Tetap, bagian record yang field-fieldnya tetap.

Modul Pelatihan Asisten Pemrograman Komputer Lanjut 29

Bagian berubah, bagian record yang field-fieldnya bisa berubah berdasarkankondisi tertentu dengan pernyataan CASE.

Misalkan: Suatu record pegawai didefinisikan sbb:Type

RecordPegawaiTetap = RecordNIP : String[6];Nama : String[15];GajiPokok : longint;JmlJamLembur : Byte;

End;RecordPegawaiHonorer = Record

NIP : String[6];Nama : String[15];GajiPokok : longint;JmlJamLembur : Byte;

End;Untuk menghemat memori, definisi kedua record dapat dijadikan satu menggunakan Record Variant menjadi:Type

StatusPegawai = (Tetap, Honorer);RecordPegawaiTetap = Record

NIP : String[6];Nama : String[15];CASE Status : StatusPegawai OF

Tetap : (GajiPokok : LONGINT; JmlJamLembur : Byte);

Honorer : (JmlJamKerja : Byte); End;

VarDataPegawai : RecordPegawai;

Contoh Program :Program Variant_Record;Uses WinCrt;Type StatusPegawai = (Tetap, Honorer); RecordPegawai = Record

NIP : String[6];Nama : String[15];CASE Status : StatusPegawai OF

Tetap : (GajiPokok : LONGINT; JmlJamLembur : Byte);

Honorer : (JmlJamKerja : Byte); End;

Var DataPegawai : RecordPegawai; Jawaban : Char;

Modul Pelatihan Asisten Pemrograman Komputer Lanjut 30

GajiBersih : real; Upah_Per_Jam : Real;

BeginClrScr; With DataPegawai Do Begin write('Nomor Induk Karyawan : '); readln(NIP); write('Nama Karyawan : '); readln(Nama); write('Upah per jam : '); readln(Upah_Per_jam); write('Pegawai Tetap [Y/T] : '); readln(Jawaban); If (jawaban= 'Y') OR (jawaban='y') then status:=tetap else status := honorer; Case Status of tetap : Begin Write('Gaji Pokok : '); Readln(GajiPokok); Write('Jumlah Jam Lembur : '); Readln(JmlJamLembur); gajiBersih:=GajiPokok+(Upah_Per_Jam * JmlJamLembur); End; Honorer : Begin Write('Jumlah Jam Kerja : '); Readln(JmlJamKerja); gajiBersih:=Upah_Per_Jam * JmlJamKerja; End; End; writeln; writeln('Gaji Total = Rp ',gajiBersih:10:0); end; Readln;end.

Program ArrayRecordVariant;Uses WinCrt;Const Garis ='------------------------------------------------------------';

Type StatusPegawai = (Tetap, Honorer); DataRec = Record Nama : String[30]; NIP : String[12]; Tot, Rata : Real; GajiBulan : Array[1..12] of Real; gajiBersih : Real;

Modul Pelatihan Asisten Pemrograman Komputer Lanjut 31

UpahPerjam : Real; CASE Status : StatusPegawai OF

Tetap : (GajiPokok : LONGINT; JmlJamLembur : Byte); Honorer : (JmlJamKerja : Byte);

End;Var Gaji : Array[1..100] of DataRec; i, j, N : integer; Tot, Jumlah, Bonus : Real; Jawaban : Char;

BeginClrscr;Write('Jumlah Karyawan : ');Readln(N);For i:=1 to n do With Gaji[i] do Begin Writeln('Data ke-',i); Write('Nama Karyawan : '); Readln(Nama); Write('NIP : '); Readln(NIP); Write('Pegawai Tetap [Y/T] : '); Readln(Jawaban); Write('Upah Per Jam : '); Readln(UpahPerJam); Writeln('Gaji tahun ini :'); Tot:=0; For j:= 1 to 12 do Begin Write('Gaji Bulan ke-',j,' : '); Readln(GajiBulan[j]); Tot:=Tot+GajiBulan[j]; end; Rata:=Tot/12; Bonus:=0.15*Tot;

If (jawaban= 'Y') OR (jawaban='y') then status:=tetap else status := honorer; Case Status of tetap : Begin Write('Gaji Pokok : '); Readln(GajiPokok); Write('Jumlah Jam Lembur : '); Readln(JmlJamLembur); GajiBersih:=GajiPokok + (UpahPerJam * JmlJamLembur); End; Honorer : Begin

Modul Pelatihan Asisten Pemrograman Komputer Lanjut 32

Write('Jumlah Jam Kerja : '); Readln(JmlJamKerja); GajiBersih:=UpahPerJam * JmlJamKerja; End;

End; End;

Writeln(Garis);Writeln(' Daftar Gaji Karyawan PT Express Gembol ');Writeln(' No Nama NIP Gaji Rata2 Gaji Bersih Bonus Jumlah ');Writeln(Garis);

For i:=1 to n do With Gaji[i] do Begin Write(i:3,Nama:10,NIP:5); Jumlah:=GajiBersih+Bonus; Write(Rata:13:2,GajiBersih:13:2,Bonus:13:2,Jumlah:13:2); Writeln; End; Writeln(Garis);End.

POINTER

Pada pokok bahasan array telah dijelaskan bahwa tipe data array adalah tipe data yang bersifat statis baik ukuran maupunurutannya. Pada saat program dijalankan, memori yang dipakai oleh suatu variabel didak dapat dihapus meskipun variabel tersebut sudah tidak digunakan lagi. Untuk memecahkan masalah tersebut, maka maka kita dapat mengunakan variabel pointer yang bersifat dinamis. Variabel pointer akan dialokasikan hanya pada saat dibutuhkan dan setelah tidak digunakan dapat didealokasikan lagi.

Pengertian PointerVaribel Pointer merupakan suatu variabel yang menyimpan alamatsuatu objek/variabel lain berupa data tunggal atau sebuah record. Karenanya variabel pointer sebenarnya bukan berisi data melainkan berisi alamat dari suatu data.Misalkan terdapat contoh pointer sbb:

Modul Pelatihan Asisten Pemrograman Komputer Lanjut 33

R Rini

R adalah pointer yang menunjuk record Rini dan V adalah pointer yang menunjuk record Vita. Pointer bersifat flekibel, misalkan dua pointer dapat menunjuk pada record yang sama, seperti T dan U yang menunjuk record Uut. Namun pointer juga dapat tidak menunjuk kesuatu record apapun.DeklarasiBentuk Umum deklarasi Pointer adalah:Type

Pengenal = ^Simpul;Simpul = tipe;

Deklarasi pointer untuk beberapa tipe data:1. Pointer untuk Integer

Bentuk:Type

tipe_variabel = ^integer;Var

nama_variabel : tipe_variabel;atauVar

nama_variabel : ^integer;

Contoh :Type

ptr = ^integer;Var

A, b : ptr;X : ^integer;

2. Pointer untuk RealBentuk:Type

tipe_variabel = ^real;Var

nama_variabel : tipe_variabel;

Modul Pelatihan Asisten Pemrograman Komputer Lanjut 34

S

T

U

V

HeriUut

Vita

null

atauVar

nama_variabel : ^real;Contoh :Type

ptr = ^real;Var

a, b, c, d : ptr;X : ^real;

3. Pointer untuk String dan KarakterBentuk:Type

tipe_variabel_1 = ^string[bil_integer];tipe_variabel_2 = ^char;

Varnama_variabel_1 : tipe_variabel_1;nama_variabel_2 : tipe_variabel_2;

atauVar

nama_variabel_1 : ^string[bil_integer];nama_variabel_2 : ^char;

Contoh :Type

Ptr_1 = ^string[10];Ptr_2 = ^char;

VarA, b : Ptr_1;X, y : Ptr_2;C : ^char;D : ^string[5];

4. Pointer untuk RecordBentuk:Type

nama_tipe = ^nama_record;^nama_record = RECORD

field_1 : tipe_field;field_2 : tipe_field;....... : ......;field_n : tipe_field;

END;Var

nama_variabel : nama_tipe;Contoh:Type

Ptr_mahasiswa = ^mahasiswa;Mahasiswa = RECORD

Nama : string[20];NIM : integer;Nilai : integer;

Modul Pelatihan Asisten Pemrograman Komputer Lanjut 35

END;Var

Data_mahasiswa : ptr_mahasiswa;Membuat PointerUntuk mengalokasikan simpul dalam pengingat, statemen yang dipakai adalahstatemen new yang mempunyai bentuk umum:

New(P1);New(P2);

Operasi pada PointerSecara umum ada 2 operasi dasar yang dapat dilakukan terhadap data yang bertipe pointer, yaitu:

1. Mengkopi pointer2. Mengkopi isi simpul

Misalkan dideklarasikan suatu tipe pointer sbb;Type

Simpul = ^data;Data = RECORD

Nama : string;Alamat : string;END;

Var T1, T2 : simpul;

Pada deklarasi tersebut, pointer T1 dan T2 mempunyai deklarasisimpul yang sama sehingga memenuhi syarat untuk operasi pointer.Jika kita berikan statemen:

New(T1);New(T2);

Maka kita mempunyai 2 simpul, yaitu:

Dengan menggunakan statemen:T1^.Nama : ‘AAA’;T2^.Alamat : ‘SURABAYA’;

Maka keadaan 2 simpul diatas berubah :

Modul Pelatihan Asisten Pemrograman Komputer Lanjut 36

T1 ? ?

T2 ? ?

T1 AAA SURABAYA

T2 ? ?

Operasi Mengkopi PointerOperasi mengkopi pointer akan mengakibatkan sebuah simpul akan ditunjuk oleh lebih dari satu pointer.Bentuk deklarasi statemen:

T1 := T2;Setelah statemen tersebut dijalanka, keadaan memori berubah menjadi:

Simpul yang semula ditunjuk oleh T2 menjadi lepas dan tdak dapat diakses lagi karena tidak diketahui lagi lokasinya, kecuali ada pointer lain yang menunjuk.

Menkopi Isi SimpulOperasi menkopi isi simpul akan mengakibatkan dua atau lebihsimpul yang ditunjuk oleh pointer yang berbeda akan memilikiisi yang sama.Bentuk deklarasi statemen:

T2^ := T1^;Maka hasil yang diperoleh adalah:

Pada operasi perbandingan simpul semua relasi dapat digunakan.Contoh:

If T1^ = T2 thenWhile T1^ <> T2^ then

Menghapus PointerSetelah suatu pointer dihapus, maka lokasi yang semula ditempati oleh simpul yang ditunjuk oleh pointer tersebut bebas dan dapat digunakan oleh peubah yang lain.Deklarasi:

Dispose(variabel bertipe pointer)Contoh:

Dispose(T2);Contoh Program Pointer:

Program Pointer_Record;Uses WinCrt;Type PenunjukKaryawan = ^CatatanKaryawan; CatatanKaryawan = Record Kode : String[5]; Nama : String[25];

Modul Pelatihan Asisten Pemrograman Komputer Lanjut 37

T1 AAA SURABAYA

T2 ? ???

T1 AAA SURABAYA

T2 AAA SURABAYA

Gaji : Real; End;Var DataKaryawan : Array[1..5] of PenunjukKaryawan; i : Byte;

Begin Writeln('Masukkan 5 buah data karyawan '); For i:=1 to 5 do Begin Writeln; Writeln('karyawan ke :',i:2); New(DataKaryawan[i]); With DataKaryawan[i]^ do Begin Write('Kode karyawan ? ');Readln(Kode); Write('Nama karyawan ? ');Readln(Nama); Write('Gaji karyawan ? ');Readln(Gaji); end; end;

writeln; writeln('Data Karyawan diambil dari heap:'); writeln('======================================'); Writeln(' Kode Nama Gaji '); Writeln('--------------------------------------'); For i:=1 to 5 do with DataKaryawan[i]^ do writeln(Kode:5,Nama:25,Gaji:12:2);End.

Membuat Daftar Berantai (Linked List)Pembuatan Linked List di mulai dengan mengatur agar pointer yang merupakan kepala dari List tidak menunjuk ke lokasi manapun. Hal ini dapat dilakukan dengan memberikan nilai NIL kepada kepala pointer.

Contoh: PointerKepala

NIL

PtrBaru variabel dinamis

jojon direktur ?Nama Jabatan next

Urutan Statemen yang digunakan;1. PointerKepala:=NIL;2. NEW(PtrBaru);

Modul Pelatihan Asisten Pemrograman Komputer Lanjut 38

3. PtrBaru^.Nama:=’Jojon’;4. PtrBaru^.Jabatan:=’direktur’;5. PtrBaru^.Next:=PointerKepala;6. PointerKepala:=PtrBaru;

Jika kita ingin menambahkan simpul, maka urutan statemennya adalah:1. NEW(PtrBaru);2. PtrBaru^.Nama:=’Kartolo’;3. PtrBaru^.Jabatan:=’Supervisor’;4. PtrBaru^.Next:=PointerKepala;5. PointerKepala:=PtrBaru;

Menampilkan Isi Linked ListIsi daftar berantai dapat ditampilakn dengan cara sebagai berikut: Sebuah variabel pointer (PtrSementara) diatur

supaya menunjuk lokasi yang ditunjuk oleh PtrKepala. Selama PtrSementara tidak berisi NIL, maka:

Cetak isi simpul yang ditunjuk oleh PtrSementara PtrSementara digeser agar menunjuk lokasi ang ditunjuk oleh pointer Next.

Pada proses menampilkan isi daftar berantai, pointer sementara(PtrSementara) diperlukan dengan maksud agar PtrKepala tetap menunjuk lokasi yang sama baik sebelum atau sesudah isi daftarberantai ditampilkan.Dalam bentuk yang sederhana, implementasi cara menampilkan isidaftar berantai adalah sebagai berikut: PtrSementara :=PtrKepala;

While PtrSementara <> Nil Do Begin

Writeln(PtrSementara^.Nama,PtrSementara^.Jabatan);PtrSementara:=PtrSementara^.Next;

End;

Menghapus Variabel DinamisDalamstruktur data dinamis, kadang-kadang dilibatkan operasi untuk melakukan pengahausan terhadap data. Dalam hal ini, variabel dinamis yang menyimpan data yang dihapus perlu dibuang, dengan maksud supaya lokasi dari variabel dinamis tersebut bisa digunakan alokasi variabel dinamis lainnya(kalauada penciptaan variabel dinamis lagi).Variabel dinamis sebenarnya disimpan dalambagian memori yang khsus digunakan untuk alokasi variabel dinamis yang disebut heap. Dalam heap terdapat suatu pointer bawaan yang bersifat Modul Pelatihan Asisten Pemrograman Komputer Lanjut 39

global dengan nama HeapPtr. Pointer ini selalu menunjuk memoriterendah dalam heap yang belum digunakan untuk alokasi variabel dinamis.Untuk melakukan pengahapusan terhadap variabel dinamis dapat dilakukan dengan dua cara:1. Mark dan ReleaseProsedur Mark mempunyai bentuk:

Mark(var_ptr)Dengan var_ptr berupa variabel bertipe pointer. Prosedur ini dipakai untuk menyimpan isi pointer heap (HeapPtr) ke dalam variabel var_ptr.Prosedur Release memiliki bentuk:

Release(var_ptr)Kalau prosedur ini dieksekusi, maka akan menebabkan seluruh variabel dinamis yang terletak antara yang ditunjuk oleh var_ptr sampai sebelum ditunjuk oleh heap_ptr akan dihapus Contoh:

New(ptr1);New(ptr2);Mark(PtrAwal);New(ptr3);New(ptr4);New(ptr5);

Keterangan:Saat pernyataan Mark(PtrAwal) dijalankan, PtrAwal akan menunjuk lokasi yang terletak sesudah yang ditunjuk oleh pointer Ptr2. Selanjutnya New(Ptr3) membuat Ptr3 menunjuk lokasi yang sama dengan yang ditunjuk oleh PtrAwal. Setelah adanya pernyataan New(Ptr5) maka heapPtr akan menunjuklokasi sesudah yang ditunjuk oleh Ptr5.Sebagai gambaran:

Ptr1 Isi dariPtr1

Ptr2 Isi dariPtr2

Ptr3 Isi dariPtr3

Ptr4 Isi dariPtr4

Ptr5 Isi dariPtr5bebas

Modul Pelatihan Asisten Pemrograman Komputer Lanjut 40

PtrAwal

Memoriuntukheap

Jika kemudian diberikan perintah:Release(PtrAwal)

Maka gambaran mengenai heap ditunjukkan sbb:

Ptr1 Isi dariPtr1

Ptr2 Isi dariPtr2

HeapPtr

Isi dariPtr3

Bebas

2. Dispose atau FreeMemDisposeDigunakan untuk menghapus variabl yang ditunjuk oleh var_ptrProsedur Dispose mempunyai bentuk:

Dispose(var_ptr);Contoh:

Dispose(Ptr3):Dispose(Ptr4);

Keterangan:Jika ada penambahan variabel dinamis lagi maka lokasi ptr3 danptr4 yang telah kosong akan diprioritaskan.Sebagai gambaran:

Ptr1 Isi dariPtr1

Ptr2 Isi dariPtr2

PtrAwal

bebas

bebasPtr5 Isi dari

Ptr5HeapPtr

bebas

Prosedur FreeMem digunakan untuk menghapus variabel dinamis yang didefinisikan dengan pernyataan GetMem.GetMem adalah prosedur yang digunakan untuk menciptakan variabel dinamis yang ukurannya bisa ditentukan oleh pemrogram.

Modul Pelatihan Asisten Pemrograman Komputer Lanjut 41

PtrAwal

Memoriuntukheap

Variabel dinamis ptr3 dan ptr4dihapus

Memoriuntukheap

Bentuk:GetMem(var_ptr,ukuran);

Dengan var_ptr merupakan variabel pointer dan ukuran (bertipe word) menyatakan ukuran dari variabel dinamis.Variabel dinamis yang diciptakan dengan GetMem dapat dihapus dengan menggunakan prosedur FreeMem.Bentuk:

FreeMem(var_ptr,ukuran);

Contoh Program:Program Linked_List;Uses WinCrt;Type

PtrData = ^RecordData;StringNama = String[20];RecordData = Record

Nama : StringNama; Jabatan : String[15]; Lanjutan : PtrData; End;

VarPtrAwalHeap : Pointer;

PtrKepala : PtrData;

Procedure Bentukdaftar(var PtrKepala : PtrData);var PtrBaru : PtrData; Jawaban : char;Begin repeat clrscr; new(PtrBaru); write('Nama Pegawai : '); readln(PtrBaru^.Nama); write('Jabatan : '); readln(PtrBaru^.Jabatan);

PtrBaru^.Lanjutan:=PtrKepala; PtrKepala:=PtrBaru;

write('Masukan data lagi [Y/T] : '); repeat jawaban :=UPCASE(READKEY) until jawaban in['Y','T']; writeln(jawaban); until jawaban = 'T'end;

Procedure CetakDaftar(PtrKepala : PtrData);var PtrSementara : PtrData;

Modul Pelatihan Asisten Pemrograman Komputer Lanjut 42

Begin Clrscr; writeln(' ISI DAFTAR BERANTAI '); writeln('======================================='); writeln(' N a m a ':20,' J a b a t a n':16); writeln('---------------------------------------'); PtrSementara:=PtrKepala; while PtrSementara <> Nil do with PtrSementara^ do begin writeln(Nama:20,Jabatan:16); PtrSementara:=Lanjutan; end; writeln('---------------------------------------'); write(' Tekan Enter ');readln;end;

Procedure cariData(PtrKepala : PtrData; NamaDiCari : StringNama; Var PtrPraPosisiData, PtrPosisiData : PtrData);

var Ketemu : boolean;begin PtrPraPosisidata := Nil; PtrPosisiData := PtrKepala; Ketemu := false; while (NOT Ketemu) AND (PtrPosisiData <> Nil) do if PtrPosisiData^.Nama <> NamaDiCari then begin PtrPraPosisiData := PtrPosisiData; PtrPosisiData:=PtrPosisiData^.Lanjutan; end else Ketemu:=TRUE;end;

Procedure HapusIsiDaftar(var PtrKepala : PtrData);const String_Kosong = '';var NamaDiCari : StringNama; PtrPosisiData, PtrPraPosisiData : PtrData;beginclrscr; writeln('Masukkan Nama Pegawai dari Data yang akan dihapus :'); readln(NamaDiCari); If NamaDiCari = String_Kosong then exit; CariData(PtrKepala,NamaDiCari,PtrPraPosisiData,PtrPosisiData); If PtrPosisiData = nil then

Modul Pelatihan Asisten Pemrograman Komputer Lanjut 43

begin writeln('Data tak ditemuka. Tekanenter untuk melanjutkan...'); readln; end else begin if PtrPraPosisiData = nil then PtrKepala:=PtrKepala^.Lanjutan else PtrPraPosisiData^.Lanjutan := PtrPosisiData^.Lanjutan; dispose(PtrPosisiData); writeln('OK. data sudah dihapus. Tekan enter...'); readln; end;end;

Procedure ProsesPilihan(var PtrKepala : PtrData);Var

Pilihan : char;Begin Repeat Clrscr; writeln(' PILIHAN PROSES '); writeln('1. Memasukkan/Menambahkan Data'); writeln('2. Menampilkan Isi Daftar Berantai'); writeln('3. Menghapus Data pada Daftar Berantai'); writeln('4. Selesai'); writeln('--------------------------------------'); writeln('Masukkan Kode Pilihan [1..4] : '); repeat pilihan:=UPCASE(ReadKey) until Pilihan in['1'..'4']; write(Pilihan); case Pilihan of '1' : Bentukdaftar(PtrKepala); '2' : CetakDaftar(PtrKepala); '3' : HapusIsiDaftar(PtrKepala); end until Pilihan = '4'end;

Begin Mark(PtrAwalHeap); PtrKepala:=Nil; ProsesPilihan(PtrKepala); Release(PtrAwalHeap);end.

Modul Pelatihan Asisten Pemrograman Komputer Lanjut 44

FILE

Dalam struktur data array, data yang kita gunakan akandisimpan dalam memori internal komputer. Kelemahan penyimpananini adalah data akan bersifat volatile (akan hilang bilaaliran listrik terputus) dan kapasitas data yang disimpandalam memori sangat terbatas. Untuk mengatasi hal tersebutmaka di dalam struktur data Pascal digunakan struktur dataFile. Struktur data File akan bersifat nonvolatile (tidakhilang bila aliran listrik terputus, sehingga dapat menyimpandata dengan permanen) karena dapat disimpan di external memoridan mempunyai kapasitas data yang besar.

Suatu file terdiri dari urutan komponen yang mempunyaitipe yang sama. Berbeda dengan Array yang jumlah komponennyasudah pasti, jumlah komponen dalam File bersifat fleksibel,yaitu dapat ditambah dan dikurangi sewaktu-waktu.

Prosedur dan Fungsi Standar untuk semua tipe File1. Assign

Digunakan untuk menghubungkan nama dari external file ke dalam suatu file variabelBentuk Umum:

Assign(f,name:string);Contoh:

Assign(Rekam,’A:gaji.dat’);Keterangan:

Rekam adalah file variabel A:gaji.dat adalah external file berupa file di disk

2. RewriteDiguanakan untuk membuka file yang baru atau yang belum pernah ada di disk.Bentuk Umum:

Rewrite(f[:file; recsize:word);Contoh:

Assign(Rekam,’A:gaji.dat’);Rewrite(Rekam);

Modul Pelatihan Asisten Pemrograman Komputer Lanjut 45

Keterangan: Bila file yang dibuka dengan prosedur ini sebelumnya sudah ada di disk, maka isinya akan dihapus.

3. ResetDigunakan untuk membuka file yang telah ada.Bentuk Umum:

Reset(f[:file; recsize:word);Contoh:

Assign(Rekam,’A:gaji.dat’);Reset(Rekam);

Keterangan: File yang telah ada di disk dengan nama filenya ‘gaji.dat’ di drive A dibuka, bila file yang dibuka ini tidak ada di disk maka akan terjadi kesalahan.

4. CloseDigunakan untuk menutup file yang telah dibuka dengan prosedur Rewrite, Reset atau Append (digunakan khusus untuk File Text).Bentuk Umum:

Close(f);Contoh:

Close(Rekam);

5. EraseDigunakan untuk menghapus suatu external file.Bentuk Umum:

Erase(f);Contoh:

Assign(Rekam,’A:gaji.dat’);Erase(Rekam);

Keterangan: File yang akan dihapus dengan prosedur ini harus dalam keaddan tertutup. Bila masih terbuka harus ditutup terlebih dahulu dengan prosedur standar Close.

6. RenameDigunakan untuk mengganti nama dari suatu external fileBentuk Umum:

Rename(f,newname:string);Contoh:

Assign(Rekam,’A:gaji.dat’);Rename(Rekam,’A:gajikar.dat’);

Keterangan:

Modul Pelatihan Asisten Pemrograman Komputer Lanjut 46

File yang akan dihapus dengan prosedur ini harus dalam keaddan tertutup. Bila masih terbuka harus ditutup terlebih dahulu dengan prosedur standar Close. Newname adalah nama baru dari file yang diinginkan.

7. GetDirDigunakan untuk mengetahui posisi direktori yang aktif pada suatu drive.Bentuk Umum:

GetDir(d:byte; var s:string);Contoh:

VarDrive : Byte;Directory : String[50];

BeginDrive := 0;GetDir(Drive,Directory);Writeln(‘Directory yang aktif adalah : ‘,Directory);

End.

8. ChDirDigunakan untuk merubah posisi dari directoryBentuk Umum:

ChDir(s:string);Contoh:

VarDrive : Byte;Directory : String[50];

BeginDrive := 0;GetDir(Drive,Directory);Writeln(‘Directory yang aktif adalah : ‘,Directory);

Write(‘Akan dirubah menjadi?);Readln(Directory);ChDir(Directory);

GetDir(Drive,Directory);Writeln;Writeln(‘Directory sekarang menjadi ‘,Directory);

End.9. MkDir

Digunakan untuk membuat suatu direktori yang baruBentuk Umum:

MkDir(s:string);Contoh:

VarDirectory : String[50];

Begin

Modul Pelatihan Asisten Pemrograman Komputer Lanjut 47

Directory:=’B:\Mei’);

MkDir(Directory);Assign(Rekam,’gaji.dat’);Rewrite(Rekam);

Keterangan: Directory baru dibuat di drive B: dengan nama’\Mei’ dan posisi directory dirubah ke directory yang baru, sehinggafile gaji.dat yang baru dibuat akan berada di directory yang baru ini.

10. RMDIRDigunakan untuk menghapus suatu directory Bentuk Umum:

RmDir(s:string);Contoh:

VarDirectory : String[50];

BeginDirectory:=’B:\Mei’);

RmDir(Directory);End.

11. EOFDigunakan untuk menghasilakan status apakah file sudah berada di posisi akhir dari file atau tidakBentuk Umum:

EOF(f):boolean;

Didalam Pascal dikenal ada 3 macam tipe dari File, yaitu:1. File Teks (Text File)File text adalah file ang berisi kumpulan karakter yang dibentuk dalam baris-baris dan masing-masing baris diakhiri dengan tanda akhir dari baris.File text sebenarnya merupakan file dengan tipe char, tetapi mempunyai perbedaan, yaitu nilai yang bukan tipe char dapat direkam dan dibaca oleh file text. Nilai yang bukan tipe char akan secara otomatis dirubah ke atau dari tipe char.File variabel pada file text ditunjukkan dengan suatu variabelyang dideklarasikan dengan tipe text.Prosedur standard yang digunakan dalam file text:1. Append

Digunakan untuk membuka file yang telah ada/ menambah data yang sudah ada,Bentuk Umum:

Append(var f:text);Modul Pelatihan Asisten Pemrograman Komputer Lanjut 48

Contoh:Var

TipeFile : Text;Begin Assign(TipeFile,’data.txt’); Append(TipeFile);

2. Write dan WritelnDigunakan untuk membuka file yang telah ada/ menambah data yang sudah ada.Bentuk Umum:

Write([var f:text;]v1[,v2,...,vn]);Writeln([var f:text;]v1[,v2,...,vn]);

Contoh:Writeln(TipeFile,KodeBrg:5,NamaBrg:20,UnitBrg,HargaBrg:10:2);

3. FlushDigunakan untuk segera merekamkan data yang ada dalam bufferke file text.Bentuk Umum:

Flush(var f:text);Contoh:

Writeln(TipeFile,KodeBrg:5,NamaBrg:20,UnitBrg,HargaBrg:10:2);Flush(TipeFile);

4. Read dan ReadlnDigunakan untuk membaca nilai dari file ke dalam variabel.Bentuk Umum:

Read([var f:text;]v1[,v2,...,vn]);Readln([var f:text;]v1[,v2,...,vn]);

Contoh:Readln(TipeFile,KodeBrg,NamaBrg,UnitBrg,HargaBrg);

5. Settextbuf

Digunakan untuk segera merekamkan data yang ada dalam bufferke file text.Bentuk Umum:

Flush(var f:text);Contoh:

Writeln(TipeFile,KodeBrg:5,NamaBrg:20,UnitBrg,HargaBrg:10:2);Flush(TipeFile);

6. EOLNDigunakan untuk mengetahui apakah posisi dari file berada distatus akhir baris atau tidak.Bentuk Umum:

Modul Pelatihan Asisten Pemrograman Komputer Lanjut 49

Eoln(var f:text): boolean;Keterangan:Bila posisi berada di status akhir baris, maka fungsi ini akan menghasilkan nilai boolean True dan False untuk sebaliknya.

7. SEEKEOFFungsi ini digunakan sama dengan Eof, yaitu akan menghasilkan status akhir dari file.Bentuk Umum:

SeekEof[(var f:text)]: boolean;Keterangan:Perbedaan utama dengan fungsi standard Eof adalah bahwa SeekEof akan melewati semua blank, tabulasi dan tanda akhir dari baris sebelum menghasilkan status akhir dari file.

8. SEEKEOLNFungsi ini digunakan sama dengan Eoln, yaitu akan menghasilkan status akhir dari baris.Bentuk Umum:

SeekEoln[(var f:text)]: boolean;

Keterangan:Perbedaan utama dengan fungsi standard Eolnadalah bahwa SeekEof akan melewati semua blank, tabulasi dan tanda akhir dari baris sebelum menghasilkan status akhir dari baris.

Contoh:Var TipeFile : Text;

NamaFile : String[139];Karakter : Char;Bufferku : Aray[1..5120] of char;

BeginWrite(‘Nama File ? ‘);Readln(NamaFile);

{---menghubungkan file variabel dengan file external---}

Assign(TipeFile,NamaFile);

{---buat buffer baru untuk pembacaan yang cepat ----}

SetTextBuf(TipeFile,Bufferku);

{---buka file untuk di baca---}

Reset(TipeFile);

Modul Pelatihan Asisten Pemrograman Komputer Lanjut 50

{---baca data dari dan tampilka di layar---}

While Not Eof(TipeFile) DoBegin

Read(tipeFile,Karakter); Write(Karakter);End;

End.

Contoh Program:Program Menu_Text_File;Uses WinCrt;var BerkasTeks, BerkasDummy : Text; KodeBrg : String[5]; NamaBrg : String[20]; UnitBrg : integer; HargaBrg : Real; Lagi, Jawab : Char; Ketemu : Boolean;

Procedure Masukan_Data;Begin Assign(BerkasTeks,'barang.txt'); Rewrite(BerkasTeks);

Lagi:='Y'; While UpCase(Lagi)='Y' Do Begin ClrScr; Gotoxy(5,4);writeln('Masukan Data'); Gotoxy(5,6);write('Kode barang : '); Gotoxy(5,8);write('Nama barang : '); Gotoxy(5,10);write('Unit barang : '); Gotoxy(5,12);write('Harga satuan barang : Rp ');

Gotoxy(27,6);readln(KodeBrg); Gotoxy(27,8);readln(NamaBrg); Gotoxy(27,10);readln(UnitBrg); Gotoxy(30,12);readln(HargaBrg);

writeln(BerkasTeks,KodeBrg:5,NamaBrg:20,UnitBrg,HargaBrg:10:2); gotoxy(5,15);write('Ada data lagi [Y/T] : '); readln(Lagi); End; Close(BerkasTeks);end;

Procedure Tambah_Data;Begin Assign(BerkasTeks,'barang.txt'); Append(BerkasTeks);

Modul Pelatihan Asisten Pemrograman Komputer Lanjut 51

Lagi:='Y'; While UpCase(Lagi)='Y' Do Begin ClrScr; Gotoxy(5,4);writeln('Tambah Data'); Gotoxy(5,6);write('Kode barang : '); Gotoxy(5,8);write('Nama barang : '); Gotoxy(5,10);write('Unit barang : '); Gotoxy(5,12);write('Harga satuan barang : Rp ');

Gotoxy(27,6);readln(KodeBrg); Gotoxy(27,8);readln(NamaBrg); Gotoxy(27,10);readln(UnitBrg); Gotoxy(30,12);readln(HargaBrg);

writeln(BerkasTeks,KodeBrg:5,NamaBrg:20,UnitBrg,HargaBrg:10:2); gotoxy(5,15);write('Ada data lagi [Y/T] : '); readln(Lagi); End; Close(BerkasTeks);end;

Procedure Koreksi_Data;var KodeCari, spasi : string[5];

Begin Lagi:='Y'; While UpCase(Lagi)='Y' Do Begin Assign(BerkasTeks,'barang.txt');

{$I-} reset(BerkasTeks); {$I+} ;

Assign(BerkasDummy,'barang.$$$'); Rewrite(BerkasDummy);

spasi:=' '; ClrScr; Gotoxy(5,6);write('Kode barang yang dikoreksi : ');Readln(KodeCari); writeln; KodeCari:=Copy(spasi,1,5-Length(KodeCari))+KodeCari;

ketemu:=false; While Not Eof(BerkasTeks) Do Begin Readln(BerkasTeks,KodeBrg,NamaBrg,UnitBrg,HargaBrg); If KodeBrg = KodeCari Then Begin

Modul Pelatihan Asisten Pemrograman Komputer Lanjut 52

ketemu:=True; writeln('Kode Barang :',KodeBrg); write('Koreksinya : ');Readln(KodeBrg); writeln('Nama Barang :',NamaBrg); write('Koreksinya : ');Readln(NamaBrg); writeln('Unit Barang :',UnitBrg:7); write('Koreksinya : ');Readln(UnitBrg); writeln('Harga Barang : Rp ',HargaBrg:10:2); write('Koreksinya : ');Readln(HargaBrg); end; writeln(BerkasDummy,KodeBrg:5,NamaBrg:20,UnitBrg,HargaBrg:10:2); end; If Not Ketemu Then writeln('Tidak ada data barang ini !!!');

close(BerkasTeks); close(BerkasDummy);

Erase(BerkasTeks); Rename(BerkasDummy,'barang.txt');

writeln; write('Ada data lagi [Y/T] : '); readln(Lagi); End;end;

Procedure Tampil_Data;var NilaiBrg, total : real;

Begin Assign(BerkasTeks,'barang.txt'); {$I+} Reset(BerkasTeks); {$I-}; ClrScr; Writeln(' D A F T A R B A R A N G '); writeln('=============================================================');

writeln(' Kode Nama Unit Harga '); writeln(' Barang Barang Satuan Total'); writeln('-------------------------------------------------------------'); total:=0; while Not Eof(BerkasTeks) Do Begin Readln(BerkasTeks,KodeBrg,NamaBrg,UnitBrg,HargaBrg); NilaiBrg:=UnitBrg*HargaBrg; Total:=Total+NilaiBrg; Writeln(KodeBrg,NamaBrg:22,UnitBrg:10,HargaBrg:15:2,NilaiBrg:12:2); End; writeln('-------------------------------------------------------------'); writeln(' Total Rp ',Total:14:2);

Modul Pelatihan Asisten Pemrograman Komputer Lanjut 53

Close(BerkasTeks); Readln;end;

Procedure Tampil_Data_Tertentu;var KodeCari, spasi : string[5];

Begin Assign(BerkasTeks,'barang.txt'); Lagi:='Y'; While UpCase(Lagi)='Y' Do Begin spasi:=' '; reset(BerkasTeks); ClrScr; Gotoxy(5,6);write('Kode barang yang dicari : ');Readln(KodeCari); writeln; KodeCari:=Copy(spasi,1,5-Length(KodeCari))+KodeCari; While (Not Eof(BerkasTeks)) And (KodeBrg<>KodeCari) Do Readln(BerkasTeks,KodeBrg,NamaBrg,UnitBrg,HargaBrg); If KodeBrg = KodeCari Then Begin writeln('Nama Barang : ',NamaBrg); writeln('Unit Barang : ',UnitBrg:7); writeln('Harga Barang : ',HargaBrg:10:2); end else writeln('Tidak ada data barang ini....'); close(BerkasTeks); writeln; write('Ada data lagi [Y/T] : ');readln(Lagi); End;end;

Procedure Layar_Menu_Utama;var pilihan : char; selesai : boolean;begin repeat clrscr; Gotoxy(15,6);writeln(' ****Menu Utama****'); Gotoxy(15,8);writeln('1. Masukan Data Barang'); Gotoxy(15,10);writeln('2. Menambah Data Barang'); Gotoxy(15,12);writeln('3. Koreksi Data Barang'); Gotoxy(15,14);writeln('4. Menampilkan Daftar Barang'); Gotoxy(15,16);writeln('5. Menampilkan Data Tertentu'); Gotoxy(15,18);writeln('6. Selesai'); Gotoxy(15,20);write('pilihan [1..6] :');readln(pilihan); clrscr;

Modul Pelatihan Asisten Pemrograman Komputer Lanjut 54

selesai:=false; clrscr; case pilihan of '1' : Masukan_Data; '2' : Tambah_Data; '3' : Koreksi_Data; '4' : Tampil_Data; '5' : Tampil_Data_Tertentu; '6' : selesai:=true; end; until selesai; writeln('selesai');end;

begin layar_menu_utama;end.2. File Bertipe (Type File)Berbeda dengan File teks, file bertipe disamping dapat diaksessecara urut, dapat juga diakses secara acak. Ini berarti bahwakomponen-komponen di dalam file bertipe dapat dibaca atau direkamkan dimanapun di dalam file.Tipe dari file bertipe dapat berupa integer, real, char, string, array dan record.Contoh:Type

Barang = recordKodeBrg : string[5];NamaBrg : string[20];UnitBrg : integer;HargaBrg : real;

End;

VarFileBrg : File of Barang

BeginAssign(FileBrg,’barang.dat’);Reset(FileBrg);.............................

Prosedur dan Fungsi Standar File BertipeDisamping prosedur dan fungsi standar yang dapat digunakan untuk semua tipe file, masih terdapat beberapa prosedur dan fungsi standar lainnya yang dapat digunakan di file bertipe.1. Write dan Read

Prosedur standar write digunakan untuk merekamkan satu atau lebih nilai ke dalam file sedangkan prosedur standat read digunakan untuk membaca satu atau lebih nilai dari file.Bentuk umum:

Write(f,v1[,v2,...,vn]);

Modul Pelatihan Asisten Pemrograman Komputer Lanjut 55

Read(f,v1[,v2,...,vn]);

2. SeekProsedur standar ini digunakan untuk mengarahkan penunjuk file ke suatu komponen tertentu di dalam file, sehingga memungkinkan untuk membaca komponen atau menuliskan komponensecara acak. Komponen atau record yang pertama dari file bertipe adalah 0.Bentuk umum:

Seek(f:n : longint);

Contoh:Seek(FileBrg,5);Read(FileBrg,NamaBrg,UnitBrg,HargaBrg);

3. TruncateProsedur ini digunakan untuk menghapus sejumlah komponen atau record mulai dari posisi record tertentu.Bentuk umum;

Truncate(f);

Contoh:Seek(FileBrg,5);Truncate(FileBrg);

4. FileposFungsi standar ini digunakan untuk menghasilkan letak posisisekarang dari penunjuk file.Bentuk umum:

FilePos(f) : longint;Contoh:

Seek(FileBrg,3);Writeln(FilePos(FileBrg));

5. FilesizeFungsi standar ini digunakan untuk menghasilakan jumlah darikomponen atau record yang sudah ada di file. Fungsi ini bisadigunakan setelah file dibuka.Bentuk umum:

FileSize(f) : longint;

Contoh:AssignFileBrg,’barang.dat’);Reset(FileBrg);Writeln(‘Jumlah dari record yang ada = ‘,FileSize(FileBrg));

Contoh Program File Bertipe:

Modul Pelatihan Asisten Pemrograman Komputer Lanjut 56

Program Data_Mahasiswa_file_bertipe;Uses WinCrt;Type Mahasiswa = Record Nomor : integer; Nama : string; Nilai : Real; end;Var FileMahasiswa : File of Mahasiswa; RecordMahasiswa : Mahasiswa; i, JumlahRecord : integer; NomorCari : integer; Ketemu : Boolean; UrutanRecord : integer; Lagi : char;

Procedure Masukan_Data;Begin Assign(FileMahasiswa,'mhs.dat'); Rewrite(FileMahasiswa); Lagi:='Y'; While UpCase(Lagi)='Y' Do Begin Clrscr; gotoXY(5,4);Writeln('Masukan Data Mahasiswa'); gotoXY(5,5);Writeln('----------------------'); With RecordMahasiswa Do Begin gotoXY(5,6);write('Nomor Mahasiswa : '); gotoXY(5,8);write('Nama Mahasiswa : '); gotoXY(5,10);write('Nilai Mahasiswa : ');

gotoXY(25,6);readln(nomor); gotoXY(25,8);readln(nama); gotoXY(25,10);readln(nilai); end; write(FileMahasiswa,RecordMahasiswa); gotoXY(5,15);write('Memasukkan data lagi (Y/T) ? ');Readln(Lagi); end; Close(FileMahasiswa)end;

Procedure Tambah_Data;Begin Assign(FileMahasiswa,'mhs.dat'); {$I-} Reset(FileMahasiswa); {$I+}; If IOResult <> 0 then Rewrite(FileMahasiswa); Seek(FileMahasiswa,FileSize(FileMahasiswa)); Lagi:='Y';

Modul Pelatihan Asisten Pemrograman Komputer Lanjut 57

While UpCase(Lagi)='Y' Do Begin Clrscr; gotoXY(5,4);Writeln('Menambah Data Mahasiswa'); gotoXY(5,5);Writeln('-----------------------'); With RecordMahasiswa Do Begin gotoXY(5,6);write('Nomor Mahasiswa : '); gotoXY(5,8);write('Nama Mahasiswa : '); gotoXY(5,10);write('Nilai Mahasiswa : ');

gotoXY(25,6);readln(nomor); gotoXY(25,8);readln(nama); gotoXY(25,10);readln(nilai); end; write(FileMahasiswa,RecordMahasiswa); gotoXY(5,15);write('Memasukkan data lagi (Y/T) ? ');Readln(Lagi); end; Close(FileMahasiswa)end;

Procedure Koreksi_Data;Begin Assign(FileMahasiswa,'mhs.dat'); Reset(FileMahasiswa); JumlahRecord:=FileSize(FileMahasiswa); Lagi:='Y'; While UpCase(Lagi)='Y' Do Begin Ketemu:=False; ClrScr; Writeln(' Koreksi Data Berdasarkan Nomor Mahasiswa'); Writeln('-------------------- ---------------------'); Write('Nomor Mahasiswa dicari : ');Readln(NomorCari); Writeln; For i:=1 to JumlahRecord Do Begin Seek(FileMahasiswa,i-1); Read(FileMahasiswa,RecordMahasiswa);

If RecordMahasiswa.Nomor=NomorCari then Begin with RecordMahasiswa do Begin Ketemu:=True; writeln('Nomor Mahasiswa :',Nomor:5); write('Koreksinya : ');Readln(Nomor); writeln('Nama Mahasiswa :',Nama); write('Koreksinya : ');Readln(Nama); writeln('Nilai Mahasiswa :',Nilai:6:2); write('Koreksinya : ');Readln(Nilai); writeln;

Modul Pelatihan Asisten Pemrograman Komputer Lanjut 58

end; end; Seek(FileMahasiswa,i-1); Write(FileMahasiswa,RecordMahasiswa); end; If Not Ketemu Then writeln('tidak ada nomor mahasiswa ini....'); writeln; write('Ada data lagi [Y/T] : '); readln(Lagi); End; Close(FileMahasiswa);end;

Procedure Koreksi_Data_Record;Begin Assign(FileMahasiswa,'mhs.dat'); Reset(FileMahasiswa); JumlahRecord:=FileSize(FileMahasiswa); Lagi:='Y'; While UpCase(Lagi)='Y' Do Begin Ketemu:=False; ClrScr; Writeln(' Koreksi Data Berdasarkan Record'); Writeln('---------------------------------');

Write('Nomor Record dicari (1-',JumlahRecord,') :'); Readln(UrutanRecord);

Writeln; If (Urutanrecord<1) or (UrutanRecord>JumlahRecord) then Writeln('Tidak ada nomor record ini...') else Begin Seek(FileMahasiswa,UrutanRecord-1); Read(FileMahasiswa,RecordMahasiswa); with RecordMahasiswa do Begin Ketemu:=True; writeln('Nomor Mahasiswa :',Nomor:5); write('Koreksinya : ');Readln(Nomor); writeln('Nama Mahasiswa :',Nama); write('Koreksinya : ');Readln(Nama); writeln('Nilai Mahasiswa :',Nilai:6:2); write('Koreksinya : ');Readln(Nilai); writeln; end; Seek(FileMahasiswa,UrutanRecord-1); Write(FileMahasiswa,RecordMahasiswa); end; writeln; write('Ada data lagi [Y/T] : '); readln(Lagi);

Modul Pelatihan Asisten Pemrograman Komputer Lanjut 59

End; Close(FileMahasiswa);end;

Procedure Tampilan_Data;Begin Assign(FileMahasiswa,'mhs.dat'); Reset(FileMahasiswa); JumlahRecord:=FileSize(FileMahasiswa); Clrscr; Writeln(' Daftar Data Mahasiswa'); Writeln('-------------------------------------'); Writeln('Nomor Nama Mahasiswa Nilai '); Writeln('-------------------------------------'); For i:=1 to JumlahRecord do Begin Read(FileMahasiswa,RecordMahasiswa); With RecordMahasiswa Do writeln(Nomor:5,Nama:20,Nilai:10:2); end; Writeln('-------------------------------------'); Writeln('Tekan Enter untuk kembali ke menu'); Readln; Close(FileMahasiswa)end;

Procedure Tampilan_Data_Nomor;Begin Assign(FileMahasiswa,'mhs.dat'); Reset(FileMahasiswa); JumlahRecord:=FileSize(FileMahasiswa); Lagi:='Y'; While UpCase(Lagi)='Y' Do Begin Ketemu:=False; ClrScr; Writeln(' Tampilan Data Berdasarkan Nomor Mahasiswa'); Writeln('-------------------- ---------------------'); Write('Nomor Mahasiswa dicari : ');Readln(NomorCari); Writeln; For i:=1 to JumlahRecord Do Begin Seek(FileMahasiswa,i-1); Read(FileMahasiswa,RecordMahasiswa); If RecordMahasiswa.Nomor=NomorCari then with RecordMahasiswa do Begin Ketemu:=True; writeln('Nama Mahasiswa :',Nama); writeln('Nilai Mahasiswa :',Nilai:6:2); writeln; end;

Modul Pelatihan Asisten Pemrograman Komputer Lanjut 60

end; If Not Ketemu Then writeln('tidak ada nomor mahasiswa ini....'); writeln; write('Ada data lagi [Y/T] : '); readln(Lagi); End; Close(FileMahasiswa);end;

Procedure Tampilan_Data_Record;Begin Assign(FileMahasiswa,'mhs.dat'); Reset(FileMahasiswa); JumlahRecord:=FileSize(FileMahasiswa); Lagi:='Y'; While UpCase(Lagi)='Y' Do Begin Ketemu:=False; ClrScr; Writeln(' Tampilan Data Berdasarkan Record'); Writeln('---------------------------------'); Write('Nomor Record dicari (1-',JumlahRecord,') : ');Readln(UrutanRecord); Writeln; If (Urutanrecord<1) or (UrutanRecord>JumlahRecord) then Writeln('Tidak ada nomor record ini...') else Begin Seek(FileMahasiswa,UrutanRecord-1); Read(FileMahasiswa,RecordMahasiswa); with RecordMahasiswa do Begin Ketemu:=True; writeln('Nomor Mahasiswa :',Nomor:5); writeln('Nama Mahasiswa :',Nama); writeln('Nilai Mahasiswa :',Nilai:6:2); writeln; end; end; writeln; write('Ada data lagi [Y/T] : '); readln(Lagi); End; Close(FileMahasiswa);end;

Procedure Layar_Menu_Utama;var pilihan : char; selesai : boolean;begin repeat

Modul Pelatihan Asisten Pemrograman Komputer Lanjut 61

clrscr; Gotoxy(15,6);writeln(' ****Menu Utama****'); Gotoxy(15,8);writeln('1. Masukan Data Mahasiswa'); Gotoxy(15,10);writeln('2. Menambah Data Mahasiswa'); Gotoxy(15,12);writeln('3. Koreksi Data Mahasiswa'); Gotoxy(15,14);writeln('4. Koreksi Record Mahasiswa'); Gotoxy(15,16);writeln('5. Tampilkan Daftar mahasiswa'); Gotoxy(15,18);writeln('6. Tampilkan Menurut Nomor'); Gotoxy(15,20);writeln('7. Tampilkan Menurut Record'); Gotoxy(15,22);writeln('8. Selesai'); Gotoxy(15,24);write('pilihan [1..8] :'); readln(pilihan); clrscr; selesai:=false; clrscr; case pilihan of '1' : Masukan_Data; '2' : Tambah_Data; '3' : Koreksi_Data; '4' : Koreksi_Data_Record; '5' : Tampilan_Data; '6' : Tampilan_Data_Nomor; '7' : Tampilan_Data_Record; '8' : selesai:=true;

end; until selesai; writeln('selesai');end;

begin layar_menu_utama;end.

Modul Pelatihan Asisten Pemrograman Komputer Lanjut 62