Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Методичка_Ч2(программирование).doc
Скачиваний:
51
Добавлен:
01.03.2016
Размер:
1.49 Mб
Скачать
      1. Матриці як параметри функцій

Якщо формальним параметром функції є матриця, то він оголошується майже так само, як і одновимірний масив. Різниця полягає у тому, що обов’язково потрібно вказувати кількість елементів для другого виміру, тобто довжину рядка матриці.

Кількість елементів у рядку, що наведена у заголовку функції обов’язково має бути тотожною кількості елементів у рядку для матриць, що оголошені у програмі, яка викликає цю функцію, і які передаються у функцію як параметри. Тому, для того щоб уникнути помилок, доцільно у таких програмах оголошувати глобальні константи, що визначають розмір матриці, у вигляді макросів за допомогою директиви #define.

Слід також пам’ятати, що хоча перед іменем матриці, як формального параметру, символ &не ставиться, та все одно матрицю буде передано за посиланням. А символ & ставити не потрібно тому, що ім’я матриці і є адресою першого її елементу.

Крім того, слід брати до уваги той факт, що матриця «не знає», скільки рядків у неї реально заповнено, і скільки елементів у рядку, тому передаючи масив до функції слід передавати і кількість рядків і кількість елементів у рядку, що мають бути оброблені. Ці числа, звичайно, не можуть бути більшими ніж значення під які було виділено пам’ять під час оголошення матриці.

Якщо матриця є результатом, який має повернути функція, то такий результат, як і у випадках із масивами ми поки що будемо повертати через параметри функції.

Приклади функцій, що працюють з матрицями розглянуто у наступних пунктах.

      1. Формування та виведення матриць з використанням консолі

Для виведення матриці на консоль можна використовувати функцію, що зображена на рисунку 9.2.Перед описом функції наведені директиви #define,що визначають максимально можливий розмір матриці.

.

Рисунок 9.2 – Функція виведення матриці на консоль

Для введення матриці з консолі можна скористатися функцією, що наведена на рисунку 9.3.

У цій функції матриця вводиться рядками, але особливість функції полягає у тому, що у разі неоднакової кількості елементів у рядках, що вводяться, кількість елементів у кожному рядку матриці буде дорівнювати кількості елементів останнього рядка. Зайві елементи інших рядків будуть ігноруватися, а ті що не вводилися будуть дорівнювати 0, бо уся ділянка пам’яті, що відведена для матриці перед початком вводу заповнюється нулями.

Для перетворення рядка символів у масив використовується функціяstrToArr, розглядалася у лабораторній роботі №7.

Рисунок 9.3 – Функція введення матриці з консолі

      1. Тотальна обробка даних у матрицях

Тотальна обробка передбачає виконання однакових операцій для всіх елементів матриці.

Нижче перераховані деякі завдання тотальної обробки матриць:

  • заповнення матриці випадковими або іншими числами;

  • пошук суми всіх елементів матриці;

  • пошук максимального або мінімального елемента в матриці;

  • множення матриці на число;

  • отримання суми двох матриць однакового розміру.

Тотальна обробка зазвичай реалізується за допомогою двох вкладених циклів 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;

}