Имя: Пароль:
IT
 
Можно ли в 1С проверить, четное чиСло или нет без Цел и циклов?
Ø (длинная ветка 23.07.2008 15:24)
0 Гений 1С
 
гуру
21.07.08
22:10
Используя только ограниченное количество операции +, -, *, / и условий?
1 Guk
 
21.07.08
22:11
МоёЧисло%2=0 - четное...
2 KLF
 
21.07.08
22:12
%2
3 Гений 1С
 
гуру
21.07.08
22:36
(1)(2) Операция % запрещена, читать умеем? Чисто математическая задача
4 MTM777
 
21.07.08
22:43
(0) помнится был такой топик.. :))) поисчи..
5 Guk
 
21.07.08
22:45
(3) В 1С операция % запрещена? Да ты окончательно спятил...
6 MTM777
 
21.07.08
22:46
держи v8: Как узнать - Четное число или нет?
там стока вариантов..))
7 Fynjy
 
21.07.08
22:46
(3) Формула четного и нечетного числа
2п и 2п+1 соответственно. Думай ...
8 MTM777
 
21.07.08
22:47
(5) он же извращенец..))
9 Fynjy
 
21.07.08
23:01
10 Fynjy
 
21.07.08
23:01
Оттуда ...
   * Сложение и вычитание:
         o чётное ± чётное = чётное
         o чётное ± нечётное = нечётное
         o нечётное ± чётное = нечётное
         o нечётное ± нечётное = чётное
   * Умножение:
         o чётное ? чётное = чётное
         o чётное ? нечётное = чётное
         o нечётное ? чётное = чётное
         o нечётное ? нечётное = нечётное
   * Деление:
         o чётное / чётное — может быть любым
         o чётное / нечётное = чётное, если целое
         o нечётное / чётное — не может быть целым
         o нечётное / нечётное = нечётное, если целое
11 Гений 1С
 
гуру
21.07.08
23:03
(6) спасибо, именно чтение этого топика меня и натолкнуло на данную алгоритмическую проблему.
(5) Меня интересует не практическая, а теоретическая сторона. Сегодня ехал в электричке - голову сломал. Можно ли используя только сложение, умножение, деление и вычитание и ограниченное число действий, не пропорциональное проверяемому числу, проверить, четное оно или нет? Вот о чем топик.
12 vde69
 
21.07.08
23:24
Функция Чет (х)
 Результат = х;
 Если (х\2) >= 2 Тогда
   Результат = Функция Чет (Результат/2);
 КонецЕсли;
 возврат Результат
КонецФункции;

Если Чет(МоеЧисло)=1 Тогда
 Сообщить("Четное");
Иначе
 Сообщить("НЕ Четное");
КонецЕсли;


формально циклов нету )))
13 Asirius
 
21.07.08
23:24
(0) Нельзя.
Если закрыть глаза на точность вычислений 1C, то  при помощи разрешенных операций даже целое от не целого неотличишь - их конечное количество и можно построить функцию только с конечным количеством корней.
14 Лефмихалыч
 
21.07.08
23:41
(7) пять баллов! :))
нет, честно, я бы более изящно накуй не послал :)
15 ЗлобнийМальчик
 
21.07.08
23:51
(12) рекурсия и цикл - это по сути одно и тоже, тока написано по другому
16 kosts
 
22.07.08
08:17
Что, никто не решил, думали нельзя, а вот и можно...

а = 23;
б = 1/2;
с = а/2;
д = "" + с + "" + б;
е = а / 2 * 10 + б;
ф = "" + е;

Если а = 0 или (д =  ф) тогда
   Сообщить (" Четное");
Иначе
   Сообщить (" Нечетное");
КонецЕсли;

Без циклов, без Цел, только * / +
1С это не теоретическая математика у нее свои правила  :-)
17 DGorgoN
 
22.07.08
08:28
(16) Поясни
18 ЛНТ
 
22.07.08
08:29
(16) бред, преобразуй число a/2 в строку и сравни правые 2 символа с ".5" результат тот же
19 kosts
 
22.07.08
08:37
(18) Ни че не бред - в таком случае я могу сразу сравнить правый символ с "2"

Попробуй сравнить и с ".5" без функций.

Оно может и можно упростить, но это уже детали
20 kosts
 
22.07.08
08:39
(17) Что именно не понятно?
21 Skom
 
22.07.08
08:42
Цифирь = ТвоеЦифирь;
Исчем = Число(Прав(Цифирь,1));
Если (Исчем = 0) или (Исчем = 2) или (Исчем = 4) или (Исчем = 6) или (Исчем = 8) Тогда
ЧЕТНОЕ
КонецЕсли;
22 Skom
 
22.07.08
08:42
ну и проверку на 0 сделай
23 Skom
 
22.07.08
08:43
что то типа этого вроде
это если ты не рассматриваешь дробные числа как четные и нечетные...
ну то есть не дробные
а рассматриваешь только целые
24 ЛНТ
 
22.07.08
08:43
(19) ты операцию конкатенации со сложением спутал
25 ЛНТ
 
22.07.08
08:45
>>Skom по-твоему преобразование строки в число и обратно по какому алгоритму работает? без циклов?
26 kosts
 
22.07.08
08:46
(21) На счет других функций автор ничего не сказал, так что думаю вариантов еще можно попридумывать :-)
27 kosts
 
22.07.08
08:52
(24) В условии не запрещено использовать конкатенацию
28 ЛНТ
 
