pomozcie w tlumaczeniu z c na pascala

0

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");
	
}
0

Jesli się gdzieś nie kropnąłem.

// A nastepnym razem pamiętaj, że tylko wtedy pomnażasz swe szanse, kiedy żyjesz z wieloma kobietami, a nie wtedy, gdy wrzucasz kilkakrotnie ten sam post.

const MAX=100

type
  maxstring=string[max];
  pwezel=^wezel;
  wezel=record
    nast:pwezel;
    znak:maxstring;
  end;

function push(wierzcholek:pwezel;co_dod:maxstring):pwezel;
var nowy:pwezel;
begin
  getmem(nowy,sizeof(wezel)); {new(nowy);}
  nowy^.nast:=wierzcholek;
  nowy^.znak:=co_dod;
  push:=nowy
end

function pop(wierzcholek:pwezel;co_zdj:maxstring):pwezel;
begin
  pop:=wierzcholek^.nast;
  co_zdj:=wierzcholek^.znak;
  freemem(wierzcholek,sizeof(wezel)); {dispose(wierzcholek);}
end;

procedure przerwij;
begin
  writeln('Wprowadzono zle dane...');
  halt(1)
end;

procedure info;
begin
  writeln(^m^j^j'Program zamienia wyrazenia z Odwrotnej Notacji Polskiej na zwykla.');
  writeln('W pliku zrodlowym napisano wyrazenie w onp dla pojedynczych znakow.');
  writeln('Dozwolone operatory: +, - , *, /');
  writeln('Zapis w zwyklej notacji z nawiasami:')
end;

var
  i,ile_arg,ile_oprt:integer;
  onp,tmp1,tmp2,out1:maxstring;
  wierzcholek:pwezel;
  plik:file;
begin
  ile_arg:=0;
  ile_oprt:=0;
  assign(f,'p.txt');
  reset(f,1);
  out1[0]=^@;
  tmp1[0]=^@;
  tmp2[0]=^@;
  i:=1;
  while(not eof(f))do
    begin
      byte(onp[0]):=i;
      blockread(f,onp[i],1);
      if((onp[i]="(")or(onp[i]=")"))then przerwij;
      inc(i)
    end;
  close(plik);
  wierzcholek:=nil;  {brakowało tego}
  for i=1 to byte(onp[0])do      {byte(onp[0])=length(onp) - dla t. pascala ($p-) i dla shortstringów w delphi (i/lub $h-,$p-)}
    begin
      if((onp[i]="+")or(onp[i]="-")or(onp[i]="*")or(onp[i]="/")) {lepiej: if(onp[i]in["+","-","*","/"])then}
        then
          begin
            if(ile_arg<2)
              then przerwij
              else
                begin
                  wierzcholek:=pop(wierzcholek,tmp1);
                  wierzcholek:=pop(wierzcholek,tmp2);
                  wierzcholek:=push(wierzcholek,'('+tmp2+onp[i]+tmp1+')');
                  inc(ile_oprt)
                end
        else
          begin
            out1=onp[i];
            wierzcholek=push(wierzcholek,out1);
            inc(ile_arg)
          end
    end;
  if(ile_arg<>(ile_oprt+1))then przerwij;
  info;
  writeln(wierzcholek^.znak);
end.

1 użytkowników online, w tym zalogowanych: 0, gości: 1