Технический форум
Вернуться   Технический форум > Программирование > Форум программистов > Помощь студентам


Ответ
 
Опции темы Опции просмотра
Старый 07.01.2011, 15:58   #1 (permalink)
jax
Технарёнок
 
Регистрация: 30.12.2010
Сообщений: 77
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
Angry Программа-тест по арифметике

uses crt,graphABC;
label voz,voz1,voz2,voz3;
var a,b:real;
begin
writeln('Первый вопрос');
writeln('4*4 = ?');
readln(a);
clrscr;
begin
if a = 16 then b:=b+1;
if a = 16 then writeln('Ответ = ',a,' првильно')
else writeln('Ответ = ',a,' неправильно');
end;

begin
writeln('Нажьмите ENTER');
readln;
clrscr;
writeln('Второй вопрос');
writeln('3*7 = ?');
readln(a);
clrscr;
if a = 21 then b:=b+1;
if a = 21 then writeln('Ответ = ',a,' првильно')
else writeln('Ответ = ',a,' неправильно');
end;

begin
writeln('Нажьмите ENTER');
readln;
clrscr;
writeln('Третий вопрос');
writeln('9*7 = ?');
readln(a);
clrscr;
if a = 63 then b:=b+1;
if a = 63 then writeln('Ответ = ',a,' првильно')
else writeln('Ответ = ',a,' неправильно');
end;

begin
writeln('Нажьмите ENTER');
readln;
clrscr;
writeln('Четвёртый вопрос');
writeln('8*7 = ?');
readln(a);
clrscr;
if a = 56 then b:=b+1;
if a = 56 then writeln('Ответ = ',a,' првильно')
else writeln('Ответ = ',a,' неправильно');
end;

begin
writeln('Нажьмите ENTER');
readln;
clrscr;
writeln('Пятый вопрос');
writeln('3*3 = ?');
readln(a);
clrscr;
if a = 9 then b:=b+1;
if a = 9 then writeln('Ответ = ',a,' првильно')
else writeln('Ответ = ',a,' неправильно');
end;

begin
writeln('Нажьмите ENTER');
readln;
clrscr;
writeln('Шестой вопрос');
writeln('6*6 = ?');
readln(a);
clrscr;
if a = 36 then b:=b+1;
if a = 36 then writeln('Ответ = ',a,' првильно')
else writeln('Ответ = ',a,' неправильно');
end;

begin
writeln('Нажьмите ENTER');
readln;
clrscr;
writeln('Седьмой вопрос');
writeln('5*5 = ?');
readln(a);
clrscr;
if a = 25 then b:=b+1;
if a = 25 then writeln('Ответ = ',a,' првильно')
else writeln('Ответ = ',a,' неправильно');
end;

begin
writeln('Нажьмите ENTER');
readln;
clrscr;
writeln('Восьмой вопрос');
writeln('4*7 = ?');
readln(a);
clrscr;
if a = 28 then b:=b+1;
if a = 28 then writeln('Ответ = ',a,' првильно')
else writeln('Ответ = ',a,' неправильно');
end;

begin
writeln('Нажьмите ENTER');
readln;
clrscr;
writeln('Девятый вопрос');
writeln('8*8 = ?');
readln(a);
clrscr;
if a = 64 then b:=b+1;
if a = 64 then writeln('Ответ = ',a,' првильно')
else writeln('Ответ = ',a,' неправильно');
end;

begin
writeln('Нажьмите ENTER');
readln;
clrscr;
writeln('Десятый вопрос');
writeln('9*9 = ?');
readln(a);
clrscr;
if a = 81 then b:=b+1;
if a = 81 then writeln('Ответ = ',a,' првильно')
else writeln('Ответ = ',a,' неправильно');
end;

begin
if (b=9) and (b=10) then goto voz;
end;
voz:
begin
clrscr; writeln('Ваша оценка 5');
end;


begin
if (b=7) and (b=8) then goto voz1;
end;
voz1:
begin
clrscr;writeln('Ваша оценка 4');
end;

begin
if (b=5) and (b=6) then goto voz2;
end;
voz2:
begin
clrscr; writeln('Ваша оценка 3');
end;

begin
if (b<6) then goto voz3;
end;
voz3:
begin
clrscr; writeln('Ваша оценка 2');
end;

end.

