Задача 18 Урок 9

Задача 17 Урок 9

Была программа:

// Вариант 1:
var a: integer;
begin
  writeln('Введите а:');
  readln(a);
  if (a > 5) then
     writeln('a')
  else
     writeln(5);
 
  readln();
end.

Ее переписали так:
// Вариант 2:

var a: integer;
begin
  writeln('Введите а:');
  readln(a);
  if (a > 5) then
     writeln('a')
  else if (a < 5)
     writeln(5);
 
  readln();
end.

Вопрос: изменилось ли что-то в поведении программы, если да, то почему? Объясните письменно, можно прокомментировать код, если изменения в логике есть.

Ответ:
в первом случае если а больше 5 идет вывод строки 'a',
а если меньше то литерала 5
во втором случае если первое условие дает false, то в ветке else
дается второе условие
Второе условие имеет смысл только в случае если a=5 , при таком значении
в первом случае вывод будет 'a'(т.к. условие даст false), а во втором ничего не выведет,
т.к. оба условия ложны.
ПС:второй вариант кода из задания не работает если в конце 7 строки нет then.
UPD:
Неточность здесь :

в первом случае если а больше 5 идет вывод строки 'a',
а если меньше то литерала 5

не нашел.
Могу только добавить что не "если", а "иначе если".
Разница будет если вводить 5, в первом случае получим ту же 5ку, во втором не получим ничего.

vedro-compota's picture

в первом случае если а больше 5 идет вывод строки 'a',
а если меньше то литерала 5

-- тут не все точно

2) При каких значения входных данных поведение программ отличается?

_____________
матфак вгу и остальная классика =)