Простой перебор я и сам могу сделать… вопрос в #0 был именно “не в простом” выборе, а именно в функции getNextIndex… а пункты, это второстепенно…
жаль, что это было непонятно( Не зря я их сделал просто булевыми переменными…
Вы вообще только про меню написали… это не ваш “косяк”))) Задание провали БУМ
Да ладно вам… что же вы злые какие)))))
И собака, и хозяин, и дети, все…
Нет что бы спасибо сказать…
Собаки-то они сами себя показывают… лают на всех…)) Дети - это понятно, а хозяин кто?
Лучше по коду подсказали бы что)
Спойлер
#define ITEM_COUNT 5
byte Ind;
byte * fillArr(byte Arr[], byte ArrCnt) {
Arr[0] = 0;
Arr[1] = 0;
Arr[2] = 0;
Arr[3] = 0;
Arr[4] = 0;
//for (byte n = 0; n < ArrCnt; n++) Arr[n] = random(10);
return Arr;
}
byte getNextIndex (byte CurrInd, byte Arr[], byte itemCount) {
if (CurrInd >= itemCount) return 0;
for (byte n = CurrInd; n < itemCount; n++)
if (Arr[n]) return n + 1;
return 0;
}
void setup() {
Serial.begin(115200);
}
void loop() {
byte IArr[ITEM_COUNT];
Ind = getNextIndex (Ind, fillArr(IArr, ITEM_COUNT), ITEM_COUNT);
Serial.println(Ind);
delay(500);
}
Вам? А за что?
Конкретно в #77 я высказался… Да и вообще, я всегда благодарю кто по человечески общается… Даже и не по человечески… Дед меня дебилом назвал, а я ему спасибо все равно скажу… он помог мне (в своем время), и я это помню)))
Но могу и в ответ, если лишковать будет… ну такой я добрый человек.
Снова глумятся над тобой?
в 26-ой строке напиши не просто byte
, а static byte
, а то массив каждый раз новый на стеке выделяется.
Статик это такие локальные переменные, которым выделена область памяти навсегда и при любом входе в функцию эта переменная не новая, а та же самая. ОК?
#define ITEM_COUNT 5
byte Ind;
byte * fillArr(byte Arr2[], byte ArrCnt) {
Arr2[0] = 0;
Arr2[1] = 0;
Arr2[2] = 0;
Arr2[3] = 0;
Arr2[4] = 0;
//for (byte n = 0; n < ArrCnt; n++) Arr[n] = random(10);
Serial.print("fillArr "); Serial.println(int(Arr2));
return Arr2;
}
byte getNextIndex (byte CurrInd, const byte Arr3[], byte itemCount) {
Serial.print("getNextIndex "); Serial.println(int(Arr3));
if (CurrInd >= itemCount) return 0;
for (byte n = CurrInd; n < itemCount; n++)
if (Arr3[n]) return n + 1;
return 0;
}
void setup() {
Serial.begin(115200);
}
void loop() {
byte IArr[ITEM_COUNT];
Serial.print("loop "); Serial.println(int(&IArr));
Ind = getNextIndex (Ind, fillArr(IArr, ITEM_COUNT), ITEM_COUNT);
Serial.println(Ind);
delay(500);
}
Специально даже переименовал (немного) параметры
Это один и тот же адрес в памяти
Уже говорил, что при новом витке создастся новый массив, но пока виток жив - жив и массив… даже в другой функции… даже если его из одной функции в другую… Он умрет на последней строке в луп. Но на первой вновь родится… и так до бесконечности… Да, в примере моем тут всегда у него один и тот же адрес… но это можно исправить, занять этот адрес чем-тго другим, на низком уровне… если нужно могу попробовать заморочится…
Еще как… палец в рот не клади))) Задевает наверное, что новички могут оказаться не совсем безграмотные…
Я знаю про это… статик это тоже самая глобальная, только с пониженной областью видимости…
Это только для теста getNextIndex… поэтому пущай она там пересоздается…
Ну давай и ты еще поглумись теперь надо мной)))) Не зря же заглянул сюда?))
ЗЫЖ В принципе и в конечном варианте он(массив) у меня так и будет локальным… И это правильно, нечего память под него занимать… А заполнять только когда нажали кнопку и нужно быстренько проверить какой следующий пункт можно выбрать. А кнопку, Боже упаси, может раз в хз скока времени нажимать… это не геймпад)))
А кто говорил что другой?
И невозможность его чем либо занять, пока он жив в луп
Откуда такая уверенность, что в fillArr и в getNextIndex - он у меня уже мертв?
Можешь это доказать?
Нет, это мне действительно важно… я без шуток и насмешек
И еще один тогда к вам вопрос. Как быть с рекурсией? По вашему если мы вышли из функции то, все адью… и не важно если мы вызываем себя же из себя… мы же выходим из себя, что бы зайти в себя… ух)))) Рекурсия ясен пень с параметром
bool f;
void getRecursNum (byte i) {
//Serial.println(i);
if (!i) return;
if (f) i++; else i--;
if (i == 20) f = false;
getRecursNum(i);
}
void setup() {
Serial.begin(115200);
f = true;
byte x = 0;
getRecursNum(x + 1);
Serial.println("VSE");
}
void loop() {}
Как считаешь, какие значения у i внутри getRecursNum будут? Мыж вышли из setup вызвав getRecursNum и туда передали переменную локальную x…
Как я могу подсказать, если вопроса не понимаю? Он (вопрос) тут уже столько раз менялся, Вам уже столько раз подсказывали. Разбираться в этом во всём - только по приговору суда!
А так по теме: Вам не подходит ни один ответ потому, что Вы сами толком не понимаете вопроса. Именно толком что Вам нужно Вы не знаете. Так только “жопой чуете”, что ответы не те.
Помните, как у поэта: “А мы всё ставим каверзный ответ, и не находим нужного вопроса”. Вот у Вас в этой теме так и получилось.
Мля, Вам трудно вывести их в монитор порта и посмотреть? Заодно и другим сказать? Чего человека по такой ерунде напрягать? Он за Вас будет выводить и смотреть?
??? Что-то явно тут не так)))