у меня не выводит правельный ответ всегда оценка 2
помогите пожалуйсто
jax вне форума   Ответить с цитированием

Старый 07.01.2011, 15:58
Helpmaster
Member
 
Аватар для Helpmaster
 
Регистрация: 08.03.2016
Сообщений: 0

Потратьте немного времени на прочтение подобных обсуждений

Тест. Кем ты был в прошлой жизни?
Помогите ответить на тест
Тест HDD на Victoria
Тест Виктория
Интересный тест

Старый 07.01.2011, 16:22   #2 (permalink)
shrek=)
Студент БГПУ
 
Аватар для shrek=)
 
Регистрация: 06.02.2010
Сообщений: 420
Записей в дневнике: 3
Сказал(а) спасибо: 1
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 470
По умолчанию

Мне кажется, что ошибка проста, ведь одна и та же переменная не может принимать несколько значений сразу
Цитата:
Сообщение от jax Посмотреть сообщение
(b=5) and (b=6)
Думаю and следует заменить на or
И еще, мне кажется, что не стоит так растягивать код условие для проверки ответа и вывода вердикта можно уменьшить и проверьте орфографию
Цитата:
Сообщение от jax Посмотреть сообщение
НажЬмите

Последний раз редактировалось shrek=); 07.01.2011 в 16:31
shrek=) вне форума   Ответить с цитированием
Старый 07.01.2011, 16:53   #3 (permalink)
Vladimir_S
Специалист
 
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
По умолчанию

Цитата:
Сообщение от shrek=) Посмотреть сообщение
Мне кажется, что ошибка проста, ведь одна и та же переменная не может принимать несколько значений сразу Думаю and следует заменить на or
И еще, мне кажется, что не стоит так растягивать код условие для проверки ответа и вывода вердикта можно уменьшить и проверьте орфографию
И это лишь одно из замечаний.
Перечислю остальные:
1. Начну с модераторского: пожалуйста, давайте названия темам в соответствии с Правилами форума, п.2.1, чтобы модераторам не приходилось самим за Вас придумывать название темы.
2. Ваша программа построена на повторении 10 одинаковых действий. В таком случае в программировании (на любом ЯП) принято пользоваться подпрограммами.
3. Если Вы хотите стать хорошим программистом, то мой Вам совет: выкиньте из головы переходы по меткам! Забудьте о метках совсем - тем более, что здесь они абсолютно не нужны.
4. Зачем Вы присоединяете модуль GraphABC? Вы же графику не употребляете.
В качестве примера - мое решение:
Код:
uses
 crt;
const
 Q_N:Array[1..10] of String=('Первый','Второй','Третий',
 'Четвертый','Пятый','Шестой','Седьмой','Восьмой','Девятый','Десятый');
var
 b:Word;

Procedure Question(c,d:Word;i:Integer);
 var a:Word;
 begin
  clrscr;
  writeln(Q_N[i]+' вопрос:');
  writeln(c,'*',d,' = ?');
  readln(a);
  clrscr;
  if a = c*d then
   begin
    b:=b+1;
    writeln('Ответ = ',a,' правильно')
   end
  else
   writeln('Ответ = ',a,' неправильно');
  writeln('Нажмите ENTER');
  readln;
 end;

BEGIN
 b:=0;
 Question(4,4, 1);
 Question(3,7, 2);
 Question(9,7, 3);
 Question(8,7, 4);
 Question(3,3, 5);
 Question(6,6, 6);
 Question(5,5, 7);
 Question(4,7, 8);
 Question(8,8, 9);
 Question(9,9,10);

 clrscr;
 if (b=9) or (b=10) then  writeln('Ваша оценка 5') else
 if (b=7) or (b= 8) then  writeln('Ваша оценка 4') else
 if (b=5) or (b= 6) then  writeln('Ваша оценка 3') else
 writeln('Ваша оценка 2');
 readln;
END.
Почувствуйте разницу, для начала - хотя бы в размере кода.
Vladimir_S вне форума   Ответить с цитированием
Старый 07.01.2011, 17:15   #4 (permalink)
jax
Технарёнок
 
Регистрация: 30.12.2010
Сообщений: 77
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
По умолчанию

graphABC я использовал для шрифта,но в даном примере я не использовал изменене шрифта,а убрать забыл.
jax вне форума   Ответить с цитированием
Старый 07.01.2011, 17:17   #5 (permalink)
jax
Технарёнок
 
