• Tidak ada hasil yang ditemukan

Mendeklarasikan dan Mengisis Suatu Vaniabel Sebagai Pointer :

7. KEGIATAN BELAJAR 6 1 Tujuan Belajar

7.2.1 Mendeklarasikan dan Mengisis Suatu Vaniabel Sebagai Pointer :

Mendeklarasikan Suatu Varibel Pointer:

Var

NamaVar : ^TypeDasarnya ;

Mengisi suatu variabel pointer :

Karena pointer adalah suatu variabel yang istimewa (isinya alamat di memori) maka memerlukan cara khusus untuk mengisinya (inisialisasi). Salah satu cara yang bisa digunakan adalah dengan menggunakan operator alamat yaitu dengan menaruh simbol ‘@‘, di depan suatu variabel. Pemakaian operator @ akan menghasilkan alamat dari variabel yang ditunjuk. Misalkan @Harga akan memberikan alamat dari vaniabel Harga, awas bukan isi variabel harga. Operator ini bisa dimanfaatkan untuk mengisi suatu varinabel pointer. 7.2.2. Mengambil Data Yang Ditunjuk Pointer :

Saiah satu cara untuk mengisi pointer yaitu bagaimana memanipulasi / mengolah data yang ditunjuk oleh pointer. Untuk menunjuk pada data yang ditunjuk oleh pointer maka diberi tanda ^ dibelakang vaniabelnya.

Pascal tidak mendukung untuk operasi matematika bagi bilangan komplek, berbeda dengan Fortran yang bisa untuk operasi matematika bagi bilangan komplek. Maka pada Bahan Ajar Kegiatan Belajar ini kita akan membuat perhitungan untuk bilangan komplek. Disini kita akan memanfaatkan beberapa perintah yang telah kita pelajari pada Bahan Ajar- Bahan Ajar sebelumnya, seperti Function, Procedure dan Type. Type yang kita gunakan adalah jenis Built in Type, Array, Record, dan Pointer.

7.3. Tugas Kegiatan Belajar 6

1. Salinlah program menggunakan tipe data pointer yang memakai operator alamat berikut. Program Contoh_Memakai_Pointer;

{Isiskan keterangan yang ANDA anggap perlu untuk program ini ………!} (* Lengkapi dengan keterangan-keterangan pada baris-baris penting *)

Uses Crt; {atau uses wincrt;}

Var PInt1 , PInt2 : ^Integer; {pointer ke alamat tipe data integer} bil : Integer: { bertipe integer}

Begin ClrScr;

Writeln(‘****************************************************’); Writeln(‘** Program Memakai Data Tipe Pointer & Operator Alamat **’); Writeln(‘****************************************************’); Write(‘Masukan sembarang bilangan INTEGER = ‘);

Readln(bil);

Pint1 := @bil; {Pint1 berisi alamat bil}

PInt2 := Pint2; {Pint2 menunjuk alamat yang sama dengan Pint1} WrlteLn(’Isi alamat yang ditunjuk Pint1 : ,Pint1^);

WrlteLn(’Isi alamat yang ditunjuk Pint2 semula : ’ ,Pint2^); Pint2 := Pint1;

WrlteLn(’Isi alamat yang ditunjuk Pint2 setelah perintah Pint2 := mPint1 : ’ ,Pint2^);

End.

Simpan file ini dengan nama : LAT8_9A.PAS

2. Salinlah Program contoh cara memakai tipe pointer, sbb: Program Contoh_01(input,output);

uses wincrt; type data = record

nim : integer; nama : string[20]; grup : char; end; ptrdata = ^data; var p1, p2 : ptrdata; begin new(p1); p1^.nim := 10001; p1^.nama := ' Abuya '; p1^.grup := 'A';

writeln(p1^.nim,' ',p1^.nama,' ',p1^.grup); new(p2);

p2^.nim := 10002;

p2^.nama := ' Bakaruddin '; p2^.grup := 'B';

writeln(p2^.nim,' ',p2^.nama,' ',p2^.grup); p1 := p2;

p2^.nim := 10003; p2^.nama := ' Charlie '; p2^.grup := 'C';

writeln(p1^.nim,' ',p1^.nama,' ',p1^.grup,' dan ',p2^.nim,' ',p2^.nama,' ',p2^.grup); new(p1); p1^.nim := 10004; p1^.nama := ' Doraemon '; p1^.grup := 'D';

writeln(p1^.nim,' ',p1^.nama,' ',p1^.grup); new(p2);

