1) Введення-виведення матриць у консольному режимі
а) Введення у консолі матриці а розміром 3x4:
спосіб:
for(i=0; i<3; i++) for(j=0; j<4; j++)
{cout<<"Введiть елемент "<<i+1<<"-го рядка "<<j+1<<"-го стовпця: ";
cin>>a[i][j];
}
спосіб:
for(i=0; i<3; i++)
{ cout<<"Введiть 4 елементи "<<i+1<<"-го рядка "<<endl;
for(j=0; j<4; j++)
cin>>a[i][j];
}
спосіб:
cout<<"Введiть матрицю з 3-х рядків і 4-х стовпців:"<<endl; for(i=0; i<3; i++)
for(j=0; j<4; j++)
cin>>a[i][j];
б) Для виведення у консолі двовимірного масиву а розміром 3x4 у вигляді матриці елементи слід розмістити у рівні стовпці. Це можна зробити за допомогою символу табуляції "\t":
for(i=0; i<3; i++)
{
for(j=0; j<4; j++)
cout << a[i][j] << "\t";
cout << endl;
}
При виведенні елементів матриць дійсних чисел командою cout<< доречним є використання маніпуляторів форматування:
setprecision, який обмежує кількість знаків після десяткової крапки;
fixed, який задає формат з фіксованою крапкою;
setw, який дозволяє задавати ширину (мінімальну кількість символьних позицій) кожного виведеного числа. Якщо виведене число має ширину меншу, аніж зазначену у модифікаторі setw, перед ним будуть виведені пробіли:
for(i=0; i<3; i++)
{ for(j=0; j<6; j++)
cout<<fixed<<setprecision(2)<<setw(5)<<a[i][j]/3.<<"\t"; cout << endl;
}
Для можливості використання цих маніпуляторів слід долучити заголовний файл iomanip командою #include <iomanip.h>.
Як вже зазначалося, при передачі масиву у функцію передається не вміст масиву, а лише його адреса (ім’я масиву).
Для передачі багатовимірного масиву у якості аргументу функції не- обхідно задати мінімум інформації, достатньої для перетворення індексних виразів в адреси пам’яті. Зокрема для двовимірного масиву достатньо пе- редати кількість стовпців аби компілятор зміг самостійно обчислити адре- си елементів на початку кожного рядка.
Визначимо, наприклад, символічні константи ROWS і COLS, що за- дають кількість рядків та стовбців відповідно у двовимірному масиві:
#define ROWS 5
#define COLS 8
Тепер можна оголосити, наприклад, наступну функцію AnyFn() з масивом у якості параметра:
void AnyFn(int data[ROWS][COLS]);
Можна навіть не зазначати кількість рядків: void AnyFn(int data[][COLS]);
В обох випадках компілятор перетворить вираз data[n][m] в адресу.
Аби організувати передачу в одну й ту ж саму функцію масивів з рі- зною кількістю рядків необхідно в оголошенні функції зазначити додатко- вий параметр, наприклад:
long Sum(int data[][COLS],int numRows);
Тут параметр numRows повідомляє функції AnyFn(), скільки рядків міс- тить масив data. Глобальна константа COLS, як і раніше, інформує компі- лятор і функцію про кількість стовпців в одному рядку.
Так, наступна функція обраховує і повертає суму значень деякого двовимірного масиву цілих чисел:
long Sum(int data[][COLS],int numRows)
{
long s=0;
for(int r=0;r<numRows;r++)
for(int c=0;c< COLS;c++) s+=data[r][c]; return s;
}
Викликати цю функцію можна тепер для двовимірних масивів з різною кі- лькістю рядків, наприклад, наступним чином:
printf(″Result1=%li\n″,Sum(matrix1,n1)); printf(″Result2=%li″,Sum(matrix2,n2));
де n1 і n2 – відповідна кількість рядків у двовимірних масивах matrix1 і matrix2, попередньо оголошених, наприклад, наступним чином:
…
#define COLS 8
…
const int n1=5,n2=7;
int matrix1[n1][COLS], matrix2[n2][COLS];
Матриці доволі часто застосовуються у математиці, особливо під час розв’язку задач, що містять системи алгебраїчних та диференційних рів- нянь.