Регистрация: 30.12.2010
Сообщений: 77
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
По умолчанию

BEGIN
b:=0;
Question(4,4, 1);
Question(3,7, 2);
Question(9,7, 3);
Question(8,7, 4);
Question(3,3, 5);
Question(6,6, 6);
Question(5,5, 7);
Question(4,7, 8);
Question(8,8, 9);
Question(9,9,10);
только я непойму что это такое я это неизучал.
jax вне форума   Ответить с цитированием
Ads

Яндекс

Member
 
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
Старый 07.01.2011, 17:37   #6 (permalink)
jax
Технарёнок
 
Регистрация: 30.12.2010
Сообщений: 77
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
По умолчанию

спасибо за другой вариант,но если можно то исправте, мой код чтоб работал.
jax вне форума   Ответить с цитированием
Старый 07.01.2011, 17:56   #7 (permalink)
jax
Технарёнок
 
Регистрация: 30.12.2010
Сообщений: 77
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
По умолчанию

program test;
uses crt,graphABC;
label voz,voz1,voz2,voz3;
var a,b:real;
begin
writeln('Первый вопрос');
writeln('4*4 = ?');
readln(a);
clrscr;
begin
b:=0;
if a = 16 then b:=b+1;
if a = 16 then writeln('Ответ = ',a,' правильно')
else writeln('Ответ = ',a,' неправильно');
end;

begin
writeln('Нажьмите ENTER');
readln;
clrscr;
writeln('Второй вопрос');
writeln('3*7 = ?');
readln(a);
clrscr;
if a = 21 then b:=b+1;
if a = 21 then writeln('Ответ = ',a,' првильно')
else writeln('Ответ = ',a,' неправильно');
end;

begin
writeln('Нажьмите ENTER');
readln;
clrscr;
writeln('Третий вопрос');
writeln('9*7 = ?');
readln(a);
clrscr;
if a = 63 then b:=b+1;
if a = 63 then writeln('Ответ = ',a,' првильно')
else writeln('Ответ = ',a,' неправильно');
end;

begin
writeln('Нажьмите ENTER');
readln;
clrscr;
writeln('Четвёртый вопрос');
writeln('8*7 = ?');
readln(a);
clrscr;
if a = 56 then b:=b+1;
if a = 56 then writeln('Ответ = ',a,' првильно')
else writeln('Ответ = ',a,' неправильно');
end;

begin
writeln('Нажьмите ENTER');
readln;
clrscr;
writeln('Пятый вопрос');
writeln('3*3 = ?');
readln(a);
clrscr;
if a = 9 then b:=b+1;
if a = 9 then writeln('Ответ = ',a,' првильно')
else writeln('Ответ = ',a,' неправильно');
end;

begin
writeln('Нажьмите ENTER');
readln;
clrscr;
writeln('Шестой вопрос');
writeln('6*6 = ?');
readln(a);
clrscr;
if a = 36 then b:=b+1;
if a = 36 then writeln('Ответ = ',a,' првильно')
else writeln('Ответ = ',a,' неправильно');
end;

begin
writeln('Нажьмите ENTER');
readln;
clrscr;
writeln('Седьмой вопрос');
writeln('5*5 = ?');
readln(a);
clrscr;
if a = 25 then b:=b+1;
if a = 25 then writeln('Ответ = ',a,' првильно')
else writeln('Ответ = ',a,' неправильно');
end;

begin
writeln('Нажьмите ENTER');
readln;
clrscr;
writeln('Восьмой вопрос');
writeln('4*7 = ?');
readln(a);
clrscr;
if a = 28 then b:=b+1;
if a = 28 then writeln('Ответ = ',a,' првильно')
else writeln('Ответ = ',a,' неправильно');
end;

begin
writeln('Нажьмите ENTER');
readln;
clrscr;
writeln('Девятый вопрос');
writeln('8*8 = ?');
readln(a);
clrscr;
if a = 64 then b:=b+1;
if a = 64 then writeln('Ответ = ',a,' првильно')
else writeln('Ответ = ',a,' неправильно');
end;

begin
writeln('Нажьмите ENTER');
readln;
clrscr;
writeln('Десятый вопрос');
writeln('9*9 = ?');
readln(a);
clrscr;
if a = 81 then b:=b+1;
if a = 81 then writeln('Ответ = ',a,' првильно')
else writeln('Ответ = ',a,' неправильно');
end;


