Решение задачи №7 из главы 9 -- Поиск максимума из 4 чисел

Задача №7 из главы 9

Пользователь вводит четыре числа, найдите из них максимальное.

var a, b, c, d: integer; // секция объявления переменных
begin  // начало тела программы
    writeln('vvedite cislo A');
    readln(a);
    writeln('vvedite cislo B');
    readln(b);
    writeln('vvedite cislo C');
    readln(c);
    writeln('vvedite cislo D');
    readln(d);

    if (a > b) and (a > c) and (a > d) then //если A  больше В и С и D
    begin
      writeln('Naibolshhee chislo A =  ', a) // То выводим А
    end
    else begin
     if (b > a) and (b > c) and (b > d) then // вложенный оператор if ; если B  больше A и С и D
       writeln('Naibolshhee chislo B =  ', b) // То выводим B
    else
     if (c > a) and (c > b) and (c > d) then // вложенный оператор if ; если С  больше A и B и C
       writeln('Naibolshhee chislo C =  ', c) // То выводим С
    else
       writeln('Naibolshhee chislo D =  ', d); //Иначе выводим D
    end;
    readln(); // удерживаем консоль
end. // конец тела программы  
vedro-compota's picture

исправить форматирование для начала.
обозначте к комментариях где у вас вложенные блоки, а где просто "else c условиями" (else if).

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

gani84's picture

var a, b, c, d: integer; // секция объявления переменных
begin  // начало тела программы
    writeln('vvedite cislo A');
    readln(a);
    writeln('vvedite cislo B');
    readln(b);
    writeln('vvedite cislo C');
    readln(c);
    writeln('vvedite cislo D');
    readln(d);

    if (a > b) and (a > c) and (a > d) then //если A  больше В и С и D
    begin
       writeln('Naibolshhee chislo A =  ', a) // То выводим А
    end
    else begin // Начало тела вложенного оператора if
       if (b > a) and (b > c) and (b > d) then // вложенный оператор if ; если B  больше A и С и D
         writeln('Naibolshhee chislo B =  ', b) // То выводим B
       else if (c > a) and (c > b) and (c > d) // вложенный оператор if ; если С  больше A и B и C
          then
          writeln('Naibolshhee chislo C =  ', c) // То выводим С
       else
          writeln('Naibolshhee chislo D =  ', d); //Иначе выводим D
    end; //Конец тела вложенного оператора if
    readln(); // удерживаем консоль
end. // конец тела программы   
vedro-compota's picture

Форматирование теперь правильное, но код не слишком ясный в смысле восприятия.

Переделайте это решение так, чтобы оно использовало максимум из трёх, причём этим способом, то есть:

  • сначала вы находите максимум из трёх
  • а потом просто сравниваете этот максимум с четвертым

-- и таким образом и находите максимум из четырёх.
При данном подходе "вложенность" возрастёт.

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

gani84's picture

var a, b, c, d: integer; // секция объявления переменных
begin  // начало тела программы
    writeln('vvedite cislo A');
    readln(a);
    writeln('vvedite cislo B');
    readln(b);
    writeln('vvedite cislo C');
    readln(c);
    writeln('vvedite cislo D');
    readln(d);

     if (a > b) and (a > c) then //если A  больше В и С
        writeln('Naibolshhee chislo A =  ', a) // То выводим А
     else begin
     if (b > a) and (b > c) then // вложенный оператор if ; если B  больше A и С
       writeln('Naibolshhee chislo B =  ', b) // То выводим B
     else
     if (c > a) and (c > b) and (c > d) then
       writeln('Naibolshhee chislo C =  ', c) //Иначе выводим C
     else
       writeln('Naibolshhee chislo D =  ', d);
    end;
    readln(); // удерживаем консоль
end.   
vedro-compota's picture

Форматирование неверно. где здесь часть которая ищет максимум из трех? а где ииспользование этого максимума

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

gani84's picture

Если честно я не совсем понимаю как это реализовать

vedro-compota's picture

Приведите пример решения, без использования вложенных блоков, с использованием промежуточно вычисленных максимума из двух и из трех (как это сделано в видео-уроке)

Условие обновлено:

Решите тремя способами:

  • С использованием логической операции and.
  • С вложенными блоками (без and).
  • Без вложенных блоков (без and) -- запомнив максимум из двух в специальной переменной.

