Песни о Паскале | страница 50




>Первый сомножитель A = 7

>Второй сомножитель B = 7

>Произведение A*B = 47

>Ошибка, повтори таблицу умножения!


И так далее. Здесь выделенные курсивом числа 7, 7 и 47 пользователь ввел сам. Разумеется, что задания надо решать многократно, в цикле. Для выхода из цикла нужен какой-то признак, сигнал. Пусть таким сигналом будет ввод нуля в качестве ответа. Тогда блок-схема программы получается такой (рис. 37).



Рис.37 – Блок-схема программы проверки таблицы умножения

Обратите внимание на условие в операторе цикла REPEAT-UNTIL, – оно равно FALSE. Такой цикл будет продолжаться бесконечно, и выйти из него можно лишь процедурой BREAK, как показано на блок-схеме.

Экзаменатор, первый вариант

Вот теперь все готово для написания следующей программы.


>{ P_14_1 – экзаменатор таблицы умножения, первый вариант }

>var A, B, C : integer; { сомножители и произведение }

>      R: Boolean; { результат сравнения }

>      S: string;       { сообщение для вывода на экран }

>begin

>      repeat

>      { ввод сомножителей и произведения }

>      Write(’Первый сомножитель A = ’); Readln(A);

>      Write(’Второй сомножитель B = ’); Readln(B);

>      Write(’Произведение A*B = ’); Readln(C);

>      if C=0 then break; { завершение цикла, если C=0 }

>      { проверяем правильность вычисления }

>      R:= A*B=C; { R=true, если верно }

>      if R

>      then S:= ’Молодец, правильно!’

>      else S:= ’Ошибка, повтори таблицу умножения!’;

>      Writeln(S);

>      until false; { бесконечный цикл }

>end.


Запустите программу и проверьте её работу. В следующий раз мы научим её придумывать сомножители, – так будет честнее. А пока подведем итоги.

Итоги

• Для вычислений в Паскале предусмотрены данные числового типа (INTEGER).

• К данным целого типа могут применяться четыре арифметических операции, а также операция нахождения остатка от деления.

• В результате сравнения численных данных получается булев результат, который может быть применен везде, где проверяется условие.

• Числовые данные вводятся оператором Readln и выводятся операторами Write и Writeln;

• Числовым переменным нельзя присваивать строковые значения и наоборот: строковым переменным нельзя присваивать числовые значения.

А слабо?

А) Найдите ошибки в следующей программе и объясните их.


>var N, M : integer;

>      S : string;

>begin

>      N:= ’10’;

>      S:= N + 5;

>      M:= S – 1;

>      if S=N then;

>end.


Проверьте свои догадки, призвав на помощь компилятор.

Б) Перепишите программу «P_14_1», не прибегая к процедуре Break. В чем, по-вашему, слабость этого второго варианта? Можно ли обойтись в программе «P_14_1» без булевой переменной R и строковой S? Напишите такой вариант программы. Или слабо?