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



void obmen(int strslb, int m[max][max]) {   int i,buf,t;   for (i=0;i<strslb;i++){    //номера строки и столбца элемента главной диагонали равны buf= m[i][i]; //t-номер столбца соответствующего элемента побочной диагонали t= abs(strslb-i-1); m[i][i]= m[i][t]; m[i][t]=buf;   }}

Пример 10 . Дана квадратная матрица размера n x n, заполненная с клавиатуры целыми числами так, что в каждой строке и каждом столбце ровно по одному нулевому элементу. Переставьте строки матрицы так, чтобы нулевые элементы были расположены вдоль главной диагонали. Выведите массив на экран в виде таблицы дважды – до и после перестановки. Оформите генерацию, выводмассива и перестановку строк с помощью функций.

#include "stdafx.h"#include <iostream>using namespace std;#define max 10 void gen (int k,int x[max][max]);void out (int k,int x[max][max]);void change (int k,int x[max][max]); int _tmain(int argc, _TCHAR* argv[]) { int a[max][max]; int n;   do { printf("\nВведите количество элементов массива n (n<=%d):",       max); scanf ("%d",&n); } while (n>max); gen(n,a); out(n,a); change(n,a); out(n,a); system("pause"); return 0;} void gen (int k,int x[max][max]){ int i,j; for (i=0;i<k;i++){ printf("\nВведите значения элементов %d-й строки              массива: \n",i);     for (j=0;j<k;j++){ printf("x[%d][%d]= ",i,j); scanf("%d",&x[i][j]); } } } void out (int k,int x[max][max]){ int i,j; printf("\nВывод значений %d элементов массива в строку: \n",k);   for (i=0;i<k;i++) { for (j=0;j<k;j++)  printf("\t%d",x[i][j]); printf("\n"); }} void change (int k,int x[max][max]){ int i,j,buf;  int zero[max]; //массив номеров столбцов нулевых элементов for (i=0;i<k;i++) //инициализация массива zero[i] = -1; for (i=0;i<k;i++)    for (j=0;j<k;j++) /*генерация массива номерами столбцов, в которых      расположены нулевые элементы*/ if (x[i][j]==0) { zero[i]=j; j=k; } for (i=0;i<k;i++)    for (j=0;j<k;j++){ /*обмен значениями элементов текущей строки с      соответствующей, чтобы нулевой элемент занял место на      главной диагонали*/ buf=x[i][j]; x[i][j]=x[zero[i]][j]; x[zero[i]][j]=buf;    /*после перестановки строк изменяется номер столбца      нулевого элемента*/ zero[zero[i]]=zero[i]; }}

В данном примере zero[max] – это массив, значениями которого будут номера столбцов, в которых располагается нулевой каждой строки (по условию задачи, такой элемент в каждом столбце и каждой строке единственный). Обращение x[zero[i]][j] понимается так: элемент массива x, расположенный в строке с номером zero[i] и столбце с номером j. Но для строки с номером i нулевой элемент располагается в столбце с номером zero[i]. Для каждого элемента главной диагонали индексы строки и столбца равны, поэтому нулевой элемент из столбца zero[i] должен быть перемещен в строку с аналогичным номером (вместе со всеми элементами этой же строки). Обращение zero[zero[i]] означает, что после перестановки строк с номерами i и zero[i] нулевой элемент строки zero[i] будет находиться в столбце с номером zero[zero[i]].

В языке С++ могут объявляться и использоваться в программах массивы, измерение которых больше двух. Такие массивы называют многомерными. Ограничения на число измерений массива зависит от реализации. Индексация многомерных массивов производится по каждому измерению в отдельности. Например, объявление трехмерного вещественного массива оформляется так:

float mass[max_x][max_y][max_z];

При объявлении многомерного массива формируется массив указателей на массивы, измерение которых на единицу меньше. Такое объявление рекурсивно сводится к массивам указателей на одномерные массивы.

Инициализация многомерных массивов во многом аналогична инициализации двумерных массивов и производится с учетом всех измерений. Обращение к элементам таких массивов возможна также через индексированное имя или с помощью адресной арифметики с указателями.

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

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

 

 

 

Задания для выполнения

1. Объявите двумерный целочисленный массив, в котором 10 строк по 7 элементов. Выполните генерацию массива случайными целыми числами количеством n x m (n <= 10, m <= 7) из промежутка [a; b). Выведите массив на экран в виде таблицы. Оформите генерацию и ввод массива с помощью функций.

2. Объявите двумерный вещественный массив, в котором n x m элементов. Заполните его числами, полученными по закономерности: . Распечатайте его в виде таблицы с точностью до 4 знаков после запятой. Найдите в каждом столбце наибольший элемент. Распечатайте найденные элементы под соответствующим столбцом.

3. Объявите двумерный целочисленный массив, в котором n x m элементов. Выполните генерацию массива случайными целыми числами из промежутка [a; b). Распечатайте массив в виде таблицы. Найдите суммы элементов массива по строкам. Распечатайте найденные суммы по образцу:

Сумма элементов 0-й строки равна ...

Сумма элементов 1-й строки равна ....

4. Объявите двумерный вещественный массив, в котором n x m элементов. Заполните его числами, полученными по закономерности: . Распечатайте его в виде таблицы с точностью до 3 знаков после запятой. Найдите в каждом столбце среднее арифметическое элементов. Распечатайте найденные средние арифметические под соответствующим столбцом с той же точностью.

5. Объявите двумерный целочисленный массив, в котором n x m элементов. Выполните генерацию массива случайными целыми числами из промежутка [a; b). Замените в массиве максимальные элементы каждой строки произведением их цифр. Распечатайте массив в виде таблицы дважды: до и после замены.

6. Объявите двумерный целочисленный массив, в котором n x n элементов. Выполните транспонирование полученной квадратной матрицы. Распечатайте массив в виде таблицы дважды: до и после транспонирования.

7. Объявите двумерный вещественный массив, в котором n x m элементов. Заполните его числами, полученными по закономерности: . Отсортируйте каждую строку массива по убыванию. Распечатайте его в виде таблицы с точностью до 3 знаков после запятой дважды – до и после сортировки. Оформите генерацию, вывод массива и сортировку строк с помощью функций.

8. Объявите двумерный целочисленный массив, в котором n строк по m элементов. Выполните генерацию массива случайными целыми числами из промежутка [a; b). Переставьте столбцы массива так, чтобы их максимальные элементы образовали возрастающую последовательность. Выведите массив на экран в виде таблицы дважды – до и после перестановки. Оформите генерацию, вывод массива и перестановку столбцов с помощью функций.

9. Объявите двумерный вещественный массив, в котором n x m элементов. Выполните генерацию массива случайными вещественными числами из промежутка [a; b). Отсортируйте каждый столбец массива по возрастанию. Распечатайте его в виде таблицы с точностью до 2 знаков после запятой дважды – до и после сортировки. Оформите генерацию, вывод массива и сортировку столбцов с помощью функций.

10. Дана квадратная матрица размера 2n x 2n. Получите новую матрицу, переставляя ее блоки размера n x n в соответствии с рисунком.

 

11. Приведите квадратную целочисленную матрицу n x n к треугольному виду. Способ генерации матрицы выберите самостоятельно.

12. Индивидуальное задание.

 

Задание
1. Заполните массив, записав в каждом элементе номер строки, в которой он находится. Пример для n = 5, m = 6. 0 0 0 0 0 0 1 1 1 1 1 1 2 2 2 2 2 2 3 3 3 3 3 3 4 4 4 4 4 4
2. Заполните массив, записав в каждом элементе номер столбца, в котором он находится. Пример для n = 5, m = 6. 0 1 2 3 4 5 0 1 2 3 4 5 0 1 2 3 4 5 0 1 2 3 4 5 0 1 2 3 4 5
3. Заполните массив целыми числами начиная с нуля по строчкам, слева направо, строчки обходятся сверху вниз. Пример для n = 5, m = 6.  0 1 2 3 4 5  6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29
4. Заполните массив целыми числами начиная с нуля по столбцам, сверху вниз, столбцы обходятся слева направо. Пример для n = 5, m = 6.  0 5 10 15 20 25  1 6 11 16 21 26  2 7 12 17 22 27  3 8 13 18 23 28  4 9 14 19 24 29
5. Заполните массив целыми числами начиная с нуля по столбцам, снизу вверх, столбцы обходятся слева направо. Пример для n = 5, m = 6.  4 9 14 19 24 29  3 8 13 18 23 28  2 7 12 17 22 27  1 6 11 16 21 26  0 5 10 15 20 25
6. Заполните массив целыми числами начиная с нуля по строчкам, справа налево, строчки обходятся снизу вверх. Пример для n = 5, m = 6. 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6  5 4 3 2 1 0
7. Заполните квадратный массив целыми числами по образцу. Пример для n = 5. 0 1 2 3 4 1 1 2 3 4 2 2 2 3 4 3 3 3 3 4 4 4 4 4 4
8. Заполните квадратный массив целыми числами по образцу. Пример для n = 5. 0 1 2 3 4 0 1 2 3 3 0 1 2 2 2 0 1 1 1 1 0 0 0 0 0
9. Заполните прямоугольный массив числами 0 и 1 в шахматном порядке. В левом верхнему углу записана 1. Пример для n = 5, m = 6. 1 0 1 0 1 0 0 1 0 1 0 1 1 0 1 0 1 0 0 1 0 1 0 1 1 0 1 0 1 0
10.  Заполните прямоугольный массив целыми числами начиная с нуля спиралью, закручивающейся по часовой стрелке из левого верхнего угла к центру массива. Пример для n = 7, m = 10.  0 1 2 3 4 5 6 7 8 9 29 30 31 32 33 34 35 36 37 10 28 51 52 53 54 55 56 57 38 11 27 50 65 66 67 68 69 58 39 12 26 49 64 63 62 61 60 59 40 13 25 48 47 46 45 44 43 42 41 14 24 23 22 21 20 19 18 17 16 15
11. Заполните прямоугольный массив целыми числами по образцу. Пример для n = 5, m = 6. 0 1 2 3 4 5 1 2 3 4 5 6 2 3 4 5 6 7 3 4 5 6 7 8 4 5 6 7 8 9
12. Заполните прямоугольный массив целыми числами начиная с нуля вдоль диагоналей, параллельных побочной диагонали. Заполнение проводится сверху вниз, диагонали обходятся слева направо. Пример для n = 7, m = 10.  0 1 3 6 10 15 21 28 35 42  2 4 7 11 16 22 29 36 43 49  5 8 12 17 23 30 37 44 50 55  9 13 18 24 31 38 45 51 56 60 14 19 25 32 39 46 52 57 61 64 20 26 33 40 47 53 58 62 65 67 27 34 41 48 54 59 63 66 68 69
13. Заполните прямоугольный массив целыми числами по образцу (на главной диагонали стоят нули, выше нее стоят 1, затем 2, 0, 1 и т.д. Номера всех диагоналей чередуются по циклу 0, 1, 2, ...). Пример для n = 5, m = 6. 0 1 2 0 1 2 2 0 1 2 0 1 1 2 0 1 2 0 0 1 2 0 1 2 2 0 1 2 0 1
14. Заполните квадратный массив целыми числами по образцу. На побочной диагонали стоят нули, на соседних с нею диагоналях стоят 1, затем 2 и т.д. Пример для n = 5. 4 3 2 1 0 3 2 1 0 1 2 1 0 1 2 1 0 1 2 3 0 1 2 3 4
15. Заполните квадратный массив целыми числами по образцу. На побочной диагонали стоят единицы, каждая четвертая по счету диагональ, параллельная побочной, также заполнена единицами. Пример для n = 10. 0 1 0 0 0 1 0 0 0 1 1 0 0 0 1 0 0 0 1 0 0 0 0 1 0 0 0 1 0 0 0 0 1 0 0 0 1 0 0 0 0 1 0 0 0 1 0 0 0 1 1 0 0 0 1 0 0 0 1 0 0 0 0 1 0 0 0 1 0 0 0 0 1 0 0 0 1 0 0 0 0 1 0 0 0 1 0 0 0 1 1 0 0 0 1 0 0 0 1 0
16. Заполните прямоугольный массив целыми числами по образцу (нули стоят на пересечении строк и столбцов с нечетными номерами, в остальных клетках стоят единицы). Пример для n = 5, m = 6. 1 1 1 1 1 1 1 0 1 0 1 0 1 1 1 1 1 1 1 0 1 0 1 0 1 1 1 1 1 1
17. Заполните прямоугольный массив целыми числами по образцу. На главной диагонали стоят нули, выше главной диагонали — единицы, ниже — двойки Пример для n = 5, m = 6. 0 1 1 1 1 1 2 0 1 1 1 1 2 2 0 1 1 1 2 2 2 0 1 1 2 2 2 2 0 1
18. Заполните квадратный массив целыми числами по образцу. На главной и побочной диагоналях стоят единицы, остальные элементы равны нулю. Пример для n = 7. 1 0 0 0 0 0 1 0 1 0 0 0 1 0 0 0 1 0 1 0 0 0 0 0 1 0 0 0 0 0 1 0 1 0 0 0 1 0 0 0 1 0 1 0 0 0 0 0 1
19. Заполните квадратный массив целыми числами по образцу. На главной и побочных диагоналях стоят нули, эти диагонали делят массив на четыре части. В верхней части записаны единицы, в правой записаны двойки, в нижней записаны тройки, в левой записаны четверки. Пример для n = 8. 0 1 1 1 1 1 1 0 4 0 1 1 1 1 0 2 4 4 0 1 1 0 2 2 4 4 4 0 0 2 2 2 4 4 4 0 0 2 2 2 4 4 0 3 3 0 2 2 4 0 3 3 3 3 0 2 0 3 3 3 3 3 3 0
20. Заполните прямоугольный массив целыми числами квадратами размера 2×2 из единиц, квадраты идут в шахматном порядке, начиная с левого верхнего угла. Пример для n = 7, m = 10. 1 1 0 0 1 1 0 0 1 1 1 1 0 0 1 1 0 0 1 1 0 0 1 1 0 0 1 1 0 0 0 0 1 1 0 0 1 1 0 0 1 1 0 0 1 1 0 0 1 1 1 1 0 0 1 1 0 0 1 1 0 0 1 1 0 0 1 1 0 0
21. Заполните прямоугольный массив целыми числами начиная с нуля по строчкам “змейкой”: слева направо, затем справа налево. строчки обходятся сверху вниз. Пример для n = 5, m = 6.  0 1 2 3 4 5 11 10 9 8 7 6 12 13 14 15 16 17 23 22 21 20 19 18 24 25 26 27 28 29
22. Заполните прямоугольный массив целыми числами начиная с единицы по строчкам слева направо, строчки обходятся сверху вниз. При этом в левом верхнем углу записано число 1, далее заполняются только клетки, имеющие тот же цвет в шахматной раскраске, что и левый верхний угол, а в остальных клетках записано число 0. Пример для n = 5, m = 6.  1 0 2 0 3 0  0 4 0 5 0 6  7 0 8 0 9 0  0 10 0 11 0 12 13 0 14 0 15 0
23. Заполните прямоугольный массив вложенными прямоугольниками. Клетки, находящиеся на краях прямоугольника, заполняются числом 0, соседние с ними клетки заполняются числом 1, соседние с ними — числом 2 и т.д. Пример для n = 6, m = 9. 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 0 0 1 2 2 2 2 2 1 0 0 1 2 2 2 2 2 1 0 0 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0
24. Заполните квадратный массив целыми числами по образцу. В углах записан число 0, в соседних с ними с углами клетках записано число 1, в соседних с ними клетках записано число 2 и т.д. Клетки считаются соседними, если у них есть общая сторона или вершина. Пример для n = 8. 0 1 2 3 3 2 1 0 1 1 2 3 3 2 1 1 2 2 2 3 3 2 2 2 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 2 2 2 3 3 2 2 2 1 1 2 3 3 2 1 1 0 1 2 3 3 2 1 0
25. Заполните квадратный массив целыми числами по образцу. В углах записан число 0, в соседних с ними с углами клетках записано число 1, в соседних с ними клетках записано число 2 и т.д. Клетки считаются соседними, если у них есть общая сторона. Пример для n = 7. 0 1 2 3 2 1 0 1 2 3 4 3 2 1 2 3 4 5 4 3 2 3 4 5 6 5 4 3 2 3 4 5 4 3 2 1 2 3 4 3 2 1 0 1 2 3 2 1 0 Пример для n = 8. 0 1 2 3 3 2 1 0 1 2 3 4 4 3 2 1 2 3 4 5 5 4 3 2 3 4 5 6 6 5 4 3 3 4 5 6 6 5 4 3 2 3 4 5 5 4 3 2 1 2 3 4 4 3 2 1 0 1 2 3 3 2 1 0
26. Заполните массив, записав в каждом элементе номер строки, в которой он находится. Пример для n = 5, m = 6. 4 4 4 4 4 4 3 3 3 3 3 3 2 2 2 2 2 2 1 1 1 1 1 1 0 0 0 0 0 0
27. Заполните массив, записав в каждом элементе номер столбца, в котором он находится. Пример для n = 5, m = 6. 5 4 3 2 1 0 5 4 3 2 1 0 5 4 3 2 1 0 5 4 3 2 1 0 5 4 3 2 1 0 5 4 3 2 1 0
28. Заполните массив целыми числами начиная с нуля по строчкам, слева направо, строчки обходятся сверху вниз. Пример для n = 5, m = 6.  0 1 2 3 4 5  6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29
29. Заполните массив целыми числами начиная с нуля по столбцам, сверху вниз, столбцы обходятся слева направо. Пример для n = 5, m = 6.  0 5 10 15 20 25  1 6 11 16 21 26  2 7 12 17 22 27  3 8 13 18 23 28  4 9 14 19 24 29
30. Заполните массив целыми числами начиная с нуля по столбцам, снизу вверх, столбцы обходятся слева направо. Пример для n = 5, m = 6.  4 9 14 19 24 29  3 8 13 18 23 28  2 7 12 17 22 27  1 6 11 16 21 26  0 5 10 15 20 25

 

13. Индивидуальное задание.

 

Задание
1. Определить количество «особых» элементов массива, считая элемент «особым», если в его строке слева от него находятся элементы, меньшие его, а справа – большие.
2. Для двумерного массива а получить одномерный массив, присвоив его k-му элементу значение 1 (истина), если k-я строка массива а симметрична, и 0 (ложь) – в противном случае.
3. Даны два двумерных массива. Перемножить их как матрицы. Результат записать в третий массив.
4. Дан двумерный массив. Найти номера двух соседних столбцов, сумма элементов в которых минимальна.
5. Дана квадратная матрица. Произвести циклический сдвиг элементов каждого столбца матрицы на один элемент влево.
6. Дана квадратная матрица. Произвести циклический сдвиг элементов каждого столбца матрицы на один элемент вправо.
7. Дана прямоугольная матрица размерности MxN. Сформировать одномерный массив, в который занести только последние отрицательные элементы каждой строки матрицы. Если таких элементов нет, то вывести соответствующее сообщение.
8. Дана прямоугольная матрица размерности MxN, все элементы, которой различны. Сформировать одномерный массив, в который занести наибольшие элементы каждого столбца матрицы.
9. Дана прямоугольная матрица размерности MxN, все элементы, которой различны. Сформировать одномерный массив, в который занести наименьшие элементы каждой строки матрицы.
10. Определить, является ли квадратный массив магическим квадратом, то есть массивом, в котором суммы элементов во всех строках, столбцах и на обеих диагоналях одинаковы.
11. Дана прямоугольная матрица размерности MxN. Сформировать одномерный массив, в который занести первые (сверху вниз) максимальные элементы каждого столбца матрицы.
12. Дана матрица, все элементы которой различны. Найти скалярное произведение строки, в которой находится наибольший элемент матрицы, на столбец с наименьшим элементом.
13. Дана прямоугольная матрица размерности MxN. Сформировать одномерный массив, в который занести последние (сверху вниз ) минимальные элементы каждого столбца матрицы.
14. Дана прямоугольная матрица размерности MxN. Сформировать одномерный массив, в который занести последние минимальные элементы каждой строки матрицы.
15. Дана прямоугольная матрица размерности MxN. Сформировать два одномерных массива: в первый занести количество положительных элементов в каждом столбце; во второй – количество отрицательных элементов в каждом столбце матрицы.
16. Дана прямоугольная матрица размерности MxN. Сформировать вектор В, где: B[I]=1, если элементы I строки составляют строго возрастающую последовательность; B[I]=0 если элементы I строки не составляют строго возрастающую последовательность.
17. Дана прямоугольная матрица размерности MxN. Сформировать вектор В, где: B[I]=1, если элементы I столбца составляют строго убывающую последовательность; B[I]=0 если элементы I столбца не составляют строго убывающую последовательность.
18. Дана прямоугольная матрица размерности MxN. Сформировать одномерный массив, в который занести номера тех строк, в которых есть одинаковые элементы. Если таких строк нет, то вывести соответствующее сообщение
19. Дана квадратная матрица целых чисел размером N*N (N – вводим с клавиатуры). Удалить все строки матрицы, которые содержат нули.
20. Найти наибольшее число, кратное 3, в матрице размером МхN, элементы которой вводятся с клавиатуры.
21. Найти номер строки массива размером МхN, в котором находится наименьшее количество положительных элементов.
22. Найти номер строки массива размером МхN, в котором находится наименьшее количество положительных элементов. Элементы вводятся с клавиатуры.
23. Найти номер столбца массива размером МхN, в котором находится наименьшее количество положительных элементов. Элементы вводятся с клавиатуры.
24. Найти сумму элементов, стоящих на побочной диагонали массива размером МхN.
25. Дан двумерный массив и два числа: i и j. Поменяйте в массиве столбцы с номерами i и j и выведите результат.
26. Определить количество «особых» элементов массива, считая элемент «особым», если в его строке слева от него находятся элементы, большие его, а справа – меньшие.
27. Для двумерного массива а получить одномерный массив, присвоив его k-му элементу значение 1 (истина), если k-я строка массива а не симметрична, и 0 (ложь) – в противном случае.
28. Даны два двумерных массива. Перемножить их как матрицы. Результат записать в третий массив.
29. Дан двумерный массив. Найти номера двух соседних столбцов, сумма элементов в которых минимальна.
30. Дана квадратная матрица. Произвести циклический сдвиг элементов каждого столбца матрицы на один элемент влево.

 

 


Дата добавления: 2021-07-19; просмотров: 674; Мы поможем в написании вашей работы!

Поделиться с друзьями:






Мы поможем в написании ваших работ!