первый пункт у вас уже есть. Приведите ещё два решения.

Если не получается сначала можно эти же решения сделать для 3-х и прислать на проверку.

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

gani84's picture

var a, b, c, d: integer; // секция объявления переменных
begin  // начало тела программы
    writeln('vvedite cislo A');
    readln(a);
    writeln('vvedite cislo B');
    readln(b);
    writeln('vvedite cislo C');
    readln(c);
    writeln('vvedite cislo D');
    readln(d);

     if (a > b) and (a > c) then //если A  больше В и С
         writeln('Naibolshhee chislo A =  ', a) // То выводим А
     else begin
          if (b > a) and (b > c) then // вложенный оператор if ; если B  больше A и С
             writeln('Naibolshhee chislo B =  ', b) // То выводим B
     else
          if (c > a) and (c > b) and (c > d) then
             writeln('Naibolshhee chislo C =  ', c) //Иначе выводим C
     else
          writeln('Naibolshhee chislo D =  ', d);
         end;
    readln(); // удерживаем консоль
end.    
vedro-compota's picture

форматирование по-прежнему не верно. Проверьте ещё раз у вас ошибка отступов после первого же else.

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

gani84's picture

var a, b, c, d: integer; // секция объявления переменных
begin  // начало тела программы
    writeln('vvedite cislo A');
    readln(a);
    writeln('vvedite cislo B');
    readln(b);
    writeln('vvedite cislo C');
    readln(c);
    writeln('vvedite cislo D');
    readln(d);

     if (a > b) and (a > c) then //если A  больше В и С
         writeln('Naibolshhee chislo A =  ', a) // То выводим А
     else begin
           if (b > a) and (b > c) then // вложенный оператор if ; если B  больше A и С
               writeln('Naibolshhee chislo B =  ', b) // То выводим B
           else
             if (c > a) and (c > b) and (c > d) then
             writeln('Naibolshhee chislo C =  ', c) //Иначе выводим C
           else
             writeln('Naibolshhee chislo D =  ', d);
     end;
    readln(); // удерживаем консоль
end.
vedro-compota's picture

форматирование теперь верное, а вот решение нет, как минимум:

 if (a > b) and (a > c) then //если A  больше В и С
   

ещё не значит что А является наибольшим из 4-х чисел.

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

gani84's picture

var
  a, b, c, d: integer; // секция объявления переменных
begin  // начало тела программы
  writeln('vvedite cislo A');
  readln(a);
  writeln('vvedite cislo B');
  readln(b);
  writeln('vvedite cislo C');
  readln(c);
  writeln('vvedite cislo D');
  readln(d);

  if (a > b) and (a > c) and (a > d) then //если A  больше В и С
      writeln('Naibolshhee chislo A =  ', a) // То выводим А
  else begin
       if (b > d) and (b > c) then // вложенный оператор if ; если B  больше A и С
               {так как (a > b) and (a > c) and (a > d) в первой ветке , то у нас остается
                b, c и d
                тогда пишем if (b > d) and (b > c) then (просьба ответить правильно или нет)}
             writeln('Naibolshhee chislo B =  ', b) // То выводим B
       else
       if (c > d) then {ну и третье условие т.к мы знаем что (b > d) and (b > c) то у нас остаеться c и d 
             тогда (c > d)}
            writeln('Naibolshhee chislo C =  ', c) //Тогда выводим С
       else
           writeln('Naibolshhee chislo D =  ', d); //Иначе выводим D
  end;
  readln(); // удерживаем консоль
end.          
gani84's picture

var a, b, c, d: integer; // секция объявления переменных
begin  // начало тела программы
    writeln('vvedite cislo A');
    readln(a);
    writeln('vvedite cislo B');
    readln(b);
    writeln('vvedite cislo C');
    readln(c);
    writeln('vvedite cislo D');
    readln(d);

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

    if (a > b) then
       if (a > c) then
          if (a > d) then
            writeln(a)
        else
            writeln(d)

-- это верно, дальше что-то не то, перепроверьте логику. Исправьте.

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

gani84's picture

