- Код: Выделить всё
unit Unit1;
{$mode objfpc}{$H+}
interface
uses
Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, ExtCtrls,
StdCtrls;
type
{ TForm1 }
TForm1 = class(TForm)
Button1: TButton;
Edit1: TEdit;
Label1: TLabel;
Timer1: TTimer;
procedure Button1Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure Timer1Timer(Sender: TObject);
private
public
end;
var
Form1: TForm1;
implementation
var
KC: integer; // разрядность число(кол-во чисел)
LT: integer; // количество чисел (длина текста)
numb: integer; // число, которое должен запомнить испытуемый
right:integer; // колличество правильных чисел
n: integer; // счетчик чисел
igrok: integer;
{$R *.lfm}
// генерирует к - разрядное число
function GetNumb(k:integer) : integer;
var
n: integer; // генерируемое число
i:integer;
begin
KC := 1; // разрядность число(кол-во чисел)
LT := 10; // количество чисел (длина текста)
// процедура генерирует число по разрядам
// начиная со старшего
n:= Random(9)+1; // старший разряд не может быть нулем
// остальные разряды
for i := 1 to (k-1) do
n := n*10 + Random(10);
GetNumb := n;
end;
if right=6 then
begin
KC := 2; // разрядность число(кол-во чисел)
LT := 10; // количество чисел (длина текста)
// процедура генерирует число по разрядам
// начиная со старшего
n:= Random(9)+1; // старший разряд не может быть нулем
// остальные разряды
for i := 1 to (k-1) do
n := n*10 + Random(10);
GetNumb := n;
end;
if right=6 then
begin
KC := 3; // разрядность число(кол-во чисел)
LT := 10; // количество чисел (длина текста)
// процедура генерирует число по разрядам
// начиная со старшего
n:= Random(9)+1; // старший разряд не может быть нулем
// остальные разряды
for i := 1 to (k-1) do
n := n*10 + Random(10);
GetNumb := n;
end;
if right=6 then
begin
KC := 4; // разрядность число(кол-во чисел)
LT := 10; // количество чисел (длина текста)
// процедура генерирует число по разрядам
// начиная со старшего
n:= Random(9)+1; // старший разряд не может быть нулем
// остальные разряды
for i := 1 to (k-1) do
n := n*10 + Random(10);
GetNumb := n;
end;
// создание формы
procedure TForm1.Button1Click(Sender: TObject);
begin
if button1.Caption = 'Завершить' then
begin
Form1.Close; // закрыть окно программы
end;
if Button1.Caption='Продолжить' then
begin
Edit1.Visible:=false;
if n<LT then
begin
igrok:=StrToInt(Edit1.Text);
if igrok=numb then
Right:=Right + 1;
numb := GetNumb(KC); // сгенерировать следующее
// число
Label1.Caption := IntToStr(numb); // отобразить
// число
Label1.Visible := True;
Timer1.Enabled := True; // пуск таймера
n:=n+1;
Edit1.Text:='';
Button1.Caption:='Продолжить';
Button1.Visible:=True;
end
else
begin
// испытание закончено
// вывести результат
Label1.Font.Size := 14;
Label1.Caption := 'Результат: ' + chr(13) +
'Показано чисел: ' + IntToStr(LT) + chr(13) +
'Правильных: ' + IntToStr(Right);
Label1.Visible := True;
Button1.Caption:='Завершить';
Button1.Visible := True; // показать кнопку Завершить
end;
end;
if button1.Caption = 'Начать' then
begin
Edit1.Enabled := True;
Label1.Caption := '';
Label1.Font.Size := 20; //размер шрифта поля Labell
Edit1.Font.Size := 20; // размер шрифта поля Editl
numb := GetNumb(KC); // сгенерировать следующее
// число
Label1.Caption := IntToStr(numb); // отобразить
// число
Label1.Visible := True;
Timer1.Enabled := True; // пуск таймера
Button1.Caption:='Продолжить';
Button1.Visible:=True;
end;
if Button1.Caption = 'Начать Процедуру' then
begin
Edit1.Visible := False; // скрыть поле ввода Editl
Label1.Visible := True;
Label1.Caption:=
'Сейчас на экране будут появляться числа. ' + chr(13) +
'Вы должны запомнить число, набрать его на клавиатуре ' + chr(13) +
'и нажать "Продолжить"';
Button1.Caption := 'Начать';
end;
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
Edit1.MaxLength := KC; // кол-во символов, которое можно ввести
edit1.Enabled:=false;
Timer1.Enabled := False; // таймер остановлен
Timer1.Interval := 1000; // время показа числа - 1 секунда
right := 0; // кол-во правильных
n := 0; // счетчик чисел
Randomize; // инициализация ГСЧ
end;
procedure TForm1.Timer1Timer(Sender: TObject);
begin
Timer1.Enabled := False; // остановить таймер
Label1.Visible := False; // скрыть число
Edit1.Visible := True; // сделать доступным поле Editl
Edit1.SetFocus; // установить курсор в поле Editl
end;
end.