Подсчет суммы f(x) в цикле

Общие принципы, проектирование, модуляризация, темплейты и шаблоны
Ответить
Homez
interested
interested
Сообщения: 6
Зарегистрирован: 30 дек 2011, 15:23
Версия LabVIEW: 2011
Контактная информация:

Подсчет суммы f(x) в цикле

Сообщение Homez »

Всем привет! Я в LabVIEW относительно новичок. Был по нему курс в институте, в качестве курсовой я реализовал матричный калькулятор, но с тех пор все, разумеется выветрилось (лет 10 прошло).

В чем заключается вопрос. Я недавно стал участником проекта http://projecteuler.net/. Там нужно решать разлчные математические задачки, для решения нужно писать программы. Полученные ответы надо вводить на сайте, можно наблюдать за своим прогрессом.

Большинство задач связаны с теорией чисел. Я писал программы для их решения в C++ Builder, MSVC++ и Java. А вот пару дней назад увидел в статистике, что есть участники, которые пытаются решать в LabVIEW. И я решил тряхнуть стариной.

Но тут же возникли трудности. Например, одна задача, самая простая, звучит так. Требуется подсчитать сумму натуральных чисел от 1 до 1000, которые делятся на 3 или на 5. При реализации "наивным" методом требуется эту сумму считать в цикле, пробегая все числа от 1 до 1000 и деля их на 3 и на 5, проверяя остаток.

Вот вопрос: как мне запоминать эту сумму и на каждой итерации цикла, если число делится на 3 или на 5, прибавлять его к ней? А потом вывести результат на контрол.
Изображение
Аватара пользователя
IvanLis

Activity Professionalism Tutorials Gold Man of the year 2012
Автор
guru
guru
Сообщения: 5462
Зарегистрирован: 02 дек 2009, 17:44
Награды: 7
Версия LabVIEW: 2015, 2016
Откуда: СССР
Благодарил (а): 28 раз
Поблагодарили: 86 раз

Re: Подсчет суммы f(x) в цикле

Сообщение IvanLis »

Homez писал(а):как мне запоминать эту сумму и на каждой итерации цикла, если число делится на 3 или на 5, прибавлять его к ней? А потом вывести результат на контрол.
Используйте сдвиговый регистр
Temp.png
Temp.png (14.04 КБ) 12831 просмотр
Только, чей прогресс Вы наблюдать собираетесь?
Homez
interested
interested
Сообщения: 6
Зарегистрирован: 30 дек 2011, 15:23
Версия LabVIEW: 2011
Контактная информация:

Re: Подсчет суммы f(x) в цикле

Сообщение Homez »

Спасибо! Я вроде и сам докумекал до shift register, но я так же использовал и feedback node, через который вход и выход сдвигого регистра связывались. Вы показали, что можно и без этого обойтись.

Насчет прогресса. Я же сказал, что наблюдать можно за СВОИМ прогрессом - то есть, в списке задач видно, какие уже решены, а какие нет. Так же можно отслеживать свое место среди, например, участников из России.
Изображение
Аватара пользователя
Oleg B.

Activity Professionalism
leader
leader
Сообщения: 674
Зарегистрирован: 25 сен 2011, 11:30
Награды: 2
Версия LabVIEW: 5 .. 2021
Откуда: Israel
Контактная информация:

Re: Подсчет суммы f(x) в цикле

Сообщение Oleg B. »

IvanLis писал(а):Только, чей прогресс Вы наблюдать собираетесь?
Homez , иронию IvanLis Вы, похоже не поняли.
Участвовать в конкурсе на одном сайте, и при этом, не стесняясь, просить помощи на другом, ИМХО, не честно к другим участникам конкурса.
veni, vidi, phallomorphi
Homez
interested
interested
Сообщения: 6
Зарегистрирован: 30 дек 2011, 15:23
Версия LabVIEW: 2011
Контактная информация:

Re: Подсчет суммы f(x) в цикле

Сообщение Homez »

