|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
11.05.2012, 18:20 | #1 |
Форумчанин
Регистрация: 06.02.2011
Сообщений: 105
|
Сложная задача
Всем привет.Как-то раз попалась мне такая вот задачка:
Даны два целых числа a и b. Если a делится на b (без остатка) или b делится на a (без остатка), то вывести 1, иначе - любое другое число. Условные операторы и операторы циклов не использовать. Так я её и не смог осилить.Сможет кто-нибудь решить такое? |
11.05.2012, 18:47 | #2 |
МегаМодератор
СуперМодератор
Регистрация: 09.11.2010
Сообщений: 7,291
|
Потестируйте получше.
Код:
Если одно из чисел 0, то ответ 0, т.е. числа не делятся без остатка.
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
Последний раз редактировалось BDA; 11.05.2012 в 18:57. |
11.05.2012, 19:49 | #3 |
Старожил
Регистрация: 08.04.2012
Сообщений: 3,229
|
Код:
|
11.05.2012, 19:51 | #4 |
МегаМодератор
СуперМодератор
Регистрация: 09.11.2010
Сообщений: 7,291
|
s-andriano, да-да, логические выражения)
забываю) Правда, если а или б равны 0, то возникнет ошибка.
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
|
11.05.2012, 20:49 | #5 |
Старожил
Регистрация: 08.04.2012
Сообщений: 3,229
|
Строго говоря, 0 противоречит условиям задачи.
Но вполне с Вами согласен, что правильная программа должна корректно работать и с некорректными данными. Можно добавить в логическое выражение Код:
|
11.05.2012, 20:58 | #6 |
Белик Виталий :)
Старожил
Регистрация: 23.07.2007
Сообщений: 57,097
|
Слева направо. И оптимизатор на всякий случай включить. Имею ввиду опцию останова когда логические выражения получают однозначный ответ, и продолжение вычисления не требуется.
I'm learning to live...
|
11.05.2012, 21:54 | #7 |
Старожил
Регистрация: 08.04.2012
Сообщений: 3,229
|
В связи с этой задачкой вспомнилась история.
На самом деле программирование без условных операторов - не такая уж экзотика, как может показаться. Совсем недавно такое имело место в видеокартах. Сначала всю картинку, которую надо было вывести на экран, генерировал процессор, но оказалось, что мощности центрального процессора для этого недостаточно. Поэтому появилось устройство, которое у нас принято называть 3D-ускорителем, а более правильно - GPU. Первые GPU имели некоторую стандартную функциональность, которой можно было управлять, грубо говоря, при помощи ручек и тумблеров. Т.е. имелся некоторый алгоритм, в котором можно было менять отдельные коэффициенты и включать/выключать отдельные блоки. Потом появились первые шейдерные блоки, предназначенные для выполнения шейдеров - небольших программ для обработки отдельных фрагментов. Начиная с этого момента, программист мог запрограммировать собственный алгоритм, а не пользоваться стандартным. Шейдерный процессор за счет специализации, конечно, был несколько мощнее центрального, но не настолько, чтобы удовлектворить все возросшие аппетиты любителей трехмерной графики. Чтобы добиться от видеокарты достаточной производительности, GPU включал в себя несколько шейдерных блоков, каждый из которых работал по написанной программистом программе. Но при этом для синхронизации блоков между собой программа должна была выполняться одинаковое количество тактов. Но том уровне проще всего этого было добиться, исключив из системы команд условные переходы. Формально в языке высокого уровня условные операторы были, но они имели любопытную реализацию: - вычислялись ОБЕ ветки за условием, - вычислялось условие и расширялось на всю длину слова (т.е. TRUE состоял из одних двоичных единиц, а FALSE - из одних нулей), - ветка if логически умножалась на это число, а ветка else - на его инверсию, после чего результат складывался. Очевидно, эта была очень неэффективная реализация, т.к. приходилось считать много того, что принципиально не нужно и будет затем все равно умножено на 0. Соответственно, был спрос на оптимально написанные шейдеры, не содержащие условных переходов и потому быстро выполняющиеся на GPU. |
14.05.2012, 21:16 | #8 |
Регистрация: 03.11.2011
Сообщений: 9
|
writeln(a mod b +1);
|
14.05.2012, 23:04 | #9 |
Старожил
Регистрация: 08.04.2012
Сообщений: 3,229
|
|
16.05.2012, 16:48 | #10 |
Регистрация: 03.11.2011
Сообщений: 9
|
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Сложная задача! | Pashok6 | Паскаль, Turbo Pascal, PascalABC.NET | 10 | 02.01.2012 00:03 |
задача сложная | Tolian92 | Паскаль, Turbo Pascal, PascalABC.NET | 2 | 08.12.2011 15:20 |
Сложная задача(( | альбертоо | Паскаль, Turbo Pascal, PascalABC.NET | 1 | 07.12.2011 16:57 |
Сложная задача. | ВДПУ | Помощь студентам | 4 | 07.11.2011 22:34 |
сложная задача | ugradvizhok | Помощь студентам | 1 | 30.03.2011 23:30 |