Selasa, 23 Oktober 2012

konversi notasi infix menjadi postfix (pascal)

ini hari gue mau ngeposting tugas gue...
semoga bisa bermanfaat tugasnya..
tugasnya tentang pemograman...
langsung adja...

konversi notasi infix menjadi postfix (pascal)





Soal !
  • Buatlah program yang dapat mengkonfersi notasi infix menjadi notasi postfix ?
Jawab

Berikut program konversi notasi infix menjadi notasi postfix dengan menggunakan Bahasa Pascal :


CODING

{*********************************************
* Program 3.4. (PROG3-4.PAS) *
* Konversi notasi persamaan matematis dari *
* notasi infix menjadi notasi postfix (RPN) *
*********************************************}
program KONVERSI_INFIX_KE_POSTFIX;
uses crt;
const Max_Elemen = 255;
type S255 = string[Max_Elemen];
Tumpukan = record
Rinci : S255;
Atas : 0..Max_Elemen
end;
var Infix : S255; {* notasi infix *}
Lagi : char;
{********************************************
* Fungsi untuk menentukan valensi operator *
********************************************}
function VALENSI (Tanda_Op : char) : integer;
begin
case Tanda_Op of
‘$’ : VALENSI := 3; {* pangkat *}
‘*’, ‘/’ : VALENSI := 2; {* kali atau bagi *}
‘+’, ‘-’ : VALENSI := 1; {* plus atau minus *}
‘(‘ : VALENSI := 0 {* kurung buka *}
end
end; {* fungsi VALENSI *}
{************************************************
* Prosedur memasukkan elemen ke dalam tumpukan *
************************************************}
procedure PUSH (var T : Tumpukan; Elemen : char);
begin
T.Atas := T.Atas + 1;
T.Rinci[T.Atas] := Elemen
end; { *** prosedur PUSH *** }
{***********************************************
* Fungsi untuk mengambil elemen dari tumpukan *
*********************************************** }
function POP (var T : Tumpukan) : char;
begin
POP := T.Rinci[T.Atas];
T.Atas := T.ATas – 1
end; { *** fungsi POP *** }
{*************************************
* Prosedur untuk melalukan konversi *
* dan mencetak hasil *
*************************************}
procedure KONVERSI_CETAK (Infix : S255);
var I : integer;
Operator : set of char;
Temp, Kar : char;
T : Tumpukan;
Test : boolean;
begin
{* Himpunan operator yang diijinkan *}
Operator := ['$']+['*']+['/']+['+']+['-'];
{* Melakukan konversi *}
for I := 1 to length(Infix) do
begin
Kar := Infix[I];
{* Kurung buka. Push ke dalam tumpukan *}
if Kar = ‘(‘ then PUSH(T, Kar)
{* Kurung tutup. Pop semua elemen tumpukan *
* dan dicetak, sampai elemen atas tumpukan *
* adalah kurung buka. Pop juga elemen ini *
* tetapi tidak perlu ditulis. *}
else if Kar = ‘)’ then
begin
while T.Rinci[T.Atas] <> ‘(‘ do
write(POP(T):2);
Temp := POP(T)
end
{* Operator. Test valensinya terhadap *
* valensi elemen atas tumpukan. Jika *
* valensinya lebih kecil, pop elemen atas *
* tumpukan sampai valensi elemen atas *
* tumpukan lebih kecil. Push operator ini *}
else if Kar in Operator then
begin
while (T.Atas <> 0) and (VALENSI(Kar) <= VALENSI(T.Rinci[T.Atas])) do
write(POP(T):2);
PUSH(T, Kar)
end
{* Operand. Langsung dicetak. *}
else if Kar <> ‘ ‘ then
write(Kar:2)
end;
if T.Atas <> 0 then
{* Tumpukan masih isi. Pop semua elemen *
* yang masih ada dalam tumpukan *}
repeat
write(POP(T):2)
until T.Atas = 0;
end; { *** prosedur KONVERSI_CETAK *** }
{*****************
* Program utama *
*****************}
begin
clrscr;
writeln(‘—————————————–’);
writeln(‘| MENGUBAH NOTASI INFIX MENJADI POSTFIX |’);
writeln(‘—————————————–’);
writeln;
repeat
{* Notasi infix yang akan dikonversikan *}
write(‘Masukkan ungkapan infix: ‘);
readln(Infix); writeln;
write(‘Ungkapan postfix: ‘);
{* Melakukan konversi dan mencetak hasil *}
KONVERSI_CETAK (Infix);
writeln; writeln;
write(‘Akan mencoba lagi? Y(a)/T(idak): ‘);
readln(Lagi);
writeln
until not (Lagi in ['Y', 'y'])
end. {* program utama *}


OUTPUT








Jika Y / y ,maka program akan kembali untuk meminta ungkapan infix-nya . Jika T , t , program akan keluar atau selesai .

2 komentar:

Jangan Lupa Di Koent Yaa..
Jangan Lupa juga di Folow..
Dan ter akhri Salam Kenal adja

Pages

Diberdayakan oleh Blogger.