Форум программистов, компьютерный форум, киберфорум
Pascal (Паскаль)
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.65/429: Рейтинг темы: голосов - 429, средняя оценка - 4.65
3 / 3 / 0
Регистрация: 23.04.2009
Сообщений: 39

Алгоритм сравнения трех чисел

29.04.2009, 22:30. Показов 84829. Ответов 38
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Голову сломал уже. Подскажите оптимальный алгоритм сравнения трех чисел. Необходимо учесть все варианты, в том числе равенство. У меня получается не 10 сравнений, а это много.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
29.04.2009, 22:30
Ответы с готовыми решениями:

Ветвление. Если сумма трех попарно различных действительных чисел x, y, z меньше 1, то наименьшее из этих трех чисел заменить полусуммой двух других
Если сумма трех попарно различных действительных чисел x, y, z меньше 1, то наименьшее из этих трех чисел заменить полусуммой двух других;...

Нужно составить программу для нахождения наибольшего общего делителя трех натуральных чисел используя алгоритм Евклида
Нужно составить программу для нахождения наибольшего общего делителя трех натуральных чисел используя алгоритм евклида.

Написать алгоритм нахождения меньшего из трех чисел
помогите пожалуйста...никак не могу сделать в Turbo Pascale..... Написать алгоритм нахождения меньшего из трех чисел контрольный...

38
 Аватар для Sergei
1513 / 780 / 103
Регистрация: 22.04.2008
Сообщений: 1,610
29.04.2009, 22:37
а исплользовать массив пробовали?
0
3 / 3 / 0
Регистрация: 23.04.2009
Сообщений: 39
29.04.2009, 22:43  [ТС]
все должно быть просто (на операторе if) без массива
0
Почетный модератор
7393 / 2639 / 281
Регистрация: 29.07.2006
Сообщений: 13,696
29.04.2009, 22:51
Есть а, б и с.
Проверяем на равенство а, б и с. Это три сравнения, как максимум. Если какие-нибудь из них равны, то дальше все решается за одну преверку.
Если все неравны, то дальше, если а больше, чем б, и с больше, чем а, то все понятно.
Если а больше б, а с не больше а, то сравниваем еще с с б и тоже все понятно.
Если а не больше б, то абсолютно тоже самое получается, только на месте большего а у нас теперь б.
та же байда для остальных чисел, только буквы разные.
Получается, в самом "удачном" случае 6 проверок.

Это первое, что мне в голову пришло. Думаю, есть и лучше решение.
0
3 / 3 / 0
Регистрация: 23.04.2009
Сообщений: 39
29.04.2009, 23:30  [ТС]
Vourhey,
Проверяем на равенство а, б и с. Это три сравнения, как максимум. Если какие-нибудь из них равны, то дальше все решается за одну проверку.
. Как решается за одну проверку? Нужно ведь знать какая пара равна
0
Почетный модератор
7393 / 2639 / 281
Регистрация: 29.07.2006
Сообщений: 13,696
29.04.2009, 23:46
Это ты и узнаешь на стадии "Проверяем на равенство а, б и с". Мдя...как ни странно...
0
3 / 3 / 0
Регистрация: 23.04.2009
Сообщений: 39
29.04.2009, 23:51  [ТС]
Нет, видимо мне сегодня не понять
Вот мой код
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
program three_numers;
var a,b,c: integer;
begin
writeln ('Введите три целых числа (a b c)');
readln (a,b,c);
if ((a=b) and (a=c) and (b=c)) then
   begin
   if ((a>b) and (a>c))  then
      writeln ('a больше b и c');
   if ((a<b) and (b>c)) then
      writeln ('b больше a и c');
   if ((a<c) and (b<c)) then
      writeln ('c больше a и b');
   end
else
  begin
    if ((a=c) and (a=b)) then
       writeln ('a, b и c равны');
    if ((a=b) and (a>c)) then
       writeln ('a и b равны и больше c');
    if ((a=b) and (a<c)) then
    writeln ('a и b равны и меньше c');
    if ((a=c) and (a>b)) then
    writeln ('a и c равны и больше b');
    if ((a=c) and (a<b)) then
    writeln ('a Ёи c равны и меньше b');
    if ((b=c) and (a<b)) then
    writeln ('b и c равны и меньше a');
    if ((b=c) and (a>b)) then writeln ('b и c равны и меньше a');
  end;
readln;
end.
а вот рецензия: очень уж много операций сравнения, задача решается гораздо компактнее и красивее.
0
Почетный модератор
7393 / 2639 / 281
Регистрация: 29.07.2006
Сообщений: 13,696
29.04.2009, 23:55
Лучший ответ Сообщение было отмечено Памирыч как решение

Решение

Pascal
1
2
3
4
5
6
7
8
9
if ((a=b) and (a=c) and (b=c)) then
   begin
   if ((a>b) and (a>c))  then
      writeln ('a больше b и c');
   if ((a<b) and (b>c)) then
      writeln ('b больше a и c');
   if ((a<c) and (b<c)) then
      writeln ('c больше a и b');
   end
