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.