Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Высокоуровневые методы информатики и программир...docx
Скачиваний:
26
Добавлен:
12.11.2019
Размер:
6.53 Mб
Скачать

Var // раздел переменных модуля Unit1

H : array [1..4,1..2] of integer; // объявление массива значений операндов

procedure TForm1.FormActivate(Sender: TObject); // активизация формы

begin //очистка меток и полей ввода

Label1.Caption := ''; Label2.Caption := ''; Label3.Caption := '';

Label4.Caption := ''; Label5.Caption := ''; Label6.Caption := '';

Label7.Caption := ''; Label8.Caption := ''; Label9.Caption := '';

Label10.Caption := ''; Label11.Caption := ''; Label12.Caption := '';

Label13.Caption := ''; Label14.Caption := '';

Edit1.Text := '0'; Edit2.Text := '0'; Edit3.Text := '0'; Edit4.Text := '0';

button2.Enabled:=False; //блокировка кнопки “Проверить“

Edit1.Enabled:=False; Editt2.Enabled:=False; Edit3.Enabled:=False; Edit4.Enabled:=False; Timer1.Interval:=0;

end;

procedure TForm1.Button1Click(Sender: TObject); // кнопкаТест

var R:integer; // объявление переменной “R”

begin Randomize; // включение счетчика случайных чисел

Timer1.Interval := 1000; // включение таймера с интервалом в одну секунду

H[1, 1] := Random(99) + 1; // первое слагаемое в интервале 1-100

H[1, 2] := Random(99) + 1; // второе слагаемое в интервале 1-100

H[2, 1] := Random(99) + 1; // уменьшаемое в интервале 1-100

H[2, 2] := Random(99) + 1; // вычитаемое в интервале 1-100

If H[2, 2] > H[2, 1] Then // вычитаемое строго больше уменьшаемого

Begin R := H[2, 1]; H[2, 1] := H[2, 2]; H[2, 2] := R; End; // обмен

H[3, 1] := Random(9) + 1; // первый множитель в интервале 1-10

H[3, 2] := Random(9) + 1; // второй множитель в интервале 1-10

H[4, 2] := Random(9) + 1; // делитель в интервале 1-10

H[4, 1] := round((Int(Random(9)) + 1) * H[4,2]); //делимое в интервале 1-100

Label1.Caption := IntToStr(H[1, 1]); // вывод первого слагаемого в Label1

Label2.Caption := IntToStr(H[2, 1]); // вывод уменьшаемого в Label2

Label3.Caption := IntToStr(H[3, 1]); // вывод первого множителя в Label3

Label4.Caption := IntToStr(H[4, 1]); // вывод делимого в метку Label4

Label5.Caption := IntToStr(H[1, 2]); // вывод второго слагаемого в Label5

Label6.Caption := IntToStr(H[2, 2]); // вывод вычитаемого в метку Label6

Label7.Caption := IntToStr(H[3, 2]); // вывод второго множителя в Label7

Label8.Caption := IntToStr(H[4, 2]); // вывод делителя в метку Label8

//очистка полей с ответами школьника и меток с правильными ответами

Edit1.Text := '0'; Edit2.Text:= '0'; Edit3.Text:= '0'; Edit4.Text:= '0';

Label9.Caption:= ''; Label10.Caption := '';

Label11.Caption :=''; Label12.Caption := '';

Label13.Caption := ''; // очистка метки с оценкой

Label14.Caption :='60'; // на ответ дается 60 секунд

button1.Enabled:=False; // блокировка кнопки “Тест”

button2.Enabled:=True; // разблокировка кнопки “Проверить”

Edit1.Enabled:=True; Edit2.Enabled:=True; Edit3.Enabled:=True; Edit4.Enabled:=True; Edit1.SetFocus; // установка фокуса на поле Edit1

end;

procedure TForm1.Button2Click(Sender: TObject); // кнопкаПроверить

var b:byte; v,e:integer; // V‑значение ответа, E‑номер нецифрового символа

begin b := 5; // начальное значение балловой оценки

Val(Edit1.Text,v,e); // перевод ответа из строки в числовую переменную V

If (e<>0) or ((H[1, 1] + H[1, 2]) <> v) then // введенная сумма ошибочная

begin b := b - 1; // оценка уменьшается на один балл

Label9.Caption :=IntToStr(H[1, 1] + H[1, 2]); // вывод правильной суммы

end;

Val(Edit2.Text,v,e);

If (e<>0) or ((H[2, 1] - H[2, 2]) <> v) Then // введенная разность ошибочная

begin b := b - 1; Label10.Caption:=IntToStr(H[2,1]-H[2, 2]); end;

Val(Edit3.Text,v,e);

If (e<>0) or ((H[3, 1] * H[3, 2]) <> v) Then // произведение ошибочно

begin b := b - 1; Label11.Caption:=IntToStr(H[3,1]*H[3,2]); end;

Val(Edit4.Text,v,e);

If (e<>0) or ((H[4, 1] / H[4, 2]) <> v) Then // частное от деления ошибочно

begin b := b - 1; Label12.Caption:=IntToStr(round(H[4,1]/H[4,2])); end;

Label13.Caption := IntToStr(b); // вывод оценки в метку Label13

Timer1.Interval := 0; // отключение счетчика времени

button1.Enabled:=True; // разблокировка кнопки “Тест”

button2.Enabled:=False; // блокировка кнопки “Проверить”

Edit1.Enabled:=False; Edit2.Enabled:=False; Edit3.Enabled:=False; Edit4.Enabled:=False; // блокировка полей ввода ответов

end;

procedure TForm1.Button3Click(Sender: TObject); // кнопкаВыход

begin form1.Close; end;

procedure TForm1.Timer1Timer(Sender: TObject); // таймер

Begin // уменьшение на одну секунду, оставшегося на ответ времени

Label14.Caption:=IntToStr(StrToInt(Label14.Caption)-1); //если время на //ответ закончилось, то вызов процедуры обработки кнопки “Проверить”

If Label14.Caption = '0' Then Button2Click(Button2); end; // конец процедуры