новички могут оказаться не совсем безграмотные
О ком, простите, речь?
Невнимательно… Евгений… невнимательно…
Так это же мой код… и там я даже закомментировал вывод в сериал… и вообще не хорошо не вникнув в тему отвечать оскорблением…(((

О ком, простите, речь?
Осмелюсь даже сказать, что о себе имел ввиду… и что? Что по вашему новичек? Который а с б сложить не может, так что ли?

как у поэта
Вот и вышел я из сетаааапа!,
Но в лууп уже на вошёооол!!!
…
Надо было без массивов.

и не находим нужного вопроса
Вопрос был в начале, Потом Вы попросили показать код… я его показал в #8
затем был как обычно болтовня, но я сделал еще один вариант, и специально для Вас его отдельным сообщением вывел… Но Вы решили присоединится к лающим собакам, и тоже меня облаять Жаль…
Т.е. версия с рекурсией оказалась лучше только тем, что ее написали постояльцы, а нам “смертным” нельзя сделать что-то лучше… Если не так, то можно оба варианта прокомментировать (рекурсию и мою) Или для чего Вы просили показать Вам как я пытался сделать???

В принципе и в конечном варианте он(массив) у меня так и будет локальным…
Локальные переменные в луупе живут один проход луупа. При следующем входе на их месте может оказаться все что угодно. Даже в случае примитивного AVR есть еще и прерывания, которые используют стек. Поэтому те переменные, которые нужны из прохода в проход необходимо объявить статическими.
А по поводу глумиться - мне не интересно. Я пытался тебе объяснить, что мир не так устроен, как тебе кажется, что гордость и фальшивая вежливость гораздо менее ценны, чем знания, которые ты можешь получить. Ты не принял от меня эту науку. Ну и фиг с тобой. Далее я (по мере моих желаний) иногда буду просто подсказывать, как сейчас сделал выше, а жизнь сама тебя мордой по неструганым доскам поводит… или нет, если повезет. Удачи!
Про static
не забудь.