Урок 9 задача 7

Урок 9 задача 7

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

program Project1;
var a, b, c, d: integer;
begin
  writeln('Введите a, b, c, d');
  readln(a, b, c, d);
  if (a > b) and (a > c) and (a > d) then
   writeln('Первое число самое большое')
  else  if (b > a) and (b > c) and (b > d) then
    writeln('Второе число самое большое')
  else  if (c > a) and (c > b) and (c > d) then
    writeln('Третье число самое большое')
  else  if (d > a) and (d > b) and (d > c) then
    writeln('Четвертое число самое большое')

  readln();
end.           

.

vedro-compota's picture

1) что будет если все 4ре переменные равны?
Максимум все равно должен быть найден

Проверить на наборах значениях:

8 8 7 1
8 8 8 8
8 8 8 3

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

writeln('Введите a, b, c, d');
  readln(a, b, c, d);
  if (a > b) and (a > c) and (a > d) then
   writeln('Первое число самое большое')
  else  if (b > a) and (b > c) and (b > d) then
    writeln('Второе число самое большое')
  else  if (c > a) and (c > b) and (c > d) then
    writeln('Третье число самое большое')
  else  if (d > a) and (d > b) and (d > c) then
    writeln('Четвертое число самое большое')
  else if (a = b) and (a > c) and (a > d) then
    writeln('Первое и второе число равны')
    else if (a = b) and (a = c) and (a = d) then
    writeln('Первое ,второе, третье и четвертое число равны')
    else if (a = b) and (a = c) and (a > d) then
    writeln('Первое, второе и третье число равны')
  readln();
end.     
vedro-compota's picture


else if (a = b) and (a > c) and (a > d) then
    writeln('Первое и второе число равны')
    else if (a = b) and (a = c) and (a = d) then
    writeln('Первое ,второе, третье и четвертое число равны')
    else if (a = b) and (a = c) and (a > d) then
    writeln('Первое, второе и третье число равны')

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

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

vedro-compota's picture

Добавить еще один вариант решения с вложенными блоками

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

program Project1;
var a, b, c, d: integer;
begin
  writeln('Введите a, b, c, d');
  readln(a, b, c, d);
  if (a > b) and (a > c) and (a > d) then
   writeln('Первое число самое большое')
   else
    writeln('Второе число самое большое')
     else  if (c > a) and (c > b) and (c > d) then
      writeln('Третье число самое большое')
       else
         writeln('Четвертое число самое большое')
          else if (a = b) and (a > c) and (a > d) then
          writeln('Первое и второе число равны')
          else if (a = b) and (a = c) and (a = d) then
          writeln('Первое ,второе, третье и четвертое число равны')
          else if (a = b) and (a = c) and (a > d) then
          writeln('Первое, второе и третье число равны')
  readln();
end.
                   
vedro-compota's picture

1) это код вообще не работает. Перед тем как выкладывать, важно всегда проверить запускается ли он

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

vedro-compota's picture

2) Решить необходимо через вложенные блоки по аналогии с поиском максимума из трех:

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

см. разбор для трех: https://www.youtube.com/watch?v=3Pno1cJ6...

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

program Project1;
var a, b, c, d: integer;
begin

 writeln('Введите a, b, c, d');
  readln(a, b, c, d);
  writeln('Максимальное число:');
    if (a > b) then
        if (a > c) then
            if (a > d) then
                writeln(a)
    else
      writeln(b)
      else
       writeln(c)
        else
        writeln(d);
 readln()
end.       
vedro-compota's picture

пока отложим, вернемся после

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

Program LessonPascal;
var a, b, c, d, max:integer;
begin
 writeln('Введите число А:');
 readln(a);
 writeln('Введите число B: ');
 readln(b);
 writeln('Введите число C: ');
 readln(c);
 writeln('Введите число D: ');
 readln(d);
 if (a > b) then
   max := a
 else
   max := b;
 if (max > c) then
    begin
      if (max > d) then
        writeln ('Самое больше число: ', max)
      else
        writeln ('Самое большое число: ', d);
     end
 else
     max := c;
 if (max > d) then
   writeln ('Самое большое число: ', max)
 else
   writeln ('Самое большое число: ', d);

 readln();
end.                            

program Project1;
var a, b, c, d: integer;
begin
  writeln('введите число a');
  readln(a);
  writeln('введите число b');
  readln(b);
  writeln('введите число c');
  readln(c);
  writeln('введите число d');
  readln(d);

  write('Макс. число:');

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

  readln();
end.
vedro-compota's picture

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

-- нельзя принимать решение, не сравнивая с d.
Остальные ветки проверить по такому же принципу

+ выписать названия переменных на бумажки, сортировать их разным способом и проверять логику

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

program Project1;
var a, b, c, d: integer;
begin
  writeln('введите число a');
  readln(a);
  writeln('введите число b');
  readln(b);
  writeln('введите число c');
  readln(c);
  writeln('введите число d');
  readln(d);

  write('Макс. число:');

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

   if (c > b) then
     writeln(c)
   else
     writeln(b);

  readln();
end.  
vedro-compota's picture

все операторы if должны быть в полной форме
начало правильное (а форматирование нет):

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

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

program Project1;
var a, b, c, d: integer;
begin
  writeln('введите число a');
  readln(a);
  writeln('введите число b');
  readln(b);
  writeln('введите число c');
  readln(c);
  writeln('введите число d');
  readln(d);

  write('Макс. число:');

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

  readln();
end. 
vedro-compota's picture

подсказка:

begin
  if (a > b) then
    if (a > c) then
      if (a > d) then
        writeln(a)
      else
        writeln(d); //------ до сюда правильно
    else // блок когда а большае b, но не больше c
      // какой-то код...
  else // а НЕ больше b
   // какой-то код...
end.  

дописать этот вариант

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

program Project1;
var a, b, c, d: integer;
begin
  writeln('введите число a');
  readln(a);
  writeln('введите число b');
  readln(b);
  writeln('введите число c');
  readln(c);
  writeln('введите число d');
  readln(d);

  write('Макс. число:');

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

        writeln(c)
  else if (a < b) then

      writeln(b);

  readln();
end.
          
vedro-compota's picture

if (a > b) then
    if (a > c) then
      if (a > d) then
        writeln(a)
      else
        writeln(d)
    else if (a < c) then // тут итак известно, что а не больше с, в этой секции можно сразу сравнивать с d

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

program Project1;

var a, b, c, d: integer;
begin
  writeln('введите число a');
  readln(a);
  writeln('введите число b');
  readln(b);
  writeln('введите число c');
  readln(c);
  writeln('введите число d');
  readln(d);

  write('Макс. число:');

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

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

  else if (b > c) then
    writeln(b);

  readln();
end.   
vedro-compota's picture

 if (a > b) then
    if (a > c) then
      if (a > d) then
        writeln(a)
      else
        writeln(d)
 
    else if (c > d) then
      writeln(c)
-- не хватает одной проверки 2) в ветке else не рассмотрены все возможные варианты

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

var a, b, c, d: integer;
begin
  writeln('введите число a');
  readln(a);
  writeln('введите число b');
  readln(b);
  writeln('введите число c');
  readln(c);
  writeln('введите число d');
  readln(d);

  write('Макс. число:');

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

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

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

  readln();
end.
vedro-compota's picture

пробуем еще раз

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

vedro-compota's picture

Решить задачу 17 урока 9 http://fkn.ktu10.com/?q=node/8539 эту пока на паузу

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