Форум программистов, компьютерный форум, киберфорум
Delphi для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.67/3: Рейтинг темы: голосов - 3, средняя оценка - 4.67
0 / 0 / 0
Регистрация: 27.05.2015
Сообщений: 17
1

Арифметический тренажер

10.03.2018, 14:28. Показов 630. Ответов 11
Метки нет (Все метки)

Привет, помогите, пожалуйста.
Задача написать арифметический тренажер, в котором нужно вводить два целых числа, выбирать арифметическое действие (+,-,/,*), вводить ответ, и если пользователь посчитал правильно, то выводится "Правильно", если нет, то предоставляется 2 попытки, если все 3 попытки неудачны, то выводится сообщение "Попытки истекли". При этом должен работать таймер времени, в течение которого можно дать ответ. И если время истекает, то выводится сообщение "Время закончилось". По нажатию на кнопку «Статистика» на другой форме отображаются результаты работы: общее количество примеров и количество правильно решенных.
Помогите со следующими проблемами:
1. Операции +,-,* реализуются успешно. Проблема с делением. Не могу понять как написать код, в котором при делении, например, 36/7, в ответ можно было ввести 5,14 и выводилось бы сообщение "Правильно".
Вот как у меня сейчас:
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
procedure TForm1.Button5Click(Sender: TObject);
var a,b :integer;
s :real;
begin
a:=strtoint(edit1.Text);
b:=strtoint(edit2.Text);
s:=a/b;
 if s = StrToInt(Edit3.Text) then
 begin
 inc(prav);
    Label4.Caption := ' / ';
    Label1.Caption := 'Верно ' + IntToStr(a) + ' / ' + IntToStr(b) + ' = ' + Edit3.Text;
    Label2.Caption := 'Правильных ' + IntToStr(prav);
 end
 else
  begin
    inc(neprav);
     Label4.Caption := ' / ';
    Label1.Caption := 'Не верно '+ IntToStr(a) + ' / ' + IntToStr(b) + ' <> ' + Edit3.Text;
    Label3.Caption := 'Не правильных ' + IntToStr(neprav);
  end;
end;
2. Как реализовать счет неудачных попыток, чтобы 3 максимум и выводилось сообщение "Попытки истекли"?
3. Как реализовать таймер, чтобы в начале работы приложения можно было ввести максимальное время, в течение которого можно дать ответ, и по истечению времени выдавалось сообщение, что время истекло?
4. Как реализовать статистику?

Надеюсь, на помощь хотя бы с одной из проблем!
Спасибо!
0

Помощь в написании контрольных, курсовых и дипломных работ здесь.

Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
10.03.2018, 14:28
Ответы с готовыми решениями:

