3.05. Массивы.md
Ваши программы для Рудирона
уже умеют работать с переменными, принимать решения с помощью if
и повторять действия с помощью циклов. Но что, если нужно хранить сразу много однотипных данных? Например, показания с пяти датчиков температуры или скорости четырёх моторов робота. Создавать для каждого значения отдельную переменную (temp1
, temp2
, temp3
…) неудобно и загромождает код.
Для таких задач в C++
существует мощный инструмент - массивы. Массив позволяет хранить несколько значений в одной структуре, как в списке, и легко с ними работать.
Что такое массив?
Массив - это как комод с пронумерованными ящиками. Вы можете хранить в нём сразу несколько значений, но все они должны быть одного типа (например, только int
или только float
). У каждого «ящика» (элемента) есть свой уникальный номер - индекс.
Важно! Нумерация индексов в массивах всегда начинается с нуля (
0
). Первый элемент имеет индекс0
, второй -1
, и так далее.
Массивы особенно полезны в проектах на Рудироне
, где нужно обрабатывать данные от нескольких источников - считывать показания с группы датчиков, хранить последовательность нот для мелодии или задавать состояния для нескольких светодиодов.
Создание и заполнение массивов
Чтобы использовать массив, его нужно сначала объявить (создать). При объявлении вы указываете:
1. Тип данных, которые будут храниться в массиве.
2. Имя массива.
3. Размер - количество элементов, которые он сможет хранить, в квадратных скобках []
.
Синтаксис объявления:
тип имяМассива[размер];
Можно объявить массив и сразу же заполнить его значениями, перечислив их в фигурных скобках {}
.
Пример (объявление и заполнение):
// Создаём массив из 4 целых чисел и сразу его заполняем
int motorSpeeds[4] = {50, 60, 55, 70};
// Создаём пустой массив для хранения 3-х показаний температуры
float temperatures[3];
Чтобы получить доступ к элементу массива или изменить его, нужно указать имя массива и индекс нужного элемента в квадратных скобках.
Пример (обращение к элементам):
void setup() {
Serial.begin(9600);
float temperatures[3]; // Объявляем массив
// Заполняем его по одному элементу
temperatures[0] = 22.5; // Записываем в первый элемент (индекс 0)
temperatures[1] = 24.0; // Во второй (индекс 1)
temperatures[2] = 23.2; // В третий (индекс 2)
// Выводим значение второго элемента
Serial.print("Температура во второй комнате: ");
Serial.println(temperatures[1]); // Выведет: 24.0
}
void loop() {}
Доступ к элементам массива с помощью циклов
Настоящая сила массивов раскрывается, когда мы используем их вместе с циклами, которые изучили в предыдущем параграфе. Цикл for
позволяет легко и элегантно «пробежаться» по всем элементам массива, чтобы вывести, изменить или обработать их значения. Это особенно удобно, когда данных много.
Вместо того чтобы писать
Serial.println()
для каждого элемента вручную, мы можем сделать это в три строки кода, независимо от размера массива!
Пример (вывод всех скоростей моторов):
// Объявляем и инициализируем массив скоростей
int speeds[4] = {50, 60, 55, 70};
void setup() {
Serial.begin(9600);
// Используем цикл for для перебора всех элементов
// Счётчик i будет меняться от 0 до 3
for (int i = 0; i < 4; i++) {
Serial.print("Мотор ");
Serial.print(i + 1); // Выводим номер мотора (i+1, чтобы было 1, 2, 3, 4)
Serial.print(": ");
Serial.print(speeds[i]); // Обращаемся к элементу массива по индексу i
Serial.println(" %");
}
}
void loop() {}
Этот код выведет в монитор порта:
Мотор 1: 50 %
Мотор 2: 60 %
Мотор 3: 55 %
Мотор 4: 70 %
Если мы захотим добавить пятый мотор, нам нужно будет просто изменить размер массива и предел в цикле (i < 5
), а не дописывать новые строки кода.
Зачем это нужно?
Массивы - это ключ к работе с наборами данных в ваших проектах на Рудироне
. Они позволяют хранить показания датчиков, настройки устройств или последовательности действий в одном месте, делая код компактным, читаемым и легко масштабируемым. С массивами и циклами вы можете, например, управлять целой гирляндой светодиодов, проигрывать сложные мелодии или анализировать историю показаний с датчика.
Вы освоили массивы, которые позволяют плате Рудирон
хранить и обрабатывать наборы данных. Теперь переходите к следующему параграфу, чтобы научиться создавать функции и сделать ваши программы ещё более компактными и понятными. А чтобы закрепить знания, попробуйте выполнить задания к этому параграфу.
- Страницы
- 1. Введение
- 1.01. Лабораторная работа №1.1
- 1.02. Лабораторная работа №1.2
- 1.03. Лабораторная работа №1.3
- 1.04. Лабораторная работа №1.4
- 1.05. Лабораторная работа №1.5
- 2. Основы электроники
- 2.01. Электрический ток и параметры цепи
- 2.01.1. Лабораторная работа №2.1.1
- 2.01.2. Лабораторная работа №2.1.2
- 2.02. Сопротивление в цепи
- 2.02.1. Лабораторная работа №2.2.1
- 2.02.2. Лабораторная работа №2.2.2
- 2.03. Полупроводники
- 2.03.1. Лабораторная работа №2.3.1
- 2.03.2. Лабораторная работа №2.3.2
- 3. Основы программирование на C++
- 3.01. Типы данных и переменные
- 3.01.1. Практикум
- 3.02. Операторы в C++
- 3.02.1. Практикум
- 3.03. Структуры ветвления
- 3.03.1. Практикум
- 3.04. Структуры повторения
- 3.04.1. Практикум
- 3.05. Массивы
- 3.05.1. Практикум
- 3.06. Функции
- 3.06.1. Практикум
- 3.07. Решения задач
- 4. Программирование микроконтроллеров
- 4.01. Цифровые сигналы и GPIO
- 4.01.1. Лабораторная работа №4.1.1
- 4.01.2. Лабораторная работа №4.1.2
- 4.01.3. Лабораторная работа №4.1.3
- 4.01.4. Лабораторная работа №4.1.4
- 4.01.5. Лабораторная работа №4.1.5
- 4.01.6. Лабораторная работа №4.1.6
- 4.01.7. Лабораторная работа №4.1.7
- 4.01.8. Лабораторная работа №4.1.8
- 4.02. Аналоговые сигналы и ШИМ
- 4.02.1. Лабораторная работа №4.2.1
- 4.02.2. Лабораторная работа №4.2.2
- 4.02.3. Лабораторная работа №4.2.3
- 4.02.4. Лабораторная работа №4.2.4
- 4.02.5. Лабораторная работа №4.2.5
- 4.03. Аналоговый сигнал и АЦП
- 4.03.1. Лабораторная работа №4.3.1
- 4.03.2. Лабораторная работа №4.3.2
- 4.03.3. Лабораторная работа №4.3.3
- 4.03.4. Лабораторная работа №4.3.4
- 4.03.5. Лабораторная работа №4.3.5
- 4.04. Аналоговый сигнал и ЦАП
- 4.04.1. Лабораторная работа №4.4.1
- 4.04.2. Лабораторная работа №4.4.2
- 4.05. Генерация и измерение импульсов
- 4.05.1. Лабораторная работа №4.5.1
- 4.05.2. Лабораторная работа №4.5.2
- 4.06. Аппаратные прерывания
- 4.06.1. Лабораторная работа №4.6.1
- 4.06.2. Лабораторная работа №4.6.2
- 4.07. Псевдопараллелизм
- 4.07.1. Лабораторная работа №4.7.1
- 4.07.2. Лабораторная работа №4.7.2
- 4.08. Интерфейсы связи - UART
- 4.08.1. Лабораторная работа №4.8.1
- 4.09. Интерфейсы связи - I2C
- 4.09.1. Лабораторная работа №4.9.1
- 4.10. Интерфейсы связи - SPI
- 4.10.1. Лабораторная работа №4.10.1
- home
-
imgs
- 1. Введение
- 1.01. Лабораторная работа №1.1
- 1.02. Лабораторная работа №1.2
- 1.03. Лабораторная работа №1.3
- 1.04. Лабораторная работа №1.4
- 1.05. Лабораторная работа №1.5
- 2. Основы электроники
- 2.01. Электрический ток и параметры цепи
- 2.01.1. Лабораторная работа №2.1.1
- 2.01.2. Лабораторная работа №2.1.2
- 2.02. Сопротивление в цепи
- 2.02.1. Лабораторная работа №2.2.1
- 2.02.2. Лабораторная работа №2.2.2
- 2.03. Полупроводники
- 2.03.1. Лабораторная работа №2.3.1
- 2.03.2. Лабораторная работа №2.3.2
- 3. Основы программирование на C++
- 3.01. Типы данных и переменные
- 3.01.1. Практикум
- 3.02. Операторы в C++
- 3.02.1. Практикум
- 3.03. Структуры ветвления
- 3.03.1. Практикум
- 3.04. Структуры повторения
- 3.04.1. Практикум
- 3.05. Массивы
- 3.05.1. Практикум
- 3.06. Функции
- 3.06.1. Практикум
- 3.07. Решения задач
- 4. Программирование микроконтроллеров
- 4.01. Цифровые сигналы и GPIO
- 4.01.1. Лабораторная работа №4.1.1
- 4.01.2. Лабораторная работа №4.1.2
- 4.01.3. Лабораторная работа №4.1.3
- 4.01.4. Лабораторная работа №4.1.4
- 4.01.5. Лабораторная работа №4.1.5
- 4.01.6. Лабораторная работа №4.1.6
- 4.01.7. Лабораторная работа №4.1.7
- 4.01.8. Лабораторная работа №4.1.8
- 4.02. Аналоговые сигналы и ШИМ
- 4.02.1. Лабораторная работа №4.2.1
- 4.02.2. Лабораторная работа №4.2.2
- 4.02.3. Лабораторная работа №4.2.3
- 4.02.4. Лабораторная работа №4.2.4
- 4.02.5. Лабораторная работа №4.2.5
- 4.03. Аналоговый сигнал и АЦП
- 4.03.1. Лабораторная работа №4.3.1
- 4.03.2. Лабораторная работа №4.3.2
- 4.03.3. Лабораторная работа №4.3.3
- 4.03.4. Лабораторная работа №4.3.4
- 4.03.5. Лабораторная работа №4.3.5
- 4.04. Аналоговый сигнал и ЦАП
- 4.04.1. Лабораторная работа №4.4.1
- 4.04.2. Лабораторная работа №4.4.2
- 4.05. Генерация и измерение импульсов
- 4.05.1. Лабораторная работа №4.5.1
- 4.05.2. Лабораторная работа №4.5.2
- 4.06. Аппаратные прерывания
- 4.06.1. Лабораторная работа №4.6.1
- 4.06.2. Лабораторная работа №4.6.2
- 4.07. Псевдопараллелизм
- 4.07.1. Лабораторная работа №4.7.1
- 4.07.2. Лабораторная работа №4.7.2
- 4.08. Интерфейсы связи - UART
- 4.08.1. Лабораторная работа №4.8.1
- 4.09. Интерфейсы связи - I2C
- 4.09.1. Лабораторная работа №4.9.1
- 4.10. Интерфейсы связи - SPI
- 4.10.1. Лабораторная работа №4.10.1
- home