Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
О.О.П / ооп / l_12.ppt
Скачиваний:
52
Добавлен:
30.05.2020
Размер:
781.82 Кб
Скачать

Матриця є прямокутна таблиця чисел з n рядків і m стовпців.

Якщо n = m, матриця називається квадратною, а число n – її порядком.

Матрицю зазвичай представляють таким чином:

a11 a12 a13 . . . . . . . . a1m

а 21 а 22 а 23 . . . . . . . . а 2m a31 a32 а 33 . . . . . . . . .a 3m

. . . . . . . . . . . . . . . . . . . .

а n1 а n2 а n3 . . . . . . . . а nm

Рядок з індексом i, (1 ≤ i ≤ n) – це одновимірний масив елементів матриці аi1, аi2, аi3 ..., aim, в яких перший індекс i

(номер рядка) фіксований, а другий індекс j (номер стовпця)

міняється від 1 до m. Стовпець з індексом j (1 ≤ j ≤ m) – це одновимірний масив елементів матриці а 1 j, а2 j ..., аij ..., аnj, в яких другий індекс j фіксований, а перший індекс i міняється від 1 до n.

Індекси i і j елементу однозначно визначають місце

цього елементу в пам'яті. Тому для нас зручніше

матрицю представляти як таблицю індексів її

елементів або як таблицю її координат в пам'яті комп'ютера.

Координати в пам'яті комп'ютера

0,0 0,1 0,2 0,3 0,4 0,5

1,0 1,1 1,2 1,3 1,4 1,5

2,0 2,1 2,2 2,3 2,4 2,5

3,0 3,1 3,2 3,3 3,4 3,5

4,0 4,1 4,2 4,3 4,4 4,5

5,0 5,1 5,2 5,3 5,4 5,5

Головною діагоналлю квадратної матриці порядку n називають безліч елементів a11, а 22, ..., aii ..., а nn . Якщо елемент aij належить головній діагоналі, то

справедлива рівність i = j.

Побічною діагоналлю квадратної матриці порядку n

називають безліч елементів а 1n, а 2n ..., аin+1-i, ..., аn1 .

Якщо елемент aij належить побічній діагоналі, то справедлива рівність i + j = n + 1.

У мові C++ матриці відповідає двовимірний масив.

Загальний формат оголошення двовимірного масиву має наступний вигляд:

<тип> <ім'я> [n][m]

Запам'ятаємо деякі властивості квадратних матриць:

•якщо номер рядка i елементу матриці A збігається з номером стовпця j, тобто i==j, це означає, що елемент A[i][i] лежить на головній діагоналі матриці;

•якщо номер рядка i елементу матриці A перевищує номер стовпця j, тобто i>j, це означає, що елемент A[i][j] знаходиться нижчим за головну діагональ

•якщо номер стовпця j елементу матриці A більше номера рядка i, тобто i<j, це означає, що елемент A[i][j] знаходиться вищим за головну діагональ;

якщо індекси елементу A[i][j] матриці А задовольняють рівності i==N-j-1, це означає, що елемент A[i][j] лежить на побічній діагоналі;

•якщо індекси елементу A[i][j] матриці А задовольняють

нерівності i<N-j-1, це означає, що елемент A[i][j] знаходиться вищим за побічну діагональ;

•якщо індекси елементу A[i][j] матриці А задовольняють

нерівності i>N-j-1, це означає, що елемент A[i][j] знаходиться

нижчим за побічну діагональ.

Двовимірні масиви. Квадратні матриці

const int N=10;

int a[N] [N];

a[i] [j]

i

int a[m] [n], при m==n: int a[n] [n]

 

0, 0

 

 

i<j

i<N-j-1

0, N-1

 

 

 

 

 

i==j

 

i==N-j-1

 

i>j

i>N-j-1

j

 

 

N-1, 0

 

 

N-1, N-1

 

 

 

 

 

 

a00

a01

a02

a03

a04

