Skip to content

Instantly share code, notes, and snippets.

@GKovtonyuk
Last active June 6, 2026 15:40
Show Gist options
  • Select an option

  • Save GKovtonyuk/e2d881f48e5e72fb00252a4bfc498df4 to your computer and use it in GitHub Desktop.

Select an option

Save GKovtonyuk/e2d881f48e5e72fb00252a4bfc498df4 to your computer and use it in GitHub Desktop.

🎓 Microlearning: Масиви в C++ (1D та 2D)

🔹 Передісторія

Ви аналітик університетської групи. Мета: збирати оцінки студентів, аналізувати їх і сортувати. Ми будемо працювати поступово, блок за блоком, щоб освоїти:

Введення та виведення масивів

Обчислення суми, добутку, max/min, середнього

Підрахунок додатніх та від’ємних

Сортування (обмін та бульбашка)

🟢 Одновимірний масив (1D)

🔹 Блок 1: Введення та виведення

#include <iostream>
using namespace std;

int main() {
    int n;
    cout << "Скільки студентів у групі? ";
    cin >> n;

    int grades[100];

    cout << "Введіть оцінки:" << endl;
    for(int i = 0; i < n; i++) {
        cin >> ____________________; // заповніть тут
    }

    cout << "Всі оцінки: ";
    for(int i = 0; i < n; i++) {
        cout << ____________________ << " "; // заповніть тут
    }
    cout << endl;

    return 0;
}

💡 Підказка: grades[i]

🧩 Міні-завдання: введіть від'ємні числа і нулі.

🧠 Квіз:

  • Який індекс першого елемента?
  • Що станеться, якщо вийти за межі n?

🔹 Блок 2: Сума та добуток

int sum = 0;
int dob = 1;
for(int i = 0; i < n; i++) {
    ____________________; // сума
    ____________________; // добуток
}
cout << "Сума = " << sum << endl;
cout << "Добуток = " << dob << endl;

💡 Підказка:
sum += grades[i];
dob *= grades[i];

🧩 Експеримент:
Змініть один елемент на 0. Що буде з добутком?

🧠 Квіз:

  • Чому добуток ініціалізують 1, а не 0?

🔹 Блок 3: Max і Min

int maxVal = grades[0];
int minVal = grades[0];

for(int i = 1; i < n; i++) {
    if(grades[i] > ____________________) ____________________ = grades[i];
    if(grades[i] < ____________________) ____________________ = grades[i];
}

cout << "Максимальна оцінка = " << maxVal << endl;
cout << "Мінімальна оцінка = " << minVal << endl;

💡 Підказка: порівнюємо з maxVal/minVal

🧩 Експеримент: перший елемент мінімальний — що зміниться?

🧠 Квіз: як знайти другий за величиною елемент?

🔹 Блок 4: Середнє

double average = (double) ____________________ / n;
cout << "Середнє = " << average << endl;

💡 Підказка: використовуйте sum 🧩 Експеримент: int замість double — що зміниться? 🧠 Квіз: чому важливо перетворювати sum у double перед діленням?

🔹 Блок 5: Додатні та від’ємні

int plus = 0, minus = 0;
for(int i = 0; i < n; i++) {
    if( ____________________ ) plus++;
    if( ____________________ ) minus++;
}
cout << "Додатні = " << plus << endl;
cout << "Від’ємні = " << minus << endl;

💡 Підказка: >0 для додатніх, <0 для від’ємних

🧩 Експеримент: що якщо ввести 0?

🧠 Квіз: як порахувати лише непарні числа?

🔹 Блок 6: Сортування

// Обмін
for(int i = 0; i < n-1; i++) {
    for(int j = i+1; j < n; j++) {
        if( ____________________ ) {
            int temp = grades[i];
            ____________________;
            ____________________;
        }
    }
}
cout << "Відсортовано (обмін): ";
for(int i = 0; i < n; i++)
cout << grades[i] << " ";
cout << endl;

// Бульбашка
cout << "Введіть оцінки знову для бульбашки:" << endl;
for(int i = 0; i < n; i++) 
cin >> grades[i];

for(int i = 0; i < n-1; i++) {
    for(int j = 0; j < n-i-1; j++) {
        if( ____________________ ) {
            int temp = grades[j];
            ____________________;
            ____________________;
        }
    }
}

cout << "Відсортовано (бульбашка): ";
for(int i = 0; i < n; i++)
cout << grades[i] << " ";
cout << endl;

💡 Підказка:

grades[i] > grades[j] для обміну

grades[j] > grades[j+1] для бульбашки

🧩 Міні-завдання: змініть сортування на спадання

🧠 Квіз: які переваги та недоліки бульбашкового сортування порівняно з обміном?

🟢 Двовимірний масив (2D)

🔹 Блок 1: Введення та виведення

#include <iostream>
using namespace std;

