Вопрос по задаче №6 из главы 9

Задача №6.
Найти максимум из трех чисел
Это вопрос по видео ролику на 10 минуте
Оригинал:

var a, b, c : integer;
begin
   a := 5;
   b := 70;
   c := 10;

   if (a > b)then
      if (a > c) then
         writeln(a)
      else
         writeln(c)
   else
      if (b > c) then
         writeln(b)
      else
         writeln(c);
   readln();
end.       

Что если я задам так (мой вариант)

var a, b, c : integer;
begin
   a := 5;
   b := 70;
   c := 10;

   if (a > b)then
      if (a > c) then
         writeln(a)
      else
       writeln(b)// b вместо с
   else
      if (b > c) then
         writeln(b)
      else
         writeln(c);
readln();
end.

Результат тот же. Просьба разъяснить!!!
И еще раз можно пояснить "оригинал" по косточкам ? Почему именно так

Например в том же ролике на 6:57 "если А не больше С о чем это говорит или С больше A или они равны " не понял вообще логику. Там же пишется A больше B и если А больше C

vedro-compota's picture

Что если я задам так

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

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

gani84's picture

var a, b, c : integer;
begin
   a := 5;
   b := 70;
   c := 10;

   if (a > b)then
      if (a > c) then
         writeln(a)
      else
       writeln(b)
   else
         if (b > c) then
           writeln(b)
        else
           writeln(c);
readln();
end.  
vedro-compota's picture

скопируйте это в сам вопрос.

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

vedro-compota's picture

это у вас тот же самый код, не ясно о чем вопрос тогда.

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

vedro-compota's picture

Что если я задам так (мой вариант)

var a, b, c : integer;
begin
   a := 5;
   b := 70;
   c := 10;
 
   if (a > b)then
      if (a > c) then
         writeln(a)
      else
       writeln(b)// b вместо с

-- это неверно, так как уже известно к этой точке кода, что b точно не самое большое, "а" уже заведомо больше, прокомментируем:

var a, b, c : integer;
begin
   a := 5;
   b := 70;
   c := 10;
 
   if (a > b)then // в этой ветке а > b
      if (a > c) then
         writeln(a)
      else // в этой ветке а > b, но a < c => c > a и является максимумом
       writeln(b)// неверно ведь мы в ветке "if (a > b) = true"

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

gani84's picture

 
if (a > b) then
      if (a > c) then //но тут же мы тоже написали что a > c--> true
          writeln(a)
     else
          writeln(c) // тогда почему здесь С
    else
         if (b > c) then
           writeln(b) 
         else
           writeln(c);

Получается здесь истина только для первой ветки a > b
а вторая ветка не учитывается

vedro-compota's picture

  1. форматирование неверно
  2. Получается здесь истина только для первой ветки a > b
    а вторая ветка не учитывается

    не понимаю о чем вы вообще? что значит "истина только для первой ветки"? Почему "вторая не учитывается"?

  3. //но тут же мы тоже написал

    "тоже" в сравнении с чем?

  4. // тогда почему здесь С

    Потому что если а больше b, но меньше с, значит с максимальное. Это понятно?
    Ещё раз с комментариями:

    if (a > b) then  // А больше, осталось сравнить с C
          if (a > c) then // А больше С
              writeln(a) // значит А и есть
          else
              writeln(c) // C > A > B -- значит С максимальное.
    else // B больше или равно A
          if (b > c) then 
               writeln(b)  // B > C но мы в ветке, где B больше или равно A => B максимальное 
          else
               writeln(c); // C > B > A  (С максимальное)

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

gani84's picture

if (a > b) then  // А больше, осталось сравнить с C
      if (a > c) then // А больше С
          writeln(a) // значит А и есть
      else
          writeln(c) // C > A > B -- значит С максимальное.

Получается последний then относиться else writeln(c) поэтому writeln(c) ?

vedro-compota's picture

Получается последний then относиться else writeln(c) поэтому writeln(c)

  • Сформулируйте нормально ваш вопрос и используйте знак вопроса "?".
  • последний then относиться else writeln(c) поэтому writeln(c)

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

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

vedro-compota's picture

Получается последний then относиться else writeln(c) поэтому writeln(c) ?

Да, но правильно говорить что "else относится к такому-то if-then блоку" ,а не наоборот. Ещё видео-пояснение: https://youtu.be/myXLrWW8XdQ

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

vedro-compota's picture

Получается последний then относиться else writeln(c) поэтому writeln(c) ?

См. по этому поводу пример 7 в уроке 9

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

vedro-compota's picture

Например в том же ролике на 6:57 "если А не больше С о чем это говорит или С больше A или они равны " не понял вообще логику. Там же пишется A больше B и если А больше C

речь о ветке then -- т.е. когда истино a > b, тогда действительно:

А не больше С...[то] или С больше A или они равны

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