Необходимо написать алгоритм нахождения наименьшего общего делителя чисел в 1с. Например НОД(168, 180, 3024). Может кто то уже делал или может дать наводку, вообщем за любую помощь буду очень благодарен!
3.
spacecraft
20.01.19 19:57 Сейчас в теме+0.79 $m
(1) вот один из вариантов НОД3() для 3-х положительных чисел:
Функция НОД(а,б)
Пока а <> б Цикл
Если а > б Тогда а = а - б;
Иначе б = б - а;
КонецЕсли;
КонецЦикла;
Возврат а;
КонецФункции
Функция НОД3(Знач а, Знач б, Знач в)
Возврат НОД(НОД(а,б),в);
КонецФункции
(12) Олежа, просто протестируй. Твой код врет да еще и цикл делает кучу лишних манипуляций. И тот факт, что писал я только пример, поправив который все посчитает не делает его "опечаткой".
В итоге:
Твой код показал результат 9 и 62 итерации цикла
Мой код показал 3 и 2 итерации.
Пояснишь?
К1 = 0; К2 = 0;
НодОлежи(9999, 4500, К1);
Нод(9999, 4500, К2);
Сообщить(К1);
Сообщить(К2);
КонецПроцедуры
Функция НодОлежи(а, б, К)
Пока а <> б Цикл
К = К + 1;
Если а > б Тогда а = а - б;
Иначе б = б - а;
КонецЕсли;
КонецЦикла;
Возврат а;
КонецФункции
Функция НОД(Ч1, Ч2, К)
Для Сч = 2 По 999 Цикл
К = К + 1;
Если Ч1 % Сч = 0 И Ч2 % Сч = 0 Тогда
Возврат Сч;
КонецЕсли;
КонецЦикла;
КонецФункции
Твой код показал результат 9 и 62 итерации цикла
Мой код показал 3 и 2 итерации.
Пояснишь?
Что пояснять? Что ваш код сплошная "опечатка"? И это с условием не одного изменения...
9999/9 = 1111, 4500/9 = 500. Итого: 9 наибольший общий делитель.
Еще вопросы?
для начала стоит читать (0). Есть задача, есть решение. В (2) да, решение = 1. Это ответ на поставленный вопрос. Если нужен ответ на наименьший не равный 1, то мой вариант. Про наибольший есть эффективные алгоритмы и запрограммировать их не составит труда. Топикстартер задал вопрос по НАИМЕНЬШЕМУ точка. Наименьшее равное единице не имеет смысла, потому что всегда истинно.
Это ответ на поставленный вопрос. Если нужен ответ на наименьший не равный 1, то мой вариант. Про наибольший есть эффективные алгоритмы и запрограммировать их не составит труда. Топикстартер задал вопрос по НАИМЕНЬШЕМУ точка.
это попытка подогнать свой ответ под вопрос? Где в вопросе про "наименьший" и не равен 1? Сами придумали?
НОД, 6 класс, математика. Нет понятия наименьший общий делитель, так как он всегда равен 1. В этом случае логично предположить, что автор темы просто опечатался в наименовании.
Учитывая, что приводится в вопросе: "Например НОД(168, 180, 3024)". А НОД() это конкретно расшифровывается в математике как Наибольший общий делитель.
В любом случае ваш ответ вообще ни подо что не подходит.
(19) ты прочитай тему и поймешь, что ТС ни в шапке, ни в комментарии не указал, что ему действительно нужен наибольший. Но русским по белому написал наименьший. Для чего ему это понадобилось это его дело. Да, я подогнал свой ответ под вопрос. Потому что иначе ответ = 1 не имеет смысла, т.к. всегда в истине.
А НОД() это конкретно расшифровывается в математике как
Нод — многозначный термин
Земля Нод — упоминаемая в Библии местность, куда был изгнан Каин после убийства Авеля.
НОД — на железнодорожном транспорте — начальник отделения железной дороги .
НОД — Народное ополчение Донбасса
НОД — российское политическое движение, созданное в 2012 году. Выступает в поддержку президента РФ Владимира Путина, активисты отметились рядом провокаций и нападений на оппозиционных активистов.
Братство Нод — организация из серии игр Command & Conquer , возглавляемая Кейном.
(20) и еще раз. Для особо преособо умеющих читать одно, понимать другое. ТС написал НАИМЕНЬШИЙ и нигде не опроверг. Даже после (2). Вот сразу вспоминаются пользователю-любители додумать, после которых приходится устанавливать жесткие рамки. Пусть тебе ботинки раз продадут не по размеру, а как продавец додумал, на размер меньше, тогда все поймешь. А на этом бесконечный цикл предлагаю закончить. Вызови в своей голове Прервать;
(24) Если вы считаете поиск наибольшего общего делителя фантазиями комментаторов, то отбрасывание единицы в качестве наименьшего общего делителя - это уже ваши личные фантазии. ТС ничего такого не говорил и единица отлично подходит.
(26) А если без если? Прочитайте шапку и заголовок. Прочитайте еще раз. И еще раз. А потом вникните, что значит наименьшего.
Я не спорил, что единица неверный вариант, повторять не стал, потому, что смысла повторять (2) нет. Предложил свой вариант, когда наименьший не единица.
И еще раз повторюсь специально для вас(не Вас, а всех абстрактных комментаторов). Я не говорил, что единица неправильный. Я не говорил, что мой вариант единственно верный. Я лишь предложил свой вариант для случая, когда единица, которая является истиной для любых вариантов нахождения НАИМЕНЬШЕГО общего делителя.
И еще раз. Для случая, когда единица, которая является истиной для любых вариантов нахождения НАИМЕНЬШЕГО общего делителя, но без единицы.
Почему без единицы? Повторюсь. Потому что вопрос не имеет смысла в таком случае.
Почему без единицы? Повторюсь. Потому что вопрос не имеет смысла в таком случае.
И еще потому, что термин НОД имеет вполне однозначное толкование в обсуждаемом контексте. ТС с очень большой вероятностью ошибся.
Ваша позиция хоть и странная, но понятная. Я бы и слова не сказал, если бы не ваша агрессивная манера отстаивания этой позиции с переходом на личности.
(28)
1. ТС нигде не опроверг, что ему требуется наименьший общий знаменатель.
2. Я согласен, что термин НОД является наибольшим, математику не прогуливал. Но заголовок, описание. И к тому же, ТС не сказал, что ему нужен наибольший, он предложил имя функции.
3. да, возможно, я слишком близко принял выпады Олега. Но напомню с чего все началось
(10) только если весь код назвать "опечатка".
Особенно, если учесть, что сам он в контексту вопроса, не прав.
И Вы лично, судя по разработкам, являетесь разработчиком и должны понимать контекст задачи, что есть конкретная данность, которую нужно принять. Возможно уточнить, немного модифицировать, но не так, чтобы при запросе количества выдавалась сумма.
Если бы ТС пришел в свою тему и сказал, что он опечатался, я бы в таком случае согласился.
1. Ищем наименьшее из чисел
2. Строим цикл от 1 до этого наименьшего
3.Делим исследуемые числа на итератор цикла
4. Сравниваем полученные результаты с их округленными(до целого) значениями
5. Если все сравниваемые величины совпали совпали, то НОД = итератор цикла
1. Ищем наименьшее из чисел
2. Строим цикл от 1 до этого наименьшего
3.Делим исследуемые числа на итератор цикла
4. Сравниваем полученные результаты с их округленными(до целого) значениями
5. Если все сравниваемые величины совпали совпали, то НОД = итератор цикла
Понравился подход через поиск общего множителя. То есть, здесь без цикла выполняется поиск необходимого результата - благодаря формулам. Советую посмотреть материалы по ссылкам.