22.07.08
08:54
(27) маладец
29 kosts
 
22.07.08
08:54
(25) А если разобраться то и операция деления (/) не обходится без циклов
30 ЛНТ
 
22.07.08
08:54
(29) еще раз маладец
31 Skom
 
22.07.08
09:04
ну в таком случае...если без циклов и без деления...могу предложить так

СкокаПроходофф = 1;

Цифирь = 3;

~М1: Цифирь = Цифирь - 1;

Если Цифирь = 0 Тогда
   Если СкокаПроходофф = 1 Тогда
        Сообщить("нечет");
   Иначе
        Сообщить("чет");
   КонецЕсли
Иначе
   СкокаПроходафф = 3 - СкокаПроходафф;
   Перейти ~М1
КонецЕсли;

что то воде етого...и без циколв и без всего...
тока вычитание....
32 Яндекс
 
22.07.08
09:05
вообще в условии написано, что в 1С использовать  +, -, *, / и условий ... как 1С будет их использовать в условии задачи не ограничивалось...
так что думаю kosts условия задачи выполнил...
33 Яндекс
 
22.07.08
09:05
(31)а вот это уже цикл
34 kosts
 
22.07.08
09:07
(31 ) Не знаю зачтут ли т.к. похоже на цикл Перейти ~М1 :-)
35 Skom
 
22.07.08
09:07
может де то и напортачил в логике но суть думая вроде ясна....
а цклов то НЕТУ
36 Skom
 
22.07.08
09:08
Используя только ограниченное количество операции +, -, *, / и условий?

все соблюдено!

фактически то все понимают что цикл...но тем не менее...это не цикл а просто передача управления на оператор при несоблюдении или соблюдении какого либо условия....

хотя цикл это оно и есть
37 Яндекс
 
22.07.08
09:09
(35)для тебя цикл это когда для х = 1 по 10 цикл?
38 ЛНТ
 
22.07.08
09:09
(32) он использует функции преобразования числа в строку и тем условие задачи не выполняет
39 Bww_
 
22.07.08
09:09
Если уж использовать другие функции, тогда вообще "по колхозному"
Функция ПроверкаЧетности()
   Если КонтрЧисло=0 Тогда Возврат "";
   ИначеЕсли Найти(СокрЛП(КонтрЧисло/2),".")>0 Тогда Возврат "Не четное";
   Иначе Возврат "Четное";
   КонецЕсли;    
КонецФункции
40 kosts
 
22.07.08
09:11
(39) Ноль считается четным числом
41 Skom
 
22.07.08
09:13
(37) да понимаю я что это цикл....
просто так....извратился что то
42 Яндекс
 
22.07.08
09:19
(38)таково особенность одинэс... в условиях задачи использования "+" никак не ограниченно
43 eklmn
 
гуру
22.07.08
09:21
Я смотю не только фикс извращенец на мисте...
44 ЛНТ
 
22.07.08
09:23
(42) я не про + говорю, а про преобразование числа в строку
45 Bww_
 
22.07.08
09:32
(43) - это точно.
Картина напоминает рыбака кидающего в реку подкормку.
Какую хрень ни кинь - все равно сбежится куча какой-то живности
и будет ее теребить.
Чувствуется что "гений" и народ в теме давно не был(и) в отпуске - пора!
46 Ненавижу 1С
 
гуру
22.07.08
09:34
Нельзя
47 Яндекс
 
22.07.08
09:39
(44)покажи где там идет явное преобразование в строку? ... то есть используется функция "строка" ... а не возможность "+" в одинэс
48 Stepa86
 
22.07.08
09:40
я думал в той мегатеме суть сабжа раскрыта... (21) и аналоги укладываются в ограничения
49 ЛНТ
 
22.07.08
09:41
(47) кто говорит о явных преобразованиях?
по твоей логике в (31) нет цикла, ведь слово "цикл" нигде не встречается
50 Яндекс
 
22.07.08
09:41
(49)что для тебя цикл?
51 Яндекс
 
22.07.08
09:42
еще раз ... в сабже разрешено использовать "+" ... есть какие-либо ограничения на его использования...


а вот ограничения на использования цикла есть
52 Nordok
 
22.07.08
09:43
переводи в двоичную и определяй сколько влезет
53 Яндекс
 
22.07.08
09:45
(52)в 1С ... используя только +,-,/ и * ... перевести в двоичную
54 Stepa86
 
22.07.08
09:46
Цыфро = Чиселко - Цел(Чиселко/10)*10;
ЭтоЧетноеЧисло = (Цыфро = 0) ИЛИ (Цыфро = 2) ИЛИ (Цыфро = 4) ИЛИ (Цыфро = 6) ИЛИ (Цыфро = 8);
55 ЛНТ
 
22.07.08
09:47
(51) сразу бы сказал, что ты конфигураст, я бы с тобой и не спорил
56 Господин ПЖ
 
22.07.08
09:49
тупая ветка...
57 Яндекс
 
22.07.08
09:52
(55)то есть специалист больше сказать нечего не можешь и начинаешь личными оскорблениями доказывать свою тупость?
58 ЛНТ
 
22.07.08
09:54
(57) я тебе уже сказал, что вызывается функция преобразования типов, что противоречит условию
ты этого не понял - твои проблемы
59 Яндекс
 
22.07.08
09:56
(58)где??????
60 ЛНТ
 
22.07.08
10:00
вот здесь: д = "" + с + "" + б;
61 Яндекс
 
