IPB
ЛогинПароль:

> Прочтите прежде чем задавать вопрос!

1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code], либо быть опубликованы на нашем PasteBin в режиме вечного хранения.
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!

 
 Ответить  Открыть новую тему 
> Нахождение среднего из трех чисел, хочу узнать - можно ли сделать проще
сообщение
Сообщение #1


Гость






Собственно - простейшая задача: есть три целых числа и надо найти среднее из них, то есть то, которое больше одного числа и меньше другого. все числа считаем разными.
Мне это дело пока с трудом дается, ну алгоритмы всякие и вот какой у меня родился код:

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);

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


Пионер
**

Группа: Пользователи
Сообщений: 50
Пол: Мужской
Реальное имя: Андрей

Репутация: -  1  +


если число целое, можно вот так:

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.

 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #3


Новичок
*

Группа: Пользователи
Сообщений: 48
Пол: Мужской
Реальное имя: Fang

Репутация: -  2  +


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

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


Вроде как проще, да и кода поменьше.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #4


Perl. Just code it!
******

Группа: Пользователи
Сообщений: 4 100
Пол: Мужской
Реальное имя: Андрей

Репутация: -  44  +


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

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

Сообщение отредактировано: klem4 -


--------------------
perl -e 'print for (map{chr(hex)}("4861707079204E6577205965617221"=~/(.{2})/g)), "\n";'
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #5


Perl. Just code it!
******

Группа: Пользователи
Сообщений: 4 100
Пол: Мужской
Реальное имя: Андрей

Репутация: -  44  +


Вот так будет привильно :

Код
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.


Сообщение отредактировано: klem4 -


--------------------
perl -e 'print for (map{chr(hex)}("4861707079204E6577205965617221"=~/(.{2})/g)), "\n";'
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #6


Новичок
*

Группа: Пользователи
Сообщений: 48
Пол: Мужской
Реальное имя: Fang

Репутация: -  2  +


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

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


Точно! Спасибо!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #7


Гость






Как вариант:
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.
 К началу страницы 
+ Ответить 
сообщение
Сообщение #8


Смотрю...
*****

Группа: Пользователи
Сообщений: 1 055
Пол: Мужской
Реальное имя: Пшеничный Алексей Анатольевич

Репутация: -  6  +


Еще вариант - с массивом.
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]);


--------------------
Если что-то не делает того, что вы запланировали ему делать - это еще не означает, что оно бесполезно.
--------------------
Прежде, чем задать вопрос - Правила :: FAQ :: Поиск
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 





- Текстовая версия 1.09.2025 18:14
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name