Помощь - Поиск - Пользователи - Календарь
Полная версия: Нахождение среднего из трех чисел
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
Элис
Собственно - простейшая задача: есть три целых числа и надо найти среднее из них, то есть то, которое больше одного числа и меньше другого. все числа считаем разными.
Мне это дело пока с трудом дается, ну алгоритмы всякие и вот какой у меня родился код:

if (x > y) or (x > z) then
if(x < y) or (x < z) then
writeln(x)
else
if (y > z) then
writeln(y)
else
writeln(z)
else
if (y > z) then
writeln(z)
else
writeln(y);

Вроде работает правильно, при любых комбинациях чисел. Но у меня сомнения собственно по алгоритму - может быть можно сделать как-то проще, короче, красивее, может у меня запутанный и непонятный способ, а есть гораздо более просто, но я его не вижу...
kent
если число целое, можно вот так:

uses Crt;

var x,i : Integer;
    min,max,average : Integer;
begin
     Clrscr;
     min := Maxint;
     max := -Maxint;
     WriteLn('Input number:');
     for i := 1 to 3 do begin
        Write('number #',i,':');
        ReadLn(x);
        if (x < min) then begin
          if (min <> Maxint) then
            average := min;
          min := x;
        end;
        if (x > max) then begin
          if (max <> - Maxint) then
            average := max;
          max := x;
        end;
        if ((average = max) or (average = min)) and
           (x < max) and (x > min) then
          average := x;
     end;
     WriteLn('Srednee: ',average,';');
     ReadKey;
end.

Fang
У меня вот так получилось:
Код

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


Вроде как проще, да и кода поменьше.
klem4
Fang, а ты уверен что твоя программа правильно работает angry.gif ?

попробуй например
a=1
b=0
c=-1
?
klem4
Вот так будет привильно :

Код
uses crt;
var
  a,b,c : integer;

Begin
  clrscr;

  readln(a);
  readln(b);
  readln(c);

  writeln;

  if ((a > b) and (a < c)) or ((a > c) and (a < b))  then
   writeln(a)
  else
   if ((b > a) and (b < c)) or ((b > c) and (b < a)) then
    writeln(b)
   else
     writeln(c);

  readln;

end.
Fang
Цитата(klem4 @ 8.10.2005 9:23)
Fang,  а ты уверен что твоя программа правильно работает  angry.gif ?

попробуй например
a=1
b=0
c=-1
?


Точно! Спасибо!
volvo
Как вариант:
function min(a, b: integer): integer;
begin
  min := a;
  if a > b then min := b;
end;
function max(a, b: integer): integer;
begin
  max := a;
  if a < b then max := b;
end;

var
  a, b, c: integer;

begin
  ReadLn(a, b, c);
  writeln( 'average = ',
    (a + b + c) - min(a, min(b, c)) - max(a, max(b, c)) );
end.
APAL
Еще вариант - с массивом.
For i:=1 to 2 do
 For j:=i+1 to 3 do
   If m[j]>m[i] then
   Begin
     tmp:=m[i];
     m[i]:=m[j];
     m[j]:=tmp;
   End;
Writeln(m[2]);
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.