p2^.nim := 10005; p2^.nama := ' Eduardo '; p2^.grup := 'E';

writeln(p2^.nim,' ',p2^.nama,' ',p2^.grup); p1^ := p2^;

p2^.nim := 10006; p2^.nama := ' Fakihar '; p2^.grup := 'F';

writeln(p1^.nim,' ',p1^.nama,' ',p1^.grup,' dan ',p2^.nim, ' ',p2^.nama,' ',p2^.grup);

end.

Simpan file ini dengan nama : LAT8_9B.PAS 3. Salinlah Program contoh cara memakai tipe pointer, sbb:

Program Contoh_02(input,output); uses wincrt; typeptrmhs = ^mhs; mhs = record nim : string[10]; nama : string[20]; grup : string[5]; link : ptrmhs; end; var p, ptr_kepala : ptrmhs; lagi : char;

procedure buat_linked_list(var ptr_kepala : ptrmhs); var ptr_baru : ptrmhs;

begin repeat clrscr;

new(ptr_baru);

write('Nama Mahasiswa : '); readln(ptr_baru^.nama); write('NIM Mahasiswa : '); readln(ptr_baru^.nim); write('Grup Belajar : '); readln(ptr_baru^.grup);

ptr_baru^.link := ptr_kepala; ptr_kepala := ptr_baru;

write('Tambah data (y/t)? '); readln(lagi); until lagi in['T','t'];

end; procedure lihat_linked_list(ptr_kepala : ptrmhs); var ptr_sementara : ptrmhs; begin clrscr; writeln('***********************************'); writeln('** Tabel Data Mahasiswa **');

writeln('***********************************'); writeln; ptr_sementara := ptr_kepala;

while ptr_sementara <> nil do begin

writeln(ptr_sementara^.nama,' ',ptr_sementara^.nim,' ',ptr_sementara^.grup); ptr_sementara := ptr_sementara^.link; end; end; { program utama } begin ptr_kepala := nil; buat_linked_list(ptr_kepala); lihat_linked_list(ptr_kepala); end.

Simpan file ini dengan nama : LAT8_9C.PAS

4. Program mengolah data yang ditunjuk oleh pointer, sbb. Program Contoh_Mengolah_Data_Yang_Ditunjuk_Pointer;

{Isiskan keterangan yang ANDA anggap perlu untuk program ini ………!} (* Lengkapi dengan keterangan-keterangan pada baris-baris penting *) uses crt; {atau uses wincrt;}

Type Karyawan = Record

Nama : String[30]; Gaji : Real; End;

Var PKar : ^Karyawan; Kar : Karyawan; Begin

ClrScr;

Writeln(‘********************************************************’); Writeln(‘** Program Mengolah Data Tipe Pointer **’);

Writeln(‘********************************************************’); Kar.nama := ‘Amir’

(* atau tulis sebagai berikut untuk memasukan data dari keyboard : write(‘Masukan nama Karyawan = ‘); readln(Kar.Nama); write(‘Masukan besar gaji = ‘); readln(Kar.Gaji); selanjutnya data yang dimasukan akan diolah *) PKar := @Kar; {Pkar berisi alamat Kar}

Writeln(‘Nama : ‘,PKar^.Nama); Writeln(‘Gaji : ‘,PKar^.Gaji:10:2); End.

Simpan file ini dengan nama : LAT8_9D.PAS 5. Program untuk membaca dan menampilkan data bertipe pointer, sbb.

Program Membaca_Menampilkan_Data_Pointer;

{Isiskan keterangan yang ANDA anggap perlu untuk program ini ………!} (* Lengkapi dengan keterangan-keterangan pada baris-baris penting *)

uses crt; {atau uses wincrt;}

Const Max = 500; Type DataKar = Record

Nama : String[20]; Alamat : String[30]; TahunMasuk : Word; End;

PDataKar = ^DataKar;

KumpulanData = Array [1. .Max] of PDataKar; Karakter = Set of Char;

Var Karyawan : KumpulanData: MauLagi : Boolean;

{Pembuatan Bahan Ajar-Bahan Ajar berupa prosedur dan fungsi } Procedure TextNormal; Begin TextColor (White): Textbackground (Black); End; Procedure TextTerbalik; Begin TextColor (Black); Textbackground (White); End;

Procedure BacaDataSatuKaryawan (Var Data:DataKar); Begin

ClrScr; With Data Do Begin

