⚙️ C++

Массивы (списки) в C++17: подробное руководство

Массивы (списки) в C++

Что такое массив и зачем он нужен?

Представь, что ты записываешь оценки за неделю. Можно сделать так: int ocenka1 = 5, ocenka2 = 4, ocenka3 = 3;. Но что если у тебя 100 оценок? Придётся придумать 100 разных имён! Это неудобно.

Массив (или список) — это коробка с ячейками, в которой можно хранить много значений одного типа под одним именем. У каждой ячейки есть свой номер (индекс). Первая ячейка всегда имеет номер 0, вторая — 1 и так далее.

Пример из жизни: представь список покупок (молоко, хлеб, яблоки). В программировании мы можем хранить такой список в массиве строк.

Основной синтаксис

Объявление и инициализация

#include <iostream>
#include <string>
using namespace std;

int main() {
    // Способ 1: объявить и сразу заполнить
    int chisla[5] = {10, 20, 30, 40, 50};

    // Способ 2: объявить пустой массив и заполнить потом
    string frukty[3];
    frukty[0] = "Яблоко";
    frukty[1] = "Банан";
    frukty[2] = "Груша";

    // Способ 3: не указывать размер (компилятор сам посчитает)
    double vysoty[] = {100.5, 200.0, 350.2};

    return 0;
}

Как обращаться к элементам

Чтобы получить или изменить элемент, нужно написать имя массива и в квадратных скобках индекс:

#include <iostream>
using namespace std;

int main() {
    int temp[4] = {25, 26, 23, 24};

    // Читаем значение из ячейки с индексом 2 (третья по счёту)
    cout << "Температура в среду: " << temp[2] << " градусов" << endl;

    // Меняем значение
    temp[0] = 30;
    cout << "Новая температура в понедельник: " << temp[0] << endl;

    return 0;
}

Вывод программы:

Температура в среду: 23 градусов
Новая температура в понедельник: 30

Цикл для перебора массива

Чтобы пройтись по всем элементам, удобно использовать цикл for:

#include <iostream>
using namespace std;

int main() {
    int skorost[5] = {10, 25, 30, 15, 20};

    cout << "Скорости за 5 замеров:" << endl;
    for (int i = 0; i < 5; i++) {
        cout << "Замер " << i+1 << ": " << skorost[i] << " км/ч" << endl;
    }

    return 0;
}

Вывод программы:

Скорости за 5 замеров:
Замер 1: 10 км/ч
Замер 2: 25 км/ч
Замер 3: 30 км/ч
Замер 4: 15 км/ч
Замер 5: 20 км/ч

Разбор типичных задач

Задача "Фрукты" (сбор данных в массив)

Нужно записать 5 фруктов, которые привезли за неделю, а потом вывести их все.

#include <iostream>
#include <string>
using namespace std;

int main() {
    string frukty[5];

    cout << "Введите 5 фруктов (каждый с новой строки):" << endl;
    for (int i = 0; i < 5; i++) {
        cin >> frukty[i];
    }

    cout << "Список полученных фруктов:" << endl;
    for (int i = 0; i < 5; i++) {
        cout << i+1 << ". " << frukty[i] << endl;
    }

    return 0;
}

Пример ввода:

Яблоко
Банан
Груша
Апельсин
Киви

Вывод:

Список полученных фруктов:
1. Яблоко
2. Банан
3. Груша
4. Апельсин
5. Киви

Задача "Запас материалов" (изменение элемента)

Дан массив с количеством продуктов. Нужно удвоить значение во втором пункте (индекс 1).

#include <iostream>
using namespace std;

int main() {
    int produkty[4] = {10, 5, 20, 15}; // хлеб на индексе 1

    cout << "Было: ";
    for (int i = 0; i < 4; i++) {
        cout << produkty[i] << " ";
    }
    cout << endl;

    // Удваиваем количество хлеба (второй элемент, индекс 1)
    produkty[1] = produkty[1] * 2;

    cout << "Стало: ";
    for (int i = 0; i < 4; i++) {
        cout << produkty[i] << " ";
    }
    cout << endl;

    return 0;
}

Вывод:

Было: 10 5 20 15
Стало: 10 10 20 15

Задача "Юный альпинист" (поиск по условию)

Вася записывал высоту каждый день. Нужно найти дни, когда высота была больше 200 метров.

#include <iostream>
using namespace std;

int main() {
    double vysoty[7] = {150.0, 210.5, 180.0, 250.0, 190.0, 300.0, 170.0};

    cout << "Дни, когда высота была больше 200 м:" << endl;
    for (int i = 0; i < 7; i++) {
        if (vysoty[i] > 200.0) {
            cout << "День " << i+1 << ": " << vysoty[i] << " м" << endl;
        }
    }

    return 0;
}

Вывод:

Дни, когда высота была больше 200 м:
День 2: 210.5 м
День 4: 250 м
День 6: 300 м

Частые ошибки новичков

  • Выход за границы массива: если массив из 5 элементов, индексы от 0 до 4. Обращение к индексу 5 — ошибка! Программа может работать неправильно или "упасть".
  • Путаница с индексами: помни, что первый элемент — это индекс 0, а не 1. Если нужно вывести номер по порядку (1, 2, 3), пиши i+1.
  • Забыли инициализировать: если объявить массив и не заполнить его, там будет "мусор" (случайные числа). Всегда задавай начальные значения.
  • Разные типы: в массиве можно хранить только значения одного типа. Нельзя смешивать int и string в одном массиве.

Итоговый пример: "Суп в школе"

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

#include <iostream>
using namespace std;

int main() {
    int porcii[5]; // 5 дней: пн, вт, ср, чт, пт
    string dni[5] = {"Пн", "Вт", "Ср", "Чт", "Пт"};

    cout << "Введите количество порций супа за каждый день:" << endl;
    for (int i = 0; i < 5; i++) {
        cout << dni[i] << ": ";
        cin >> porcii[i];
    }

    // Считаем общее количество
    int vsego = 0;
    for (int i = 0; i < 5; i++) {
        vsego = vsego + porcii[i];
    }

    cout << "Всего порций за неделю: " << vsego << endl;

    // Ищем дни, когда порций больше 30
    cout << "Дни, когда супа было больше 30 порций:" << endl;
    for (int i = 0; i < 5; i++) {
        if (porcii[i] > 30) {
            cout << dni[i] << " (" << porcii[i] << " порций)" << endl;
        }
    }

    return 0;
}

Пример ввода:

25
32
28
35
20

Вывод:

Всего порций за неделю: 140
Дни, когда супа было больше 30 порций:
Вт (32 порций)
Чт (35 порций)

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