Pascal-bilet na kolejny rok

0

Witam. Program jest moim biletem wstepu na kolejny rok, wiec prosze o jego poprawe. Program ma za zadanie "
Zaproponować algorytm pozwalający na realizację następującego zadania. Napisać program do zadawania użytkownikowi na terminalu prostych zadań arytmetycznych oraz do sprawdzania i oceny odpowiedzi użytkownika. Zadania będą zapisane na pliku w tzw. postaci prefiksowej, po jednym w linii, gdzie pierwszy znak w linii oznacza operację arytmetyczną, zaś występujące po nim dwie liczby oddzielone spacjami są jej argumentami, na przykład:

  • 2 3
  • 12 32
  • 12 -12

Znak ,,.'' w pierwszej kolumnie oznacza koniec danych. Program ma obsługiwać operację dodawania (+), odejmowania (-), mnożenia (*), potęgowania (^), dzielenia całkowitoliczbowego (%), dzielenia modulo (:) - wszystko ze sprawdzaniem wykonalności operacji. Każdy inny znak umieszczony w pierwszej kolumnie powinien być potraktowany jako błąd i powodować zakończenie działania programu z odpowiednim komunikatem.
Będą istniały dwa pliki z danymi, nazwane ,,latwe.d i ,,trudne.d. Program powinien na początku pracy zapytać użytkownika, który zestaw zadań wybiera. Zadając kolejne pytania program czyta odpowiedzi użytkownika i porównuje je z poprawnymi wynikami. Równocześnie program prowadzi statystykę poprawności odpowiedzi użytkownika i po zadaniu wszystkich pytań wyświetla informację o procentowej ilości poprawnych odpowiedzi.
Przebieg ćwiczenia
Przeanalizowć podane w wymaganiach wstępnych zadanie algorytmiczne. Przedyskutować jego kompletność. Ewentualnie uzupełnić specyfikację zadania.
Zaproponować i zapisać za pomocą diagramu algorytmu rozwiązanie algorytmiczne postawionego problemu z równoczesnym uwzględnieniem podziału problemu na podproblemy. Określić specyfikację procedur/funkcji rozwiązujących wyszczególnione podproblemy.
Wskazać warunek stopu algorytmu.
Zaproponować struktury danych niezbędne do realizacji algorytmu.
Omówić zagadnienie czytania danych z pliku wejściowego.
Zaproponować sposób wyliczania poprawnych odpowiedzi. "
Niestety w momencie gdy myslalem ze wszystko jest na dobrej drodze do napisania programu wyskoczylo mi kilka bledow
Bardzo proszo pomoc
Program wraz z bledami:

program arytmetyka;
var f            : text;
   poziom,zn     : char;
   x,y,wynik,odp : integer;
   i,n,pkt       : integer;

procedure wybor;
begin
   repeat
      writeln;
      writeln('[l]atwy');
      writeln('[t]trudny');
      write('Wybierz poziom trudnosci: ');
      readln(poziom);
          if (poziom<>'l') and (poziom<>'t') then
             writeln('podales zly znak');
   until (poziom='l') or (poziom='t')
end; { wybor }

procedure otworz_plik;
begin
   if (poziom='t') then assign(f,'trudne.d')
   else assign(f,'latwe.d');
   reset(f);
end; { otworz_plik }

function oblicz:integer;
var wynik : integer;
begin
     case zn of
       '+': wynik:=x+y;
       '-': wynik:=x-y;
       '*': wynik:=x*y;
       '^': begin
          wynik:=1;
          for i:=1 to y do
             wynik:=wynik*y;
       end;
procedure wyniki;
begin
writeln('Twoj wynik to: ',pkt*100 div n,'%');
readln;
end; { oblicz }

begin
n:=0;
pkt:=0;
wybor;
otworz_plik;

repeat
repeat
readln(f,zn,x,y);
    until (zn='-') or (zn='+') or (zn=':') or (zn='*') or
(zn='%') or (zn='^') or (zn='.') and
((y<>0) or ((zn<>':') and (zn<>'%')));

writeln('% dzielenie calkowitoliczbowe');
procedure wyniki;
begin
writeln('Twoj wynik to: ',pkt*100 div n,'%');
readln;
end; { oblicz }

begin
n:=0;
pkt:=0;
wybor;
otworz_plik;

repeat
repeat
readln(f,zn,x,y);
    until (zn='-') or (zn='+') or (zn=':') or (zn='*') or
(zn='%') or (zn='^') or (zn='.') and
((y<>0) or ((zn<>':') and (zn<>'%')));

writeln('% dzielenie calkowitoliczbowe');
writeln(': modulo');
writeln('^ potegowanie');
writeln;

if (zn <> '.') then
          begin
n:=n+1;
wynik:=oblicz;
write(x,zn,y,' = ');
readln(odp);
if wynik=odp then pkt:=pkt+1;
    end;
  until zn='.';

close(f);
wyniki;
end.
0

Tylko jedno pytanie przychodzi mi do głowy, za ile Ci napisać nowy, bo modyfikacje tego co masz potrwają dłużej.

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