Моё меню Общее меню Пользователи Правила форума Все прочитано
Вернуться   uForum.uz > ИКТ и телеком > IT-индустрия > Софт > Программирование > Pascal, Delphi & Builder
Знаете ли Вы, что ...
...для каждой темы существует свой раздел. Изучите структуру форума. Если соответствующего раздела нет, то всегда есть раздел "Разное" :)
<< Предыдущий совет - Случайный совет - Следующий совет >>

Pascal, Delphi & Builder Вопросы программирования касающиеся Pascal и Delphi


Ответить

 
Опции темы Опции просмотра
Старый 19.04.2013 19:51   #71  
Заблокирован(а)
Аватар для Timofeus
Оффлайн
Люмпен-инженерий
Сообщений: 2,866
+ 1,124  2,154/948
– 21  65/46

Uzbekistan
Цитата:
Сообщение от Nadir Zaitov Посмотреть сообщение
Типа вы его специально создали, чтоб постебаться над "a:=a-b"?
Вы о чём?
Ответить 
Старый 20.04.2013 15:26   #72  
Real ID Group uParty Member Ultimate
Аватар для Nadir Zaitov
Оффлайн
Сообщений: 13,210
+ 4,958  9,176/3,940
– 170  137/105

UzbekistanОтправить сообщение для Nadir Zaitov с помощью Skype™
Оффтоп:
Цитата:
Сообщение от Timofeus Посмотреть сообщение
Вы о чём?
О том, что алгоритм крайне медленный. Брутфорс.
__________________
Тот факт, что медуза выжила 650 миллионов лет без мозгов, даёт надежду многим.
Ответить 
Старый 20.04.2013 19:25   #73  
Real ID Group uParty Member VITUS
Аватар для Vitaliy Fioktistov
Оффлайн
FOM Group
руководитель отдела разработки ПО
AKA:Vitus
Сообщений: 3,976
+ 2,659  2,138/1,101
– 123  21/18

UzbekistanОтправить сообщение для Vitaliy Fioktistov с помощью ICQОтправить сообщение для Vitaliy Fioktistov с помощью Skype™LiveJournalМой мирFacebook
Пара красивых и быстрых алгоритмов)

Код:
//алгоритм Евклида через остатки
long Nod(long a, long b)
{
    while (a && b)
        if (a >= b)
           a %= b;
        else
           b %= a;
    return a | b;
}
 
// Алгоритм Евклида через разности
long Nod(long a, long b)
{
    while (a && b)
        if (a >= b)
           a -= b;
        else
           b -= a;
    return a | b;
}
И совсем уж непонятныйкомпактный:
Код:
int Nod( int a, int b )
{
   while( b^=a^=b^=a%=b );
   return a;
}
__________________
Почему в конце денег остается еще так много месяца?

Последний раз редактировалось Vitaliy Fioktistov; 20.04.2013 в 19:28.
Ответить 
Старый 22.04.2013 11:02   #74  
Real ID Group uParty Member Ultimate
Аватар для Nadir Zaitov
Оффлайн
Сообщений: 13,210
+ 4,958  9,176/3,940
– 170  137/105

UzbekistanОтправить сообщение для Nadir Zaitov с помощью Skype™
Цитата:
Сообщение от Vitaliy Fioktistov Посмотреть сообщение
Код:
{
    while (a && b)
        if (a >= b)
           a %= b;
        else
           b %= a;
    return a | b;
}
Я такой же алгоритм нарисовал. Также использовать идею с "и" и "или", только в нотации умножения и сложения. Конечно с использованием логики красивее, согласен.

А непонятный не разобрал.
__________________
Тот факт, что медуза выжила 650 миллионов лет без мозгов, даёт надежду многим.
Ответить 
Старый 22.04.2013 11:58   #75  
Real ID Group Ultimate ex-wild_John
Супермодератор
Аватар для German Stimban
Оффлайн
Центр программистов Bepro
Начальник отдела
Сообщений: 8,039
+ 4,910  6,509/2,845
– 298  135/90

UzbekistanОтправить сообщение для German Stimban с помощью ICQОтправить сообщение для German Stimban с помощью Skype™LiveJournal
Цитата:
Сообщение от Nadir Zaitov Посмотреть сообщение
Я такой же алгоритм нарисовал. Также использовать идею с "и" и "или", только в нотации умножения и сложения. Конечно с использованием логики красивее, согласен.
"Ифы" замедляют работу программы.
Я предпочитаю запускать функцию с заранее гарантированным неравенством a>=b и не париться с проверками каждую итерацию - проще проверить условие перед вводом данных в функцию.
__________________
Герман - это не имя, это особое состояние души (Джим Анджер)
Ответить 
Старый 22.04.2013 12:35   #76  
Real ID Group uParty Member Ultimate
Аватар для Nadir Zaitov
Оффлайн
Сообщений: 13,210
+ 4,958  9,176/3,940
– 170  137/105