Собственно, я уже решил несколько десятков задач с помощью C++ и Java, в том числе и эту элементарную задачу - ее решил первой. Просто было интересно посмотреть, как можно было бы это сделать в LabVIEW. Поэтому никакой нечестности здесь не вижу - еще одно решение, пусть и другим методом, мне никак уже не зачтется! Я бы не стал просить где-нибудь помощи в решении задачи с того сайта, которой не мог бы решить. В таких случаях я ее просто откладываю и возвращаюсь к ней потом, когда поднакапливается некоторый опыт.

Эту задачу я привел просто как пример. Меня интересовало именно работа в LabVIEW с данными, "переползающими" из одной итерации цикла в другую.
Изображение
Homez
interested
interested
Сообщения: 6
Зарегистрирован: 30 дек 2011, 15:23
Версия LabVIEW: 2011
Контактная информация:

Re: Подсчет суммы f(x) в цикле

Сообщение Homez »

И стесняться здесь мне совершенно нечего!
Изображение
AndreyDmitriev

Activity Professionalism Tutorials Gold Black
VIP
VIP
Сообщения: 1327
Зарегистрирован: 03 фев 2010, 00:42
Награды: 6
Версия LabVIEW: 6.1 - 2024
Откуда: Германия
Благодарил (а): 1 раз
Поблагодарили: 38 раз
Контактная информация:

Re: Подсчет суммы f(x) в цикле

Сообщение AndreyDmitriev »

Homez писал(а):Спасибо! Я вроде и сам докумекал до shift register, но я так же использовал и feedback node, через который вход и выход сдвигого регистра связывались. Вы показали, что можно и без этого обойтись.
Ничего там не "связывается" через feedback node. Это просто чуть иное визуальное представление. А вход и выход сдвигового регистра и так априори связаны.

Коллега, то, что Вы пытаетесь ещё раз решить задачки с помощью LabVIEW - это, безусловно, похвально. Это на самом деле хорошая разминка для головы (впрочем задачки там несколько однообразны - по крайней мере, из первого десятка, которые я порешал). Хорошая тема для олимпиады, если "на скорость" надо программировать.

Однако, помощь на форуме - вещь не всегда полезная. Вам дают более-менее готовое решение, однако многие вещи остаются за кадром - а до них можно дойти только самостоятельно, повертев код со всех сторон, пытаясь решить несколькими способами. Например, в данном случае задачку можно решить и с помощью feedback node, а судя по Вашей фразе выше у меня вот создалось ощущение, что Вы до конца не почувствовали сходство и различие между feedback node и shift register. А читать на самом деле надо вот здесь: Transferring Values between Loop Iterations. Там Вы обнаружите, что feedback node и shift register - почти одно и то же.

Ну и не останавливайтесь на достигнутом, конечно. Успехов!

Изображение
Аватара пользователя
Jakob Brontfeyn

Activity Gold Silver Black
expert
expert
Сообщения: 1729
Зарегистрирован: 28 фев 2008, 11:01
Награды: 6
Благодарил (а): 1 раз
Контактная информация:

Re: Подсчет суммы f(x) в цикле

Сообщение Jakob Brontfeyn »

Labview прекрасно подходит для задач теории чисел
смотри, хотя бы эти два примера из форума:
Простые числа от и до
http://labviewportal.org/viewtopic.php? ... ahl#p23792

Фибоначи
http://labviewportal.org/viewtopic.php? ... =45#p30285

Хорошо, если проснулся интерес к Labview,
как говорится, лучше позже, чем никогда.
Homez
interested
interested
Сообщения: 6
Зарегистрирован: 30 дек 2011, 15:23
Версия LabVIEW: 2011
Контактная информация:

Re: Подсчет суммы f(x) в цикле

Сообщение Homez »

Andrey и Jacob, спасибо за поддержку! Думаю, что LabVIEW я еще покручу, вот только не знаю, осилю ли, например, решение тех же задач на Project Euler сразу этим средством, а не вторично, то есть уже после того, как задачу решил на каком-нибудь ЯВУ. Тем более, что у меня уже под сотню решенных задач на этом сайте, задачи попроще попадаются уже довольно редко.

