Студопедия

КАТЕГОРИИ:

АвтоАвтоматизацияАрхитектураАстрономияАудитБиологияБухгалтерияВоенное делоГенетикаГеографияГеологияГосударствоДомЖурналистика и СМИИзобретательствоИностранные языкиИнформатикаИскусствоИсторияКомпьютерыКулинарияКультураЛексикологияЛитератураЛогикаМаркетингМатематикаМашиностроениеМедицинаМенеджментМеталлы и СваркаМеханикаМузыкаНаселениеОбразованиеОхрана безопасности жизниОхрана ТрудаПедагогикаПолитикаПравоПриборостроениеПрограммированиеПроизводствоПромышленностьПсихологияРадиоРегилияСвязьСоциологияСпортСтандартизацияСтроительствоТехнологииТорговляТуризмФизикаФизиологияФилософияФинансыХимияХозяйствоЦеннообразованиеЧерчениеЭкологияЭконометрикаЭкономикаЭлектроникаЮриспунденкция

Описание. Работа с элементами




 

Двухмерные массивы можно представить в виде пря­моугольной таблицы или матрицы.

Рассмотрим матрицу А размерностью 2х3 (состоя­щую из двух строк по три элемента в каждой):

               a11 a12 a13

  A=

               a21 a22 a23

Положение каждого элемента определяется двумя числами: номером строки, в которой находится элемент, и номером столбца. Например, а12 − это элемент, сто­ящий в первой строке и во втором столбце.

Имеется несколько способов объявления двухмерных массивов.

Способ 1. В Паскале двухмерный массив можно опи­сать как одномерный, элементами которого являются одномерные массивы. Например, для матрицы А, при­веденной выше:

Const n=2; m=3;

Type omyarray=Array[1..m] Of real;

dmyarray=Array[1..n] Of omyarray;

Var v: omyarray;

a: dmyarray;

В данном случае переменная v объявлена как одно­мерный массив из трех элементов вещественного типа. Переменная а описана как двухмерный массив из двух строк, в каждой по три элемента.

Способ 2. Описание массива А можно сократить, исключив определение типа omyarray в определении типа dmyarray:

Const n=2; m=3;

Type dmyarray=Array[1..n] Of Array[1..m]

Of <тип элементов>;

Var a: dmyarray;

Способ 3. Еще более краткое описание массива А можно получить, указывая диапазоны изменения индек­сов для каждой размерности массива:

Const n=2; m=3;

Type dmyarray=Array[1..n, 1..m]

Of <тип элементов>;

Var a: dmyarray;

Если нет необходимости описывать тип, то мож­но просто объявить массив в разделе описания пе­ременных:

Var a: Array[1..n,1..m]

Of <тип элементов>;

Рассмотренные выше методы решения задач обра­ботки одномерных массивов могут применяться и для обработки двухмерных массивов. Поскольку положение элемента в двухмерном массиве описывается двумя индексами (первый − номер строки, второй − номер столбца), программы для решения большинства матрич­ных задач строятся на основе вложенных циклов. Обыч­но внешний цикл организуется по строкам матрицы, то есть в нем выбирается требуемая строка матрицы, а внут­ренний цикл − по столбцам матрицы, в нем выбирает­ся элемент строки. Для присваивания значений элемен­там массива могут быть использованы операторы при­сваивания и операторы ввода.

Пример

В приведенном ниже примере осуществляются ввод и вывод двухмерного массива А размерностью 10х15. Формирование и вывод массива производятся в двух про­цедурах, которые последовательно вызываются из основ­ной программы. Надо заметить, что формирование двух­мерного массива можно осуществлять всеми четырьмя спо­собами, описанными для одномерных массивов, то есть: вводом с клавиатуры, посредством генератора случай­ных чисел, с помощью файла или описанием типизированной константы. Пусть в нашем приме­ре элементы задаются посредством генератора случай­ных чисел.

Program Example_110;

Const n=10; m=15;

Type dmyarray = Array[1..n, 1..m]

Of Integer;

Var A: dmyarray;

Procedure Init(Var x: dmyarray);

{Процедура формирования массива}

Var i, j: Integer;

Begin

For i=1 To n Do

For j:= 1 To m Do x[i, j]:=

-25+Random(51);

End;

Procedure Print(x: dmyarray);

{Процедура вывода массива на экран}

Var i, j: Integer;

Begin

For i:=1 To n Do

Begin {Вывод i-й строки массива}

For j:=1 To m Do Write(x[i, j]:5);

Writeln; {Переход на начало

следующей  строки}

End;

End;

Begin

Init(A);

Writeln('Массив А:');

Print(A);

Readln;

End.

Можно выделить несколько видов задач на двухмер­ные массивы.

Найти сумму элементов

 

Иногда необходимо найти сумму всех элементов, иногда − только некоторых, удовлетворяющих опре­деленному условию. Мы рассмотрим более сложный пример.

Пример

Сформировать одномерный массив, каждый элемент которого равен сумме отрицательных элементов соот­ветствующей строки заданной целочисленной матрицы.

Решение

Опишем одномерный массив, размерность которого равна количеству строк в двухмерном массиве.

Const n=10; m=15;

Type omyarray=Array [1..n] Of Integer;

dmyarray=Array[1..n, 1..m] Of Integer;

Var B: omyarray;

A: dmyarray;

Формировать одномерный массив по заданному пра­вилу будем в процедуре. Ей передаются два параметра − исходный двухмерный массив и одномерный массив, ко­торый является результатом. В теле процедуры использу­ются вложенные циклы. Внешний цикл определяет но­мер строки, который совпадает с номером элемента од­номерного массива. Здесь же задаются начальные значе­ния элементов одномерного массива, равные 0. Во внут­реннем цикле анализируется каждый элемент выбранной строки. Если очередной элемент отрицательный, то он добавляется к сумме всех предыдущих отрицательных элементов выбранной строки матрицы.

Program Example_111;

Procedure Sum(x: dmyarray;

Var y: omyarray);

Var i, j: Integer;

Begin

For i:=1 To n Do

Begin

y[i]:=0; {Присваивание начальных

значений элементов массива суммы}

For j:=1 To m Do

{Накопление суммы отрицательных}

If x[i,j]<0 Then y[i]:=y[i]+x[i,j];

End;

End;

В основной программе после вызова процедуры Sum(А, В) остается только вывести на экран одномер­ный массив В, в котором записаны суммы отрицатель­ных элементов каждой строки.










Последнее изменение этой страницы: 2018-05-31; просмотров: 214.

stydopedya.ru не претендует на авторское право материалов, которые вылажены, но предоставляет бесплатный доступ к ним. В случае нарушения авторского права или персональных данных напишите сюда...