МОУ СОШ №3 г. Осташков Тверская обл.
  
 
 
 
 

Мини-проекты в Delphi

Проект «Арифметика»


 Создадим проект, который поможет школьнику начальных классов освоить устный счет.Разместим на форме вверху метку для сообщений Label и определим ее имя LbUslov. Под нею StaticText для примеров с именем Prim. Справа кнопки SpeedBotton -  большая с надписью «Начнем» для ввода и с именем BitEnter. 10 с цифрами от 0 до 9. Их имена numb0, numb1, … numb9 соответственно. Что важно их свойство Tag такое же, как и надпись – 1, 2,…9. И последняя с надписью “<=” будет выполнять роль клавиши BackSpace, поэтому ее имя «BackSpace». У формы можно отключить возможность изменения формы, выбрав BorderStyle=bsDialog и BorderIcons.biMaximize=false.
В разделе implementation объявляем переменные:

 

Const n=10;  //число примеров
var
uslov,otv:string;
znak                        :Char;
a,b,d,otw,i,protw,ocenka    :integer;
ball                        :real;
После private - Name :String;
Знак операции znak, числа a,b будут задаваться генератором случайных чисел, а c вычисляться. Для этого после {$R *.dfm} запишем нужные процедуры:
Для формы выбираем событие OnActivate:

procedure TForm1.FormActivate(Sender: TObject);
var st:string;
begin
  LbUslov.Caption:='Как тебя зовут?';
  Randomize;
  i:=0;
  st:= InputBox('Input Box', 'Введи свое имя',  'Bill Gats');
  name:=st;
  LbUslov.Caption:='Привет! '+Name+#10+'Реши  '+IntToStr(n)+' примеров.';
  BItEnter.Caption:='Начать';
end;


Randomize – инициализация датчика случайных чисел;
InputBox – окно ввода;
Name – переменная, которая будет хранить имя.
Создаем процедуру для кнопки с надписью «0» - OnClick:

procedure TForm1.numb0Click(Sender: TObject);
Var s:string;
begin
  S:='';
  uslov:=IntTOStr(a)+znak+IntTOStr(b)+'=';
  if TSpeedButton(Sender).Tag<10 then
    begin
      s:=IntToStr(TSpeedButton(Sender).Tag);
      otv:=otv+s;
    end;
  if (Sender=BackSpace) And (Length(otv)>0) then
     Delete(otv,Length(otv),1);
  Prim.Caption := uslov+otv;
end;

Она служит ввода числовых значений вместе с условием и удаления неверных чисел. Для всех остальных кнопок «перекидываем мостик», т. е. выбираем для OnClick - numb0Click. В разделе uses, выше private объявляем процедуры:
procedure Uslovie;
procedure Proverka;
procedure result;
Начнем с первой перед словом «end.» запишем procedure TForm1. После того, как будет поставлена точка нужно выбрать Uslovie, ниже в столбик записать Var Begin end; и занести текст процедуры. Должно получиться:

procedure TForm1.Uslovie;
begin
  inc(i);
  a:=Random(40)+10;b:=Random(40)+10;
  d:=Random(4); {выбор действия}
  Case d of
    0:Begin protw:=a+b; znak:='+'end;
    1:begin protw:=round(a+b); a:=protw; protw:=round(a-b);znak:='-'end;
    2:begin a:=Random(20)+2;b:=Random(20)+2;protw:=round(a*b);znak:='·' end;
    3:begin a:=Random(20)+2;b:=Random(20)+2;protw:=round(a*b);a:=protw;protw:=round(a/b);  znak:=':'end;
  end;
  LbUslov.Caption:=IntTOStr(i)+'-й пример:'+#10+'Сколько будет:';
  Prim.Caption:=IntTOStr(a)+znak+IntTOStr(b)+'=';
  otv:='';
end;


В ней выбираются значения для примера, знак операции и вычисляется правильный ответ, выводится текст в LbUslov и выводится пример в Prim, обнуляется текстовая переменная ответа otv.
Две следующие процедуры аналогичным образом.

procedure TForm1.Proverka;
var Code:integer;
begin
  Val(otv,otw,Code);{преобразование текста   в число}
  If otw=protw  {Проверка правильности ответов}
    Then 
      Begin
        ball:=ball+1;
        LbUslov.Caption:='Правильно!';
      End
      Else
        LbUslov.Caption:='Не правильно!  '+IntTOStr(a)+znak+IntTOStr(b)+'='+IntToStr(protw);
      BItEnter.Tag:=0;
      BItEnter.Caption:='Следующий';
      if i=n then
        begin
          BItEnter.Caption:='Результат';
          BItEnter.Tag:=2;
        end;
end;


Свойство BItEnter.Tag необходимо для правильной реакции при нажатии кнопки BitEnter.

procedure TForm1.result;
var text:String;
begin
  ocenka:=trunc(ball*5/n+0.5);
  If ocenka<2
    Then ocenka:=2;
  If ocenka=2
    Then text:='Очень плохо! Учи как следует.';
  If ocenka=3
    Then text:='Удовлетворительно! Не  мешает поучить.';
  If ocenka=4
    Then text:='Хорошо! Но  на этом не стоит останавливаться.';
  If ocenka=5
    Then text:='Отлично! Так держать.';
  lbUslov.Caption  :=Name+', '+ 'Твоя оценка-' + IntToStr(ocenka) + #10 + text;
end;


В этой процедуре вычисляется оценка и выбирается соответствующий текст.
И процедура OnClick для BItEnter, в которой в зависимости от свойства Tag для BItEnter вызывается  нужная процедура:

procedure TForm1.BitEnterClick(Sender: TObject);
begin
  if BItEnter.Tag=0 then
    begin
      BItEnter.Tag:=1;
      BItEnter.Caption:='Ответ';
      Uslovie;
      exit;
    end;
  if BItEnter.Tag=2 then
    begin
      BItEnter.Tag:=0;
      BItEnter.Caption:='Начнем?';
      i:=0;
      result;
      exit;
    end;
  proverka;
end;


Для BitEnter свойство Tag должно быть в инспекторе объектов установлено равным 0.
Оживить программу можно разместив на свободном месте форму объект TImage, в котором по ходу будут меняться картинки.

 


 
О мини-проектах
Неуловимая кнопка
Вещий камень
Перетаскивание фигур
Секундомер
Градусы-радианы
Мультик
Падение тела
Прозрачная форма
Регионы
Шарик за мышкой
Таймер
Расписание уроков
Записная книжка
Задача по физике
Определение зачеркнутой цифры
Использование Microsoft Agent в Delphi
 Арифметика
 
 
 
 
 
 
 
 
 
 
 
 
 
 
             
Hosted by uCoz