Задания для самостоятельной работы.




Тема 3. Матрицы.

Матрица представляет собой двумерный массив или массив массивов.

Синтаксис для объявления двумерных массивов:

тип_элемента имя_массива [размер_1] [размер_2];

Как и в одномерных массивах, здесь каждый индекс имеет нижнюю границу, равную 0, а число элементов для каждого уровня индекса определяется при объявлении двумерного массива.

Пример 3.1. Объявление матриц.

double matrix A [100][10];

char table [22][3];

int index [7][12];

Большинство компиляторов хранит элементы матрицы друг за другом, т.е. как длинный одномерный массив. Заполнение и обработку матриц чаще всего производят пользуясь вложенными циклами.

С++ дает возможность инициализировать матрицу способом, аналогичным инициализации одномерных массивов. Для этого нужно использовать список значений, расположенных в той же последовательности, в которой элементы многомерного массива хранятся в памяти ЭВМ.

Пример 3.2. Инициализация матрицы

...

int main ()

{ const int MAX_COL=4;

const int MAX_ROW=3;

double x[MAX_ROW][MAX_COL]= {{ 1, 2, 3, 4}, // строка # 1

{ 5, 6, 7, 8}, // строка # 2

{ 9,10,11,12}}; // строка # 3

...

return 0 };

Пример 3.3. Ввод многомерных массивов с клавиатуры.

...

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

{ for (j=0; j<MAX_COL; j++)

{ cout << "x[" << i <<"][" << j<<"]=";

cin >> x[i][ j]; }

}

...

Пример 6.8. Ввод многомерных массивов с помощью генератора случайных чисел.

...

#include <time.h>

time_t t;

srand(time(&t)); //<stdlib.h>

...

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

{ for (j=0; j<MAX_COL; j++) x[i][ j]=rand ()%10;

}

...

Вывод массивов также осуществляется с помощью циклов, одиночных для одномерных массивов или вложенных для многомерных массивов.

Пример 3.4. Вывод матриц

...

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

{ for (j=0; j<MAX_COL; j++)

{ cout << setw(5) << x[i][ j];

}

cout << endl; }

При обработке матриц чаще всего встречаются следующие типы задач:

1) работа с матрицей в целом;

2) работа со строкой (столбцом) матрицы;

3) работа с диагональными элементами.

При работе с матрицей в целом, в качестве объекта для сравнения выбирают элемент с индексами (0,0), затем, последовательно перебирая все элементы матрицы, выполняют необходимые действия. Перебор элементов происходит с использованием вложенных циклов.

Пример 3.5. Определить среднее арифметическое значение элементов матрицы x[6][7] целого типа.

#include <iostream>

#include <stdlib.h>

#include <conio.h>

#include <time.h>

#include <iomanip>

using namespace std;

 

int main()

{ const int MAX_COL=6;

const int MAX_ROW=7;

int x[MAX_ROW][MAX_COL];

int i,j,sum=0;

float sred;

time_t t;

srand(time(&t)); // инициализация генератора случайных

// чисел

for(i=0; i<MAX_ROW; i++) // Заполнение массива

for(j=0; j<MAX_COL; j++) // случайными числами

x[i][j]=rand()%10;

for(i=0; i<MAX_ROW; i++) // Вывод матрицы на экран

{ cout << endl;

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

{ cout << setw(5) << x[i][j]; // и вычисление суммы

sum+=x[i][j]; // ее элементов

}

}

sred= float (sum)/(MAX_ROW*MAX_COL);

cout << "\nСумма = " << sum << "\nСреднее арифметическое = " << sred;

return 0;

}

 

Для поиска элемента строки (столбца) объектом сравнения является первый элемент строки с индексами i,0 или столбца с индексами 0,j и обработка идет до конца строки (столбца). Обычно результатом такой обработки массива является вектор-столбец или вектор-строка.

 

Пример 3.6. Определить минимальный элемент каждой строки действительной матрицы matr [8][4].

#include <iostream.h>

#include <stdlib.h>

#include <conio.h>

#include <time.h>

#include <iomanip>

using namespace std;

 

int main()

{ const int COL=4;

const int ROW=8;

float matr[ROW][COL]; //объявление матрицы вещественного типа

int i,j;

float min[ROW];

time_t t;

srand(time(&t));

 

for (i=0; i<ROW; i++) // заполнение и вывод матрицы

{ for (j=0; j<COL; j++) // на экран

{ matr[i][j]=rand(100);

cout << setw(6) << matr[i][j];

}

cout << endl;

}

for (i=0; i<ROW; i++) // формирование вектора-столбца

{ min[i]=matr[i][0]; // из минимальных элементов строк

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

if (matr[i][j]<min[i]) min[i]=matr[i][j];

cout << "min= " << min[i];

}

cout <<endl;

for (i=0; i< ROW; i++) cout << setw(6) << min[i];

}

При работе с диагональными элементами учитывают, что индексы элементов, стоящих на главной диагонали, удовлетворяют условию i = j.

Элементы, стоящиена побочной диагонали, имеют индексы, удовлетворяющие условию

i=n - j - 1,

если n - порядок матрицы (предполагается, что матрица - квадратная).

