Арифметический тренажер. exitcode = 201 - Free Pascal

Узнай цену своей работы

Формулировка задачи:

Постановка задачи:

нужно создать арифметический тренажер, который бы после выбора учителем параметров разрядности операций (*, 1*, 1**) и действия с числами (= - * /) генерировал бы случайные задачи в заданном диапазоне, например на умножение двузначных чисел или на сложение однозначных, потом в сгенерированном примере прога должна закрывать одно число знаком вопроса, ученик должен ввести число, которое там должно быть. Также программа ведет статистику ошибок и верных ответов. Также необходимо реализовать меню. Вот сам код:
PROGRAM ArTrening;
uses Crt;
const
     NORM=$17;
     SEL=$70;
     N=3;
     NN=4;
var menu:array[1..N] of string[12];{ названия пунктов меню }
    menu2:array[1..NN] of string[12];
    punkt:integer;  { номер выделенного пункта }
    ch:char;        { введенный символ }
    x,y:integer;    { координаты первой строки меню }
    a,b,c,i,j,k,n2,m,v,mist:Integer;

PROCEDURE Main(a,b,c,v,m:Integer;  var mist:Integer);
VAR ch:Char; ans,pans:Integer;
Begin
 case v of
 1:begin
     c:=a+b;
     ch:='+';
   end;
 2:begin
     c:=a-b;
     ch:='-';
    end;
 3:begin
     c:=a*b;
     ch:='*';
   end;
 4:begin
     c:=b;
     b:=a;
     a:=b*c;
     ch:='/';
    end;
 end;
 
 m:=random(3);
 case m of
 1:begin
    ans:=a;
    Writeln(' ? ',ch,' ',b,' = ',c);
    readln (pans); if pans=a then mist:=mist+0 else mist:=mist+1;
   end;
 2:begin
    ans:=b;
    writeln(a,' ',ch,' ?  = ',c);
    readln (pans); if pans=b then mist:=mist+0 else mist:=mist+1;
   end;
 3:begin
    ans:=c;
    writeln(a,' ',ch,' ',b,' = ?');
    readln (pans); if pans=c then mist:=mist+0 else mist:=mist+1;
   end;
  end;
End;
 
Procedure MenuToScr;
var i:integer;
begin
     ClrScr;
     for i:=1 to N do begin
          GoToXY(x,y+i-1);
          write(menu[i]);
     end;
     TextAttr:=SEL;
     GoToXY(x,y+punkt-1);
     write(menu[punkt]);
     TextAttr:=NORM;
end;
 
Procedure MenuToScr2;
var i:integer;
begin
     ClrScr;
     for i:=1 to NN do begin
          GoToXY(x,y+i-1);
          write(menu[i]);
     end;
     TextAttr:=SEL;
     GoToXY(x,y+punkt-1);
     write(menu[punkt]);
     TextAttr:=NORM;
end;
 
begin
     WriteLn('Vvedite kol-vo primerov');
     ReadLn(i);
     menu[1]:='Edinici';
     menu[2]:='Decyatki';
     menu[3]:='Sotni';
     punkt:=1;
     x:=5;
     y:=5; TextAttr:=NORM;
     MenuToScr;
     repeat
          ch:=ReadKey;
          if ch=char(0) then 
            begin
                ch:=ReadKey;
                case ch of
                    chr(80):{ стрелка вниз }
                         if punkt<N then 
                            begin
                              GoToXY(x,y+punkt-1);
                              write(menu[punkt]);
                              punkt:=punkt+1;
                              TextAttr:=SEl;
                              GoToXY(x,y+punkt-1);
                              write(menu[punkt]);
                              TextAttr:=NORM;
                            end;
                    chr(72):{ стрелка вверх }
                         if punkt>1 then
                            begin
                              GoToXY(x,y+punkt-1);
                              write(menu[punkt]);
                              punkt:=punkt-1;
                              TextAttr:=SEl;
                              GoToXY(x,y+punkt-1);
                              write(menu[punkt]);
                              TextAttr:=NORM;
                            end;
                end;
            end
            else
                if ch=chr(13) then 
                begin { нажата клавиша <Enter> }
                    n2:=punkt;
                    ClrScr;
                    menu2[1]:='+';
                    menu2[2]:='-';
                    menu2[3]:='/';
                    menu2[4]:='*';
                    punkt:=1;
                    x:=5;
                    y:=5; TextAttr:=NORM;
                    MenuToScr2;
                    repeat
                        ch:=ReadKey;
                        if ch=char(0) then 
                        begin
                            ch:=ReadKey;
                            case ch of
                            chr(80):{ стрелка вниз }
                            if punkt<N then 
                            begin
                              GoToXY(x,y+punkt-1);
                              write(menu[punkt]);
                              punkt:=punkt+1;
                              TextAttr:=SEl;
                              GoToXY(x,y+punkt-1);
                              write(menu[punkt]);
                              TextAttr:=NORM;
                            end;
                            chr(72):{ стрелка вверх }
                            if punkt>1 then 
                            begin
                              GoToXY(x,y+punkt-1);
                              write(menu[punkt]);
                              punkt:=punkt-1;
                              TextAttr:=SEl;
                              GoToXY(x,y+punkt-1);
                              write(menu[punkt]);
                              TextAttr:=NORM;
                            end;
                        end;
                        end
                        else
                        if ch=chr(13) then 
                            begin
                                v:=punkt;
                                ClrScr;
                                For j:=1 to i do begin
                                    Case n2 of
                                    1:begin
                                        a:=random(9);
                                        b:=random(9);
                                    end;
                                    2:begin
                                        a:=random(90)+10;
                                        b:=random(90)+10;
                                    end;
                                    3:begin
                                        a:=random(900)+100;
                                        b:=random(900)+100;
                                    end;
                                    end;
                                main(a,b,c,v,m,mist);
                                end;
                                WriteLn ('Тест завершен! Правильных ответов: ', (i-mist), ',ошибок: ', mist);
                                ReadKey;
                            end;
                    until ch=chr(27);
                end;
     until ch=chr(27);
end.
Выскакивает ошибка exited with exitcode = 201. Т.е. программа компилируется, запускается, пользователь вводит кол-во примеров, появляется 1я менюшка и после нажатия Enter выскакивает ошибка соответственно. Не могу понять в чем дело, всю голову сломал.

Решение задачи: «Арифметический тренажер. exitcode = 201»

textual
Листинг программы
var menu:array[1..N] of string[12]; // Запомнил? Индексация - от 1 до ТРЕХ

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

7   голосов , оценка 3.571 из 5
Похожие ответы