Program Stack
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,
sedang 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);
stackie:= copy(stackie,1,panjangstackie-1);
panjangstackie:= length(stackie);
if pembanding1 <> '(' then Output:= output + pembanding1;
until panjangstackie = 0;
writeln('Outputnya adalah :');
writeln(Output);
readln;
end.
Selasa, 15 Maret 2011 -
0
komentar
Tugas Kedua untuk memenuhi mata kuliah SOD 2
Langganan:
Posting Komentar (Atom)
0 komentar:
Posting Komentar