22.07.08
10:05
и как это противоречит условиям задачи?

"Используя только ограниченное количество операции +, -, *, / и условий"
62 Яндекс
 
22.07.08
10:06
это стандартная фича 1С ... так как имеет все данные фактически только одним типом... вариант...
63 ЛНТ
 
22.07.08
10:07
(61) тем что используется функция, которая не входит в перечисленное число операций
64 ЛНТ
 
22.07.08
10:08
(62) маладец
65 Яндекс
 
22.07.08
10:12
(64)сама такая... учите мат.часть
66 ЛНТ
 
22.07.08
10:13
(65) теперь выполни (16) при а = 1000
67 ЛНТ
 
22.07.08
10:14
оказывается это нечетное число!
68 Яндекс
 
22.07.08
10:23

функция стрЧетное(чисЗначение)
   а = чисЗначение;
   б = 1/2;
   с = а/2;
   д = "" + с + "" + б;
   е = а / 2 * 10 + б;
   ф = "" + е;
   Если (а = 0) или (д =  ф) тогда
       Ответ = " Четное";
   Иначе
       Ответ = " Нечетное";
   КонецЕсли;
   возврат ответ;
конецфункции;

сообщить(стрЧетное(10));
сообщить(стрЧетное(100));
сообщить(стрЧетное(1000));
сообщить(стрЧетное(10000));
сообщить(стрЧетное(100000));
сообщить(стрЧетное(1000000));
сообщить(стрЧетное(10000000));



получаем:

Четное
Четное
Четное
Четное
Четное
Четное
Четное
69 ЛНТ
 
22.07.08
10:25
ну в этом случае для тебя слово конфигураст не оскорбление, а профессия
70 kosts
 
22.07.08
10:26
(67) Особенность 1С 8 при преобразовании чисел в строку 1000 -> 1 000
71 ЛНТ
 
22.07.08
10:29
(70) знаю
72 ЛНТ
 
22.07.08
10:30
это особенность региональных настроек, в соответствие с которыми выполняется функция преобразования числа в строку
73 ЛНТ
 
22.07.08
10:30
а вто некоторые конфигурасты вызова этой функции в упор не видят
74 Яндекс
 
22.07.08
10:34
(73)специалист... читать за явное и неявное преобразование типов... и что такое цикл...
75 ЛНТ
 
22.07.08
10:36
(74) ну на этом и сойдемся
76 vde69
 
22.07.08
10:41
собствено по условим (0) - невозможно, по сколько любые арифм действия (из САБЖ) можно свести к 2 простым, а ими ну ни как не получишь результат, вот если можно было-бы использовать переодические функции (синусы и т.д.) то легко
77 Яндекс
 
22.07.08
10:52
(76)к одному простому... ведь даже вычитание это сложение с минусом
78 ЛНТ
 
22.07.08
10:54
(77) да да, мы уже осознали всю мощь твоего интеллекта
79 Гений 1С
 
гуру
22.07.08
10:55
(12) Рекурсия - тот же цикл. Не годится. Число итераций зависит от числа.
(16) Строковые преобразования использовать нельзя, чистую арифметику, плиз... Понятно, что строковыми функциями можно все забубенить. Вот интересно, можно ли это сделать арифметикой?

Мда, похоже действительно Нельзя, но можно ли доказать математически, что нельзя?
80 NcSteel
 
22.07.08
10:58
(78) Собака лает , а караван идет
81 Said_We
 
22.07.08
11:01
(79) Возведение в степень числа (-1).
82 Яндекс
 
22.07.08
11:02
(78)трудно оснозновать то... чего сам не имеешь
83 hhhh
 
22.07.08
11:03
(79) можно сделать даже без арифметических операций:

Если а = 0 Тогда Четное = Истина КонецЕсли;
Если а = 1 Тогда Четное = Ложь КонецЕсли;
Если а = 2 Тогда Четное = Истина КонецЕсли;
Если а = 3 Тогда Четное = Ложь КонецЕсли;
...
Если а = МаксимальноеЧислоВКомпьютере Тогда Четное = ... КонецЕсли;

Количество чисел ограничено разрядностью компьютера, значит и количество операций тоже ограничено.
84 Said_We
 
22.07.08
11:09
Если Pow(-1, ИспытуемоеЧисло) >= 0 Тогда
Сообщить("Четное");
Иначе
Сообщить("Нечетное");
КонецЕсли;
85 Skom
 
22.07.08
11:10
ветка отняла половину рабочего дня...
аффтар...спасиба.....!!!!
86 Живой Ископаемый
 
22.07.08
11:11
2(84) Там же в теме перечислены операции, которые можно использовать...
87 Skom
 
22.07.08
11:15
(0) вообще без арифметики

бла_бла_бла
Сообщить(ЧислоТвое);
Если Вопрос("Четное ли число"....) = "Да" Тогда
  Предупреждение("Число четное");
КонецЕсли;
88 Гений 1С
 
гуру
22.07.08
11:20
(86) Если тебе охота поржать, то ты поржал, получи пряник. Меня интересует не идиотское ржание, а просто любопытно, можно ли математическими средствами получить информацию о четности числа без округления или нет. В контексте такой постановки вопроса конкатенация и строковая конвертация не уместны!
89 Said_We
 
