Program Intfix to Postfix dengan Pascal

Program ini adalah murni buatan saya, saya membuat program ini untuk memenuhu tugas yang diberikan oleh dosen yang mengajar mata kuliah Struktur Organisasi Data 2.

Berikut adalah tampilan dari program yang saya buat :



Berikut adalah source codenya:

uses crt;
var
intfix,sementara_out:string;
n,i,j,k,l,m,z:integer;
intfixstr,tumpukan:array[0..256] of string;
//var yang terpakai: intfix,i,j,k,l,z,m,intfixstr,tumpukan,n,sementara_out


//awal dari program
begin
//memasukkan notasi intfix
clrscr;
write ('Masukan notasi intfix = ');
readln(intfix);

//untuk memasukkan perkarakter intfix ke array tumpukan
for i:=1 to length(intfix) do intfixstr[i]:=copy(intfix,i,1);

//test
for z:=1 to length(intfix) do writeln(intfixstr[z]);

//untuk menandakan jumlah stack yang terisi
n:=0;

//memulai proses intfix ke postfix
for i:=0 to length(intfix) do
begin
  if n=0 then
    begin
    case intfixstr[i] of
   '+':
begin
tumpukan[n]:=intfixstr[i];
n:=n+1;
end;
'-':
   begin
   tumpukan[n]:=intfixstr[i]; n:=n+1;
   end;
'*':
   begin
   tumpukan[n]:=intfixstr[i]; n:=n+1;
   end;
'/':
   begin
   tumpukan[n]:=intfixstr[i]; n:=n+1;
   end;
'^':
   begin
   tumpukan[n]:=intfixstr[i]; n:=n+1;
   end;
'(':
   begin
   tumpukan[n]:=intfixstr[i]; n:=n+1;
   end;
';':
begin
writeln('tidak ada postfix yang dihasilkan');
end;
else
   sementara_out:=sementara_out+intfixstr[i];
      end;
    end
  else
    begin
    //isi else
    case intfixstr[i] of
'(':
begin
tumpukan[n]:=intfixstr[i];
n:=n+1;
end;
'+':
begin
case tumpukan[n-1] of
  '+':
  begin
  sementara_out:=sementara_out+tumpukan[n-1];
  tumpukan[n-1]:='+';
  end;
  '-':
  begin
  sementara_out:=sementara_out+tumpukan[n-1];
  tumpukan[n-1]:='+';
  end;
  '*':
  begin
  sementara_out:=sementara_out+tumpukan[n-1];
  tumpukan[n-1]:='+';
  end;
  '/':
  begin
  sementara_out:=sementara_out+tumpukan[n-1];
  tumpukan[n-1]:='+';
  end;
  '^':
  begin
  sementara_out:=sementara_out+tumpukan[n-1];
  tumpukan[n-1]:='+';
  end;
  '(':
  begin
  tumpukan[n]:='+';
  n:=n+1;
  end;
        end;
end;
'-':
begin
case tumpukan[n-1] of
  '+':
  begin
  sementara_out:=sementara_out+tumpukan[n-1];
  tumpukan[n-1]:='-';
  end;
  '-':
  begin
  sementara_out:=sementara_out+tumpukan[n-1];
  tumpukan[n-1]:='-';
  end;
  '*':
  begin
  sementara_out:=sementara_out+tumpukan[n-1];
  tumpukan[n-1]:='-';
  end;
  '/':
  begin
  sementara_out:=sementara_out+tumpukan[n-1];
  tumpukan[n-1]:='-';
  end;
  '^':
  begin
  sementara_out:=sementara_out+tumpukan[n-1];
  tumpukan[n-1]:='-';
  end;
  '(':
  begin
  tumpukan[n]:='-';
  n:=n+1;
  end;
        end;
end;
'*':
begin
case tumpukan[n-1] of
  '+':
  begin
  tumpukan[n]:='*';
  n:=n+1;
  end;
  '-':
  begin
  tumpukan[n]:='*';
  n:=n+1;
  end;
  '*':
  begin
  sementara_out:=sementara_out+tumpukan[n-1];
  tumpukan[n-1]:='*';
  end;
  '/':
  begin
  sementara_out:=sementara_out+tumpukan[n-1];
  tumpukan[n-1]:='*';
  end;
  '^':
  begin
  sementara_out:=sementara_out+tumpukan[n-1];
  tumpukan[n-1]:='*';
  end;
  '(':
  begin
  tumpukan[n]:='*';
  n:=n+1;
  end;
        end;
end;
'/':
begin
case tumpukan[n-1] of
  '+':
  begin
  tumpukan[n]:='/';
  n:=n+1;
  end;
  '-':
  begin
  tumpukan[n]:='/';
  n:=n+1;
  end;
  '*':
  begin
  sementara_out:=sementara_out+tumpukan[n-1];
  tumpukan[n-1]:='/';
  end;
  '/':
  begin
  sementara_out:=sementara_out+tumpukan[n-1];
  tumpukan[n-1]:='/';
  end;
  '^':
  begin
  sementara_out:=sementara_out+tumpukan[n-1];
  tumpukan[n-1]:='/';
  end;
  '(':
  begin
  tumpukan[n]:='/';
  n:=n+1;
  end;
        end;
end;
'^':
begin
case tumpukan[n-1] of
  '+':
  begin
  tumpukan[n]:='^';
  n:=n+1;
  end;
  '-':
  begin
  tumpukan[n]:='^';
  n:=n+1;
  end;
  '*':
  begin
  tumpukan[n]:='^';
  n:=n+1;
  end;
  '/':
  begin
  tumpukan[n]:='^';
  n:=n+1;
  end;
  '(':
  begin
  tumpukan[n]:='^';
  n:=n+1;
  end;
  '^':
  begin
  sementara_out:=sementara_out+tumpukan[n-1];
  tumpukan[n-1]:='^';
  end;
        end;
end;
')':
begin
          //belum jadi, pusing, m belum kepake
          j:=n;
          for k:=n downto 0 do
            begin
            if (tumpukan[k]='(') then
              begin
              tumpukan[k]:='';
              n:=k;
              end
            else
              begin
              sementara_out:=sementara_out+tumpukan[k];
              tumpukan[k]:='';
              n:=k;
              end;
            end;



        end;
';':
begin
while n>=0 do
begin
sementara_out:=sementara_out+tumpukan[n];
n:=n-1;
end;
end;
else
sementara_out:=sementara_out+intfixstr[i]
end;
    //end isi else
    end;

end;

//output postfix di cetak
writeln('hasilnya adalah = ',sementara_out);

//akhir program
end.


Semoga artikel ini dapat berguna sebagai media pembelajaran kedepannya. Sekian!

Comments

Popular posts from this blog

Tahap pengujian pada fase pemrograman

Mengenal Linux KLIXs

Fungsi Next Record pada Libre Office