Selasa, 15 Maret 2011

MENGUBAH NOTASI INFIX MENJADI POSTFIX

NAMA : AGUSTINE HANA .M
KELAS : 2 KA 17
NPM : 12109549


Buatlah program untuk menterjemahkan notasi Infix dengan output postfix !!!


saya mencoba membuat coding untuk 2 bahasa pemrograman PASCAL dan C ++


PASCAL :


program infix_postfix;
uses crt;


const
n = 255;


type S255 = string[n];
Tumpukan = record
Rinci : S255;
Atas : 0..n
end;


var
Infix : S255; {* notasi infix *}
Lagi : char;


{* Fungsi untuk menentukan valensi operator*}
function VALENSI (operator : char) : integer;


begin
case operator 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;


{* Fungsi untuk mengambil elemen dari tumpukan * }
function POP (var T : Tumpukan) : char;


begin
POP := T.Rinci[T.Atas];
T.Atas := T.Atas - 1
end;


{*Prosedur untuk melalukan konversi dan mencetak hasil*}
procedure CETAK (Infix : S255);


var
a : integer;
Operator : set of char;
Temp, Kar : char;
T : Tumpukan;
Test : boolean;


begin
{* Himpunan operator yang diijinkan *}
Operator := ['^']+['*']+['/']+['+']+['-'];


{* Melakukan konversi *}
for a := 1 to length(Infix) do
begin
Kar := Infix[a];


{* Kurung buka. Push ke dalam tumpukan *}
if Kar = '(' then PUSH(T, Kar)


{* Kurung tutup. Pop semua elemen tumpukan
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. *}


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;


{*coding Program utama *}
begin
clrscr;
gotoxy (18,1);
writeln('-----------------------------------------');
gotoxy (18,2);
writeln('* MENGUBAH NOTASI INFIX MENJADI POSTFIX *');
gotoxy (18,3);
writeln('********DENGAN MEMANFAATKAN STACK********');
gotoxy (18,4);
writeln('*****************************************');
writeln;
repeat


{* Notasi infix yang akan dikonversikan *}
gotoxy (18,7);
write('Masukkan notasi infix = ');
readln(Infix);
gotoxy (18,9) ;
write('Maka notasi  postfix nya  = ');


{* Melakukan konversi dan mencetak hasil *}
CETAK (Infix);


writeln; writeln;
write('Anda ingin mencoba lagi? Y/T: ');
readln(Lagi);
writeln
until not (Lagi in ['Y', 'y'])
end.




OUTPUT PROGRAM :






 C ++ :



//program untuk merubah notasi infix ke notasi postfix

#include<stdio.h>

#include<conio.h>

#include<string.h>

#define MAX 20
 //pendeklarasian tipe data
char stack[MAX];  

int top=-1;

char pop();

void push(char item);

int prcd(char symbol)

{

switch(symbol)

{

case '+':

case '-':return 2;

break;

case '*':

case '/':return 4;

break;

case '^':

case '$':return 6;

break;

case '(':

case ')':

case '#':return 1;

break;

}

}

int isoperator(char symbol)

{

switch(symbol)

{

case '+':

case '-':

case '*':

case '/':

case '^':

case '$':

case '(':

case ')':return 1;

break;

default:return 0;

}

}

void convertip(char infix[],char postfix[])

{

int i,symbol,j=0;

stack[++top]='#';

for(i=0;i<strlen(infix);i++)

{

symbol=infix[i];

if(isoperator(symbol)==0)

{

postfix[j]=symbol;

j++;

}

else{

if(symbol=='(')push(symbol);

else if(symbol==')')

{

while(stack[top]!='(')

{

postfix[j]=pop();

j++;

}

pop();//pop out (.

}

else{

if(prcd(symbol)>prcd(stack[top]))

push(symbol);

else{

while(prcd(symbol)<=prcd(stack[top]))

{

postfix[j]=pop();

j++;

}

push(symbol);

}//end of else.

}//end of else.

}//end of else.

}//end of for.

while(stack[top]!='#')

{

postfix[j]=pop();

j++;

}

postfix[j]='\0';

}

void main()

{

char infix[20],postfix[20];

clrscr();

printf("Masukkan notasi Infix :\n"); 

gets(infix); //menginput notasi infix

convertip(infix,postfix);

printf("Notasi Postfix nya adalah :\n");

puts(postfix);

getch();

}

void push(char item)

{

top++;

stack[top]=item;

}

char pop()

{

char a;

a=stack[top];

top--;

return a;
 }




OUTPUT PROGRAM :





Selasa, 01 Maret 2011

CONTOH PROGRAM OPERASI STRING PADA PASCAL

NAMA : AGUSTINE HANA .M
KELAS : 2 KA 17
NPM : 12109549

