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

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

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

> Нахождение среднего из трех чисел, хочу узнать - можно ли сделать проще
Элис
сообщение 8.10.2005 0:51
Сообщение #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);

Вроде работает правильно, при любых комбинациях чисел. Но у меня сомнения собственно по алгоритму - может быть можно сделать как-то проще, короче, красивее, может у меня запутанный и непонятный способ, а есть гораздо более просто, но я его не вижу...
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов(1 - 7)
kent
сообщение 8.10.2005 8:07
Сообщение #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 
 К началу страницы 
+ Ответить 
Fang
сообщение 8.10.2005 8:16
Сообщение #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 
 К началу страницы 
+ Ответить 
klem4
сообщение 8.10.2005 8:23
Сообщение #4


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

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

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


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

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

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


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


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


Новичок
*

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

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


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

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


Точно! Спасибо!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 8.10.2005 14:02
Сообщение #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.
 К началу страницы 
+ Ответить 
APAL
сообщение 8.10.2005 22:15
Сообщение #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

 



- Текстовая версия 21.07.2025 6:50
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"