Пример 3.7. Найти количество четных элементов целочисленной квадратной матрицы порядка 9, стоящих ниже побочной диагонали.

#include <iostream>

#include <stdlib.h>

#include <conio.h>

#include <math.h>

#include <time.h>

#include <iomanip>

using namespace std;

 

void main()

{ const int RANG=9;

int matr[RANG][RANG];

int i,j,kol=0;

time_t t;

srand(time(&t));

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

{ for (j=0;j<RANG;j++)

{ matr[i][j]=rand()%10;

cout << setw(4) << matr[i][j];

}

cout <<endl;

}

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

{ for (j=0; j<RANG; j++) if ((i>RANG-j-1) && (matr[i][j]%2==0)) kol++; }

cout << "Количество четных элементов под главной диагональю равно " << kol; }

Задания для самостоятельной работы.

Написать программу с использованием двумерных массивов. При написании программы использовать функции.

  Дана целочисленная матрица размера 5´4. Сформировать одномерные массивы, состоящие из количества положительных и количества отрицательных элементов каждого столбца матрицы
  Дано: int matr [8] [10]. Поменять местами левую и правую половины матрицы
  Дана целочисленная матрица 5´6. Сформировать новую матрицу путем замены элементов каждой строки числом, равным сумме элементов этой строки
  Дана действительная квадратная матрица 5х5, все элементы которой различны. Найти наименьший элемент среди стоящих на главной диагонали и поменять его местами с элементом стоящим в правом нижнем углу матрицы
  В данной целочисленной матрице размера 5´4 найти сумму элементов той строки, в которой расположен наименьший элемент матрицы
  Дана целочисленная матрица 6´6. Сформировать два одномерных массива, состоящих из минимальных и максимальных элементов каждого столбца матрицы
  Дано: int arr [7] [8]. Найти количество нечетных элементов каждой строки матрицы. Сформировать вектор из найденных значений
  Дана целочисленная матрица размера 5´4. Сформировать одномерные массивы, состоящие из количества положительных и суммы отрицательных элементов каждой строки матрицы
  В данной целочисленной матрице 5х8 заменить элементы, большие введенного с клавиатуры числа на 1, меньшие – на 0. Вычислить количество 1 и 0 в каждом столбце полученной матрицы.
  Дана действительная квадратная матрица 5х5. Получить новую матрицу умножением элементов каждой строки матрицы на наибольшее значение среди элементов этой строки
  Найти под главной диагональю матрицы 9х9 минимальное значение, а над главной диагональю – максимальное. Поменять местами найденные значения.
  Дана целочисленная матрица 6´9. Сформировать одномерные массивы, состоящие из сумм элементов четных строк и нечетных столбцов матрицы.
  В данной целочисленной матрице 7х7 определить координаты точек, которые будучи максимальными в своей строке, являются максимальными и в своем столбце.
  Определить, является ли данная целочисленная матрица 5х5 «магическим квадратом», то есть равны ли в ней суммы значений всех строк суммам значений всех столбцов.
  Дана целочисленная матрица размера 5´6. Найти номера строк, где все элементы нулевые, все элементы одинаковы.
  Определить, упорядочены ли по возрастанию строки в данной целочисленной матрице 6х8.
  В данной целочисленной матрице 9х9 определить координаты точек, которые будучи максимальными в своей строке, являются минимальными в своем столбце.
  Определить, отсортирована ли по возрастанию данная целочисленная матрица 5х4.
  В данной целочисленной матрице 6х6 определить координаты точек, которые будучи минимальными в своей строке, являются минимальными и в своем столбце.
  Определить, упорядочены ли по убыванию столбцы в данной целочисленной матрице 6х8.
  В данной целочисленной матрице 8х8 определить координаты точек, которые будучи минимальными в своей строке, являются максимальными в своем столбце.
  Дана целочисленная матрица 5´5. Получить новую матрицу путем умножения всех элементов на наименьший по модулю элемент.
  Дана целочисленная матрица 7´7. Сформировать массив, состоящий из диагональных элементов данной матрицы.
  Дано: int arr [6][4]. В верхней половине матрицы определить сумму элементов каждой строки, в нижней половине – произведение элементов каждой строки.
  Дана целочисленная матрица 6´6. Сформировать массив, состоящий из количества нулевых элементов в каждой строке матрицы.
  Дана действительная матрица 5´7. Сформировать массив, состоящий из средних арифметических значений элементов каждой строки матрицы.
  Дана целочисленная матрица 7´7. Найти сумму положительных элементов и количество отрицательных среди элементов, стоящих под главной диагональю.
  Дана целочисленная матрица 6´6. Сформировать два одномерных массива, состоящих из максимальных и минимальных элементов каждой строки матрицы
  В каждом столбце матрицы 5´4 найти среднее арифметическое значение положительных элементов
  Дана целочисленная матрица 7´7. Найти среднее арифметическое положительных элементов, стоящих над побочной диагональю.

 

 



Поделиться:




Поиск по сайту

©2015-2024 poisk-ru.ru
Все права принадлежать их авторам. Данный сайт не претендует на авторства, а предоставляет бесплатное использование.
Дата создания страницы: 2017-11-19 Нарушение авторских прав и Нарушение персональных данных


Поиск по сайту: