Ini adalah sebuah tugas ke tiga dari mata kuliah Struktur & Organisasi Data 2, yang ada di Universitas Gunadarma, yang diajarkan pada 2KA 17 oleh Lily Wulandari.
Disini akan dituliskan Coding Pascal bagaimana mencari Postfix dari Infix yang diketahui.
Berikut adalah Coding nya :
program stack;
uses crt;
var Userinput, stackie, output, pembanding1,pembanding2 : string;
tingkatan1, lanjut1, tingkatan2, jumlah, penghitung, penghitung1, panjangstackie, lanjut : integer;
begin
clrscr;
writeln('Ini adalah program untuk mengubah aritmatika infix menjadi postfix.');
writeln('Program ini tidak men-"support" akar.');
writeln('Tulis infix yang kamu inginkan.');
readln (Userinput);
jumlah := length(Userinput);
(*Deklrasi Konstanta *)
stackie := '';
penghitung := 1;
panjangstackie := 0;
lanjut1 := 0;
jumlah := length(Userinput);
repeat
penghitung1 := 1;
lanjut := 0;
(*Level Tingkatan *)
pembanding1 := copy(userinput,penghitung,1);
if pembanding1 = '+' then tingkatan1 := 1
else if pembanding1 = '-' then tingkatan1 := 1
else if pembanding1 = '/' then tingkatan1 := 2
else if pembanding1 = '*' then tingkatan1 := 2
else if pembanding1 = '^' then tingkatan1 := 3
else tingkatan1 := 0;
(* Cek isi dari tingkatan1 jika level tingkatan termasuk 0. *)
if tingkatan1 = 0 then
if pembanding1 = '(' then
begin
stackie := stackie + pembanding1;
panjangstackie:= length(stackie);
lanjut := 1;
penghitung:= penghitung+1;
end
else if pembanding1 = ')' then
begin
repeat
pembanding2:= copy(stackie,panjangstackie,1);
stackie:= copy(stackie,1,panjangstackie-1);
panjangstackie:= length(stackie);
if pembanding2 <> '(' then Output:= output + pembanding2;
until copy(stackie,panjangstackie,1) = '(';
penghitung:=penghitung+1;
lanjut:= 1;
end
else
begin
output:= output + pembanding1;
lanjut := 1;
penghitung:= penghitung + 1;
end;
if lanjut = 0 then
begin
(*Lihat Stack *)
repeat
if stackie = '' then
begin
lanjut := 1;
stackie:= stackie + pembanding1;
penghitung:=penghitung + 1;
end
else
begin
pembanding2 := copy(stackie,panjangstackie,1);
if pembanding2 = '+' then tingkatan2 := 1
else if pembanding2 = '-' then tingkatan2 := 1
else if pembanding2 = '/' then tingkatan2 := 2
else if pembanding2 = '*' then tingkatan2 := 2
else if pembanding2 = '^' then tingkatan2 := 3
else if pembanding2 = '(' then tingkatan2 := -1
else tingkatan2 := 0;
(* Kalau tingkatan stack yang lama lebih tinggi daripada
pembanding yang baru, maka stack yang lama di keluarkan,
sedangkan pembanding yang baru di masukkan ke stack. *)
if tingkatan2 >= tingkatan1 then
begin
lanjut := 1;
output := output + pembanding2;
stackie := copy(stackie,1,panjangstackie - 1);
stackie := stackie + pembanding1;
panjangstackie := length(stackie);
penghitung:= penghitung + 1;
end
(* Kalau stacknya sudah habis diperiksa, maka pembanding yang
baru di tambahkan ke stack. *)
else
begin
lanjut := 1;
stackie := stackie + pembanding1;
panjangstackie := length(stackie);
penghitung:= penghitung + 1;
end;
penghitung1:= penghitung1 + penghitung;
(* Kalau stacknya belum habis diperiksa, maka ulangi
program. *)
end;
until lanjut = 1;
end;
until penghitung = jumlah+1;
(*Ngehabisin yang masih ada di stack. *)
repeat
pembanding1:= copy(stackie,panjangstackie,1);
pembanding2:= copy(stackie,panjangstackie-1,1);
if pembanding1 = '+' then tingkatan1 := 1
else if pembanding1 = '-' then tingkatan1 := 1
else if pembanding1 = '/' then tingkatan1 := 2
else if pembanding1 = '*' then tingkatan1 := 2
else if pembanding1 = '^' then tingkatan1 := 3
else if pembanding1 = '(' then tingkatan1 := -1
else tingkatan1 := 0;
if pembanding2 = '+' then tingkatan2 := 1
else if pembanding2 = '-' then tingkatan2 := 1
else if pembanding2 = '/' then tingkatan2 := 2
else if pembanding2 = '*' then tingkatan2 := 2
else if pembanding2 = '^' then tingkatan2 := 3
else if pembanding2 = '(' then tingkatan2 := -1
else tingkatan2 := 0;
if tingkatan1 < tingkatan2 then
begin
if pembanding1 <> '(' then if pembanding2 <> '(' then Output:= output + pembanding2 + pembanding1;
stackie:= copy(stackie,1,panjangstackie-2);
panjangstackie:=length(stackie);
end
else
begin
stackie:= copy(stackie,1,panjangstackie-1);
panjangstackie:= length(stackie);
if pembanding1 <> '(' then Output:= output + pembanding1;
end;
until panjangstackie = 0;
writeln('Outputnya adalah :');
writeln(Output);
readln;
end.