UzbekistanОтправить сообщение для Nadir Zaitov с помощью Skype™
Цитата:
Сообщение от German Stimban Посмотреть сообщение
"Ифы" замедляют работу программы.
Так "лупы" те же "ифы". Заменять "ифы" лишними "лупами" бессмысленно. Или вы как хотели? Можете более быстрый вариант расписать?
__________________
Тот факт, что медуза выжила 650 миллионов лет без мозгов, даёт надежду многим.
Ответить 
Старый 22.04.2013 12:50   #77  
Real ID Group Ultimate ex-wild_John
Супермодератор
Аватар для German Stimban
Оффлайн
Центр программистов Bepro
Начальник отдела
Сообщений: 8,039
+ 4,910  6,509/2,845
– 298  135/90

UzbekistanОтправить сообщение для German Stimban с помощью ICQОтправить сообщение для German Stimban с помощью Skype™LiveJournal
Цитата:
Сообщение от Nadir Zaitov Посмотреть сообщение
Так "лупы" те же "ифы". Заменять "ифы" лишними "лупами" бессмысленно. Или вы как хотели?
Сорри, криво посмотрел на код.
Если использовать рекурсию вместо цикла, будет чуть попроще в решении. Однако, рекурсия несёт и свои минусы.
__________________
Герман - это не имя, это особое состояние души (Джим Анджер)
Ответить 
"+" от:
Реклама и уведомления
Старый 22.04.2013 16:11   #78  
Real ID Group uParty Member VITUS
Аватар для Vitaliy Fioktistov
Оффлайн
FOM Group
руководитель отдела разработки ПО
AKA:Vitus
Сообщений: 3,976
+ 2,659  2,138/1,101
– 123  21/18

UzbekistanОтправить сообщение для Vitaliy Fioktistov с помощью ICQОтправить сообщение для Vitaliy Fioktistov с помощью Skype™LiveJournalМой мирFacebook
Цитата:
Сообщение от Nadir Zaitov Посмотреть сообщение
Цитата:
Сообщение от Vitaliy Fioktistov Посмотреть сообщение
Код:
{
    while (a && b)
        if (a >= b)
           a %= b;
        else
           b %= a;
    return a | b;
}
Я такой же алгоритм нарисовал. Также использовать идею с "и" и "или", только в нотации умножения и сложения. Конечно с использованием логики красивее, согласен.

А непонятный не разобрал.
Он при всей своей вырвиглазности, тем не менее работает). Правда, на Паскаль его из C++ вряд ли удастся настолько же красиво портировать)
__________________
Почему в конце денег остается еще так много месяца?
Ответить 
Старый 22.04.2013 18:29   #79  
Real ID Group uParty Member Ultimate
Аватар для Nadir Zaitov
Оффлайн
Сообщений: 13,210
+ 4,958  9,176/3,940
– 170  137/105

UzbekistanОтправить сообщение для Nadir Zaitov с помощью Skype™
Цитата:
Сообщение от Vitaliy Fioktistov Посмотреть сообщение
Код:
int Nod( int a, int b )
{
   while( b^=a^=b^=a%=b );
   return a;
}
Разобрался. Тут с помощью ряда xor реализована команда обмена данными между a и b.
Также красиво в Паскале не написать, но будет похоже. Я пишу в нотации сумм, а не xor, чтобы был "как бы" другой алгоритм )
Код:
function NOD(a,b: integer):integer;
var a,b,:integer;
  Begin
     Repeat
         a:=a mod b;
         a:=a+b;
         b:=a-b;
         a:=a-b;
     Until b=0;
     NOD:=a;
  End;
__________________
Тот факт, что медуза выжила 650 миллионов лет без мозгов, даёт надежду многим.

Последний раз редактировалось Nadir Zaitov; 22.04.2013 в 18:33.
Ответить 
"+" от:
Ответить
Опции темы
Опции просмотра




Powered by vBulletin® Version 3.8.5
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot
Advertisement System V2.5 By Branden
OOO «Единый интегратор UZINFOCOM»


Новые 24 часа Кто на форуме Новички Поиск Кабинет Все прочитано Вверх