22.07.08
11:21
(86) Возведение в степент это и есть сложение. Комп по своей сути умеет только складывать и более не чего.
Вычетание это сложение с отрицательным числом (частный случий сложения).
Умножение это сложение в цикле со сдвигом по количеству разрядов (ну бывают разновидности, когда на несколько разрядов двигают сразу).
Деление это часный случий умножения.
Вывод все операции делаются сложением.
Даже если вы команду деления DIV на микрокоманды разберете, то получите тоже сложение. :-))
90 Said_We
 
22.07.08
11:23
(88) Ну если бы можно было число сдвигать вправо и влево, то за несколько команд делается.
Сдвинул вправо влево и сравнил результат. Хотя на асеммблере достаточно проверить последний разряд.
Тоже самое можно сделать используя XOR побитовый.
91 Живой Ископаемый
 
22.07.08
11:25
(89) Вот и давай, перепиши-ка свой код так, чтобы использовать только операцию умножения и не использовать цикла и сивмольных выражений...
92 Said_We
 
22.07.08
11:25
Это я все к чему... Четность и не четность не проверяется сложением округлением и т.д. :-)
93 Said_We
 
22.07.08
11:26
Этот вопрос из ряда - можно ли написать программу не используя команды MOV. Ответ да можно, но зачем?
94 Гений 1С
 
гуру
22.07.08
12:14
(93) Это задача на смекалку. Можно использовать на тестах.
Т.е. нужно доказать - можно ли проверить четность числа с помощью ограниченного инструментария.
95 Said_We
 
22.07.08
12:29
(94) Какова цель такого рода проверки, если ценности результат не имеет?
96 Гений 1С
 
гуру
22.07.08
14:06
(95) Ценность в напряжении мозгов, а заодно в проверки знаний математики
97 Иде я
 
модератор
22.07.08
14:09
Так вы решили или нет?
Какой смысл в тесте, если его вся миста неделю решать будет?
98 Яндекс
 
22.07.08
14:12
(97)используя только простые операции решить оное незя... сдается мне гений делает тест, абы его никто и никогда не прошел...
99 VladZ
 
22.07.08
14:14
Если последняя цифра числа окончивается на 0,2,4,6,8 - число четное... Количество условий сводится к пяти.
100 Нуф-Нуф
 
22.07.08
14:14
контрольный
101 VladZ
 
22.07.08
14:15
+99 Блин...  К конфу дня всякую чушь говорю...
Следует читать так "Если последняя цифра числа является..."
102 Яндекс
 
22.07.08
14:15
(99)как ты будешь последнию цифру получать имея только "+", "-", "*" и "/"?
103 Said_We
 
22.07.08
14:16
Подключаешь DLL, которой передаешь число и оно возвращает тебе четное или нечетное :-))
Так даже не используя +,-,*,/ :-))
104 VladZ
 
22.07.08
14:16
Еще один способ:
Сдвинуть число вправо. Если переноса не возникло - число четное. :)
105 Яндекс
 
22.07.08
14:17
(103)использования функци и процедур кроме четырех операций не допустимо... как подключить ВК и передать ей число?
106 Said_We
 
22.07.08
14:23
(105) А давайте и их (+, -, *, /) тоже не допускать?
107 Stepa86
 
22.07.08
14:24
а какая в 1С точность числа? может прокатит че нить вроде

Функция Цел(пЧисло)

Возврат ((пЧисло/1000000000000000) * 1000000000000000);

КонецФункции
108 Said_We
 
22.07.08
14:25
округление можно использовать не явным образом. 1С же тоже имеет ограничение разрядности после запятой... Или то число, которое считаем будет реквизитом формы в котором задано что оно целое :-))
109 Яндекс
 
22.07.08
14:28
(107)хм... это что за функции вы написали?

((256.33/1000000000000000) * 1000000000000000) = 256.33
110 Said_We
 
22.07.08
14:29
(109) Ноликов добавь
111 Said_We
 
22.07.08
14:30
(109) Это вызов функции ОКР() не явным образом.
112 Яндекс
 
22.07.08
14:32
(111)и сколько ноликов добавить надо?
113 Said_We
 
22.07.08
14:33
Методом тыка. Пока не округляет - значит еще мало.
114 Яндекс
 
22.07.08
14:35
((256.33/100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000) * 100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000) = 256.33
((256.33/1000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000) * 1000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000) = 0


невзлетает
115 Stepa86
 
22.07.08
14:36
((256.33/Pow(10,5000)) * Pow(10,5000)) = 256.33 - че за умный компилятор???
116 hhhh
 
22.07.08
14:45
(114) попробуй двумя командами.
117 Stepa86
 
22.07.08
14:49
пЧисло = 256.33;
   
   Множитель = Pow(10, 1000);
   
   пЧисло = пЧисло / Множитель;
   
   пЧисло = пЧисло * Множитель;
   
   Возврат пЧисло;


тоже не взлетело
118 Whatsun
 
22.07.08
14:57
математические функции что ли разрешили использовать?
119 FreeFin
 
22.07.08
15:33
Достаточно серая логика: (ибо каксигда гоню)))

Числим=ЧислоЧ*ЧислоЧ; //двузначие убираем
Делим=Числим/2;
Если (СтрДлина(Сокрлп(Делим))> СтрДлина(Сокрлп(ЧислоЧ))) и (Прав(Сокрлп(Делим),1)<>"0") Тогда
Сообщить("Нечетное!");
Иначе
Сообщить("Четное");
КонецЕсли;
120 FreeFin
 
22.07.08
15:36
чипятался

правильно:

