Как увеличить на постоянное число при суммировании чисел в Labview? - PullRequest
0 голосов
/ 31 октября 2018

Я только начал изучать Labview сегодня, и много занимался поиском в Интернете и изучением примера кода. Тем не менее, я все еще застрял на некоторых простых понятиях.

В настоящее время я пытаюсь написать простой код, который суммирует все числа, меньшие или равные N, которые кратны 3 и 5. Вот изображение того, что у меня есть сейчас. Я чувствую, что это близко, но я упускаю ключевой аспект, чтобы заставить цикл складывать все числа, которые соответствуют этому критерию (а не только последний).

Чтобы попытаться провести вас через это - у меня есть цикл for, и я начинаю с указания некоторого числа N (или, скорее, N + 1), к которому я пошел, чтобы повторить. Я также устанавливаю i равным 5, так что я начинаю итерацию с числом 5 (я думаю) и продолжаю с кратными 5. Затем я делю входное число на 3 и проверяю, равен ли остаток 0 или нет. Если это так, то это также кратное 3, так что булевому значению присваивается значение True, и я добавляю это число к моей окончательной сумме (+0, потому что я не знал, что еще можно там поставить). Если это не так, я просто добавляю 0. Затем рассчитывается окончательная сумма.

Если я начну с N = 16 в верхнем левом углу, мой индикатор «итоговой суммы» скажет 15, что правильно, потому что 15 - это единственное число из 5-15, которое кратно 3 и 5. Однако, если Я пробую 1001, например, мой индикатор «окончательной суммы» показывает 0. Поэтому я думаю, что он выполняет только эти проверки и суммы для последнего числа в цикле - или все предыдущие результаты перезаписываются. Хотя я не уверен, как это исправить (я попробовал сдвиговый регистр, но затем удалил его, потому что думаю, что это принесет мою окончательную сумму на вход нового цикла, а это не то, что мне нужно). Любая помощь приветствуется!

Ответы [ 2 ]

0 голосов
/ 31 октября 2018

Ключ в том, что выходной туннель из вашего цикла for установлен на «Last Value», что означает, что то, что записано в Final Sum, это то, что находится на этом проводе в последний раз. Другим вариантом является создание этого туннеля индексирования. У вас есть провод, который делает это, но затем вы не выполняете никаких операций с ним. Если вы суммируете элементы этого автоматически сгенерированного массива (это то, что делает индексация), то вы получите результат, который вы ищете.

Кроме того, вы не можете писать мне; он просто дает вам текущий индекс цикла for.

Учитывая простоту выполнения, я бы не беспокоился о выполнении ненужных шагов, поэтому вам не нужно беспокоиться о приращении на что-либо, кроме 1. Это хорошо, потому что в LabVIEW, для циклов For всегда увеличивается на единицу.

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

Вот небольшая модификация того, что вы сделали, но это должно сработать, что я только что исправил на основании комментария nekomatic:

Code Snippet

А вот код, который будет выполнять то же самое, но с меньшим количеством выполнений:

Code Snippet 2

0 голосов
/ 31 октября 2018

Вы можете загрузить здесь VI или фрагмент VI (не скриншот). Потому что сейчас, когда все эти провода идут справа налево, сложно что-то делать ... А что касается вопроса - итоговая сумма конечно пуста, т.к. вы не добавляете предыдущие результаты. Сохраните его, чтобы сдвинуть регистр, и добавьте к нему значения, если необходимо.

...