Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 07.10.2012, 14:13   #1
Iri4ik
 
Регистрация: 07.10.2012
Сообщений: 5
По умолчанию Delphi. Логический тип данных.

Переменным a, b, c целого типа предоставлено определенных значений. Поменять значения переменных местами так, чтобы значение
переменных a, b, c были упорядочены по возрастанию.
Iri4ik вне форума Ответить с цитированием
Старый 07.10.2012, 15:05   #2
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,289
По умолчанию

Код:
var
a, b, c, tmp : integer;
...
if (a > b) then
begin
    tmp := a;
    a := b;
    b := tmp;
end;
if (b > c) then
begin
    tmp := b;
    b := c;
    c:= tmp;
end;
if (a > b) then
begin
    tmp := a;
    a := b;
    b := tmp;
end;
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA на форуме Ответить с цитированием
Старый 08.10.2012, 10:59   #3
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

BDA, +1

иногда мысли сходятся вплоть до имён переменных...
мой старый пост с аналогичным кодом
Serge_Bliznykov вне форума Ответить с цитированием
Старый 08.10.2012, 13:30   #4
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,289
По умолчанию

Serge_Bliznykov,
Такой способ мне попался в прошлом году, как домашнее задание, когда нужно было ассемблерный код переписать на си. Вот он в голову и запал.
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA на форуме Ответить с цитированием
Старый 08.10.2012, 13:43   #5
veniside
Старожил
 
Регистрация: 03.01.2011
Сообщений: 2,508
По умолчанию

в 1/6 случаев этот код делает 1 лишнюю перестановку )
"Когда приходит положенное время, человек перестаёт играть в пинбол. Только и всего."

Последний раз редактировалось veniside; 08.10.2012 в 13:47.
veniside вне форума Ответить с цитированием
Старый 08.10.2012, 14:21   #6
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,289
По умолчанию

veniside, можете объяснить? Или пример привести?
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA на форуме Ответить с цитированием
Старый 08.10.2012, 17:22   #7
veniside
Старожил
 
Регистрация: 03.01.2011
Сообщений: 2,508
По умолчанию

точнее, 2 лишних перестановки )

например, если числа a=3, b=2 и c=1, то вместо того, чтобы просто переставить а и с, оно переставляет a и b, b и c, a и b.

вот похожий код, который иногда делает на одно сравнение больше, но никогда не делает лишних перестановок.
"Когда приходит положенное время, человек перестаёт играть в пинбол. Только и всего."

Последний раз редактировалось veniside; 08.10.2012 в 17:45. Причина: в жизни всегда есть место для оптимизации
veniside вне форума Ответить с цитированием
Старый 08.10.2012, 18:33   #8
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
вот похожий код, который иногда делает на одно сравнение больше, но никогда не делает лишних перестановок.
код, конечно, красивый.
Однако, я простым и очевидным алгоритм работы программы не назову!
Serge_Bliznykov вне форума Ответить с цитированием
Старый 08.10.2012, 19:11   #9
veniside
Старожил
 
Регистрация: 03.01.2011
Сообщений: 2,508
По умолчанию

да я сам в шоке )
но самое интересное начнётся, я думаю, когда переменных будет 4, 5, 6 и т.д.
Так недолго и новый алгоритм сортировки открыть, главное, взять лист побольше )

"Когда приходит положенное время, человек перестаёт играть в пинбол. Только и всего."
veniside вне форума Ответить с цитированием
Старый 09.10.2012, 08:34   #10
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
да я сам в шоке )


хотя, по сути, подход правильный - инженерный (математический). Вместо того, чтобы решать задачу "в лоб", конечно же, желательно предварительно построить её математическую модель, попытаться её упростить и/или решить в общем виде.
Это всё правильно. Как говорится - "респект и уважуха"!
но, боюсь, что новичок, которому задали решить данную задачу - а) не поймёт решение б) не сможет его внятно объяснить и защитить при сдаче => работа не будет принята.
Хотя, я лично очень рад, что в данной теме появился такой код!
Serge_Bliznykov вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Логический тип данных Qt Mixim Qt и кроссплатформенное программирование С/С++ 7 02.08.2012 09:00
Строковый тип данных(delphi) Говорящая с ветром Помощь студентам 0 17.05.2012 20:31
INSERT INTO таблица () VALUES(логический тип, дата) UNToxa БД в Delphi 1 14.01.2011 23:26
тип поля логический TAK Microsoft Office Access 1 19.05.2010 21:19
Логический тип(Delphi 7) matrix8325 Помощь студентам 1 22.04.2009 00:18