Жаль, что для выполнения LabVIEW-ВИ на целевой машине требуется довольно весомый рантайм, хоть он и бесплатный. А то бы я махнул на нем что-нибудь вроде тетриса (ну собственно, и так можно махнуть, но просто траблы будут, если я захочу вывести конечный продукт в массы:)

Andrey, по этой ссылке почитаю, самому интересно. А этот документ есть в документации в установке LabVIEW?

Jakob, по первой ссылке открывается немецкий топик из трех сообщений. Вы его имели в виду? Немецкий я хоть и изучал в школе, но знаю очень плохо, до уровня даже технического чтения не дотягиваю. Хотя можно гуглом страницу перевести...

По поводу чисел Фибоначи, вторая задача на Project Euler им посвящена, я решил ее раньше, чем увидел этот Ваш пост. Отличие в том, что я использовал для хранения пары последних чисел Фибоначи два разных сдвиговых регистра, а в примере наглядно показывается, как можно ипользовать один, только в контексте стека. Этот стек мне попадался и в документации, и в ВИ я его как-то случайно ляпнул, но я ему не придал должного значения. Теперь буду использовать для подобных случаев, пожалуй, даже задачку эту перепишу, где можно.

P.S. (off-topic) Благодаря Andrey узнал, что можно в подписи добавлять картинку со своими успехами с Project Euler. Как-то не обратил ранее на это внимания. Thanks.

P.S.
Изображение
Аватара пользователя
Jakob Brontfeyn

Activity Gold Silver Black
expert
expert
Сообщения: 1729
Зарегистрирован: 28 фев 2008, 11:01
Награды: 6
Благодарил (а): 1 раз
Контактная информация:

Re: Подсчет суммы f(x) в цикле

Сообщение Jakob Brontfeyn »

Homez писал(а): Jakob, по первой ссылке открывается немецкий топик из трех сообщений. Вы его имели в виду? Немецкий я хоть и изучал в школе, но знаю очень плохо, до уровня даже технического чтения не дотягиваю. Хотя можно гуглом страницу перевести...
P.S.
Да надо было, просто в теме виайку запустить,
для получения простых чисел на интервале
от .... и до ...., диаграмма открыта, особенности
этого быстроработающего алгоритма, я могу обьяснить
на русском, если надо.
Homez
interested
interested
Сообщения: 6
Зарегистрирован: 30 дек 2011, 15:23
Версия LabVIEW: 2011
Контактная информация:

Re: Подсчет суммы f(x) в цикле

Сообщение Homez »

Окей, гляну как-нибудь. Мне тут как раз надо для одной задачи массив простых чисел от 1 до 333 333 333, так как нужна факторизация разных чисел, от маленьких до вот этого верхнего лимита. Этот массив строится достаточно долго, для такого верхнего лимита я еще эту процедуру не запускал. Может, у Вас действительно быстрый алгоритм.

А определение того, является ли 64-битное число простым, я сделал на LabView, вынес в sub-VI, работает корректно. Писал для того, чтобы использовать в одной задачке (которую я уже решил ранее на C++), но оказалось, что задача быстрее решается и без этого. Но хотя бы sub-VI научился делать, помог мне в этом, кстати, видеоурок на этом сайте.
Изображение
Аватара пользователя
IvanLis

Activity Professionalism Tutorials Gold Man of the year 2012
Автор
guru
guru
Сообщения: 5462
Зарегистрирован: 02 дек 2009, 17:44
Награды: 7
Версия LabVIEW: 2015, 2016
Откуда: СССР
Благодарил (а): 28 раз
Поблагодарили: 86 раз

Re: Подсчет суммы f(x) в цикле

Сообщение IvanLis »

Посмотрите книгу Кнут Д. Искусство программирования. Даю 99%, что алгоритмы для решения большинства задач Вы там встретите. А вот как их реализуете в :labview: , это уже другой вопрос.
Ответить
  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Модели программирования»