pascal Как НЕ НАДО форматировать код. Разбор ошибочных ситуаций с пояснениями

[О том как надо читайте тут]

Рассмотрим ошибочные примеры, поясним почему они неправильны и приведем правильные варианты.

Пример №1

Исходный код (см. оригинал):

begin
  readln(b); 
    if(a>b)then
  writeln(12);
    readln();

Разберем недочеты и исправим по шагам:

  • Строка 2 - все правильно, главные операторные скобки порождают основной блок программы, всё в его теле должно быть сдвинуто вправо.
  • Строка 3 - if отформатирован неправильно, он находится в том же блоке что и readln, а именно в основном теле программы, а потому должен быть на том же уровне, что и предыдущее действие (в данном случае readln) ,исправляем эту проблему в 3 строке и получаем:
    begin
      readln(b); 
      if(a>b)then
      writeln(12);
        readln();
  • Строка 4 -- тоже неправильно, на деле if как раз порождает новый вложенный блок для ветки then, в нашем случае это значит, что помимо отступа в теле программы мы должны прибавить ещё один такой же отступ, так чтобы в итоге он стал двойным (так как у действия в 4-ой строке глубина вложенности = 2, оно не только вложено как и все в тело программы, которое ограничено главными операторными скобками, но ещё и вложено в ветку then, $1 + 1 = 2$ -- отсюда и двойная вложенность), исправляем проблему:
    begin
      readln(b); 
      if(a>b)then
        writeln(12);
        readln();
  • Строка 5 -- как мы помним из урока по if, в случае если ветка оператора ветвления не ограничена операторными скобками, к этой ветке относится только одно действие (в данном случае, то что в 4ой строке), а то что дальше - не относится.
    А если не относится - значит мы вышли из блока двойной вложенности и вложенность снова стала $n-1$, то есть на 1 меньше в сравнении с той, чтобы была для ветки оператора ветвления if.
    В нашем случае $2 - 1 = 1$, а значит readln просто нужно отформатировать на уровне тела программы, т.е. с одинарным отступом, исправляем:
    begin
      readln(b); 
      if(a>b)then
        writeln(12);
      readln();