masi ingatkah kalian pada program stack kalo lupa mari kita bahas lagi bersama-sama
berikut adalah contoh program ya
program infix_postfix;
uses crt;
const maxelemen = 255;
type
read = string[maxelemen];
stack = record
isi: read;
atas: integer;
end;
var
notasiinfix: read;
lagi: char;
(*/fungsi untuk menentukan derajat operator/*)
function derajat(operator: char): integer;
begin
case operator of
'^' : derajat := 3;
'*','/' : derajat := 2;
'+','-' : derajat := 1;
'(' : derajat := 0;
end;
end;
(*/prosedur untuk memasukkan elemen ke dalam stack/*)
procedure push(var t:stack; elemen:char);
begin
if t.atas = maxelemen then
writeln('Stack Penuh')
else begin
t.atas := t.atas + 1;
t.isi[t.atas] := elemen;
end;
end;
(*/fungsi untuk mengeluarkan elemen dari dalam stack/*)
function pop(var t: stack): char;
begin
if t.atas = 0 then
writeln('Stack Kosong')
else begin
pop := t.isi[t.atas];
t.atas := t.atas - 1;
end;
end;
(*/prosedur untuk mengkonversikan notasi infix menjadi notasi postfix/*)
procedure konversiinfix(infix: read);
var
i : integer;
t : stack;
operatorsign: set of char;
kar, temp : char;
test : boolean;
begin
operatorsign := ['^'] + ['*'] + ['/'] + ['+'] + ['-'];
for i := 1 to length(infix) do
begin
kar := infix[i];
if kar = '(' then
push(t,kar)
else if kar = ')' then
begin
while t.isi[t.atas] <> '(' do
write(pop(t):2);
temp := pop(t);
end
else if kar in operatorsign then
begin
while (t.atas <> 0) and (derajat(kar) <= derajat(t.isi[t.atas])) do
begin
write(pop(t):2);
end;
end;
push(t,kar);
end;
if kar <> ' ' then
write(kar:2);
if t.atas <> 0 then
begin
repeat
write(pop(t):2);
until t.atas = 0;
end;
end;
(*/program utama/*)
begin
repeat
clrscr;
writeln(' Mengubah Notasi Infix menjadi Postfix' );
writeln(' Dengan memanfaatkan Struktur Stack ');
writeln;
write(' Masukkan notasi Infix: '); readln(notasiinfix);
writeln;
write(' Hasil notasi Postfix: ');
konversiinfix(notasiinfix);
writeln; writeln;
write(' Coba Lagi (Y/T): '); readln(lagi);
until lagi in ['T','t','N','n'];
end.
Tidak ada komentar:
Posting Komentar