Найти среднее число из трех

Задача

Среди трех чисел найти среднее. Если среди чисел есть равные, вывести сообщение "Ошибка".

Решение

Алгоритм решения задачи: 

Хотя задача кажется простой, ее решение не такое очевидное. Можно, например, проверить каждое число, лежит ли оно между двумя другими. Или найти минимальное из трех, после чего вывести минимальное из оставшихся двух. Ниже выбран первый способ.

  1. Исключаем равенство чисел. Если первое число равно второму или первое равно третьему или второе равно третьему или все три числа равны (первое равно второму и второе равно третьему), то вывести сообщение "Ошибка". Иначе переходим к п. 2.
  2. Проверяем лежит ли первое число между вторым и третьим. Если первое число больше второго, но меньше третьего (т.е. второе минимально), или первое число меньше второго, но больше третьего (т.е. третье минимально), то значит оно среднее. Иначе переходим к п. 3.
  3. Проверяем лежит ли второе число между первым и третьим. Если второе число больше первого, но меньше третьего, или меньше первого, но больше третьего, то оно среднее. Иначе переходим к п. 4.
  4. Среднее число третье, так как ни один другой вариант не подошел. Действительно, числа не равны друг другу, первое и второе числа средними не являются.

Программа на языке Паскаль: 

var
    a1, a2, a3: integer;
 
begin
    write ('Введите три числа: ');
    readln (a1, a2, a3);
 
    if (a1 = a2) or (a1 = a3) or (a2 = a3) or ((a1 = a2) and (a2 = a3)) then
        writeln('Ошибка')
    else
        if ((a1 > a2) and (a1 < a3)) or ((a1 < a2) and (a1 > a3)) then
            writeln(a1)
        else
            if ((a2 > a1) and (a2 < a3)) or ((a2 < a1) and (a2 > a3)) then
                writeln(a2)
            else
                writeln(a3);
 
end.

Пример работы программы:

Введите три числа: 7 4 6
6

Тема

Условные операторы

Уровень

Комбинированные задачи

Комментарии

Var
 a,b,c,s: integer;
Function Max(x,y: integer): integer;
  Begin
  If x>y then Max:=x else Max:=y
  end;
Function Min(x,y: integer): integer;
  Begin
  If x<y then Min:=x else Min:=y
  end;
 
Begin
  Readln(a,b,c);
  S:=(a+b+c)-((Max(Max(a,b),c))+(Min(Min(a,b),c)));
  writeln(s);
end.

program SEREDINA;
uses crt;
var a,b,c,ser: integer;
vyvod: boolean;
begin
clrscr;
vyvod:=true;
write('Введите первое число: ');
readln(a);
write('Введите второе число: ');
readln(b);
write('Введите третье число: ');
readln(c);
if ((b>a)and(a>c)) or ((c>a)and(a>b)) then ser:=a
else
if ((a>b)and(b>c)) or ((c>b)and(b>a)) then ser:=b
else
if ((a>c)and(c>b)) or ((b>c)and(c>a)) then ser:=c;
if (a=b) or (b=c) or (a=c) then vyvod:=false;
if vyvod=true then writeln('Число посередине - ',(ser))
else writeln('Ошибка! Совпадение чисел!');
readln;
end.

Добавить комментарий