Welcome, guest! Login / Register - Why register?
Psst.. new poll here.
Psst.. new forums here.
Microsoft is blocking us again (TY IP Reputation!) so just use oauth login instead. :)

Paste

Pasted by monobilo ( 17 years ago )
program malina;
var
  wejscie:string;
  it,znaki,naw,petle,znak:integer;
  Zmienne:array['a'..'x'] of integer;
procedure Analizator(a,b:char); //procedura analizujaca 2 sasiadujace wyrazy kodu maliny
var
  temp2:char;
  temp:integer;
begin
  if (a in ['a'..'x']) and (b in ['a'..'x']) then //a,b - zwykle odejmowanie
      Zmienne[a]:=Zmienne[a]-Zmienne[b]
    else if (a in ['a'..'x']) and (b='y') then begin //a,y - odejmowanie z wczytaniem
      readln(temp);
      Zmienne[a]:=Zmienne[a]-temp;
    end
    else if (a='y') and (b in ['a'..'x']) then //y,a - wypisanie wartosci zmiennej
      writeln(Zmienne[b])
    else if (a in ['a'..'x']) and (b='z') then begin //a,z - wczytanie znaku i odejmowanie
      readln(temp2);
      if (temp2<>Chr(13)) and (temp2<>' ') then
 temp:=Ord(temp2)
      else
 temp:=-1;
      Zmienne[a]:=Zmienne[a]-temp;
    end
    else if (a='z') and (b in ['a'..'x']) then //z,a - wypisanie znaku od a
      writeln(Chr(Zmienne[b]))
    else if (a='y') and (b='y') then begin //y,y - wczytanie i wypisanie liczby
      readln(temp);
      writeln(temp);
    end
    else if (a='z') and (b='z') then begin //z,z - wczytanie i wypisanie znaku
      readln(temp2);
      writeln(temp2);
    end
    else if (a='z') and (b='y') then begin //z,y - wczytanie liczby i wypisanie znaku
      readln(temp);
      writeln(Chr(temp));
    end
    else if (a='y') and (b='z') then begin //y,z - wczytanie znaku i wypisanie liczby
      readln(temp2);
      writeln(Ord(temp2));
    end;
//     else if (b='{') then it:=petla(it+2)
    if (b<>'{') then it:=it+2; //przesuwamy sie po 2 miejsca w kodzie maliny jezeli nie wywolujemy petli
end;
function sprawdz():boolean; // funkcja sprawdzajaca
begin
  naw:=0;
  petle:=0;
  znaki:=0;
  sprawdz:=true;
  for it:=1 to length(wejscie) do begin
    znak:=Ord(wejscie[it]); 
    if wejscie[it]='{' then begin 
      Inc(naw); // liczymy nawiasy
      Inc(petle); // liczymy petle
      znaki:=0; // poczatek petli, zerujemy licznik
    end;
    if wejscie[it]='}' then Dec(naw); // nawias zamykajacy
    if naw<0 then sprawdz:=false; // czy nawiasow zamykajacych jest wiecej niz otwierajacych?
    if (znak>=97) and (znak<=122) then begin
      if (znaki=1) then znaki:=0  // jest drugi znak z pary
      else if (znaki=0) then Inc(znaki); // pierwszy znak z pary, zwiekszam licznik
    end;
    if (znaki=1) and ( (znak<97) or (znak>122) ) then sprawdz:=false;  // czy jest drugi znak z pary?
  end;
  if naw<>0 then sprawdz:=false; // czy nawiasy sa zamkniete?
  if znaki<>0 then sprawdz:=false; // czy jest ostatnia para?
end;
procedure Czytaj(); // procedura poruszajaca sie po kodzie maliny
begin
  it:=1;
  while it <= length(wejscie) do begin
    Analizator(wejscie[it],wejscie[it+1]);
  end;
end;
begin
  Zmienne['x']:=1;
  wejscie:=paramstr(1);
  if sprawdz()=false then writeln('Argument z ktorym zostal wywolany program, nie jest poprawnym skladniowo programem w Malinie.')
  else Czytaj();
end.

 

Revise this Paste

Your Name: Code Language: