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

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

Пользователь вводит четыре числа, найдите из них максимальное -- решите через вложенные блоки if в полной форме (без использования логических операций).
Примечание: решение с помощью AND более удобно на практике, но для тренировки понимания тут мы решаем через вложенные блоки.

// почему-то программа не всегда работает правильно
// например, с такими числами не работает
var a, b, c, d: integer;
begin
  //writeln ('Введите четыре числа: '); //пояснение для пользователя
  //readln (a, b, c, d);  // считывание чисел, введенных пользователем
  a:= 8;
  b:= 8;
  c:= 9;
  d:= 890;
  if (a > b) then
  begin                 // ..b........a..     а>b, где d и c - не знаем
    if (a > c) then
    begin               // ..(b,с)....a..     a>b, a>с, где d - не знаем
      if (a > d) then   // ..(b,с,d)..a..     a>b, a>с, a>d
        write (a)       //  выводим на экран а
      else  begin         // ..b.....a..c..    здесь уже знаем, что a>b, c>=a, где d - не знаем
        if (d > c) then   // ..b..a..c...d.     a>b, c>=a, d>c
          write (d)       //  выводим на экран d
        else             // ..b..a...d..c.     a>b, c>=a, c>=d
          write (c);      //  выводим на экран c
      end
    end;
  end
  else begin             // ..a........b..    здесь уже знаем, что b>=a, где d и c - не знаем
    if (b > c) then
    begin                // ..(a,c)....b..    b>=a, b>c, где d - не знаем
      if (b > d) then    // ..(a,c,d)..b..    b>=a, b>c, b>d
        write (b)        //  выводим на экран b
      else begin           // ..a.....b..c..    здесь уже знаем, что b>=a, c>=b, где d - не знаем
        if (d > c) then    // ..a..b..c..d..    b>=a, c>=b, d>c
          write (d)        //  выводим на экран d
      else               // ..a...b..d..c.    b>=a, c>=b, c>=d
        write (c);       // выводим на экран c
      end;
    end;
  end;
  writeln (' - максимальное число');
  readln ();
end.  
vedro-compota's picture

  1. после 3-его сравнения в ветке ложности, сразу можно выводить ответ как и в ветке истинности на том же уровне вложенности условного оператора
  2. все операторы должны быть в полной форме, так например на первом уровне вложенности должны присутствовать else

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

var a, b, c, d: integer;
begin
  writeln ('Введите четыре числа: '); //пояснение для пользователя
  readln (a, b, c, d);  // считывание чисел, введенных пользователем
  if (a > b) then   //  b...a
  begin
    if (a > c) then  // b.c..a
    begin
      if (a > d) then   // b.c.d..a
        write (a)
      else              // b.c.a..d
        write (d)
    end else begin      // b.a..c
      if (c > d) then   // b.a.d..c
        write (c)
      else              // b.a.c..d
        write (d)
    end
  end else begin        // a...b
    if (b > c) then     // a.c..b
    begin
      if (b > d) then   // a.c.d..b
        write (b)
      else              // a.c.b..d
        write (d)
    end else begin      // a.b..c
      if (c > d) then   // a.b.d..c
        write (c)
      else              // a.b.c..d
        write (d)
    end;
  end;
  writeln (' - максимальное число');
  readln ();
end.
vedro-compota's picture

засчитано

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