a
пойдет этот член, а в b окажется ограничивающий ноль, что приведет к невыполнению входа в
основной цикл и программа перейдет к оператору вывода writeln(last = first), что неверно, так как
значение переменных last и first в данный момент будет не определено и выражение в операторе
вывода может дать любой результат. Это значит, что для избегания подобного исхода нам нужно
выполнить инициализацию переменных last и first заведомо неравными значениями, чтобы полу-
чить гарантированный ответ false при вводе последовательности из одного члена. Это можно сде-
лать так:
first := 1;
last := 0;
Но что будет, если ввести последовательность, состоящую из одного нуля? В нашей про-
грамме это невозможно, так как оператор ввода в начале содержит две переменные, и если мы сразу
введем 0, то программа «зависнет» в ожидании ввода второго числа. Чтобы избежать этого, мы
должны вводить одно число в переменную a, и если оно не равно 0, нужно ввести b. Вместе с этим
необходимо заранее присвоить переменной b число 0, так как она была определена в случае после-
довательности из одного члена, чтобы не осуществился вход в основной цикл:
read(a);
b := 0;
if a <> 0 then read(b);
Эта конструкция заменит оператор read(a, b), который мы описывали в самом начале решения
задачи.
Код:
1.
program LastAndFirst;
2.
3.
var
4.
a, b, first, last: word;
5.
6.
begin
7.
first := 1;
8.
last := 0;
9.
read(a);
10.
b := 0;
11.
if a <> 0 then read(b);
12.
while b <> 0 do begin
13.
last := a mod 10;
14.
first := b;
15.
while first > 9 do begin
16.
first := first div 10
Do'stlaringiz bilan baham: |