Можно ли в 1С проверить, четное чиСло или нет без Цел и циклов? #351571


#0 by Гений 1С
Используя только ограниченное количество операции +, -, *, / и условий?
#0 by Гений 1С
Используя только ограниченное количество операции +, -, *, / и условий?
#0 by Гений 1С
Используя только ограниченное количество операции +, -, *, / и условий?
#1 by Guk
МоёЧисло%2=0 - четное...
#2 by KLF
%2
#3 by Гений 1С
Операция % запрещена, читать умеем? Чисто математическая задача
#4 by MTM777
помнится был такой топик.. :))) поисчи..
#5 by Guk
В 1С операция % запрещена? Да ты окончательно спятил...
#6 by MTM777
держи там стока вариантов..))
#7 by Fynjy
Формула четного и нечетного числа 2п и 2п+1 соответственно. Думай ...
#8 by MTM777
он же извращенец..))
#9 by Fynjy
#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, то  при помощи разрешенных операций даже целое от не целого неотличишь - их конечное количество и можно построить функцию только с конечным количеством корней.
#14 by Лефмихалыч
пять баллов! :)) нет, честно, я бы более изящно накуй не послал :)
#15 by ЗлобнийМальчик
рекурсия и цикл - это по сути одно и тоже, тока написано по другому
#16 by kosts
Что, никто не решил, думали нельзя, а вот и можно... а = 23; б = 1/2; с = а/2; д = "" + с + "" + б; е = а / 2 * 10 + б; ф = "" + е; Если а = 0 или (д =  ф) тогда    Сообщить (" Четное"); Иначе    Сообщить (" Нечетное"); КонецЕсли; Без циклов, без Цел, только * / + 1С это не теоретическая математика у нее свои правила  :-)
#17 by DGorgoN
Поясни
#18 by ЛНТ
бред, преобразуй число a/2 в строку и сравни правые 2 символа с ".5" результат тот же
#19 by kosts
Ни че не бред - в таком случае я могу сразу сравнить правый символ с "2" Попробуй сравнить и с ".5" без функций. Оно может и можно упростить, но это уже детали
#20 by kosts
Что именно не понятно?
#21 by Skom
Цифирь = ТвоеЦифирь; Исчем = Число(Прав(Цифирь,1)); Если (Исчем = 0) или (Исчем = 2) или (Исчем = 4) или (Исчем = 6) или (Исчем = 8) Тогда ЧЕТНОЕ КонецЕсли;
#22 by Skom
ну и проверку на 0 сделай
#23 by Skom
что то типа этого вроде это если ты не рассматриваешь дробные числа как четные и нечетные... ну то есть не дробные а рассматриваешь только целые
#24 by ЛНТ
ты операцию конкатенации со сложением спутал
#25 by ЛНТ
>>Skom по-твоему преобразование строки в число и обратно по какому алгоритму работает? без циклов?
#26 by kosts
На счет других функций автор ничего не сказал, так что думаю вариантов еще можно попридумывать :-)
#27 by kosts
В условии не запрещено использовать конкатенацию
#28 by ЛНТ
маладец
#29 by kosts
А если разобраться то и операция деления (/) не обходится без циклов
#30 by ЛНТ
еще раз маладец
#31 by Skom
ну в таком случае...если без циклов и без деления...могу предложить так СкокаПроходофф = 1; Цифирь = 3; ~М1: Цифирь = Цифирь - 1; Если Цифирь = 0 Тогда    Если СкокаПроходофф = 1 Тогда         Сообщить("нечет");    Иначе         Сообщить("чет");    КонецЕсли Иначе    СкокаПроходафф = 3 - СкокаПроходафф;    Перейти ~М1 КонецЕсли; что то воде етого...и без циколв и без всего... тока вычитание....
#32 by Яндекс
вообще в условии написано, что в 1С использовать  +, -, *, / и условий ... как 1С будет их использовать в условии задачи не ограничивалось... так что думаю kosts условия задачи выполнил...
#33 by Яндекс
а вот это уже цикл
#34 by kosts
(31 ) Не знаю зачтут ли т.к. похоже на цикл Перейти ~М1 :-)
#35 by Skom
может де то и напортачил в логике но суть думая вроде ясна.... а цклов то НЕТУ
#36 by Skom
Используя только ограниченное количество операции +, -, *, / и условий? все соблюдено! фактически то все понимают что цикл...но тем не менее...это не цикл а просто передача управления на оператор при несоблюдении или соблюдении какого либо условия.... хотя цикл это оно и есть
#37 by Яндекс
для тебя цикл это когда для х = 1 по 10 цикл?
#38 by ЛНТ
он использует функции преобразования числа в строку и тем условие задачи не выполняет
#39 by Bww_
Если уж использовать другие функции, тогда вообще "по колхозному" Функция ПроверкаЧетности    Если КонтрЧисло=0 Тогда Возврат "";    ИначеЕсли Найти(СокрЛП(КонтрЧисло/2),".")>0 Тогда Возврат "Не четное";    Иначе Возврат "Четное";    КонецЕсли;     КонецФункции
#40 by kosts
Ноль считается четным числом
#41 by Skom
да понимаю я что это цикл.... просто так....извратился что то
#42 by Яндекс
таково особенность одинэс... в условиях задачи использования "+" никак не ограниченно
#43 by eklmn
Я смотю не только фикс извращенец на мисте...
#44 by ЛНТ
я не про + говорю, а про преобразование числа в строку
#45 by Bww_
- это точно. Картина напоминает рыбака кидающего в реку подкормку. Какую хрень ни кинь - все равно сбежится куча какой-то живности и будет ее теребить. Чувствуется что "гений" и народ в теме давно не был(и) в отпуске - пора!
#46 by Ненавижу 1С
Нельзя
#47 by Яндекс
покажи где там идет явное преобразование в строку? ... то есть используется функция "строка" ... а не возможность "+" в одинэс
#48 by Stepa86
я думал в той мегатеме суть сабжа раскрыта... и аналоги укладываются в ограничения
#49 by ЛНТ
кто говорит о явных преобразованиях? по твоей логике в нет цикла, ведь слово "цикл" нигде не встречается
#50 by Яндекс
что для тебя цикл?
#51 by Яндекс
еще раз ... в сабже разрешено использовать "+" ... есть какие-либо ограничения на его использования... а вот ограничения на использования цикла есть
#52 by Nordok
переводи в двоичную и определяй сколько влезет
#53 by Яндекс
в 1С ... используя только +,-,/ и * ... перевести в двоичную
#54 by Stepa86
Цыфро = Чиселко - Цел(Чиселко/10)*10; ЭтоЧетноеЧисло = (Цыфро = 0) ИЛИ (Цыфро = 2) ИЛИ (Цыфро = 4) ИЛИ (Цыфро = 6) ИЛИ (Цыфро = 8);
#55 by ЛНТ
сразу бы сказал, что ты конфигураст, я бы с тобой и не спорил
#56 by Господин ПЖ
тупая ветка...
#57 by Яндекс
то есть специалист больше сказать нечего не можешь и начинаешь личными оскорблениями доказывать свою тупость?
#58 by ЛНТ
я тебе уже сказал, что вызывается функция преобразования типов, что противоречит условию ты этого не понял - твои проблемы
#59 by Яндекс
где??????
#60 by ЛНТ
вот здесь: д = "" + с + "" + б;
#61 by Яндекс
и как это противоречит условиям задачи? "Используя только ограниченное количество операции +, -, *, / и условий"
#62 by Яндекс
это стандартная фича 1С ... так как имеет все данные фактически только одним типом... вариант...
#63 by ЛНТ
тем что используется функция, которая не входит в перечисленное число операций
#64 by ЛНТ
маладец
#65 by Яндекс
сама такая... учите мат.часть
#66 by ЛНТ
теперь выполни при а = 1000
#67 by ЛНТ
оказывается это нечетное число!
#68 by Яндекс
[1C] функция стрЧетное(чисЗначение)    а = чисЗначение;    б = 1/2;    с = а/2;    д = "" + с + "" + б;    е = а / 2 * 10 + б;    ф = "" + е;    Если (а = 0) или (д =  ф) тогда        Ответ = " Четное";    Иначе        Ответ = " Нечетное";    КонецЕсли;    возврат ответ; конецфункции; сообщить(стрЧетное); сообщить(стрЧетное); сообщить(стрЧетное(1000)); сообщить(стрЧетное(10000)); сообщить(стрЧетное(100000)); сообщить(стрЧетное(1000000)); сообщить(стрЧетное(10000000)); [/1C] получаем: [1C] Четное Четное Четное Четное Четное Четное Четное [/1C]
#69 by ЛНТ
ну в этом случае для тебя слово конфигураст не оскорбление, а профессия
#70 by kosts
Особенность 1С 8 при преобразовании чисел в строку 1000 -> 1 000
#71 by ЛНТ
знаю
#72 by ЛНТ
это особенность региональных настроек, в соответствие с которыми выполняется функция преобразования числа в строку
#73 by ЛНТ
а вто некоторые конфигурасты вызова этой функции в упор не видят
#74 by Яндекс
специалист... читать за явное и неявное преобразование типов... и что такое цикл...
#75 by ЛНТ
ну на этом и сойдемся
#76 by vde69
собствено по условим - невозможно, по сколько любые арифм действия (из САБЖ) можно свести к 2 простым, а ими ну ни как не получишь результат, вот если можно было-бы использовать переодические функции (синусы и т.д.) то легко
#77 by Яндекс
к одному простому... ведь даже вычитание это сложение с минусом
#78 by ЛНТ
да да, мы уже осознали всю мощь твоего интеллекта
#79 by Гений 1С
Рекурсия - тот же цикл. Не годится. Число итераций зависит от числа. Строковые преобразования использовать нельзя, чистую арифметику, плиз... Понятно, что строковыми функциями можно все забубенить. Вот интересно, можно ли это сделать арифметикой? Мда, похоже действительно Нельзя, но можно ли доказать математически, что нельзя?
#80 by NcSteel
Собака лает , а караван идет
#81 by Said_We
Возведение в степень числа (-1).
#82 by Яндекс
трудно оснозновать то... чего сам не имеешь
#83 by hhhh
можно сделать даже без арифметических операций: Если а = 0 Тогда Четное = Истина КонецЕсли; Если а = 1 Тогда Четное = Ложь КонецЕсли; Если а = 2 Тогда Четное = Истина КонецЕсли; Если а = 3 Тогда Четное = Ложь КонецЕсли; ... Если а = МаксимальноеЧислоВКомпьютере Тогда Четное = ... КонецЕсли; Количество чисел ограничено разрядностью компьютера, значит и количество операций тоже ограничено.
#84 by Said_We
Если Pow(-1, ИспытуемоеЧисло) >= 0 Тогда Сообщить("Четное"); Иначе Сообщить("Нечетное"); КонецЕсли;
#85 by Skom
ветка отняла половину рабочего дня... аффтар...спасиба.....!!!!
#86 by Живой Ископаемый
2 Там же в теме перечислены операции, которые можно использовать...
#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С
Это задача на смекалку. Можно использовать на тестах. Т.е. нужно доказать - можно ли проверить четность числа с помощью ограниченного инструментария.
#95 by Said_We
Какова цель такого рода проверки, если ценности результат не имеет?
#96 by Гений 1С
Ценность в напряжении мозгов, а заодно в проверки знаний математики
#97 by Иде я
Так вы решили или нет? Какой смысл в тесте, если его вся миста неделю решать будет?
Тэги: Математика и алгоритмы
Ответить:
Комментарии доступны только авторизированным пользователям

В этой группе 1С