Числим=ЧислоЧ*ЧислоЧ;
Делим=Числим/2;
Если (СтрДлина(Сокрлп(Делим))> СтрДлина(Сокрлп(Числим))) и (Прав(Сокрлп(Делим),1)<>"0") Тогда
Сообщить("Нечетное!");
Иначе
Сообщить("Четное");
КонецЕсли;
121 Копер
 
22.07.08
16:16
Четность n числа определяют по делению на 2 нацело =>  наличие/отсутствие дробной части числа n/2.
Тоесть, с заданными условиями, задача сводится к простому: "Как узнать дробную часть числа, не пытаясь узнать дробную часть числа"
122 Said_We
 
22.07.08
16:22
(114) Чего анекдот про то как станет "А на ... мне это нужно" и это только половина не вспомнился....?
Мало еще мало... :-))
123 Гений 1С
 
гуру
22.07.08
17:28
(118)(119) Нельзя использовать функции 1С, строковые и степень, валите лесом.
124 bahmet
 
22.07.08
17:40
бугага..неужто до 200 дотянете...надо еще парочку тупых задачь подкинуть,типа
"найдите сумму или разность чисел без операций +,- и не используя логарифмы и тригонометрию", "найдите степень числа используя тока переменные строкового типа"..и  тд :)
125 Гений 1С
 
гуру
22.07.08
17:46
(124) Докажи, что нельзя и успокойся. Пока не можешь доказать - в сад
126 Гений 1С
 
гуру
22.07.08
17:47
В детский!
127 Медвед1Сник
 
22.07.08
18:00
Ну в принципе есть такой алгоритм. Правда он не по теоретической части а по практический. Ориентирован на компьютерные числа. Предполагается что числа имеют максимальную (конечную) разрядность.
Суть проста. Последовательно вычитать степени двоек пока не исчерпается. Если в остатке останется единица то число нечетное.
Если исходить из восмиразрядного числа то получается такая схема:

Если Число > 1 Тогда Число = Число - 2 КонецЕсли;
Если Число > 1 Тогда Число = Число - 4 КонецЕсли;
Если Число > 1 Тогда Число = Число - 8 КонецЕсли;
Если Число > 1 Тогда Число = Число - 16 КонецЕсли;
Если Число > 1 Тогда Число = Число - 32 КонецЕсли;
Если Число > 1 Тогда Число = Число - 64 КонецЕсли;
Если Число > 1 Тогда Число = Число - 128 КонецЕсли;
Если Число = 1 Тогда Ответ = "Нечетное" Иначе Ответ = "Четное" КонецЕсли;

При этом не зависит от величины числа (кроме разрядности максимального представимого числа, но это "зашито" прочно в алгоритм).

Для 32-разрядного числа всего то будет 32 проверки. :)

Алгоритм можно еще оптимизировать сзедал вложенные условия :).
128 Медвед1Сник
 
22.07.08
18:01
сзедал = сделав
129 Яндекс
 
22.07.08
18:04
(127)без циклов
130 Гений 1С
 
гуру
22.07.08
18:13
(127) Ну этот алгоритм слишком большой для 1С, у нее разрядноть офигенно большая.
131 Fynjy
 
22.07.08
18:14
(0) Я же дал подсказку ...
Четное*Нечетное - Четное ...
Нечетное*Нечетное - Нечетное ...
Как пример:
1*5 = 5
2*5 = 10
3*5 = 15
4*5 = 20 ...
132 Медвед1Сник
 
22.07.08
18:14
(129) У меня нет циклов.

(130) Да, кстати сам недавно узнал что разрядность у 1сных чисел составляет где-то 1024 бита.
133 Fynjy
 
22.07.08
18:20
Пусть даны целое число a и натуральное число b. Разделить число a на b с остатком — значит найти такие целые числа q и r, что 0 ? r < b и a = bq + r. Такая пара чисел всегда существует и единственна. Число q называют частным, а r — остатком от деления a на b. Остаток от деления числа a на b равен нулю тогда и только тогда, когда a делится на b.
134 Фауст
 
22.07.08
18:20
Что интересно, одни из самых больших веток на мисте - это ветки гения, причем эскалация идиотизма в них не имеет никаких границ. Зачем вы все сюда пишите ? (0) Хоть бы ОФФ поставил.
135 Fynjy
 
22.07.08
18:23
(134) эскалация бездельничества ... Люди находят себе проблемы ... А задачка - 6,7 класс ...
136 Яндекс
 
22.07.08
18:25
(132)блин не много не так понял... а тот алгоритм что ты привел в (127) изначально не правильный...
137 Яндекс
 
22.07.08
18:26
(135)ну давай взрослый реши ее...
138 Медвед1Сник
 
22.07.08
18:27
(136) Что неправильного в нем?
139 Яндекс
 
22.07.08
18:34
(138)как чего? ... ты его хотя бы проверил


Четное - 0
Нечетное - 1
Четное - 2
Нечетное - 3
Четное - 4
Четное - 5
Четное - 6
Нечетное - 7
Четное - 8
Четное - 9
Четное - 10
Четное - 11
Четное - 12
140 Медвед1Сник
 
22.07.08
18:49
Да, я не проверял. Вот исправленный алгоритм :

Если Число > 128 Тогда Число = Число - 128 КонецЕсли;
Если Число > 64 Тогда Число = Число - 64 КонецЕсли;
Если Число > 32 Тогда Число = Число - 32 КонецЕсли;
Если Число > 16 Тогда Число = Число - 16 КонецЕсли;
Если Число > 8 Тогда Число = Число - 8 КонецЕсли;
Если Число > 4 Тогда Число = Число - 4 КонецЕсли;
Если Число > 2 Тогда Число = Число - 2 КонецЕсли;
Если Число = 1 Тогда Ответ = "Нечетное" Иначе Ответ = "Четное" КонецЕсли;

