{ tutorial pascal / turbo pascal }
{ 3th my tutorial for my friend }
{ writen by : m3n_tu4r1 } padang, 24 mei 2003
-------------------------------------------------------Sebenarnya pada tutorial kedua mengenai FUNCTION dan PROCEDURE sample programnya telah mengunakan pemakain pointer, tinggal menambah sedikit perintah penghapusan sesudah proses penampilan data. Tapi uda cibo agiah N1A program menyusun daftar berantai dengan pointer, untuang-untuang cocok jo tugas yang disuruah dosen N1A.
Mata kuliah yang berhubungan dengan penyusunan data berantai adalah SISTEM BASIS DATA (4 sks lo).
{ tutorial pascal / turbo pascal }
{ 3th my tutorial for my friend }
{ writen by : m3n_tu4r1 }
{ padang, 24 mei 2003 }
PROGRAM POINTER;
USES CRT;
TYPE
Stringdata = STRING[20];
Ptrdata =^RECORDDATA;
Recorddata = RECORD;
Nama : STRINGNAMA;
Jabatan : STRING [25];
Ptrkepala : PTRDATA;
END;
VAR
Ptrawal_heap : ptrdata;
Ptrkepala : ptrdata;
PROCEDURE BENTUK_DAFTAR (VAR ptrkepala : ptrdata);
{ menyusun daftar berantai dengan variabel PTRKEPALA menunjuk data -}
{ terakhir yang dimasukan melalui keyboard }
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 CETAK_DAFTAR ( ptrkepala:ptrdata);
{ mencetak isi daftar berantai }
VAR
Ptrsementara:ptrdata;
BEGIN
CLRSCR;
WRITELN (‘ ISI DAFTAR BERANTAI : ‘);WRITELN;
WRITELN (‘-----------------------------------------------------------------------------‘);
WRITELN (‘ N A M A ’:20,’J A B A T A N’:16);
WRITELN (‘-----------------------------------------------------------------------------‘);
Ptrsementara :=ptrkepala;
{ptrsementara menunjuk pada lokasi yg sama dng ptrkepala}
WHILE ptrsementara <> NIL Do
WITH ptrsementara^DO
BEGIN
WRITELN (nama:20,jabatan:16);
Ptrsementara := lanjutan;
END;
WRITELN (‘-----------------------------------------------------------------------------‘);
WRITE (‘ tekan Return ‘); READLN;
END;
PROCEDURE CARI DATA (ptrkepala:ptrdata;namadicari:stringnama;
VAR ptrpraposisidata,ptrposisidata:ptrdata);
{untuk mencari data nama dicari pada daftar berantai, hasil }
{- jika data ketemu, maka }
{ 1. ptrposisidata menunjuk simpul dari data yang dicari }
{ 2. ptrpraposisidata menunjuk simpul sebelum simpul data yang dicari }
{ atau sama dengan NIL, jika ptrposisidata menunjuk yang juga ditun- }
{ juk oleh ptrkepala }
{- jika tidak diketemukan, maka ptrposisidata sama dengan NIL }
VAR
Ketemu : BOOLEAN;
BEGIN
PTRPRAPOSISIDATA :=NIL;
PTRPOSISIDATA :=ptrkepala;
Ketemu := FALSE;
WHILE (NOT ketemu AND (ptrposisidata <>NIL)) DO
IF ptrposisidata^.nama <> namadicari THEN
BEGIN
Ptrposisidata :=ptrposisidata;
Ptrposisidata :=ptrposisidata^.lanjutan
END
ELSE
Ketemu :=TRUE;
END;
PROCEDURE HAPUSISIDAFTAR (VAR ptrkepala:ptrdata);
{untuk menghapus sebuah simpul data daftar berantai}
CONST
String_kosong=’ ‘;
VAR
Namadicari : stringnama;
Prtposisidata,
Ptrpraposisidata : ptrdata;
BEGIN
CLRSCR;
WRITELN (‘Masukan nama pegawai dari data yang akan dihapus:’);
READLN (namadicari);
IF namadicari = string_kosong THEN
EXIT;
Cari_data (ptrkepala, namadicari, ptrpraposisidata, ptrposisidata);
IF ptrposisidata = NIL THEN
BEGIN
WRITELN (‘ data tak diketemukan, tekan enter untuk melanjutkan’);
READLN;
END;
BEGIN
{ proses penghapusan }
IF ptrpraposisidata = NIL THEN
{ simpul yang ditunjukan ptrkepala dihapus }
ptrkepala :=ptrkepala^.lanjutan
ELSE
{ bukan simpul yang ditunjuk ptrkepala dihapus }
WRITELN (‘ Ok………data sudah dihapus. Tekan enter ‘);
END;
END; { akhir procedure hapusisidaftar }
PROCEDURE PROSESPILIHAN (VAR ptrkepala : ptrdata);
{ digunakan untuk memilih proses ; memasukan data, menampilkan data }
{ menghapus data }
VAR
Pilihan : CHAR;
BEGIN
REPEAT
CLRSCR;
TEXTATTR :=$70; { video terbalik }
GOTOXY(20,2); WRITE (‘ PILIHAN PROSES ‘);
TEXTATTR :=$70; { video normal kembali }
GOTOXY(20,4); WRITE (‘ [1] Memasukan / menambah data’);
GOTOXY(20,5); WRITE (‘ [2] Menampilkan isi daftar berantai’);
GOTOXY(20,6); WRITE (‘ [3] Menghapus data pada daftar berantai’);
GOTOXY(20,7); WRITE (‘ [4] Selesai’);
GOTOXY(20,8); WRITE (‘ --------------------------------------------------‘);
GOTOXY(20,9); WRITE (‘ Masukan kode pilihan [1…4]’);
REPEAT
Pilihan := UPCASE (READKEY)
UNTIL pilihan IN [‘1’..’4’];
WRITE (pilihan);
CASE pilihan OF
‘1’ : bentuk_daftar(ptrkepala);
‘2’ : catak_daftar(ptrkepala);
‘3’ : hapusisidata(ptrkepala);
END;
UNTIL pilihan = ‘4’
END;
BEGIN
MARK(ptrawal_heap); {penandaan terhadap awalheap}
Ptrkepala :=NIL ; {keadaan awal ptr kepala }
Prosespilihan(ptrkepala); {pelaksanaan pemilihan proses }
RELEASE(ptrawal_heap); {membebaskan heap yg digunakan u/ alokasi dynamic }
END.
------------------------------------------------------------------------------------------------
padang , 12.21 wibb.
Ditemani tembang Avril lavigne (biar suasana tambah panas)
Regards,
m3n_tu4r1
??? ???????????
???? ? ?????????? ?? ? ????, ???? ? ????? ??? ???? ))