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