И его исполнение для числа 197:
197,
69,
5,
1,
"Нечетное"
141 Медвед1Сник
 
22.07.08
18:58
Вот оптимизированный алгоритм :)

Функция МучайЧисло(Число)
Число = ?(Число>128, Число = Число - 128, ?(Число>64, Число = Число - 64, ?(Число>32, Число = Число - 32, (Число>16, Число = Число - 16, (Число>8, Число = Число - 8, (Число>4, Число = Число - 4, (Число>2, Число = Число - 2, Число)))))));
Если Число > 2 Тогда
      МучайЧисло(Число);
Иначе

   Возврат(число);
 КонецЕсли;
КонецФункции;

Применение в основной программе :

Если МучайЧисло(число) = 1 Тогда Ответ = "Нечетное" Иначе Ответ = "Четное" КонецЕсли;

Думаю Гений1С будет доволен. :))))))
142 Медвед1Сник
 
22.07.08
18:58
Правда там есть скрытые циклы в виде рекурсии :)
143 Гений 1С
 
гуру
22.07.08
19:00
(142) потому и не годитцо
144 Медвед1Сник
 
22.07.08
19:02
(143) Ну никто не мешает развернуть рекурсию/цикл в явном виде. :)
Как в (140)
145 ado
 
22.07.08
19:19
(131) И в чем глувокий смысл сей подсказки?
146 Яндекс
 
22.07.08
19:20
не упреешь для числа = 99999999999999999999999999999999999999999999999999999999999999 разворачивать
147 kot_bcc
 
22.07.08
20:18
(137) Подозреваю, что он не сможет.

ЗЫ Уважаемые решатели! Как Вы думаете - чем отличается задача из (0) с учетом условий от задачи, описанной в (133)? И откуда берется стойкость алгоритмов шифрования с открытым ключом?
148 Asirius
 
22.07.08
20:19
(79) А в (13) практически и есть доказательство.

Пусть мы ухитрильсь описать такую функцию, возвращающую 0 или 1, в зависимости от того, четная она или нет:

Функция ПроверкаЧетности(ПроверяемоеЧисло)
   <Конечное количество итераций +,*,-,/, ПроверкаУсловий>
КонецФункции

Для начала заметим, что любую проверку условий можно свести к проверке типа

Если ВычислимоеВыражение=0 Тогда ... Иначе ... КонецЕсли;
или
Если ВычислимоеВыражение>0 Тогда ... Иначе ... КонецЕсли;

Таким образом, функция ПроверкаЧетности(ПроверяемоеЧисло) определена не только на целых числах, но и на вещественных. Причем непрерывность теряется у этой фукнкции в конечном количестве точек, а в области определения - это кривая конечного порядка.

Тогда получается, что уравнение ПроверкаЧетности(X)=0 имеет бесконечное количество решений (все нечетные X), но для кривой конечного порядка это означает тождественное равенство 0.
149 Гений 1С
 
гуру
23.07.08
09:46
(148) Обломись, речь идет только о проверки четности натуральных чисел, а не вещественных.
150 Stepa86
 
23.07.08
10:08
(149) тогда запрещай операции "-" и "/", иначе задача все равно сводится к вещественному полю чисел
151 Ненавижу 1С
 
гуру
23.07.08
10:12
Нельзя, точно также нельзя с помощью этих операций узнать, что число целое
152 Яндекс
 
23.07.08
10:15
определение четности числа
если целое число делится на два, оно называется чётным


деление - деление заменяет неоднократно повторенное вычитание


то есть чтобы узнать делится число на 2 или нет нам надо из него неоднакратно вычетать 2 пока результатом будет 1 или 0 ...
153 Whatsun
 
23.07.08
11:25
давайте учредим приз, тому кто решит данную математическую проблему 21 века
каждый кто здесь хоть что то вякнул скинется по 1wmz тому кто представит работающуюу программу на 1С либо доказательство невозможности понятное всем остальным.
154 Яндекс
 
23.07.08
11:30
на гения выплату приза повесить
155 AAZ
 
23.07.08
11:36
Берем последнюю цифру числа. Если 1,3,5,7,9 - нечетное, иначе четное :)
156 Яндекс
 
23.07.08
11:37
(155)скажи как взять?
157 Whatsun
 
23.07.08
11:37
(155) 37ым будете
158 Whatsun
 
23.07.08
11:38
напоминаю призовой фонд 37wmz
159 AAZ
 
23.07.08
11:39
(156), (157) Да, невнимательно всю ветку читал :)
Так-то бы через преобразование в строку...
160 AAZ
 
23.07.08
12:09
Во, без рекурсии, но со своими функциями:
//Фигня - реквизит формы: число длина 10, точность 0
Функция ВСтепени(степень)
   а=1;
   для б=1 По степень Цикл
       а=а*10;
   КонецЦикла;
   возврат а;
КонецФункции
Процедура УбратьРазряд(Бяка)
   перем разряд,значение;
   разряд=10;
    Пока Бяка-ВСтепени(разряд)<0 Цикл
          разряд=разряд-1;
   КонецЦикла;
   значение=9;
   Пока Бяка-значение*встепени(разряд)<0 Цикл
       значение=значение-1;
   КонецЦикла;
   Бяка=Бяка-значение*встепени(разряд);
