
- •Структурированный тип данных
- •Массивы
- •Рассмотрим одномерные массивы.
- •Основные действия с массивами
- •I. Инициализация массива.
- •II. Вывод одномерного массива.
- •Матрицы (двухмерные массивы)
- •Основные действия с двухмерными массивами
- •II. Вывод матриц.
- •Типы алгоритмов на обработку матриц (двухмерных массивов)
- •1. Построчная обработка
- •2. Обработка матрицы по столбцам
- •3. Обработка всей матрицы
- •4. Обработка части матрицы
- •5. Преобразование матрицы
- •6. Построение матриц
- •Модульное программирование. Пользовательские функции.
- •Описание пользовательских функций
- •Формальные и фактические параметры
- •Передача параметров
- •Функции с одним результатом. Оператор return.
- •Передача массива в качестве параметра функции
- •Работа с матрицей в методах класса
- •Структуры
- •Работа со структурами
Матрицы (двухмерные массивы)
Массивы называются двухмерными, если элементы массива расположены в виде таблицы. При этом каждый элемент массива имеет два индекса, первый показывает номер строки, а второй - номер столбца, на пересечении которых он расположен.
Формат описания двухмерного массива:
<тип> <имя_массива> [размер1][размер2];
Здесь
<тип> — тип элементов массива (int, float, char, структуры),
<имя_массива> записывается по правилам идентификаторов;
[размер1][размер2] - размерность двухмерного массива, т.е. количество строк и столбцов в массиве, указывается в виде целочисленной константы или константного выражения. Величина - (размер1*размер2) определяет количество ячеек оперативной памяти, зарезервированной для массива.
Например:
а) float b[3][5];
б) const n=3, m=5; int A[n][m],
где n — количество строк (первая, левая размерность), m — количество столбцов или количество элементов в строке (вторая, правая размерность). Матрица располагается в оперативной памяти и занимает непрерывный участок, объём которой равен
n*m*sizeof(int),
где int — тип элементов матрицы.
Основные действия с двухмерными массивами
I. Инициализация массива. Тот или иной способ инициализации массива используется в зависимости от специфики конкретной задачи.
а) инициализация массива при его описании:
int A[n][m]= {{1, -2, 3, -4, 5},
{ 10, 20, 33, -40},
{-11, 22, 300, 400, 500}};
Если в строке указано меньше элементов, чем требуется, то остальные инициализируются нулями. У нас во второй строке с номером 1 (нумерация и строк, и столбцов начинается с нуля) последний элемент будет нулевым.
б) Ввод матрицы с клавиатуры используется, если для тестирования программы принципиально важно, какие значения элементов матрицы введены, а другие способы её задания неприемлемы. Например, некоторые строки (но не все) не должны содержать нулей. Очевидным недостатком этого способа является трудоёмкость ввода и необходимость его повторения при отладке программы. Простейший ввод можно выполнить следующим образом:
for ( i=0; i<n; i++)
for ( j=0; j<m; j++)
cin>>A[i][j];
Но в этом варианте в каждой строке набираем одно число, и не видно, элемент с каким номером вводим. Желательно, чтобы вводимые элементы матрицы на экране располагались так, как в математической записи, то есть элементы строки матрицы должны
вводиться из одной строки экрана. Это можно выполнить, например, следующим образом:
for ( y=wherey(), i=0; i<n; i++, y++)
{ gotoxy(1, y); cout<<"i="<<i;
for (x=5, j=0; j<m; j++, x+=5)
{ gotoxy(x,y);
cin>>A[i][j];
} }
в) Для экономии времени, затрачиваемого на ввод матрицы, для некоторых задач её элементы можно определить с помощью генератора случайных чисел
Randomize();
for ( i=0; i<n; i++)
for ( j=0; j<m; j++)
A[i][j]=random(100);
Если по условию задачи требуется, чтобы числа матрицы принадлежали интервалу [r1, r2), где r2>r1, то в цикле следует записать A[i][j]=random(r2-r1)+r1; Этот метод можно использовать при отладке программы, если на элементы матрицы нет ограничений.
д) Элементы матрицы можно задать также по некоторому специальному правилу (закону), например:
for ( i=0; i<n; i++)
for ( j=0; j<m; j++)
A[i][j]=(i+1)*(j+1);
Сформированную так матрицу для некоторых задач легче анализировать.
Замечание. Преимущество последних двух способов инициализации массива в том, что во время отладки программы не нужно тратить время на неоднократный ввод элементов матрицы или записывать их в тексте программы при объявлении. При этом матрицу надо обязательно выводить на экран, чтобы можно было проверить полученный результат.