Помощь - Поиск - Пользователи - Календарь
Полная версия: Нахождение среднего из трех чисел
Форум «Всё о Паскале» > 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]);
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.