Rabu, 17 April 2013

Tumpukan (Stack) Pascal

Praktikum Strukur Data

MODUL II

TUMPUKAN (STACK)

Program Tumpukan :


{contoh program Tumpukan}
Program pop_push;
uses wincrt;
const elemen =255; {batas maximum karakter}
type S255 = string [elemen];
 tumpukan = record
 isi : s255;
 atas : 0..elemen;
end;

var
T : tumpukan;
W : char;
kalimat : s255;
i,j : integer;

procedure awalan (var T : tumpukan);
begin
 T.Atas := 0;
end;

procedure push (var T : tumpukan; X : char);
begin
 T. Atas := T.Atas+1;
 T.Isi[T.Atas] := X;
end;

function pop (var T : tumpukan): char;
begin
 pop := T.Isi[T.Atas];
 T.atas := T.atas-1;
end;

begin {program utama}
 clrscr; {melakukan proses push}
 writeln('Masukkan Kalimat : ');
 read(kalimat);
writeln;
 for i := 1 to length (kalimat) do
 push (T, kalimat [i]);
 write('Elemen yang di-push : ', kalimat);
 writeln;
 readln;

{melakukan proses pop}
for i := 1 to length (kalimat) do
push (t, kalimat [i]);
writeln;
writeln('Hasil akhir push dibaca dengan pop : ');
{menampilkan hasil proses pop}
for j := 1 to length (kalimat) do
begin
 w := pop (T);
 write(w);
end;
readln;
end.


Hasil :


____________________________________________________________________________________

Program Tumpukan (Modifikasi Tambah Karakter) :

Tugas : Modifikasi program diatas untuk menambah sebuah karakter ke dalam tumpukan.
Contoh input : Teknik Informatika
Tambahan Karakter : U
Hasil Akhir : UakitamrofnI kinkeT
_________________________________________________________________________
Maka kita hanya menambah variabel (tambah : char) dan sedikit menambah statemen dibagian proses. Inilah programnya yang sudah di modifikasi :
_________________________________________________________________________


Program pop_pushModifikasi;
uses wincrt;
const elemen =255; {batas maximum karakter}
type S255 = string [elemen];
 tumpukan = record
 isi : s255;
 atas : 0..elemen;
end;

var
T : tumpukan;
W, tambah : char;
kalimat : s255;
i,j : integer;

procedure awalan (var T : tumpukan);
begin
 T.Atas := 0;
end;

procedure push (var T : tumpukan; X : char);
begin
 T. Atas := T.Atas+1;
 T.Isi[T.Atas] := X;
end;

function pop (var T : tumpukan): char;
begin
 pop := T.Isi[T.Atas];
 T.atas := T.atas-1;
end;

begin {program utama}
 clrscr;
 writeln('Masukkan Kalimat : ');
 read(kalimat);
writeln;
 for i := 1 to length (kalimat) do
 push (T, kalimat [i]);
 writeln('Elemen yang di-push : ', kalimat); readln;
 writeln('Tambah karakter : ');
 readln(tambah);

{melakukan proses pop}
for i := 1 to length (kalimat) do
push (t, kalimat [i]);
writeln;
writeln('Hasil akhir : '); write(tambah);
{menampilkan hasil proses pop}
for j := 1 to length (kalimat) do
begin
 w := pop (T);
 write(w);
end;
readln;
end.


 Hasil :

________________________________________________________________________
Program Pop dan Push Animasi :


Procedure PushAnim;
uses wincrt;
Const
Max = 10;
Var
 Top, I : byte;
 Pil, Temp, E : char;
 Stack : array [1..Max] of char;
Begin
 For I:=1 to 18 do
 Begin
    GotoXY (23+I ,7); write(Temp);
    {Delay(30);}
    GotoXY(23,7); ClrEol;
   End;
   for I:=1 to 14-top do
              begin
                   {delay(30);}
                   GotoXY(41,6+I); write('   ');
                   GotoXY(41,7+I); write(Temp);
              end;
  End;
 
Procedure PopAnim (Temp:char);
 Begin
  For I := 1 to 14-top do
   Begin
    {Delay(30);}
    GotoXY(41,22-I-Top); write('   ');
    GotoXY(41,21-I-Top); write(Temp);
   End;
  For I:=1 to 19 do
   Begin
   GotoXY(40+I ,7); write(Temp);
   {delay(30);}
   GotoXY(16,7); ClrEol;
   End;
 End;

Procedure Push(e:char);
 Begin
  Inc (Top);
  Stack[Top] := e;
  PushAnim;
 End;

Procedure Pop(e:char);
 Begin
  If Top <> 0 then
   Begin
    E:=stack[Top]; PopAnim(e);
    Dec(Top);
   End else
   Begin
   GotoXY(1,7); write('Stack Telah Kosong'); readkey;
   GotoXY(1,7); ClrEol
   End;
 End;

Begin
 Clrscr;
 Writeln('Animasi Stack');
 Writeln('1. PUSH');
 Writeln('2. POP');
 Writeln('3. QUIT');
 Writeln('Pilihan Anda [1/2/3] = ');
 GotoXY(46,6); Write('\');
 GotoXY(46,8); Write('/');
 GotoXY(38,10); Write('\     /');
 For I:=1 to 11 do
  Begin
   GotoXY (38,10+I);
   If I=11 then write('|_____|') else write ('|     |');
  End;

  Top := 0;
  Repeat
   GotoXY(24,5);ClrEol;
   Pil :=readkey; Write(pil);
   If Pil ='1' then
    Begin
     If Top<> max then
     Begin
      GotoXY(1,7); write('Masukkan satu huruf =');
      Temp:=readkey;write(Temp);
      Push(Temp);
      GotoXY(1,7);ClrEol;
      End else
       Begin
       GotoXY(1,7);write('Stack sudah penuh'); readkey;
       GotoXY(1,7);ClrEol;
       End;
      End else
       If pil ='2' then Pop(Temp);
       Until pil ='3';
      End. 


Hasil :

____________________________________________________________________________________

Tidak ada komentar:

Posting Komentar