- •Міністерство освіти і науки україни
- •Лабораторнаробота№ 7. Одновимірнімасиви
- •Короткі теоретичні відомості про масиви
- •Оголошення одновимірного масиву та звернення до його елементів
- •Приклад використання одновимірного масиву
- •Масиви символів
- •Одновимірні масиви як параметри функцій
- •Функції обробки масивів чисел
- •Функція формування випадкового масиву
- •Функції виведення масиву на консоль
- •Функції введення масиву з консолі
- •Функція введення масиву як рядка символів
- •Функція введення масиву по елементам
- •Функція вилучення елементу з масиву
- •Функція перевороту масиву
- •Функція формування масиву накопичених значень
- •Функції обробки рядків символів
- •Функція копіювання частини рядка
- •Функція знаходження підрядка у рядку
- •Завдання для самостійної роботи
- •Вимоги до звіту
- •Сортування вибором
- •Приклад сортування елементів масиву у зростаючому порядку за методом вибору
- •Функція сортування масиву методом вибору
- •Сортування обміном (метод бульбашки)
- •Прикладсортування елементів масиву у зростаючому порядку за методом обміну
- •Функція сортування масиву методом обміну
- •Сортування вставкою
- •Приклад сортування елементів масиву у зростаючому порядку за методом вставки
- •Функціясортування масиву заметодом вставки
- •Сортування за ускладненими правилами
- •Обробка упорядкованих масивів
- •Пошук позиції елемента у впорядкованому масиві
- •Вставка елементу до впорядкованого масиву
- •Видалення елементу з упорядкованого масиву
- •Злиття двох впорядкованих масивів
- •Завдання для самостійної роботи
- •Вимоги до звіту
- •Оголошення та ініціалізація матриць
- •Матриці як параметри функцій
- •Формування та виведення матриць з використанням консолі
- •Тотальна обробка даних у матрицях
- •Вибіркова обробка матриць
- •Перестановки елементів матриці
- •Видалення та вставка елементів матриці
- •Сортування елементів матриці
- •Завдання для самостійної роботи
- •Вимоги до звіту
- •Оголошення шаблону та ініціалізація структур
- •Масивиструктур
- •Введення-виведення структур
- •Сортування масивів структур
- •Створення проекту «Результати атестації»
- •Інтерфейс користувача для проекту
- •Визначення глобальних типів даних програми
- •Функція обробки номеру вибраного варіанту
- •Функція відображення масиву на консолі
- •Додавання нових даних до масиву структур
- •Функція сортування масиву за групою та прізвищем
- •Сортування за кількістю незадовільних оцінок та середньому балу
- •Вибірка студентів, що мають середній бал вище 4
- •Підрахунок кількості студентів що мають більше 2-х незадовільних оцінок
- •Завдання для самостійної роботи
- •Вимоги до звіту
- •Контрольні питання
- •Рекомендована література
Матриці як параметри функцій
Якщо формальним параметром функції є матриця, то він оголошується майже так само, як і одновимірний масив. Різниця полягає у тому, що обов’язково потрібно вказувати кількість елементів для другого виміру, тобто довжину рядка матриці.
Кількість елементів у рядку, що наведена у заголовку функції обов’язково має бути тотожною кількості елементів у рядку для матриць, що оголошені у програмі, яка викликає цю функцію, і які передаються у функцію як параметри. Тому, для того щоб уникнути помилок, доцільно у таких програмах оголошувати глобальні константи, що визначають розмір матриці, у вигляді макросів за допомогою директиви #define.
Слід також пам’ятати, що хоча перед іменем матриці, як формального параметру, символ &не ставиться, та все одно матрицю буде передано за посиланням. А символ & ставити не потрібно тому, що ім’я матриці і є адресою першого її елементу.
Крім того, слід брати до уваги той факт, що матриця «не знає», скільки рядків у неї реально заповнено, і скільки елементів у рядку, тому передаючи масив до функції слід передавати і кількість рядків і кількість елементів у рядку, що мають бути оброблені. Ці числа, звичайно, не можуть бути більшими ніж значення під які було виділено пам’ять під час оголошення матриці.
Якщо матриця є результатом, який має повернути функція, то такий результат, як і у випадках із масивами ми поки що будемо повертати через параметри функції.
Приклади функцій, що працюють з матрицями розглянуто у наступних пунктах.
Формування та виведення матриць з використанням консолі
Для виведення матриці на консоль можна використовувати функцію, що зображена на рисунку 9.2.Перед описом функції наведені директиви #define,що визначають максимально можливий розмір матриці.
.
Рисунок 9.2 – Функція виведення матриці на консоль
Для введення матриці з консолі можна скористатися функцією, що наведена на рисунку 9.3.
У цій функції матриця вводиться рядками, але особливість функції полягає у тому, що у разі неоднакової кількості елементів у рядках, що вводяться, кількість елементів у кожному рядку матриці буде дорівнювати кількості елементів останнього рядка. Зайві елементи інших рядків будуть ігноруватися, а ті що не вводилися будуть дорівнювати 0, бо уся ділянка пам’яті, що відведена для матриці перед початком вводу заповнюється нулями.
Для перетворення рядка символів у масив використовується функціяstrToArr, розглядалася у лабораторній роботі №7.
Рисунок 9.3 – Функція введення матриці з консолі
Тотальна обробка даних у матрицях
Тотальна обробка передбачає виконання однакових операцій для всіх елементів матриці.
Нижче перераховані деякі завдання тотальної обробки матриць:
заповнення матриці випадковими або іншими числами;
пошук суми всіх елементів матриці;
пошук максимального або мінімального елемента в матриці;
множення матриці на число;
отримання суми двох матриць однакового розміру.
Тотальна обробка зазвичай реалізується за допомогою двох вкладених циклів for, параметрами яких є індекси матриці. Якщо матриця обробляється по рядках, то заголовок зовнішнього циклу записується для першого індексу, а якщо по стовпцях, то перший індекс повинен змінюватися у внутрішньому циклі.
Прикладом тотальної обробки матриці може служити функція заповнення елементів числової матриці нулями, що наведена нижче.
До функції передається матриця із зазначенням заявленої кількості елементів у рядку, а також кількість рядків (nRow) та кількість елементів у рядку (кількість стовпців nCol), що підлягають опрацюванню.
Перед описом функції наведені директиви #define,що визначають максимально можливий розмір матриці.
Всі завдання тотальної обробки мають подібну структуру. Відрізняються вони тільки інструкціями всередині циклу.
#define ROWS 10
#define COLS 8
…
void matrixToZero(int matr[][COLS], int nRow, int nCol){
for(int i = 0; i < row; i++)
for(int j = 0; j < col; j++)
matr[i][j]=0;
}