КонецПроцедуры
Процедура Сформировать()
   
   Пока Фигня>10 Цикл
       УбратьРазряд(Фигня);
   КонецЦикла;
   Если (Фигня=1)или(Фигня=3)или(Фигня=5)или(Фигня=7)или(Фигня=9) Тогда
       Сообщить("Нечетное");
   Иначе
       Сообщить("Четное");
   КонецЕсли;
КонецПроцедуры
161 Гений 1С
 
гуру
23.07.08
12:09
(159) преобразование в строку низзя. Я готов закинуть на мобильный 10 рублей тому, кто решит
162 kosts
 
23.07.08
12:22
(161) Маловато будет.
Даешь премию 2^64 копеек!
163 Гений 1С
 
гуру
23.07.08
12:31
(160) Цикл есть, зависит от длины числа!
164 Гений 1С
 
гуру
23.07.08
12:41
(152) не тупи, надоел, почитай условие внимательно.
(151) докажи, что нельзя
165 Яндекс
 
23.07.08
12:44
(164)сам не тупи... еще раз без циклов достоверно узнать целое число или нет нельзя... читай внематочно опеределения четности и деления
166 agent-J
 
23.07.08
12:54
Преобразовать в строку, взять крайний символ справа и проверить условием
Если ("0" и число>0) или "2" или "4" или "6" или "8" тогда четное
Иначе Не четное
:)))
или это не по математически?%))))
167 agent-J
 
23.07.08
12:55
О! в (155) уже такой вариант был....
168 AAZ
 
23.07.08
12:57
(163) Цикл идет под МАКСИМАЛЬНО ВОЗМОЖНУЮ длину числа. Поставил на форме "10" - вот и в цикле 10 :)
169 Vovik
 
23.07.08
12:58
(162)А ты че нокию 3210 хотел?
170 Гений 1С
 
гуру
23.07.08
13:28
(165) Прочитал внимательно, доказательства не понял, я же разрешаю юзать умножение и деление для проверки, этого что, не достаточно.
(168) Я понял ход твоей мысли, но мне такое решение не нравится. Потому что для любого натурального числа такое решение не канает, т.к. подразумевает ограниченность разрядности. Хочется чего-нибудь элегантного и не итерационного.
171 Яндекс
 
23.07.08
13:38
да ибо проверка четное не четное грубо говоря осуществляется так


чисЗначение = 23434545645;
пока чисЗначение > 1 цикл
 чисЗначение = чисЗначение - 2;
конеццикла;
если чисЗначение = 0 тогда
 сообщить("четное");
иначе
 сообщить("нечетное");
конецесли;
172 Skom
 
23.07.08
13:42
(0) аффтар ты ГАД....
я полночи не спал думая на эту тему....
забил потом....

ыыы

чувствую что "истина где то рядом" но не до этого пока
173 КонецЦикла
 
23.07.08
13:45
(0) Прикалываешься или идиот?
Зачем цикл/рекурсия?
128 или 10000128 - что-то меняется в подходе?
175 hhhh
 
23.07.08
13:51
(170) 1C не работает с числами неограниченной разрядности. Поэтому скорее прав (168).
176 Vovik
 
23.07.08
13:56
Я вижу только сравнение разрядности. Т.е. делим на два. Если знаков после запятой добавилось - нечетное иначе четное. А как еще?
177 AAZ
 
23.07.08
13:59
(170) Ну вот без ограничения разряда

Процедура УбратьРазряд(Бяка)
   перем разряд,значение;
   разряд=1;
   Пока Бяка-ВСтепени(разряд)>=0 Цикл
          разряд=разряд+1;
   КонецЦикла;
   разряд=разряд-1;
   значение=9;
   Пока Бяка-значение*встепени(разряд)<0 Цикл
       значение=значение-1;
   КонецЦикла;
   Бяка=Бяка-значение*встепени(разряд);
КонецПроцедуры
178 Яндекс
 
23.07.08
13:59
(176)это было понятно еще в самом начале... вот только как просечь что после запятой добавлись знаки используя только арифметику("+-/*") и если
179 Zmich
 
23.07.08
14:06
Еще один дурацкий способ. Сделал на форме реквизит диалога ВыбЧисло, куда вводим число, которое хотим проверить на четность. Сделал также реквизит диалога ТемпЧисло (тип - Число, Длина = 19, Точность = 0), поставил флаг "Сделать невидимым". Код:

Процедура Сформировать()
   ТемпЧисло = ВыбЧисло/2;
   ТемпЧисло = ТемпЧисло*2;
   Если ВыбЧисло = ТемпЧисло Тогда
       Сообщить("Четное");
   Иначе
       Сообщить("Нечетное");
   КонецЕсли;    
КонецПроцедуры
180 vde69
 
23.07.08
14:10
наверно я ГЕНИЙ, правда в функции получения НОД есть цикл, но ведь эта функция паскаля а не 1с ))))

Если GCD(МоеЧисло, 2) = 2 Тогда
сообщить(Четное);
Иначе
сообщить(не Четное);
КонецЕсли;



(*************************************************************************
Функция ищет наибольший общий делитель  двух
чисел алгоритмом Евклида.
*************************************************************************)
function GCD(A : Integer; B : Integer):Integer;
begin
   A := AbsInt(A);
   B := AbsInt(B);
   if (a=0) or (b=0) then
   begin
       Result := a+b;
       Exit;
   end;
   while a<>b do
   begin
       if a>b then
       begin
           a := a-b;
       end
       else
       begin
           b := b-a;
       end;
   end;
   Result := b;