Wrlteln(‘---‘); Write(’Nama : ‘); Readln(Nama); If Nama <> ’’ Then

Begin

Write(’ Alamat : ‘ ); Readln(Alamat); Wrlte(’ Tahun Masuk : ‘); Readln(TahunMasuk); End:

End; End;

Procedure BacaData (Var Karyawan: KumpulanData); Var no : Byte; Begin TextNormal; Window (1,1,80,25); ClrScr; no := 0; TextTerbalik; Window (20,10,60,15); Repeat Inc (no); New (Karyawan[no]); BacaDataSatuKaryawan (Karyawan[no]^); If Karyawan [no]^.Nama = ‘‘ Then Begin

Dispose (Karyawan [no]); Karyawan[no] := Nil; End;

Until Karyawan [no] = Nil; End;

Procedure SimpanKeFile (Karyawan: KumpulanData ); Var

MamaFile : String[80]; FileData : File of DataKar; No : Byte;

Begin

TextTerbal i k;

Window (20,l7,60,18); ClrScr;

Write(’ Nama File ‘);Readln (NamaFile);

If NamaFile = ‘’ Then NamaFile := ‘NoName.DAT’; Assign (FileData,Namafile);

($1-) Rewrite(Filedata); {$I+} If IOResult <> 0 Then

Begin

ClrScr;

End Else Begin

No := 1;

While Karyawan [no] <> Nil Do Begin

Write (FileData,Karyawan [no]^); Inc (no);

End;

Close (FileData); End;

End;

Procedure CetakTengah (Baris:Byte;Pesan String); Var PosX : Byte;

X1, X2 : Byte; Begin

X1 := Lo(WindMin); X2 := Lo(WindMax);

PosX := (X2-X1-Length(Pesan)) div 2; GotoXY (PosX,Baris);

Write(Pesan); End;

Function Jawab ( Pesan:String; JawabSah Karakter) :Char; Var Ch : Char; Begin TextTerbalik; Window (1,25,80,25); Clrscr; Write(Pesan+#7); Repeat ch := ReadKey;

Until ch in Jawabsah; Write(ch); Jawab := UpCase(ch);

TextNormal; Window (1,25,80.25) ; ClrScr;

End;

Procedure UlangiCetak (Ch:Char; Jumlah : Byte); Var

I : Byte; Begin

For i:=1 to Jum Do Write(ch); End;

Begin

TextTerbalik;

Window (10,1,70,4); ClrSCr;

CetakTengah (1, ‘DAFTAR KARYAWAN’); Writeln:

UlangiCetak (‘D’,60); Writeln;

Writeln(‘No Nama Alamat Tahun Masuk’); UlangiCetak (‘D’ .60);

End;

Procedure CetakKeLayar (Karyawan: KumpulanData); Var no, Baris : Byte;

Enter : Char; Begin

No := 1;

While Karyawan [no] <> Nil Do Begin CetakJudul; TextNormal: Window (10,6,10,23); ClrScr; Baris := 0;

While (Baris < 3) And (Karyawan [no] <> Nil) Do Begin

With Karyawan [no]^ Do

Writeln (No:4.Nama:15,Alamat:20,TahunMasuk:10); Inc (no); Inc (baris);

End;

Enter Jawab(’Tekan <Enter> ‘, [*13]); End;

End;

Procedure DeAlokasiData (Var Karyawan: KumpulanData): Var No : Byte;

Begin No := 1:

While Karyawan [no] <> Nil Do Begin

Dispose (Karyawan [no]); Inc (no); End; End; {Program Utama} Begin ClrScr;

Writeln(‘************************************************************** *********’);

Writeln(‘** Program Membaca dan Menampilkan Data Karyawan **’); Writeln(‘************************************************************** *********’);

Writeln;

Write(‘ Tekan <ENTER> untuk melanjutkan ‘);

Readln; {membaca variabel kosong atau tombol ENTER } Repeat TextNormal; Window (1,1,80,25);ClrScr; BacaData (Karyawan); SimpanKeFile (Karyawan): CetakKeLayar (Karyawan); DeAlokasiData (Karyawan);

MauLagi := Jawab(‘Mau Lagi (Y/T) ?, [’Y’,’y’,’T’,’t’])= ‘Y’; Until not(MauLagi);

End.

Simpan file ini dengan nama : LAT8_9E.PAS

06. Buatlah sebuah program untuk mendeteksi password / kata sandi. Gunakan metode single

Dokumen terkait