#1 Re: Програмування Arduino » Странное поведение массива » 2019-10-03 12:35:50

opengl пише:

Выходишь за пределы массива. В качестве первого индекса нужно использовать 0 и 1, а ты используешь 1 и 2.

Вот я тупой... В другом массиве-то так и делаю.
Спасибо огромное!!!!

#2 Програмування Arduino » Странное поведение массива » 2019-10-03 11:55:42

Homo Faber
відповідей: 21

Привет знатокам программирования Arduino.
Столкнулся со странным поведением 2-х мерного массива. Решил проверить содержимое.
Вот код:

const byte K_Dt=6;                                          //  Размерность массива
byte M_Dt[2][K_Dt]=                                        // Объявление массива
     {
      {1,1,1,1,1,1},                                          // Заполнение массива
      {1,1,1,1,1,1}                                         
     };

void setup()
{

for (byte N_Dt=0;N_Dt<K_Dt;N_Dt++)                 // Проверка заполнения массива
{
Serial.print("M_Dt[1][");
Serial.print(N_Dt);
Serial.print("]=");
Serial.print(M_Dt[1][N_Dt]);
Serial.print("\t");
Serial.print("M_Dt[2][");
Serial.print(N_Dt);
Serial.print("]=");
Serial.println(M_Dt[2][N_Dt]);
}
}

И вот что получилось в результате:

M_Dt[1][0]=1    M_Dt[2][0]=1
M_Dt[1][1]=1    M_Dt[2][1]=0
M_Dt[1][2]=1    M_Dt[2][2]=0
M_Dt[1][3]=1    M_Dt[2][3]=178
M_Dt[1][4]=1    M_Dt[2][4]=4
M_Dt[1][5]=1    M_Dt[2][5]=128

Если с первой строкой всё в порядке, то во второй - явно какой-то мусор.
Может кто подскажет, что приключилось? Казалось бы просто заполнение массива, а в результате...
Заранее спасибо всем откликнувшимся.

#4 Re: Програмування Arduino » Использование тернарного оператора при программировании Arduino UNO » 2019-09-28 09:24:27

Отлично! Всё получилось, Вы безусловно правы "Х-1", вот где собака порылась!
Спасибо огромное.
Я всегда говорил, что Си - не самый лучший язык, в связи с дебильностью неудобством и неоднозначностью конструкций, сейчас получил очередное доказательство.
Ещё раз спасибо!!!!

#5 Re: Програмування Arduino » Использование тернарного оператора при программировании Arduino UNO » 2019-09-28 08:48:31

Watchdog пише:

Тернарный оператор это функция или выражение. X = X==0 ? Z : X--;

Попробовал, результат тот же самый.

Kaka пише:

НИ грамма не эквивалентно.

Поясните почему? Ведь в обоих случаях проверяется значение Х, и в зависимости от результата проверки присваивается новое значение.

#6 Re: Програмування Arduino » Использование тернарного оператора при программировании Arduino UNO » 2019-09-28 08:30:41

Взято по аналогии из вот такого выражения:

digitalWrite(segmentsPins[7], (i == 1 ?  HIGH : LOW));

И в этом примере всё работает прекрасно. Решил сделать по аналогии. Но что-то пошло не так...
По поводу обработки кнопки, просто взято из скетча, там у меня стоит такое примечание, забыл убрать.
А по поводу "быдлокода", это выражение из серии: "Тут так не роблять?" Выучив для себя определённые последовательности выражений (программных), всё, что выходит за рамки этих "заученностей" автоматически зачисляется в "быдлокод"?

#7 Програмування Arduino » Использование тернарного оператора при программировании Arduino UNO » 2019-09-27 21:19:44

Homo Faber
відповідей: 12

Хочу использовать тернарный оператор при программировании, но имеется заковыка.
Вот код:

int Z=4;
int X=1;
// Обработка нажатия кнопок
X, (X==0 ? Z : X--);

Что эквивалентно:

int Z=4;
int X=1;
// Обработка нажатия кнопок
if (X==0) X=MenX;
else X--;

Второй вариант работает без проблем, а в случае использования тернарного оператора пока Х>0, всё работает, но при X==0, не происходит присвоения ему (Х) значения Z.
Кто-нибудь использовал тернарные операторы в своей практике?
Заранее спасибо всем откликнувшимся.

Підвал форуму