Арифметический тренажер. 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.
Решение задачи: «Арифметический тренажер. exitcode = 201»
textual
Листинг программы
var menu:array[1..N] of string[12]; // Запомнил? Индексация - от 1 до ТРЕХ
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д