var a, b, c, d: integer; // секция объявления переменных
begin  // начало тела программы
    writeln('vvedite cislo A');
    readln(a);
    writeln('vvedite cislo B');
    readln(b);
    writeln('vvedite cislo C');
    readln(c);
    writeln('vvedite cislo D');
    readln(d);

    if (a > b) then begin
        if (a > c) then
           if (a > d) then
            writeln(a)
             else
              writeln(b)

    end

    else
      if (b > c) then begin
          if (b > d)then
             writeln(b)
               else
                writeln(c)
      end

    else begin
      if(c > d)then
         writeln(c)
          else writeln(d);
    end;
    readln();      
vedro-compota's picture

неверно уже это:

if (a > b) then begin
        if (a > c) then
           if (a > d) then
            writeln(a)
             else
              writeln(b)

как можно сделать вывод (якобы что это максимум) в else:

             else
              writeln(b)

если вы сравнили к этой строке b только с а, а с другими двумя переменными ещё вообще не сравнивали??

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

gani84's picture

Я не совсем понял. Я прошелся по всем условиям. Проверил a, b ,c и d. Задача определяет цифры правильно.

gani84's picture

var a, b, c, d: integer; // секция объявления переменных
begin  // начало тела программы
    writeln('vvedite cislo A');
    readln(a);
    writeln('vvedite cislo B');
    readln(b);
    writeln('vvedite cislo C');
    readln(c);
    writeln('vvedite cislo D');
    readln(d);

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

         if (a > c) then
           if (a > d) then
            writeln(a)
           else
            writeln(d)
           else
            writeln(c)

-- неверное форматирование в этом блоке, и остальное проверьте

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

gani84's picture

var a, b, c, d: integer; // секция объявления переменных
begin  // начало тела программы
    writeln('vvedite cislo A');
    readln(a);
    writeln('vvedite cislo B');
    readln(b);
    writeln('vvedite cislo C');
    readln(c);
    writeln('vvedite cislo D');
    readln(d);

    if (a > b) then
    begin
      if (a > c) then
          if (a > d) then
             writeln(a)
           else
             writeln(d)
           else
              writeln(c)
    end
    else
     if (b > c)then
     begin
        if(b > d)then
           writeln(b)
        else
          writeln(d)
     end
    else
      begin
      if(c > d)then
          writeln(c)
       else
          writeln(d);
      end;
    readln();
end.
gani84's picture

Как Вы определили что второе условие не работает
Через отладку?
Или так прошелся повбивали разные цифры?

vedro-compota's picture

Как Вы определили что второе условие не работает
Через отладку?
Или так прошелся повбивали разные цифры?

в данном случае просто читал код, это видно, со временем и у вас получится. А пока что вы да - должны отлаживать на разных значениях.

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

gani84's picture

Без вложенных блоков (без and) -- запомнив максимум из двух в специальной переменной.

var a, b, c, d,  max2, max3, max4: integer; // секция объявления переменных
begin  // начало тела программы
    writeln('vvedite cislo A');
    readln(a);
    writeln('vvedite cislo B');
    readln(b);
    writeln('vvedite cislo C');
    readln(c);
    writeln('vvedite cislo D');
    readln(d);

    if (a > b) then
        max2 := a
    else
        max2 :=b;

    if (max2 > c) then
        max3 := max2
    else
       max3 := c;

   if (max3 > d) then
      max4 := max3
   else
      max4 := d;
   writeln('maximum ' ,max4);
readln(); // удерживаем консоль
end.
vedro-compota's picture

последний readln() отформатирован неверно, решение засчитано (правильно).

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

gani84's picture

Без вложенных блоков (без and) -- запомнив максимум из двух в специальной переменной.

var a, b, c, d,  max2, max3, max4: integer; // секция объявления переменных
begin  // начало тела программы
    writeln('vvedite cislo A');
    readln(a);
    writeln('vvedite cislo B');
    readln(b);
    writeln('vvedite cislo C');
    readln(c);
    writeln('vvedite cislo D');
    readln(d);

    if (a > b) then
        max2 := a
    else
        max2 :=b;

    if (max2 > c) then
        max3 := max2
    else
       max3 := c;

   if (max3 > d) then
      max4 := max3
   else
      max4 := d;
   writeln('maximum ' ,max4);
   readln(); // удерживаем консоль
end.
vedro-compota's picture

засчитано.

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