if (b=9) or (b=10) then
begin
clrscr; writeln('Ваша оценка 5');
end else



if (b=7) or (b=8) then
begin
clrscr;writeln('Ваша оценка 4');
end else


if (b=5) or (b=6) then
begin
clrscr; writeln('Ваша оценка 3');
end else


if (b<6) then

begin
clrscr; writeln('Ваша оценка 2');
end;

end.
все исправил,спасибо за советы и попощь!
jax вне форума   Ответить с цитированием
Старый 07.01.2011, 18:44   #8 (permalink)
Vladimir_S
Специалист
 
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
По умолчанию

Цитата:
Сообщение от jax Посмотреть сообщение
только я непойму что это такое я это неизучал.
Ну так изучайте, если хотите стать программистом, а не шарахайтесь.
Это 10-кратное обращение к пользовательской процедуре Question, описанной в начале программы. Процедура имеет три параметра: c, d и i. Её задача: задать вопрос номер i о результате перемножения чисел c и d, считать ответ, сравнить с произведением c*d и выдать заключение - правильно или неправильно. В случае правильного ответа увеличить значение параметра b на единицу.
Естественно, при каждом обращении к процедуре параметры подставляются свои.

Теперь по Вашей программе.
Конечно, главное сделано: поставлена правильная логическая связь в вариантах набранных баллов при определении оценки (or вместо неправильного and) и убраны метки. Что бы еще желательно сделать?
1. Убрать GraphABC. Не используете - ну и незачем его цеплять.
2. Убрать строку описания меток.
3. Поскольку используются ТОЛЬКО целые положительные числа, то и формат переменных a, b нужно выбирать соответствующий: Integer или Word, формат Real здесь неуместен.
4. Каждый блок "Вопрос-ответ" у Вас заключен в операторные скобки begin...end. Их можно убрать - они в данном случае абсолютно не нужны.
5. Shrek уже обращал Ваше внимание на грамотность текстовых ремарок, однако Вы не исправили. Напрасно. Итак, нужно не "првильно", а "правильно", и не "нажьмите", а "нажмите".
Vladimir_S вне форума   Ответить с цитированием
Старый 07.01.2011, 19:06   #9 (permalink)
AlexZir
support
 
Аватар для AlexZir
 
Регистрация: 19.08.2007
Адрес: Зея
Сообщений: 15,794
Записей в дневнике: 71
Сказал(а) спасибо: 166
Поблагодарили 203 раз(а) в 86 сообщениях
Репутация: 75760
По умолчанию

А зачем такие сложности? Все можно сделать и без подпрограмм и гораздо меньшими усилиями и меньшими затратами памяти.
Код:
var i, a, b, otv, rez:integer;
begin
randomize;
rez:=0;
for i:=1 to 10 do begin
a:=random(10)+1;
b:=random(10)+1;
writeln(a,'*',b,'=?');
readln(otv);
if a*b=otv then begin inc(rez); writeln('Good'); end else writeln('Not good');
end;
writeln('Ocenka ',(rez+1) div 2);
readln
end.
Листинг, правда, не для вашей версии ЯП, но, думаю, вполне будет работать. Обращаю внимание, что числа для проверки будут каждый раз генерироваться новые и в конце выдается оценка
__________________
Убить всех человеков!
AlexZir вне форума   Ответить с цитированием
Старый 07.01.2011, 19:21   #10 (permalink)
Vladimir_S
Специалист
 
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
По умолчанию

Ну я вообще-то старался авторский "дизайн" сохранить, просто малость код оптимизировать. Кроме того, предложенный вариант не "отсекает" минимум баллов для получения тройки, т.е. возможны оценки 0 и 1, что не есть правильно. А вообще - конечно, если с самого начала решать, то что-то в этом роде и получится.
Vladimir_S вне форума   Ответить с цитированием
Ads

Яндекс

Member
 
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
Ответ

Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Выкл.
HTML код Выкл.
Trackbacks are Вкл.
Pingbacks are Вкл.
Refbacks are Выкл.




Часовой пояс GMT +4, время: 01:02.

Powered by vBulletin® Version 6.2.5.
Copyright ©2000 - 2014, Jelsoft Enterprises Ltd.