Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Сборник задач по программированию.docx
Скачиваний:
84
Добавлен:
27.03.2016
Размер:
389 Кб
Скачать
☆
  1. Двумерные массивы

Массивы в языке C/C++ могут иметь несколько измерений (несколько индексов) – это многомерные массивы (часто применяются для представления таблиц, например, матриц) – массивы массивов.

Для идентификации элемента указывают два индекса:

- идентифицирующий строку элемента;

- идентифицирующий столбец.

Если индексов 2 – массивы называются двумерными.

Многомерные массивы объявляются следующим образом:

тип идент[колич_элем][колич_элем]...;

Например, объявляется двумерный массив b типа int, состоящий из двух строк и двух столбцов:

int b[2][2];

Ниже объявляется трехмерный (3 на 4 на 3) массив xxx типа int:

int xxx[3][4][3];

При инициализации при объявлении многомерных массивов значения рекомендуется группировать в фигурных скобках (инициализировать каждый одномерный массив, входящий в многомерный массив, отдельным списком инициализации):

int b[2][2] = {{1, 2}, {3, 4}};

В следующем примере после инициализации в массиве b[0] будут содержаться значения 1, 0, а в массиве b[1] – значения 3, 4:

int b[2][2] = {{1}, {3, 4}};

Обрабатывать многомерные массивы удобно, например, при помощи вложенных циклов. Следующий фрагмент программы может быть использован для вывода содержимого некоторого двумерного массива array2[2][3] на экран:

for (int i = 0; i < 2; i++) {

for (int j = 0; j < 3; j++) {

printf_s("%d ", array2[i][j]);

}

printf_s("\n");

}

Здесь счетчик i фиксирует строку массива, и при фиксированном значении i счётчик j изменяет свое значение, «проходя» по всем элементам строки. При использовании массивов большей мерности следует использовать циклы с большим вложением.

Задание: написать программу, выполняющую действия, описанные в задании.

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

#include <stdio.h>

/* определение символической константы N со значением

10 при помощи директивы #define */

#define N 10

/* основная функци */

void main(void) {

/* объявление двумерного массива matrix размером N на

N и инициализация его списком значений */

int matrix[N][N] =

{

{ 0, 1, 0, 0, 0, 0, 0, 0, 0, 0 },

{ 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },

{ 0, 0, 0, 1, 0, 0, 0, 0, 0, 0 },

{ 0, 0, 1, 0, 0, 0, 0, 0, 0, 0 },

{ 0, 0, 0, 0, 0, 1, 0, 0, 0, 0 },

{ 0, 0, 0, 0, 0, 0, 1, 0, 0, 0 },

{ 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 },

{ 0, 0, 0, 0, 0, 0, 0, 0, 1, 0 },

{ 0, 0, 0, 0, 0, 0, 0, 1, 0, 0 },

{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1 },

};

/* объявление переменной для хранения суммы элементов

в строке */

int rows;

/* объявление переменной для хранения суммы элементов

в столбце */

int cols;

/* объявление переменной для хранения признака того,

что строка или столбец не являются содержащими

нули на всех позициях, кроме одной */

int flag;

/* цикл по всем строкам (столбцам) */

for (int i = 0; i < N; i++) {

/* для каждой новой строки (столбца) выполняется

обнуление сумм значений элементов строки

(столбца) и сброс флага */

rows = 0;

cols = 0;

flag = 0;

/* цикл по всем элементам конкретной строки

(столбца) */

for (int j = 0; j < N; j++) {

/* вычисление суммы элементов в строке i */

rows += matrix[i][j];

/* вычисление суммы элементов в столбце j */

cols += matrix[j][i];

}

/* если сумма элементов в текущей строке не равна

1 или сумма элементов в текущем столбце не

равна 1 */

if (rows != 1 || cols != 1) {

/* установить значение влага в 1 */

flag = 1;

/* иначе немедленно выйти из цикла */

break;

}

}

/* если в ходе проверки флаг был установлен в 1 */

if (flag == 1) {

/* вывести сообщение о том, что исходная матрица –

не матрица перестановок*/

printf_s("Исходная матрица NOT является матрицей

перестановок.\n");

} else {

/* иначе вывести о том, что исходная матрица –

матрица перестановок*/

printf_s("Исходная матрица является матрицей

перестановок.\n");

}

}

1. Определить, является ли заданная матрица бинарной – состоящей из 0 и 1.

2. Вычислить сумму максимальных элементов каждого столбца матрицы.

3. Построить матрицу альтернанса размерности (5, 6) такую, что каждый элемента матрицы , где ; .

4. Вывести на экран количество положительных элементов каждого столбца матрицы.

5. Определить, является ли заданная матрица антидиагональной – такой, что все элементы, лежащие вне побочной диагонали, равны 0.

6. Найти сумму элементов той строки матрицы, в которой расположен минимальный элемент матрицы.

7. Определить, является ли заданная матрица бисимметричной – симметричной как относительно главной диагонали, так и относительно побочной диагонали.

8. Найти среднее арифметическое наименьшего и наибольшего значений элементов матрицы

9. Определить, является ли заданная матрица центросимметричной – симметричной относительно своего центра, то есть .

10. Найти столбец матрицы с максимальной суммой элементов. Если таких столбцов несколько, вывести номер правого из них.

11. Определить, является ли заданная матрица диагонально-доминирующей. То есть такой, что для всех значений .

12. Определить, имеются ли в двумерном массиве одинаковые элементы.

13. Определить, является ли заданная матрица Z-матрицей – такой, что её недиагональные элементы меньше или равны нулю.

14. Найти индексы последнего четного элемента в каждой строке матрицы.

15. Определить, является ли заданная матрица нижнетреугольной – такой, что все элементы выше главной диагонали нулевые.

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

17. Определить, является ли заданная матрица трёхдиагональной – такой, что все её ненулевые элементы располагаются на трёх диагоналях: главной, первой сверху и первой снизу.

18. Каждую строку матрицы заменить суммой нижележащих строк, включая саму строку.

19. Определить, является ли заданная матрица матрицей Фробениуса – такой, которая получается из единичной при помощи сдвига и добавления нового столбца.

20. Все элементы матрицы, имеющие максимальное значение, заменить на 0.