1. BUATLAH PROGRAM DENGAN KETENTUAN SEBAGAI BERIKUT :
- MENCARI PANJANG DARI SEBUAH STRING
- MENGGABUNGKAN ISI DARI 2 BUAH STRING
- MENYISIPKAN ISI DARI SEBUAH STRING KEDALAM STRING LAIN
- PROGRAM BERBENTUK PILIHAN MENU

DALAM MEMBUAT PROGRAM INI SAYA MENGGUNAKAN PASCAL PROGRAM

BERIKUT INI ADALAH SINTAKS NYA :


program cobastring;
uses crt;
var
(*pendeklarasian tipe data variable*)
pil,hasil:integer;
s,s1,s2,hasilconcat,x1,x2:string;
(*string merupakan tipe data yang mengalokasikan ruang untuk 256 karakter*)
a,x:integer;
jawab: char;

begin
clrscr;
repeat
(*repeat untuk pengulangan yang akan terus di lakukan apabila kondisi yg di definisikan masih bernilai false*)
writeln('----------------MENU-----------------');
writeln('1. Mencari panjang dari sebuah string');
writeln('2. Menggabungkan isi dari 2 buah string');
writeln('3. Menyisipkan isi dari sebuah string kedalam string lain');
writeln;
writeln;
write('masukkan nomer menu yang anda pilih : ');readln(pil);

case pil of
(*catatan untuk statement case yaitu kita harus menempatkan statement tersebut di dalam blok begin*)
1: begin
writeln;
write('masukkan sebuah string:  ');readln(s);
a:=length(s); (*length yaitu cara untuk mendapatkan panjang string*)
writeln('Panjang string : ',a);
readln;
end;

2: begin
writeln;
write('masukkan string 1 : ');readln(s1);
writeln;
write('masukkan string 2 : ');readln(s2);
hasilconcat:=concat(s1,s2);
(*concat yaitu fungsi utk melakukan penggabungan terhadap string-string yg menjadi parameternya*)
writeln;
writeln('string baru : ',hasilconcat);
readln;
end;

3:begin
writeln;
write('masukkan string 1 : ');readln(x1);
writeln;
write('masukkan string 2 : ');readln(x2);
writeln;
write('pada posisi ke berapa string 1 akan di sisipkan ke string 2 : ');readln(x);
insert(x1,x2,x);(*insert utk menyisippkan string 1 ke string lainya*)
writeln;
writeln('string baru : ',x2);
readln;
end;

end;
clrscr;
writeln('apakah anda ingin kembali ke menu ? (y/t)');readln(jawab);
until (jawab= 't');
end.


OUTPUT PROGRAM
MENU 1 :
MENU 2 :

2. BUATLAH PROGRAM UNTUK MENAMPILKAN JURUSAN DAN ANGKATAN SEORANG MAHASISWA DI UNIVERSITAS GUNADARMA BERDASARKAN NPM

BERIKUT INI SINTAKS NYA :
program npmdanjurusan;
uses crt;

var
npm,jurusan1,jurusan2,angkatan1,angkatan2: string;
y,z : integer;

begin
clrscr;
write ('Masukkan NPM anda : ');
readln (npm);

(*gunadarma didirikan pada tahun 1981
kode jurusan :
1= strata 1 ; sistem informasi
2= diploma 3 ; manajemen informatika
3= strata 1 ; manajemen komputer dan akuntansi dan seterusnya sesuai database*)

jurusan1:=copy(npm,1,1);
if jurusan1= '1' then jurusan2:='Strata 1 - SISTEM INFORMASI '
else
if jurusan1= '2' then jurusan2:='Diploma3 - MENEJEMEN INFORMATIKA '
else
if jurusan1= '3' then jurusan2:='STRATA 1 - TEKHNIK INFORMATIKA '
else
if jurusan1= '4' then jurusan2:='STRATA 1 - SASTRA INGGRIS '
else
if jurusan1= '5' then jurusan2:='STRATA 1 - MENEJEMEN AKUNTANSI '
else
if jurusan1= '6' then jurusan2:='STRATA 1 - TEKHNIK INDUSTRI '
(*database bisa di update dan di masukkan lebih banyak lagi dg menggunakan fungsi IF*)
else
jurusan2:=' MAAF ANDA TIDAK TERDAFTAR SEBAGAI MAHASISWA UNIVERSITAS GUNADARMA ';
writeln;
writeln('Jurusan anda adalah : ',jurusan2);
writeln;

angkatan1:=copy (npm,4,2);
(*untuk mengambil string angka ke 4 sebanyak 2 karakter*)
val(angkatan1,y,z);
if y>81 then
writeln('Anda adalah mahasisa Universitas Gundarma angkatan 19',y)
else
if y<10 then
begin
str(y:1,angkatan2);
insert('0',angkatan2,1);
writeln('Anda adalah mahasiswa Universitas Gunadarma angkatan 20',angkatan2);
end;
readln;
end.
OUTPUT PROGRAM :