Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лабораторная работа 7 Многомер массивы.doc
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
222.72 Кб
Скачать

Лабораторная работа № 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 обнуляется перед циклом просмотра очередной строки матрицы, поскольку для каждой строки его вычисление начинается заново.