Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум «Всё о Паскале» _ Задачи _ Проверка домашней работы первоклассника

Автор: Егор 22.09.2008 20:29

Составить программу "Проверка дом. работы первоклассника". В качестве входных данных программа получает выражение вида "2+3=5" или "7-3=5". В выражения всегда ровно 5 символов, примеры могут могут быть только на сложение или вычитание, аргументы выражений и результат могут состоять только из 1й цифры. необходимо проверить верно решен пример или нет, выдать сообщения о правильности решения, затем спросить будем ли продолжать проверку ("Продолжим? (Y,N)"), и если пользователь ответил утвердительно, предложить ему ввести следующий пример для проверки и т.д. При решении задачи использовать только символьный тип данных(строковый запрещается).

заранее благодарю give_rose.gif ))

Автор: Айра 23.09.2008 0:09

А сам? Мысли\код\вопросы?

Автор: puporev 23.09.2008 0:31

Попробуйте так.

uses crt;
var a,b,c,d,e,ch:char;
begin;
clrscr;
repeat
writeln('Vvedite vyrazenie:');
readln(a,b,c,d,e);
if (b='+')and(ord(a)+ord©-96=ord(e)-48)
or (b='-')and(ord(a)-ord©=ord(e)-48)
then writeln('Verno!')
else writeln('Ne verno!');
writeln;
writeln('Продолжим? (Y/N)');
readln(ch);
if (ch='Y')or(ch='y')then continue
until (ch='N')or(ch='n');
end.


Автор: Lapp 23.09.2008 9:30

puporev, объясни, пожалуйста, каково назначение этой строки:

Цитата(puporev @ 22.09.2008 20:31) *
if (ch='Y')or(ch='y')then continue
- в твоей программе?..

Автор: puporev 23.09.2008 11:31

Цитата(Lapp @ 23.09.2008 5:30) *

puporev, объясни, пожалуйста, каково назначение этой строки:
- в твоей программе?..


ch - переменная символьного типа (Char).
При нажатии на клавишу со значком Y (обычно так сокращают Yes (да)) переменной ch присваивается это значение и если это так, то цикл начинается снова (процедура continue (продолжить)).

Автор: Lapp 23.09.2008 14:00

Цитата(puporev @ 23.09.2008 7:31) *
... если это так, то цикл начинается снова (процедура continue (продолжить)).
Нет, continue означает несколько другое.
Попробуй убрать эту строчку из программы и посмотри, как изменилось выполнение ее.

Автор: Егор 23.09.2008 16:52

ОГРОМНОЕ СПАСИБО!!!!!
Вы ПРограммист высочайшего уровня!
Я не представляю, что бы делал без таких людей как Вы!!! give_rose.gif good.gif

Автор: puporev 23.09.2008 19:53

Цитата(Егор @ 23.09.2008 12:52) *

ОГРОМНОЕ СПАСИБО!!!!!
Вы ПРограммист высочайшего уровня!
Я не представляю, что бы делал без таких людей как Вы!!! give_rose.gif good.gif

Зря ты такое пишешь, программу-то я неправильно написал. Вот переделал:

uses crt;
var a,b,c,d,e:char;
label 1,2; {метки}
begin;
clrscr;
1:
writeln('Vvedite vyrazenie:');
readln(a,b,c,d,e);
if (b='+')and(ord(a)+ord©-96=ord(e)-48)
or (b='-')and(ord(a)-ord©=ord(e)-48)
then writeln('Verno!')
else writeln('Ne verno!');
writeln;
writeln('Продолжить? (Y/N)');
2:
case readkey of
#89:goto 1; {коды клавиш Y/y - продолжить}
#121:goto 1;
#78:exit; {коды клавиш N/n -выход}
#110:exit;
end;
goto 2; {на остальные клавиши не реагирует}
end.


Автор: volvo 23.09.2008 20:02

Угу... Зато теперь - правильно, да? С goto вместо той конструкции repeat/until, которая у тебя была. Все же работало, единственное - была лишняя строка с continue (в твоем цикле она просто не нужна: после нее нет других операторов, цикл и так продолжит выполнение со следующей итерации). Убрал бы ее и все... goto-то зачем?

Автор: puporev 23.09.2008 20:09

Цитата(volvo @ 23.09.2008 16:02) *

Угу... Зато теперь - правильно, да? С goto вместо той конструкции repeat/until, которая у тебя была. Все же работало, единственное - была лишняя строка с continue (в твоем цикле она просто не нужна: после нее нет других операторов, цикл и так продолжит выполнение со следующей итерации). Убрал бы ее и все... goto-то зачем?

В той конструкции команда продолжить выполнялась при нажатии любой клавиши, кроме N, а сейчас только при Y, остальные игнорируются.

Автор: renesko1 23.09.2008 20:34

Просто goto не привеиствуется и препод гостя скажет переделать с циклами, наверное.

Автор: puporev 23.09.2008 20:38

Цитата(renesko1 @ 23.09.2008 16:34) *

Просто goto не привеиствуется и препод гостя скажет переделать с циклами, наверное.

Смотря какой препод. Если старый, наоборот только с goto и примет. Некоторые до сих пор требуют писать Program(name,input,output);

Автор: volvo 23.09.2008 21:32

Цитата
В той конструкции команда продолжить выполнялась при нажатии любой клавиши, кроме N, а сейчас только при Y, остальные игнорируются.
Хочешь, я тебя огорчу? Не только при Y... Есть еще как минимум 2 комбинации клавиш, которые работают не так, как задумывалось. Скажем, так:

вводишь выражение, программа пишет ответ, и нажимаешь... Не Y, и не y... А просто Shift и F6 одновременно... Упс. Я ж не нажал Y, почему программа решила продолжать?

Цитата
Если старый, наоборот только с goto и примет.
Это уже клиника, не надо делать заведомо неправильно... Ты ж на Паскале пишешь, а не на Бейсике, правда?

Автор: Lapp 24.09.2008 9:53

Цитата(puporev @ 23.09.2008 16:38) *
Смотря какой препод. Если старый, наоборот только с goto и примет. Некоторые до сих пор требуют писать Program(name,input,output);
Эти две вещи (goto и форма заголовка) совершенно несравнимы по сути. Стандартный заголовок если и мешает, то непринципиально. А goto тебе может навредить на всю оставшуюся жизнь..
Готов спорить, что ты ошибаешься по поводу старых преподавателей. И вообще, кто как принимает - это не ориентир. Нас тут меньше всего интересует, какие у вас там препы. Но если хочешь научиться программировать - слушай лучших участников Форума.

Попробуй переделать свою прогу без goto. И в будущем старайся избегать его употребления..