PDA

Просмотр полной версии : Выбор из трех чисел.(без кучи if)



lampa
31.03.2008, 00:11
нужна простои алгоритм, без кучи if
даны три числа a,b,c из них надо выбрать число так что бы оно было посередине!
например a<b<c так метод возвращает b

Serge_Bliznykov
31.03.2008, 01:10
А три IF это уже куча?.. ;-)


if a<b then begin
if b<c then Result := b
else Result := c
end
else
if a<c then Result := a
else Result := c;

lampa
31.03.2008, 01:59
Spasibo no eto ne pravel'no!!
Na samom dele tam namnogo bol'she if

airyashov
31.03.2008, 10:17
вариант без if получается слишком большим арифметическим выражением, если очень надо напишу

lampa
31.03.2008, 12:04
Eto ne pravel'no ecli a=8,b=4,c=1
to result=1;

Serge_Bliznykov
31.03.2008, 16:34
да, Вы правы - моё решение неверно!!!
а если в одном if написать несколько условий через and/or это будет "честным" решением?.. тогда можно в два if вложится... ;-)

lampa
31.03.2008, 16:45
A kak ???
Vi mne pomogete esli odskagete:)

airyashov
31.03.2008, 16:53
безо всяких условий чистая математика
max=(a+b+abs(a-b))/2
min=(a+b-abs(a-b))/2

cped=max(min(a,b),min(a,c),min(b,c))

уж распишите сами, времени нет :)

Medved
31.03.2008, 17:03
Можно так:

Program SearchMiddle;
Type Arr=Array[0..4] Of Integer;
Var A:Arr;

Begin
Writeln('Enter A,B,C:');
Readln(A[1],A[2],A[3]);
I:=1;K:=False;
A[0]:=A[3];A[4]:=A[1];
While Not K Do
Begin
K:=(A[i]<=A[ i +1])And(A[i]>=A[I-1])or(A[i]>=A[ i +1])And(A[i]<=A[I-1]);
Inc(I);
End;
Writeln(A[i-1]);
End.

Лёгкий, не правда ли? И без ИФОВ.

Medved
31.03.2008, 17:09
cped=max(min(a,b),min(a,c),min(b,c))
Заметьте надо сделать макс с тремя параметрами. Но это легко: Max3Parameters:=Max(Max(a,b),Max(B,C));

lampa
31.03.2008, 20:05
Spasibo bol'shoe!!!!!