Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Lab_rob_C_04(13).docx
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
320.41 Кб
Скачать

1) Введення-виведення матриць у консольному режимі

а) Введення у консолі матриці а розміром 3x4:

  1. спосіб:

for(i=0; i<3; i++) for(j=0; j<4; j++)

{cout<<"Введiть елемент "<<i+1<<"-го рядка "<<j+1<<"-го стовпця: ";

cin>>a[i][j];

}

  1. спосіб:

for(i=0; i<3; i++)

{ cout<<"Введiть 4 елементи "<<i+1<<"-го рядка "<<endl;

for(j=0; j<4; j++)

cin>>a[i][j];

}

  1. спосіб:

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];

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

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]