Witam
mam małe pytanko. Pomogl by mi ktoś przetlumaczyc kod z c na pascala? Mam już napisany poniżej program i potrzeba mi zrobić taki sam program w pascalu tylko ja za diabła nie wiem jak sie za to wziasc i w ogóle jak to zrobic, gdyż jestem zielony z pascala :(. Bylbym bardzo wdzieczny za każdą pomoc. Kod programu jest ponizej.
Pozdrawiam Marek.
/*Program zamieniajacy wyrazenie z Odwrotnej Notacji Polskiej na zwykla*/
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<conio.h>
#define MAX 100
typedef struct WEZEL {
struct WEZEL* nast;
char znak[MAX]; } Wezel;
Wezel* push(Wezel*wierzcholek, char co_dod[MAX]); /*odklada na stos tablice co_dod*/
Wezel* pop(Wezel *wierzcholek, char co_zdj[MAX]); /*zejmuje (i kasuje)ze stosu tablice co_zdj*/
void przerwij(); /*przerywa dzialanie programu gdy wprowadzono zle dane*/
void info();
void main()
{
int i, m=1, k; /*liczniki petel*/
int ile_arg=0, ile_oprt=0; /*ile wystapilo argumentow*/
char onp[MAX], tmp1[MAX],tmp2[MAX],out[MAX],out1[MAX];
Wezel *wierzcholek;
FILE *plik;
plik=(fopen("p.txt","r"));
for (i=0; i<MAX; i++) /*zerowanie tablic*/
{
onp[i]=NULL;
out[i]=NULL;
out1[i]=NULL;
tmp1[i]=NULL;
tmp2[i]=NULL;
}
for (i=0; i<MAX; i++) /*wczytuje do tablicy onp zapis w notacji onp*/
{
onp[i]=fgetc(plik);
if ( (onp[i]=='(') || (onp[i]==')') ) przerwij();
}
for (i=0; onp[i]!=EOF; i++)
if ( (onp[i]=='+') || (onp[i]=='-') || (onp[i]=='*') || (onp[i]=='/') )
{
if(ile_arg<2) przerwij(); /*operator dotyczy 2 operandow*/
else
{
wierzcholek=pop(wierzcholek,tmp1);
wierzcholek=pop(wierzcholek,tmp2);
out[0]='(';
for (k=0; tmp2[k]!='\0'; k++) out[m++]=tmp2[k];
out[m++]=onp[i];
for (k=0; tmp1[k]!='\0'; k++) out[m++]=tmp1[k];
out[m++]=')';
out[m++]='\0';
wierzcholek=push(wierzcholek,out);
m=1;
ile_oprt++;
}
}
else
{
out1[0]=onp[i];
out1[1]='\0';
wierzcholek=push(wierzcholek,out1);
ile_arg++;
}
if(ile_arg!=(ile_oprt+1)) przerwij();
info();
printf("%s",wierzcholek->znak); /*wypisuje ostateczny wynik (w notacji zwyklej)*/
fclose(plik);
}
Wezel* push(Wezel *wierzcholek, char co_dod[MAX])
{
int i;
Wezel *nowy;
nowy = (Wezel*) malloc(sizeof(Wezel));
nowy->nast=wierzcholek;
for (i=0; co_dod[i]!='\0'; ++i) nowy->znak[i]=co_dod[i];
return nowy;
}
Wezel* pop(Wezel *wierzcholek, char co_zdj[MAX])
{
int i;
Wezel *temp=wierzcholek->nast;
for (i=0; i<MAX;++i) co_zdj[i]=wierzcholek->znak[i];
free(wierzcholek);
return temp;
}
void przerwij()
{
printf("Wprowadzono zle dane...\n");
exit(1);
}
void info()
{
printf("\n\nProgram zamienia wyrazenia z Odwrotnej Notacji Polskiej na zwykla.\n");
printf("W pliku zrodlowym napisano wyrazenie w onp dla pojedynczych znakow.\n");
printf("Dozwolone operatory: +, - , *, / \n");
printf("Zapis w zwyklej notacji z nawiasami:\n");
}