#10
by Fynjy
Оттуда ... * Сложение и вычитание: o чётное ± чётное = чётное o чётное ± нечётное = нечётное o нечётное ± чётное = нечётное o нечётное ± нечётное = чётное * Умножение: o чётное ? чётное = чётное o чётное ? нечётное = чётное o нечётное ? чётное = чётное o нечётное ? нечётное = нечётное * Деление: o чётное / чётное — может быть любым o чётное / нечётное = чётное, если целое o нечётное / чётное — не может быть целым o нечётное / нечётное = нечётное, если целое
#11
by Гений 1С
спасибо, именно чтение этого топика меня и натолкнуло на данную алгоритмическую проблему. Меня интересует не практическая, а теоретическая сторона. Сегодня ехал в электричке - голову сломал. Можно ли используя только сложение, умножение, деление и вычитание и ограниченное число действий, не пропорциональное проверяемому числу, проверить, четное оно или нет? Вот о чем топик.
#12
by vde69
Функция Чет (х) Результат = х; Если (х2) >= 2 Тогда Результат = Функция Чет (Результат/2); КонецЕсли; возврат Результат КонецФункции; Если Чет(МоеЧисло)=1 Тогда Сообщить("Четное"); Иначе Сообщить("НЕ Четное"); КонецЕсли; формально циклов нету )))
#13
by Asirius
Нельзя. Если закрыть глаза на точность вычислений 1C, то при помощи разрешенных операций даже целое от не целого неотличишь - их конечное количество и можно построить функцию только с конечным количеством корней.
#16
by kosts
Что, никто не решил, думали нельзя, а вот и можно... а = 23; б = 1/2; с = а/2; д = "" + с + "" + б; е = а / 2 * 10 + б; ф = "" + е; Если а = 0 или (д = ф) тогда Сообщить (" Четное"); Иначе Сообщить (" Нечетное"); КонецЕсли; Без циклов, без Цел, только * / + 1С это не теоретическая математика у нее свои правила :-)
#19
by kosts
Ни че не бред - в таком случае я могу сразу сравнить правый символ с "2" Попробуй сравнить и с ".5" без функций. Оно может и можно упростить, но это уже детали
#21
by Skom
Цифирь = ТвоеЦифирь; Исчем = Число(Прав(Цифирь,1)); Если (Исчем = 0) или (Исчем = 2) или (Исчем = 4) или (Исчем = 6) или (Исчем = 8) Тогда ЧЕТНОЕ КонецЕсли;
#23
by Skom
что то типа этого вроде это если ты не рассматриваешь дробные числа как четные и нечетные... ну то есть не дробные а рассматриваешь только целые
#25
by ЛНТ
>>Skom по-твоему преобразование строки в число и обратно по какому алгоритму работает? без циклов?
#26
by kosts
На счет других функций автор ничего не сказал, так что думаю вариантов еще можно попридумывать :-)
#31
by Skom
ну в таком случае...если без циклов и без деления...могу предложить так СкокаПроходофф = 1; Цифирь = 3; ~М1: Цифирь = Цифирь - 1; Если Цифирь = 0 Тогда Если СкокаПроходофф = 1 Тогда Сообщить("нечет"); Иначе Сообщить("чет"); КонецЕсли Иначе СкокаПроходафф = 3 - СкокаПроходафф; Перейти ~М1 КонецЕсли; что то воде етого...и без циколв и без всего... тока вычитание....
#32
by Яндекс
вообще в условии написано, что в 1С использовать +, -, *, / и условий ... как 1С будет их использовать в условии задачи не ограничивалось... так что думаю kosts условия задачи выполнил...
#36
by Skom
Используя только ограниченное количество операции +, -, *, / и условий? все соблюдено! фактически то все понимают что цикл...но тем не менее...это не цикл а просто передача управления на оператор при несоблюдении или соблюдении какого либо условия.... хотя цикл это оно и есть
#39
by Bww_
Если уж использовать другие функции, тогда вообще "по колхозному" Функция ПроверкаЧетности Если КонтрЧисло=0 Тогда Возврат ""; ИначеЕсли Найти(СокрЛП(КонтрЧисло/2),".")>0 Тогда Возврат "Не четное"; Иначе Возврат "Четное"; КонецЕсли; КонецФункции
#45
by Bww_
- это точно. Картина напоминает рыбака кидающего в реку подкормку. Какую хрень ни кинь - все равно сбежится куча какой-то живности и будет ее теребить. Чувствуется что "гений" и народ в теме давно не был(и) в отпуске - пора!
#47
by Яндекс
покажи где там идет явное преобразование в строку? ... то есть используется функция "строка" ... а не возможность "+" в одинэс
#49
by ЛНТ
кто говорит о явных преобразованиях? по твоей логике в нет цикла, ведь слово "цикл" нигде не встречается
#51
by Яндекс
еще раз ... в сабже разрешено использовать "+" ... есть какие-либо ограничения на его использования... а вот ограничения на использования цикла есть
#54
by Stepa86
Цыфро = Чиселко - Цел(Чиселко/10)*10; ЭтоЧетноеЧисло = (Цыфро = 0) ИЛИ (Цыфро = 2) ИЛИ (Цыфро = 4) ИЛИ (Цыфро = 6) ИЛИ (Цыфро = 8);
#57
by Яндекс
то есть специалист больше сказать нечего не можешь и начинаешь личными оскорблениями доказывать свою тупость?
#58
by ЛНТ
я тебе уже сказал, что вызывается функция преобразования типов, что противоречит условию ты этого не понял - твои проблемы
#61
by Яндекс
и как это противоречит условиям задачи? "Используя только ограниченное количество операции +, -, *, / и условий"
#62
by Яндекс
это стандартная фича 1С ... так как имеет все данные фактически только одним типом... вариант...
#68
by Яндекс
[1C] функция стрЧетное(чисЗначение) а = чисЗначение; б = 1/2; с = а/2; д = "" + с + "" + б; е = а / 2 * 10 + б; ф = "" + е; Если (а = 0) или (д = ф) тогда Ответ = " Четное"; Иначе Ответ = " Нечетное"; КонецЕсли; возврат ответ; конецфункции; сообщить(стрЧетное); сообщить(стрЧетное); сообщить(стрЧетное(1000)); сообщить(стрЧетное(10000)); сообщить(стрЧетное(100000)); сообщить(стрЧетное(1000000)); сообщить(стрЧетное(10000000)); [/1C] получаем: [1C] Четное Четное Четное Четное Четное Четное Четное [/1C]
#72
by ЛНТ
это особенность региональных настроек, в соответствие с которыми выполняется функция преобразования числа в строку
#76
by vde69
собствено по условим - невозможно, по сколько любые арифм действия (из САБЖ) можно свести к 2 простым, а ими ну ни как не получишь результат, вот если можно было-бы использовать переодические функции (синусы и т.д.) то легко
#79
by Гений 1С
Рекурсия - тот же цикл. Не годится. Число итераций зависит от числа. Строковые преобразования использовать нельзя, чистую арифметику, плиз... Понятно, что строковыми функциями можно все забубенить. Вот интересно, можно ли это сделать арифметикой? Мда, похоже действительно Нельзя, но можно ли доказать математически, что нельзя?
#83
by hhhh
можно сделать даже без арифметических операций: Если а = 0 Тогда Четное = Истина КонецЕсли; Если а = 1 Тогда Четное = Ложь КонецЕсли; Если а = 2 Тогда Четное = Истина КонецЕсли; Если а = 3 Тогда Четное = Ложь КонецЕсли; ... Если а = МаксимальноеЧислоВКомпьютере Тогда Четное = ... КонецЕсли; Количество чисел ограничено разрядностью компьютера, значит и количество операций тоже ограничено.
#84
by Said_We
Если Pow(-1, ИспытуемоеЧисло) >= 0 Тогда Сообщить("Четное"); Иначе Сообщить("Нечетное"); КонецЕсли;
#87
by Skom
вообще без арифметики бла_бла_бла Сообщить(ЧислоТвое); Если Вопрос("Четное ли число"....) = "Да" Тогда Предупреждение("Число четное"); КонецЕсли;
#88
by Гений 1С
Если тебе охота поржать, то ты поржал, получи пряник. Меня интересует не идиотское ржание, а просто любопытно, можно ли математическими средствами получить информацию о четности числа без округления или нет. В контексте такой постановки вопроса конкатенация и строковая конвертация не уместны!
#89
by Said_We
Возведение в степент это и есть сложение. Комп по своей сути умеет только складывать и более не чего. Вычетание это сложение с отрицательным числом (частный случий сложения). Умножение это сложение в цикле со сдвигом по количеству разрядов (ну бывают разновидности, когда на несколько разрядов двигают сразу). Деление это часный случий умножения. Вывод все операции делаются сложением. Даже если вы команду деления DIV на микрокоманды разберете, то получите тоже сложение. :-))
#90
by Said_We
Ну если бы можно было число сдвигать вправо и влево, то за несколько команд делается. Сдвинул вправо влево и сравнил результат. Хотя на асеммблере достаточно проверить последний разряд. Тоже самое можно сделать используя XOR побитовый.
#91
by Живой Ископаемый
Вот и давай, перепиши-ка свой код так, чтобы использовать только операцию умножения и не использовать цикла и сивмольных выражений...
#92
by Said_We
Это я все к чему... Четность и не четность не проверяется сложением округлением и т.д. :-)
#93
by Said_We
Этот вопрос из ряда - можно ли написать программу не используя команды MOV. Ответ да можно, но зачем?
#94
by Гений 1С
Это задача на смекалку. Можно использовать на тестах. Т.е. нужно доказать - можно ли проверить четность числа с помощью ограниченного инструментария.
Тэги: Математика и алгоритмы
Ответить:
Комментарии доступны только авторизированным пользователям
Похожие вопросы 1С
- Как проверить скопирован ли документ?
- V8: Нет аналога 7.7 ПустоеЗначение(). Как грамотно проверить, пустое или нет?
- Как проверить значение перечисления в запросе?
- Не удалось проверить целостность app-sentx, код возврата -1073741819
- проверить товар на вхождение в список
- Как узнать - Четное число или нет?
- Можно ли в 1С проверить, четное чиСло или нет без Цел и циклов?
- Можно ли в 1С проверить, четное чиСло или нет без Цел и циклов?
- как узнать - четное число или нет?
- Как проверить имеет ли переменная тип - число или нет? в 1С 8.2
- Как в запросе проверить целое число или дробное?
В этой группе 1С
- БП: Корректировка стоимости списания
- Разделение входящего и исходящего трафика по интерфейсам
- Не заполнено значение реквизита "Счет учета расчетов с контрагентом"! УПП 8.1
- Возможно ли в 1С 8.1 построить запрос к таблице значений ? Если да, то как ?
- Как заменить счет в операции введеной вручную
- УСН: проводки при выплате зарплаты
- Что лучше: Метаданные.НайтиПоТипу или Объект.Метаданные()?
- Необходимо из ячейки таблицы организовать переход по гиперссылки.
- "Оплата по среднему" в УПП
- регистр книга учета доходов и расходов раздел 1
- Функция глобального модуля глСообщениеТрассировки
- Свернуть табличную часть документа
- Как можно загрузить данные из xls в 1С 77 если нет самой Excell
- ПВХ как сделать на форме чтобы работало примерно как ТЧ?
- НайтиПоНаименованию(); Странный поиск!
- Как обратиться к объекту надпись в Excel из 1С
- Как из картинки, сохраненной 1с 7.7 получить нормальную картинку, читаемую ИЕ?
- Ошибка при вызове метода контекста (Послать)
- Печать ценников.
- УПП как занести начисление?