07.01.2011, 15:58 | #1 (permalink) |
Технарёнок
Регистрация: 30.12.2010
Сообщений: 77
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
|
Программа-тест по арифметике
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 помогите пожалуйсто |
07.01.2011, 15:58 | |
Helpmaster
Member
Регистрация: 08.03.2016
Сообщений: 0
|
Потратьте немного времени на прочтение подобных обсуждений Тест. Кем ты был в прошлой жизни? Помогите ответить на тест Тест HDD на Victoria Тест Виктория Интересный тест |
07.01.2011, 16:22 | #2 (permalink) |
Студент БГПУ
Регистрация: 06.02.2010
Сообщений: 420
Записей в дневнике: 3
Сказал(а) спасибо: 1
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 470
|
Мне кажется, что ошибка проста, ведь одна и та же переменная не может принимать несколько значений сразу Думаю and следует заменить на or
И еще, мне кажется, что не стоит так растягивать код условие для проверки ответа и вывода вердикта можно уменьшить и проверьте орфографию Последний раз редактировалось shrek=); 07.01.2011 в 16:31 |
07.01.2011, 16:53 | #3 (permalink) | |
Специалист
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
|
Цитата:
Перечислю остальные: 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. |
|
07.01.2011, 17:17 | #5 (permalink) |
Технарёнок
Регистрация: 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); только я непойму что это такое я это неизучал. |
Ads | |
Member
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
|
07.01.2011, 17:56 | #7 (permalink) |
Технарёнок
Регистрация: 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. все исправил,спасибо за советы и попощь! |
07.01.2011, 18:44 | #8 (permalink) |
Специалист
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
|
Ну так изучайте, если хотите стать программистом, а не шарахайтесь.
Это 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 уже обращал Ваше внимание на грамотность текстовых ремарок, однако Вы не исправили. Напрасно. Итак, нужно не "првильно", а "правильно", и не "нажьмите", а "нажмите". |
07.01.2011, 19:06 | #9 (permalink) |
support
Регистрация: 19.08.2007
Адрес: Зея
Сообщений: 15,797
Записей в дневнике: 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.
__________________
Убить всех человеков! |
07.01.2011, 19:21 | #10 (permalink) |
Специалист
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
|
Ну я вообще-то старался авторский "дизайн" сохранить, просто малость код оптимизировать. Кроме того, предложенный вариант не "отсекает" минимум баллов для получения тройки, т.е. возможны оценки 0 и 1, что не есть правильно. А вообще - конечно, если с самого начала решать, то что-то в этом роде и получится.
|
Ads | |
Member
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
|
|
|