Арифметический тренажер
Доброго времени суток! Задали задание - создать арифметический тренажер (включает операции +, -,...

Арифметический знак
Может я сейчас что то неумное спрошу, но сильно не пинайте. Можно в переменные добавить...

Арифметический расчет прямо из поля EDIT - как?
a: Double; m, mm : String; m:= Edit1.Text; // вводим строку: 3-2*(30/3)/2+4 а:=...

Тренажер на делфи
Мне нужен тренажер на делфи, чтоб он рассматривал все случай решений квадратного уравнения. Прошу,...

11
Модератор
63707 / 47266 / 32576
Регистрация: 18.05.2008
Сообщений: 114,559
10.03.2018, 14:35 2
Цитата Сообщение от fikciya Посмотреть сообщение
например, 36/7, в ответ можно было ввести 5,14 и выводилось бы сообщение "Правильно".
Может так?
Delphi
1
2
3
4
5
6
7
var a,b :integer;
    s :string;
begin
a:=strtoint(edit1.Text);
b:=strtoint(edit2.Text);
s:=formatfloat('0.00',a/b);
if s = Edit3.Text then
1
0 / 0 / 0
Регистрация: 27.05.2015
Сообщений: 17
10.03.2018, 15:20  [ТС] 3
Спасибо, все получилось! Единственное, если ответом будет целое число, то нужно будет дописать ".00"

Добавлено через 31 минуту
Puporev, может Вы еще знаете как реализовать счетчик попыток неправильных ответов?
0
Модератор
63707 / 47266 / 32576
Регистрация: 18.05.2008
Сообщений: 114,559
10.03.2018, 15:29 4
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
var pr,np:integer//глобально
.............................
procedure TForm1.Button5Click(Sender: TObject);
var a,b :integer;
    s :string;
begin
a:=strtoint(edit1.Text);
b:=strtoint(edit2.Text);
s:=formatfloat('0.00',a/b);
if s = Edit3.Text then
 begin
  inc(pr);
  Label4.Caption := ' / ';
  Label1.Caption := 'Верно ' + IntToStr(a) + ' / ' + IntToStr(b) + ' = ' + Edit3.Text;
 end
else
 begin
  inc(np);
  Label4.Caption := ' / ';
  Label1.Caption := 'Не верно '+ IntToStr(a) + ' / ' + IntToStr(b) + ' <> ' + Edit3.Text;
 end;
end;
//На отдельной кнопке
Label1.Caption := 'Правильных ' + IntToStr(pr);
Label2.Caption := 'Не правильных ' + IntToStr(np);
0
0 / 0 / 0
Регистрация: 27.05.2015
Сообщений: 17
10.03.2018, 15:39  [ТС] 5
У меня в коде также, только называются не "pr" и "np", а "prav" и "neprav".
Счетчик-то работает.
Просто в задаче сказано, когда достигается количество 3х неправильных попыток, то выдать сообщение, что попытки истекли.
А с таким кодом у меня просто идет счет
0
Модератор
63707 / 47266 / 32576
Регистрация: 18.05.2008
Сообщений: 114,559
10.03.2018, 15:52 6
Delphi
1
2
3
4
5
if nepraw=3 then
 begin
  ShowMessage('Вы ответили неправильно 3 раза, программа завершена');
   Form1.Close//или другое событие
 end;
1
0 / 0 / 0
Регистрация: 27.05.2015
Сообщений: 17
10.03.2018, 16:36  [ТС] 7
Puporev, Спасибо, получилось!
можно еще помучить Вас своей глупостью?(
Как реализовать через Edit, Button и возможно Timer отсчет времени? Например, ввести в Edit 1:00, нажать на Button, и начался отсчет 1:00?
0
Модератор
63707 / 47266 / 32576
Регистрация: 18.05.2008
Сообщений: 114,559
10.03.2018, 16:40 8
Цитата Сообщение от fikciya Посмотреть сообщение
и начался отсчет 1:00?
В каких единицах?
0
0 / 0 / 0
Регистрация: 27.05.2015
Сообщений: 17
10.03.2018, 16:42  [ТС] 9
Puporev, думаю в минутах и секундах
0
Модератор
63707 / 47266 / 32576
Регистрация: 18.05.2008
Сообщений: 114,559
10.03.2018, 17:07 10
Что-то время без часов не получилось.
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
var
  Form1: TForm1;
  k,m,h:integer;
implementation
 
{$R *.dfm}
procedure TForm1.FormCreate(Sender: TObject);
begin
Timer1.Enabled:=false;
Timer1.Interval:=1000;
k:=0;
m:=0;
h:=0;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
Edit1.Text:='0:00:00';
Timer1.Enabled:=true;
end;
procedure TForm1.Timer1Timer(Sender: TObject);
var t:TTime;
begin
inc(k);
if k=59 then
 begin
  inc(m);
  k:=0;
 end;
if m=59 then
 begin
  inc(h);
  m:=0;
 end;
t:=encodetime(h,m,k,0);
Edit1.Text:=FormatDateTime('hh:mm:ss',t);
end;
0
0 / 0 / 0
Регистрация: 27.05.2015
Сообщений: 17
10.03.2018, 17:41  [ТС] 11
Puporev, считать-то он считает. Но не совсем так, как надо. Я ввожу в Edit сколько мне нужно отсчитать, нажимаю на кнопку, он начинает считать, но не останавливается, когда доходит до нужного значения. То есть в Edit я ввожу "00:03:00" и мне нужно, чтобы когда он дойдет до 3х минут - выдал сообщение, что время закончилось. Ну ладно, буду разбираться дальше, спасибо за помощь, уже стыдно мучить Вас!
0
Модератор
63707 / 47266 / 32576
Регистрация: 18.05.2008
Сообщений: 114,559
10.03.2018, 17:44 12
Да делайте как Вам нужно, я же не экстрасенс.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
10.03.2018, 17:44

Помощь в написании контрольных, курсовых и дипломных работ здесь.

Тренажер очередь
Возник вопрос по осуществлению тренажера, как сделать пошаговый вывод как на скрине

Программа-тренажер
добрый день. Помогите пожалуйста, мне нужно создать программу тренажер в делфи, как лучше это...

Клавиатурный тренажер
Здравствуйте, мне нужна помощь!! Создаю программу на подобие клавиатурного тренажера, ниже...

Тренажёр для чтения
Всем доброго времени суток! Нужно написать программу-тренажёр для чтения. Суть задачи такова:...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.