Выбор из трех чисел.(без кучи if)
нужна простои алгоритм, без кучи if
даны три числа a,b,c из них надо выбрать число так что бы оно было посередине!
например a<b<c так метод возвращает b
даны три числа a,b,c из них надо выбрать число так что бы оно было посередине!
например a<b<c так метод возвращает b
-
- Сообщения: 375
- Зарегистрирован: 31 авг 2007, 03:06
А три 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;
Spasibo no eto ne pravel'no!!
Na samom dele tam namnogo bol'she if
Na samom dele tam namnogo bol'she if
матан учить надо
число=[(a+b+abs(a-b))/2+c-abs((a+b+abs(a-b))/2-c)]/2
число=[(a+b+abs(a-b))/2+c-abs((a+b+abs(a-b))/2-c)]/2
вариант без if получается слишком большим арифметическим выражением, если очень надо напишу
Eto ne pravel'no ecli a=8,b=4,c=1
to result=1;
to result=1;
-
- Сообщения: 375
- Зарегистрирован: 31 авг 2007, 03:06
да, Вы правы - моё решение неверно!!!
а если в одном if написать несколько условий через and/or это будет "честным" решением?.. тогда можно в два if вложится... ;-)
а если в одном if написать несколько условий через and/or это будет "честным" решением?.. тогда можно в два if вложится... ;-)
A kak ???
Vi mne pomogete esli odskagete
Vi mne pomogete esli odskagete

безо всяких условий чистая математика
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))
уж распишите сами, времени нет
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))
уж распишите сами, времени нет

Можно так:
[syntax='Pascal']
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<=A[ i +1])And(A>=A[I-1])or(A>=A[ i +1])And(A<=A[I-1]);
Inc(I);
End;
Writeln(A[i-1]);
End.
[/syntax]
Лёгкий, не правда ли? И без ИФОВ.
[syntax='Pascal']
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<=A[ i +1])And(A>=A[I-1])or(A>=A[ i +1])And(A<=A[I-1]);
Inc(I);
End;
Writeln(A[i-1]);
End.
[/syntax]
Лёгкий, не правда ли? И без ИФОВ.
Ваши руки совершили идиотскую ошибку и будут оторваны!
[OK]
[OK]