end;



Собствено из этого следует довольно простой вывод, что если кто сможет реализовать САБЖ, то он найдет новый нариант поиска НОД, а это будет круто )))
181 Яндекс
 
23.07.08
14:17
(180)в самой 1С есть функция которая определит... но их использовать нельзя... да и циклы тоже
182 Serg_1960
 
23.07.08
14:21
Не по теме... просто так... красиво...

Функция НеЧетноеЧисло(Знач Число) Экспорт

// Возврат: Истина для нечетного числа, иначе Ложь

  Если Число>0 Тогда
     Возврат ?(Число<2, Число, НеЧетноеЧисло(Число-2));
  Иначе
     Возврат ?(Число>-2, -Число, НеЧетноеЧисло(Число+2));
  КонецЕсли;

КонецФункции


PS: Виват Гений 1С! Почитал, - отдохнул душой...
Вспомнил как в школе с дочкой уроки готовили: "Не так нельзя: мы интегралы только в 3-м классе будем проходить" О_О
183 Яндекс
 
23.07.08
14:27
самая красивая и максимально близкое решение у kost в (16)


функция ЧетНеЧет(чисЗнач)
 с = чисЗнач / 2;
 д = "" + с + ".5";
 е = а / 2 * 10 + 0.5;
 ф = "" + е;
 если ((а = 0) или (д =  ф)) тогда
   возврат "Четное";
 иначе
   возврат "Нечетное";
 конецесли;
конецфункции;
184 Яндекс
 
23.07.08
14:28
функция ЧетНеЧет(чисЗнач)
 с = чисЗнач / 2;
 д = "" + с + ".5";
 е = чисЗнач / 2 * 10 + 0.5;
 ф = "" + е;
 если ((чисЗнач = 0) или (д =  ф)) тогда
   возврат "Четное";
 иначе
   возврат "Нечетное";
 конецесли;
конецфункции;
185 hhhh
 
23.07.08
14:34
(183) все-таки (179) круче. Без преобразования строк.
186 Serg_1960
 
23.07.08
14:37
Гений! Разреши строковые преобразования, а то у меня есть красивое решение :о)

Возврат СтрЧислоВхождений(Число/2, ",");
187 kosts
 
23.07.08
14:39
(186) Победа в номинации самое короткое решение
188 Serg_1960
 
23.07.08
14:41
(187) Спасибо!!!
189 kosts
 
23.07.08
14:41
(184) при разных настройках разделитель может быть "." или ","
190 Яндекс
 
23.07.08
14:44
(185)
для ВыбЧисло = 99999999999999999990 по 99999999999999999999 цикл
   Сформировать();
конеццикла
191 Fragster
 
гуру
23.07.08
14:46
(186) а если % разрешить - то еще круче получится... кстати, % - более стандартная операция, чем преобразования число/строка
192 Serg_1960
 
23.07.08
14:54
(189) Не нравится (186)? Ты, враг народа, получи:

Возврат СтрЧислоВхождений(Число/2, Сред(0.1,2,1));
193 IT Михаил
 
23.07.08
14:55
(0)в школе информатику не преподавал? )))
194 Serg_1960
 
23.07.08
14:58
(193) +1 Это еще тот вопрос: или мы его..., или он нас...
195 Bww_
 
23.07.08
15:03
186 ужe было в 39
Если Найти(СокрЛП(КонтрЧисло/2),".")>0 Тогда Возврат "Не четное";

А по существу - используя заданные параметры - задача решения не имеет.
По любому, нужно знать либо целую часть заданного числа, либо остаток от его деления на два. Операциями "+, -, *, /" этого узнать не возможно, т.к. это не операции разложения числа на составляющие.
196 hhhh
 
23.07.08
15:05
(190) ответная граната:

ЧетНечет(2) выдает "Нечетное".
197 airyashov
 
23.07.08
15:08
если деление целочисленное
число-(число/2)*2
198 Яндекс
 
23.07.08
15:10
(196)молодец ... я там нолик пропустил )))



//*******************************************
функция ЧетНеЧет(чисЗнач)
   с = чисЗнач / 2;
   д = "" + с + "0.5";
   е = чисЗнач / 2 * 10 + 0.5;
   ф = "" + е;
   если ((чисЗнач = 0) или (д =  ф)) тогда
       возврат "Четное";
   иначе
       возврат "Нечетное";
   конецесли;
конецфункции;
199 kosts
 
23.07.08
15:21
(198) И правильно говорят: "Работает - не трогай" :-)
200 Serg_1960
 
23.07.08
15:23
А пропади оно пропадом! Дай "сломать" что-нибудь

функция ЧетНеЧет(чисЗнач)
  Возврат ?(чисЗнач=0 Или (""+чисЗнач/2+"0.5")=(""+(чисЗнач/2*10+0.5))), "", "Не") + "Четное";
КонецФункции;
201 vde69
 
23.07.08
15:23
Попытка
 Выполнить("к"+(Значение/2)=1);
 возврат "Четное";
Исключение
 возврат "Нечетное";
КонецПопытки
202 hhhh
 
23.07.08
15:24
(198) теперь не срабатывает из-за (189)
Я не хочу быть самым богатым человеком на кладбище. Засыпать с чувством, что за день я сделал какую-нибудь потрясающую вещь — вот что меня интересует. Стив Джобс