Читаю, твое условие и плачу... Если а равно б. б равно с. и а равно с, то ты еще делаешь какие-то проверки пипец...
Вот по моему скромному мнению, что если а равен и б и с, когда с еще и равен б, то они все равны.
Моя рецензия: лечить.
0
3 / 3 / 0
Регистрация: 23.04.2009
Сообщений: 39
30.04.2009, 00:11  [ТС]
упс, ошибся у меня там
Pascal
1
if ((a<>b) and (a<>c) and (b<>c))  then
0
Почетный модератор
7393 / 2639 / 281
Регистрация: 29.07.2006
Сообщений: 13,696
30.04.2009, 00:31
Тогда реши через булевы операции. Может, количество проверок сократится.
1
3 / 3 / 0
Регистрация: 23.04.2009
Сообщений: 39
30.04.2009, 01:27  [ТС]
Понял, спасибо! Вот что получилось:
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
program three_numers;
uses crt;
var a,b,c: integer;
    x,y,z: boolean;
begin
writeln ('Введите три целых числа (a b c)');
readln (a,b,c);
x:=(a=b);
y:=(a=c);
z:=(b=c);
if ((x=y) and (y=true)) Then WriteLN ('Все числа равны');
 
if ((x=true) and (y=false)) Then
    if a>c Then WriteLN ('a и b равны и больше с')
    else WriteLN ('a и b равны и меньше с');
if ((y=true) and (z=false)) Then
    if a>b Then WriteLN ('a и c равны и больше b')
    else WriteLN ('a и c равны и меньше b');
if ((z=true) and (x=false)) Then
    if a<b Then WriteLN ('b и c равны и больше a')
    else WriteLN ('b и c равны и меньше a');
 
if ((a>b) and (a>c) and (z=false)) Then WriteLN ('a больше, чем b и с');
if ((a<b) and (b>c) and (y=false)) Then WriteLN ('b больше, чем a и с');
if ((a<c) and (b<c) and (x=false)) Then WriteLN ('c больше, чем a и b');
 
ReadLN;
end.
0
Почетный модератор
7393 / 2639 / 281
Регистрация: 29.07.2006
Сообщений: 13,696
30.04.2009, 01:48
У меня вот такая байда получилась:
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
  writeln('Input a,b,c:');
  readln(a,b,c);
  if(a=b)then
    if(b=c)then writeln('a=b=c')
    else if(b>c)then writeln('a,b - max, c - min')
    else writeln('c - max, a,b - min')
  else if(b=c)then
    if(a>c)then writeln('a - max, b,c - min')
    else writeln('c,b - max, a - min')
  else if(a>b)then
    if(c>a)then writeln('C - max, B - min')
    else if(c>b)then writeln('A - max, B - min')
    else writeln('A - max, C - min')
  else
    if(c>b)then writeln('C - max, A - min')
    else if(c>a)then writeln('B - max, A - min')
    else writeln('B - max, C - min');
Вообщем-то, максимум здесь пять if'ов проходит, не больше. И без переменных. Опять же, не ручаюсь, что это самый быстрый вариант, хотя, мне он кажется таковым )
1
3 / 3 / 0
Регистрация: 23.04.2009
Сообщений: 39
30.04.2009, 02:11  [ТС]
Пять If-ов проходит при наихудшем варианте, а всего в коде их 10. И тем не менее спасибо за то что откликнулись и за мысли, а то я уже отчаялся. В диалоге рождается истина. На этом форуме нашел еще код г-на Puporeva на ту же тему только без учета равенства, но идея интересная:
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
uses wincrt;
var a,b,c,mx,mn,mx1,mn1,mx2,mn2:integer;
begin
clrscr;
write('a=');readln(a);
write('b=');readln(b);
write('c=');readln(c);
mx1:=(a+b+abs(a-b)) div 2;{1й макс}
mx2:=(mx1+c+abs(mx1-c)) div 2;{2й макс}
mx:=(mx1+mx2+abs(mx1-mx2)) div 2;{итог}
mn1:=(a+b-abs(a-b)) div 2;{1й мин}
mn2:=(mn1+c-abs(mn1-c)) div 2;{2й мин}
mn:=(mn1+mn2-abs(mn1-mn2)) div 2;{итог}
writeln('max=',mx,'  min=',mn);
readln
end.
0
Почетный модератор
7393 / 2639 / 281
Регистрация: 29.07.2006
Сообщений: 13,696
30.04.2009, 08:14
Погоди. Нам же нужен оптимальный вариант, а не тот, в котором меньше ифов визуально. Или ты задание неправильно дал? Без учета равенства в две строки считается.
0
2923 / 844 / 324
Регистрация: 30.04.2009
Сообщений: 2,633
30.04.2009, 08:31
У меня Вот какой вопрос, для чего тебе это нужно, если именно для того чтобы выводить такие надписи или для чего то конкретно?
0
3 / 3 / 0
Регистрация: 23.04.2009
Сообщений: 39
30.04.2009, 08:58  [ТС]
Vourhey, да, ты прав. Запутался уже совсем. Сказалось то что уже сутки просидел за этим заданием.
mamedovvms, мне это надо потому, что задание такое.

