По теме лабораторной работы

Переменные с двумя и более индексами служат для описания многомерных массивов. Двумерный массив состоит из элементов, образующих прямоугольную таблицу. В этом случае первый индекс обозначает номер строки, а второй индекс – номер столбца таблицы, на пересечении которых и расположен данный элемент. Учитывая, что начальное значение индекса в языке Си нуль, и предполагая, что размеры двумерного массива M×N, прямоугольную таблицу можно представить в виде:

⌠ а[0][0] a[0][1] .a[0][N-1]

a[1][0] a[1][1] .a[1][N-1]

i-строк {

a[i][0] a[i][1] a[i][j].a[i][N-1]

j- элементов

a[M-1][0] a[M-1][1]a[M-1][N-1]

 

В памяти элементы двумерного массива располагаются в виде последовательности (строка за строкой). Номер k элемента двумерного массива a[i][j] в последовательности может быть вычислен по формуле k=i*N+j, где N- число элементов в строке.

Такие объекты в математике называются матрицами, т.е. двумерный массив- это представление в языке программирования матрицы.

При объявлении двумерного массива описание имеет следующий вид:

Тип имя_массива [размер1][размер2];

В этом описании можно трактовать объявление двумерного массива как объявление массива массивов, т.е. массив размера [размер2], элементами которого являются одномерные массивы имя_массива [размер1].

Размеры массива в языке Си могут задаваться константами или выражениями, состоящими из констант. Нельзя задавать массивы переменного размера.

 

Пример: Лабиринт должен быть построен на основе двумерного массива. Размер лабиринта выберем на свое усмотрение.

 

#include "stdafx.h"

#include <iostream>

using namespace std;

 

int main(int argc, char* argv[])

{

for (int i = 0; i < 33; i++) //переключение по строкам

{

for (int j = 0; j < 20; j++)// переключение по столбцам

if (mas[i][j] == 1)

{

// вывести два раза символ (номер которого 176 в таблице аски) в консоль

cout << static_cast<char>(176);

cout << static_cast<char>(176);

} else

cout << " "; // вывести два пробела

cout << endl;

}

system("pause");

return 0;

}

Задания для лабораторной работы:

  1. Дан целочисленный массив размера N. Назовем серией группу подряд идущих одинаковых элементов, а длиной серии - количество этих элементов (длина серии может быть равна 1). Вывести массив, содержащий длины всех серий исходного массива.
  2. Дано число k (0 < k < 11) и матрица размера 4 x 10. Найти сумму и произведение элементов k-го столбца данной матрицы.
  3. Дана матрица размера а x б. Найти суммы элементов всех ее четных строк и нечетных столбцов.
  4. Дана матрица размера а x б. Найти минимальное значение в каждой строке.
  5. Дана матрица размера а x б. В каждой строке найти количество элементов, больших среднего арифметического всех элементов этой строки.
  6. Дана матрица размера а x б. Преобразовать матрицу, поменяв местами минимальный и максимальный элемент в каждой а) строке б) столбце.
  7. Дана целочисленная матрица размера а x б. Вывести номер ее первой строки, содержащего равное количество положительных и отрицательных элементов (нулевые элементы не учитываются). Если таких строк нет, то вывести 0.
  8. Дана целочисленная матрица размера M x N. Найти количество ее строк и столбцов, все элементы которых различны.
  9. Дана квадратная матрица порядка M. Найти сумму элементов ее главной и побочной диагонали.
  10. Дана квадратная матрица порядка M. Заменить нулями элементы матрицы, лежащие а) ниже главной диагонали, б) выше главной диагонали, в) нижепобочной диагонали.
  11. Дана квадратная матрица порядка M. Повернуть ее на 90,180,270 градусов в положительном направлении.
  12. Даны два числа k1 и k2 и матрица размера а x б. Поменять местами столбцы матрицы с номерами k1 и k2.
  13. Дано число k и матрица размера а x б. Удалить столбец матрицы с номером k.
  14. Даны целые числа а1, а2, а3. Получить целочисленную матрицу [bij]i,j=1,2,3, для которой bij=ai-3aj.
  15. Получить [aij]i=1,…10; j=1,…12 - целочисленную матрицу, для которой aij=i+2j.
  16. Дано натуральное число n. Получить действительную матрицу [aij]i, j=1,…n, для которой aij= .
  17. Дана действительная квадратная матрица порядка n. Найти наибольшее из значений элементов, расположенных в заштрихованной части матрицы.

а) б) в) г)

  1. Дана квадратная вещественная матрица размерности n. Найти количество нулевых элементов, стоящих: выше главной диагонали; ниже главной диагонали; выше и ниже побочной.
  2. Дана вещественная матрица размерности n * m. По матрице получить логический вектор, присвоив его k-ому элементу значение True , если выполнено указанное условие и значение False иначе: - все элементы k столбца нулевые; - элементы k строки матрицы упорядочены по убыванию; - k строка массива симметрична.
  3. Дана вещественная матрица размерности n * m. Сформировать вектор b, в котором элементы вычисляются как: - произведение элементов соответствующих строк; - среднее арифметическое соответствующих столбцов; - разность наибольших и наименьших элементов соответствующих строк; - значения первых отрицательных элементов в столбце.
  4. Дан двухмерный массив A[1..m,1..n]. Написать программу построения одномерного массива B[1..m], элементы которого соответственно равны а) суммам элементов строк, б) произведениям элементов строк, в) наименьшим средних арифметических элементов строк.
  5. Расположить элементы данного массива в обратном порядке (первый элемент меняется с последним, второй - с предпоследним и т.д. до середины; если массив содержит нечетное количество элементов, то средний остается без изменения).

23. В данном массиве поменять местами элементы, стоящие на нечетных местах, с элементами, стоящими на четных местах.

 

Контрольные вопросы:

1. Может ли массив быть элементом массива?

2. В каком случае массивы совместны по присваиванию?

3. Пусть элементами массива A (a[1], a[2], a[3], a[4]) являются соответственно x, -x, x2, -x2.

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

5. Целесообразно ли использовать ли вложенные циклы, если совершается обход только главной диагонали квадратной матрицы? одной строки матрицы? одного столбца матрицы?