a05

квадратна матриця

int a[6][6],

a10

a11

a12

a13

a14

a15

 

a20

a21

a22

a23

a24

a25

 

a30

a31

a32

a33

a34

a35

 

a40

a41

a42

a43

a44

a45

 

a50

a51

a52

a53

a54

a55

16

Завдання:

Дано цілі a1...,an;

дійсні b1...,bn.

Перетворити послідовність b1...,bn за правилом: якщо ai ділиться на 10, то bi збільшується в 10 разів, інакше - bi замінити на 0.

#include <stdio.h> #include <conio.h> #include <iostream.h>

const nMax=100;

// Головна програма: void main()

{

// вихідні масиви: int а[nMax+1]; double b[nMax+1]; unsigned n;

int i,j;

clrscr(); printf("Введіть число

елементів ? "); cin >>n; if (n>nMax) n=10;

//Введення вихідних масивів

а,b:

printf("Введіть масив

а(%d):\n",n); for(i=1; i<=n; i++)

cin >>a[i]; printf("Введіть масив b(%d):\n",n); for(i=1; i<=n; i++)

cin >>b[i];

//Перетворення:

for(i=1; i<=n; i++)

if (а[i]%10==0) b[i]=b[i]*10; else b[i]=0;

// Вивід : printf("\nПеретворений масив b(%d)\n",n);

for(i=1; i<=n; i++) printf("%8.2lf",b[i]);

}

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

Рішення:

 

 

 

 

 

 

 

 

 

 

 

#include "stdafx.h"

 

 

 

#include <iostream>

 

 

 

using namespace std;

 

 

 

int main()

 

 

 

 

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

{setlocale(LC_ALL,"Rus");

 

 

{

 

const int n=3, k=3;

 

 

 

sum+=mas[i][j];

int i=0, j=0, sum, mas[n][k],

 

 

}

 

mas_sum[k];

 

 

 

mas_sum[j]=sum;

for (i=0; i<n; i++) // введення

 

 

}

 

масиву

 

 

 

for (i=0; i<k; i++) //вивід

{

 

 

суми

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

 

 

{

 

cin>>mas[i][j];

 

 

 

cout<<" Сума "<<i+1<<"

}

 

 

стовпця =

for (j=0; j<n; j++) // обчислення

 

 

"<<mas_sum[i]<<endl;

суми

 

 

}

 

{

 

 

 

system("pause>>void");

sum=0;

 

 

return 0;

 

 

 

 

}

 

 

 

 

 

 

 

 

 

 

 

Написати програму, яка вводить двовимірний масив і обчислює суму його елементів по рядках.

#include "stdafx.h" #include <iostream> using namespace std; int main()

{setlocale(LC_ALL,"Rus"); const int n=3, k=3;

int i=0, j=0, sum, mas[n][k], mas_sum[k];

for (i=0; i<n; i++) // введення масиву

{

for (j=0; j<k; j++) cin>>mas[i][j];

}

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

// обчислення суми

{

sum=0;

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

{

sum+=mas[i][j];

}

mas_sum[i]=sum;

}

for (i=0; i<k; i++) // виведення

суми

{

cout<<" Сума "<<i+1<<" строки = "<<mas_sum[i]<<endl;

}

system("pause>>void"); return 0;

}

Програма обчислює середнє арифметичне елементів матриці, що вводиться по рядках.

#include <iostream> using namespace std; int main()

{setlocale(LC_ALL,"Rus"); const int n=3, k=3;

int i=0, j=0, mas[n][k], sum=0, sr_ar; for (i=0; i<n; i++) // введення масиву

{

for (j=0; j<k; j++) cin>>mas[i][j];

}

for (i=0; i<n; i++) // обчислення суми

{

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

{

sum+=mas[i][j];

}

}

sr_ar=sum/(k*k);

cout<<endl<<" Середнє арифметичне = "<<sr_ar; system("pause>>void");

return 0; }