Вот исходный текст задания: "Написать команду определения максимального из 3-х введенных с клавиатуры целых чисел. Предусмотреть все варианты (в т.ч. равенство значений)."
После того как сдал свой первый вариант была такая рецензия: "Очень уж много операций сравнения, задача решается гораздо компактнее и красивее."
0
Почетный модератор
7393 / 2639 / 281
Регистрация: 29.07.2006
Сообщений: 13,696
30.04.2009, 09:18
Блин! Найти максимальное и сравнить все числа Это разные вещи. Максимальное находится, как нефиг делать. Эх ты... :-)

Добавлено через 1 минуту 21 секунду
Считай, что зря потратил наше время
0
3 / 3 / 0
Регистрация: 23.04.2009
Сообщений: 39
30.04.2009, 10:02  [ТС]
Ну что ж, бывает. Виноват, каюсь
0
2923 / 844 / 324
Регистрация: 30.04.2009
Сообщений: 2,633
30.04.2009, 10:24
ну так что ты нашел ответ на свой вопрос или так и не сделал?
0
Почетный модератор
 Аватар для Puporev
64315 / 47611 / 32743
Регистрация: 18.05.2008
Сообщений: 115,167
30.04.2009, 10:31
Написать команду определения максимального из 3-х введенных с клавиатуры целых чисел. Предусмотреть все варианты (в т.ч. равенство значений)."
Вот нутром чуял, что именно такое задание. До чего вы господа любите исковеркать начальное условие, а потом пудрить мозги себе и людям.
Pascal
1
2
3
mx:=a;
if b>mx then mx:=b;
if c>mx then mx:=c;
2
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
30.04.2009, 10:31
Помогаю со студенческими работами здесь

Составить алгоритм нахождения суммы большего и меньшего из трёх чисел
Составить алгоритм нахождения суммы большего и меньшего из трёх чисел

Построить алгоритм нахождения большего из двух чисел. Найти большее из трех
Построить алгоритм нахождения большего из двух чисел; оформить его как вспомогательный и использовать для нахождения большего из трех...

Найти наибольший общий делитель трех заданных натуральных чисел, используя алгоритм Евклида
№107Найти наибольший общий делитель трех заданных натуральных чисел, используя алгоритм Евклида и учитывая, что НОД(а, Ь, с) = НОД(НОД(а,...

Если сумма трех попарно различных действительных чисел X Y Z меньше единицы, то наименьшее из этих трех чисел заменить полусуммой двух других
Если сумма трех попарно различных действительных чисел X Y Z меньше единицы, то наименьшее из этих трех чисел заменить полусуммой двух...

Сосчитайте, сколько шестизначных чисел имеют одинаковые суммы трех первых и трех последних цифр
Нужны программы с 3-мя разными циклами: while, for и repeat. И желательно с объяснением.):declare: Добавлено через 3 минуты Знаю,...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Модель ЗдрввоСохранения 7: больше работников, больше ресурсов.
anaschu 08.04.2026
работников и заданий может быть сколько угодно, но настроено всё так, что используется пока что только 20%
Дальние перспективы сервера - слоя сети с космологическим дизайном интефейса карты и логики.
Hrethgir 07.04.2026
Дальнейшее ближайшее планирование вывело к размышлениям над дальними перспективами. И вот тут может быть даже будут нужны оценки специалистов, так как в дальних перспективах всё может очень сильно. . .
Горе от ума
kumehtar 07.04.2026
Эта мне ментальная установка, что вот прямо сейчас, мол, мне для полного счастья не хватает (нужное вписать), и когда я этого достигну - тогда и полный кайф. Одна из самых сильных ловушек на пути. . . .
Использование значений реквизитов справочника в документе, с определенными условиями и правами
Maks 07.04.2026
1. Контроль срока действия договора Алгоритм из решения ниже реализован на примере нетипового документа "ЗаявкаНаРаботу", разработанного в конфигурации КА2. Задача: уведомлять пользователя, если. . .
Доступность команды формы по условию
Maks 07.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: сделать доступной кнопку (команда формы "ЗавершитьСписание") при. . .
Уведомление о неверно выбранном значении справочника
Maks 06.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "НарядПутевка", разработанного в конфигурации КА2. Задача: уведомлять пользователя, если в документе выбран неверный склад. . .
Установка Qt Creator для C и C++: ставим среду, CMake и MinGW без фреймворка Qt
8Observer8 05.04.2026
Среду разработки Qt Creator можно установить без фреймворка Qt. Есть отдельный репозиторий для этой среды: https:/ / github. com/ qt-creator/ qt-creator, где можно скачать установщик, на вкладке Releases:. . .
AkelPad-скрипты, структуры, и немного лирики..
testuser2 05.04.2026
Такая программа, как AkelPad существует уже давно, и также давно существуют скрипты под нее. Тем не менее, прога живет, периодически что-то не спеша дополняется, улучшается. Что меня в первую очередь. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru