Подсчет количества повторяющихся значений
- Войдите на сайт для отправки комментариев
Втр, 06/03/2018 - 14:50
Добрый день. Новичок в теме, поэтому никак не могу найти ответа на вопрос:
для проверки и закрепления навыков пишу следующую программу:
на экран рандомно подаются значения переменной.
Вторая переменная должна считать,сколько раз выпадали:
Первый вариант задачи: одинаковые числа, велся их учёт и выводился там же
Второй вариант: числа больше определенного значения, их количество так же учитывается и выводится.
#include <LiquidCrystal.h> #include <Time.h> LiquidCrystal lcd(4, 5, 6, 7, 8, 9); void setup() { lcd.begin(16,2); lcd.clear(); randomSeed(analogRead(0)); } void loop() { int a = random(256); lcd.setCursor(0,0); lcd.print("Random N: "); lcd.print(a); if (a>200) { int b = 0; b++; lcd.setCursor(5,1); lcd.print("N>200: "); lcd.print(b); } delay(1000); }
у меня же после нескольких итераций выскакивает во второй строке значение второй переменной = 1(стало быть, один раз число проскачило) и все,больше не меняется.
Первый вариант задачи: одинаковые числа, велся их учёт и выводился там же
ЧТо такое одинаковые числа? Вы можете словами написать что под этим понимается?
Конечно.
Допустим, за час на дисплее выпало 50 раз число 200.
во второй строке должно появиться именно это значение.(50 раз)
Или же,как во втором варианте, пример: количество значений, превысивших значение 200 должны отображаться на счётчике.
Нет так не пойдёт. Вы только 200 считаете? Об этом не было речи. А если 5 раз выпдет 200 и шесть раз 150, тогда как?
Задаа в следующем:
в случайном порядке на экране появляются значения переменной а;
при наступлении определенного условия (значение а = 200; равно 900; больше 300) вторая переменная b начинает отображать количество раз,когда это условие выполнилось.
Может,я как-то неверно объясняю?
Я так понял, это вторая задача?
А теперь
для проверки и закрепления навыков
Проштудируйте тему статические и глобальные переменные, выясните чем отличается автоматическая переменная от статической, посмотрите на свой код и исправьте ошибку.
Может,я как-то неверно объясняю?
Да, Вы невнятно объясняли, теперь понятно. Ну, тогда у Вас не две задачи, а одна. т.к. в принципе пофиг, какое там условие.
Что касается Вашего кода, то на ошибку я Вам уже намекнул. Работайте.
Благодарю! Ушёл читать матчасть.
Ошибку нашёл, переменную вынес.
Теперь другой косяк: значения больше 200 он начал считать, но при рандоме свыше 256 (а он и 853 и 998 может выдать) он их не засчитывает. Что-то не уловил?
Ну, зачем так жестоко. Если переменная нигде, кроме как в одной функции не используется, то делать её глобальной - любительство и говнокод. Оставляйте её внутри функции, просто сделайте статической.
С какого это перепугу, если Вы в 16-ой строке явно написали 256? Он Вам вылаёт от 0 до 255 и ничего больше. Неужели Вам на экран что-то другое вылазит? Не может такого быть.
Другое дело, что Вы ещё сверху ограничили "a <= 999" непонятно зачем.
Именно так и происходит - среди значений на дисплее пробегают и 500-е и 800-е значения. Именно после появления на дисплее таких значений и решил ограничить её сверху, но и это никак не изменило ситуацию.
Про переменную учёл, благодарю.
Ну правильно, Вы ж выводите поверх старых значений. Вот, например, было значение 108, следующее значение вышло 75 вот на экране и будет 758
Так для того,чтобы избавиться от этого наложения и используется команда lcd.clear при начальных условиях скетча. Разве нет?
Нет, процедура setup выполняется один раз при старте контроллера. Вам надо либо форматировать вывод, например, всегда три цифры выводить, либо полностью очищать экран либо пробелами забивать место где будет вывод числа
для проверки и закрепления навыков ...