- •Лабораторная работа № 7 программирование задач обработки двумерных массивов
- •1 Цель и порядок работы
- •Порядок выполнения работы:
- •2 Общие сведения
- •2.1 Прямоугольные массивы
- •2.2 Ступенчатые массивы
- •2.3 Оператор цикла с перебором foreach
- •3. Варианты заданий для самостоятельной работы
- •Содержание отчета
Лабораторная работа № 7 программирование задач обработки двумерных массивов
1 Цель и порядок работы
Цель работы - изучить операторы, используемые при организации вычислительных процессов обработки двумерных массивов данных, получить практические навыки в составлении подобных программ.
Порядок выполнения работы:
ознакомиться с описанием лабораторной работы;
получить задание у преподавателя по вариантам;
разработать алгоритм решения задачи;
написать программу, ввести программу, отладить и выполнить ее на ЭВМ;
оформить отчет.
2 Общие сведения
2.1 Прямоугольные массивы
Прямоугольный массив имеет более одного измерения. Многомерным называется такой массив, который характеризуется двумя или более измерениями, а доступ к отдельному элементу осуществляется посредством двух или более индексов.
Чаще всего в программах используются простейшие многомерные массивы - двумерные массивы. В двумерном массиве позиция любого элемента определяется двумя индексами. Если представить двумерный массив в виде таблицы данных, то один индекс означает строку, а второй - столбец. Чтобы объявить двумерный массив целочисленных значений размером A x B, достаточно записать следующее:
int[,]имя_массива = new int[A,B];
Чтобы получить доступ к элементу двумерного массива, необходимо указать оба индекса, разделив их запятой. Например, чтобы присвоить число Z элементу двумерного массива, позиция которого определяется координатами x и y, можно использовать следующую инструкцию:
имя_массива[x,y] = Z;
Многомерный массив можно инициализировать, заключив список инициализаторов каждой размерности в собственный набор фигурных скобок. Например, вот каков формат инициализации многомерного массива:
тип[,] имя_массива = {
{val, val, val, …, val}
{val, val val, …, val}
…
{val, val, val, …, val}
};
Здесь элемент val – значение инициализации. Каждый внутренний блок означает
строку. В каждой строке первое значение будет сохранено в первой позиции массива, второе значение - во второй и т.д.
Варианты описания двумерного массива:
тип[,] имя;
тип[.] имя = new тип [ разм_1, разм_2 ];
тип[.] имя = { список_инициализаторов };
тип[,] имя = new тип [,] { список_инициализаторов };
тип[,] имя = new тип [ разм_1, разм_2 ] { список_инициализаторов };
Примеры описаний (один пример для каждого варианта описания):
int[ , ] а; / / 1 элементов нет
int[ , ] b = new int [2, 3]; / / 2 элементы равны 0
int[ , ] с = {{1, 2, 3}, {4, 5, 6}}; / / 3 new подразумевается
int[ , ] c = new int[ , ]] {{1. 2. 3). {4, 5. 6}}: / / 4 размерность вычисляется
int[ , ] d = new int[2,3 ]] {{1. 2. 3). {4, 5. 6}} / / 5 избыточное описание
Если список инициализации не задан, размерности могут быть не только константами, но и выражениями типа, приводимого к целому. К элементу двумерного массива обращаются, указывая номера строки и столбца, на пересечении которых он расположен, например:
а[1,4] b[i, j] b[j, i]
Необходимо помнить, что компилятор воспринимает как номер строки первый индекс, как бы он ни был обозначен в программе.
Пример 1. Для целочисленной матрицы размером m*n вычислить сумму элементов в каждой строке (рис. 1).
Рисунок 1 - Матрица из m строк и n столбцов
Нахождение суммы элементов каждой строки требует просмотра матрицы по строкам. Схема алгоритма приведена на рис. 2, программа — в листинге 1.
Рисунок 2- Схема алгоритма к примеру 1
Листинг 1- Программа к примеру 1
using System;
namespace ConsoleApplication1
{
class Class1
{
static void Main()
{ const int m = 3, n = 4;
int[,] a = new int[m, n] {
{ 2, 2, 8, 9 },
{ 4, 5, 6, 2 },
{ 7, 0, 1, 1 }
};
Console.WriteLine("Исходный массив:");
for ( int i = 0; i < m; ++i)
{
for ( int j = 0; j < n; ++j )
Console.Write( " " + a[i, j]);
Console.WriteLine();
}
for ( int i = 0; i < m; ++i )
{
int sum = 0;
for ( int j = 0; j < n; ++j )
sum += a[i, j];
Console.WriteLine("В строке {0}сумма элементов {1}",i, sum );
}
Console.Read();
}
}
}
Результаты работы программы:
Следует обратить внимание на то, что переменная sum обнуляется перед циклом просмотра очередной строки матрицы, поскольку для каждой строки его вычисление начинается заново.
