По теме лабораторной работы
Переменные с двумя и более индексами служат для описания многомерных массивов. Двумерный массив состоит из элементов, образующих прямоугольную таблицу. В этом случае первый индекс обозначает номер строки, а второй индекс – номер столбца таблицы, на пересечении которых и расположен данный элемент. Учитывая, что начальное значение индекса в языке Си нуль, и предполагая, что размеры двумерного массива 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;
}
Задания для лабораторной работы:
- Дан целочисленный массив размера N. Назовем серией группу подряд идущих одинаковых элементов, а длиной серии - количество этих элементов (длина серии может быть равна 1). Вывести массив, содержащий длины всех серий исходного массива.
- Дано число k (0 < k < 11) и матрица размера 4 x 10. Найти сумму и произведение элементов k-го столбца данной матрицы.
- Дана матрица размера а x б. Найти суммы элементов всех ее четных строк и нечетных столбцов.
- Дана матрица размера а x б. Найти минимальное значение в каждой строке.
- Дана матрица размера а x б. В каждой строке найти количество элементов, больших среднего арифметического всех элементов этой строки.
- Дана матрица размера а x б. Преобразовать матрицу, поменяв местами минимальный и максимальный элемент в каждой а) строке б) столбце.
- Дана целочисленная матрица размера а x б. Вывести номер ее первой строки, содержащего равное количество положительных и отрицательных элементов (нулевые элементы не учитываются). Если таких строк нет, то вывести 0.
- Дана целочисленная матрица размера M x N. Найти количество ее строк и столбцов, все элементы которых различны.
- Дана квадратная матрица порядка M. Найти сумму элементов ее главной и побочной диагонали.
- Дана квадратная матрица порядка M. Заменить нулями элементы матрицы, лежащие а) ниже главной диагонали, б) выше главной диагонали, в) нижепобочной диагонали.
- Дана квадратная матрица порядка M. Повернуть ее на 90,180,270 градусов в положительном направлении.
- Даны два числа k1 и k2 и матрица размера а x б. Поменять местами столбцы матрицы с номерами k1 и k2.
- Дано число k и матрица размера а x б. Удалить столбец матрицы с номером k.
- Даны целые числа а1, а2, а3. Получить целочисленную матрицу [bij]i,j=1,2,3, для которой bij=ai-3aj.
- Получить [aij]i=1,…10; j=1,…12 - целочисленную матрицу, для которой aij=i+2j.
- Дано натуральное число n. Получить действительную матрицу [aij]i, j=1,…n, для которой aij= .
- Дана действительная квадратная матрица порядка n. Найти наибольшее из значений элементов, расположенных в заштрихованной части матрицы.
а) б) в) г)
- Дана квадратная вещественная матрица размерности n. Найти количество нулевых элементов, стоящих: выше главной диагонали; ниже главной диагонали; выше и ниже побочной.
- Дана вещественная матрица размерности n * m. По матрице получить логический вектор, присвоив его k-ому элементу значение True , если выполнено указанное условие и значение False иначе: - все элементы k столбца нулевые; - элементы k строки матрицы упорядочены по убыванию; - k строка массива симметрична.
- Дана вещественная матрица размерности n * m. Сформировать вектор b, в котором элементы вычисляются как: - произведение элементов соответствующих строк; - среднее арифметическое соответствующих столбцов; - разность наибольших и наименьших элементов соответствующих строк; - значения первых отрицательных элементов в столбце.
- Дан двухмерный массив A[1..m,1..n]. Написать программу построения одномерного массива B[1..m], элементы которого соответственно равны а) суммам элементов строк, б) произведениям элементов строк, в) наименьшим средних арифметических элементов строк.
- Расположить элементы данного массива в обратном порядке (первый элемент меняется с последним, второй - с предпоследним и т.д. до середины; если массив содержит нечетное количество элементов, то средний остается без изменения).
23. В данном массиве поменять местами элементы, стоящие на нечетных местах, с элементами, стоящими на четных местах.
Контрольные вопросы:
1. Может ли массив быть элементом массива?
2. В каком случае массивы совместны по присваиванию?
3. Пусть элементами массива A (a[1], a[2], a[3], a[4]) являются соответственно x, -x, x2, -x2.
4. Можно ли выполнять обход двумерного массива, организовав внешний цикл по столбцам, а внутренний — по строкам?
5. Целесообразно ли использовать ли вложенные циклы, если совершается обход только главной диагонали квадратной матрицы? одной строки матрицы? одного столбца матрицы?