int main() {
    int rows, cols;
    cout << "Введіть кількість студентів і предметів: ";
    cin >> rows >> cols;

    int grades[100][100];

    for(int i = 0; i < rows; i++) {
        for(int j = 0; j < cols; j++) {
            cin >> ____________________;
        }
    }

    cout << "Оцінки студентів:" << endl;
    for(int i = 0; i < rows; i++) {
        for(int j = 0; j < cols; j++) {
            cout << ____________________ << " ";
        }
        cout << endl;
    }

    return 0;
}

💡 Підказка: grades[i][j]

🧩 Міні-завдання: введіть від'ємні та нульові оцінки

🧠 Квіз: який індекс 1-го предмету 2-го студента?

🔹 Блок 2: Сума по рядках

for(int i = 0; i < rows; i++) {
    int sum = 0;
    for(int j = 0; j < cols; j++) {
        ____________________; // sum += grades[i][j]
    }
    cout << "Сума оцінок студента " << i+1 << " = " << sum << endl;
}

🧩 Міні-завдання: обчисліть суму лише додатніх оцінок

🧠 Квіз: як знайти суму по стовпцях?

🔹 Блок 3: Max і Min

int maxVal = grades[0][0], minVal = grades[0][0];
for(int i = 0; i < rows; i++) {
    for(int j = 0; j < cols; j++) {
        if(grades[i][j] > ____________________) maxVal = grades[i][j];
        if(grades[i][j] < ____________________) minVal = grades[i][j];
    }
}
cout << "Max = " << maxVal << endl;
cout << "Min = " << minVal << endl;

🧩 Міні-завдання: визначте студента з найвищою оцінкою

🧠 Квіз: що станеться, якщо матриця порожня?

🔹 Блок 4: Середнє по рядку

for(int i = 0; i < rows; i++) {
    int sumRow = 0;
    for(int j = 0; j < cols; j++) sumRow += grades[i][j];
    double avg = (double) ____________________ / cols;
    cout << "Середнє студента " << i+1 << " = " << avg << endl;
}

🧩 Міні-завдання: середнє тільки для додатніх

🧠 Квіз: чому потрібно кастувати у double?

##🔹 Блок 5: Додатні та від’ємні

int plus = 0, minus = 0;
for(int i = 0; i < rows; i++) {
    for(int j = 0; j < cols; j++) {
        if( ____________________ ) plus++;
        if( ____________________ ) minus++;
    }
}
cout << "Додатні = " << plus << endl;
cout << "Від’ємні = " << minus << endl;

🧩 Міні-завдання: порахуйте нулі окремо

🧠 Квіз: як порахувати непарні числа?

🔹 Блок 6: Сортування одного рядка

int row; 
cout << "Який рядок відсортувати? "; 
cin >> row; 
row--;

for(int i = 0; i < cols-1; i++) {
    for(int j = i+1; j < cols; j++) {
        if( ____________________ ) {
            int temp = grades[row][i];
            ____________________;
            ____________________;
        }
    }
}

cout << "Відсортований рядок " << row+1 << ": ";
for(int j = 0; j < cols; j++) 
cout << grades[row][j] << " ";
cout << endl;

💡 Підказка: grades[row][i] > grades[row][j]

🧩 Міні-завдання: змініть на спадання

🧠 Квіз: як відсортувати усю матрицю?

🟢 Рефлексія та завдання — Двовимірний масив (2D)

🔹 Просте введення та оголошення

  • Як оголосити двовимірний масив розміром 5x3 у C++?
    👉 Відповідь:

  • Як ввести елементи в 2D масив за допомогою циклів?
    👉 Відповідь:

  • Як вивести елементи 2D масиву на екран?
    👉 Відповідь:


🔹 Доступ до елементів і обчислення

  • Як змінюється доступ до елементів у 2D порівняно з 1D масивом?
    👉 Відповідь:

  • Як обчислити суму по рядках та по стовпцях?
    👉 Відповідь:

  • Як обчислити середнє по рядках та по стовпцях?
    👉 Відповідь:

  • Які помилки можуть виникнути при неправильній індексації?
    👉 Відповідь:

  • Що зміниться при від’ємних числах або нулях?
    👉 Відповідь:


🔹 Сортування та оптимізація

  • Як відсортувати усю матрицю?
    👉 Відповідь:

  • Як оптимізувати сортування рядків?
    👉 Відповідь:


🔹 Додаткові прості питання

  • Чому при оголошенні масиву важливо знати його розмір?
    👉 Відповідь:

  • Що станеться, якщо спробувати ввести більше елементів, ніж розмір масиву?
    👉 Відповідь:

  • Як правильно ініціалізувати масив нулями?
    👉 Відповідь:

  • Як можна обчислити добуток всіх елементів рядка або стовпця?
    👉 Відповідь:

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment