Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
kamchatgtu246.pdf
Скачиваний:
50
Добавлен:
23.02.2016
Размер:
1.2 Mб
Скачать

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

3.2. Ввод–вывод двумерного и многомерного массива

Многомерные массивы, как и одномерные, можно задавать одним из способов ввода данных в программу.

Значения элементов двумерных массивов выводят на экран и вводят с клавиатуры, как правило, по строкам, т. е. сначала все элементы первой строки, затем второй и т. д. Это удобно выполнять при помощи вложенных инструкций for.

Программа Lab7_5; выводит на экран значения элементов массива по строкам.

Задача 5

Ввести в матрицу Prod размером 3 строки, 4 столбца следующие значения: 1-я СТРОКА – 1, 1, 1, 1; 2-я СТРОКА – 2, 2, 2, 2; 3-я СТРОКА – 3, 3, 3, 3.

Умножить на 3 каждый элемент массива и получить результат на экране дисплея распечатанным по строкам.

PROGRAM Lab7_5; Uses Crt;

var

Prod : array[1..3, 1…4] of Integer; i, j : Integer;

BEGIN {1} ClrScr; Textcolor(Yellow);

WriteLn(' ***********Ввод по строкам **********');

Textcolor(Green);

For i : = 1 To 3 Do

Циклы ввода матрицы

begin {2}

 

WriteLn (' Введи строку ', i);

 

For j : =1 To 4 Do

 

Read(Prod [i, j] );

 

end; {2}

 

Textcolor (lightred);

WriteLn ('*********** Вывод по строкам **********');

For i : =1 To 3 Do

Циклы вывода матрицы

begin{3}

 

For j : = 1 To 4 Do

 

Write (Prod [i, j]*3);

 

WriteLn;

 

end; {3}

 

95

ReadKey;

END.{1}

Пояснения к задаче 5

Каждый раз, когда внутренний цикл завершается, внешний цикл увеличивает i на единицу и внутренний цикл выполняется вновь. Таким образом, сначала вводятся, а потом выводятся все компоненты массива по строкам. При выводе мы умножаем каждый элемент массива на 3.

При описании массивов в программе удобно использовать именованные константы как значения верхних границ индексов массива. При задании массива как сложной константы в блоке Const (или в блоках, если их несколько) в круглых скобках перечисляются элементы-массивы, состоящие из элемен- тов-скаляров. Для двумерного массива это может выглядеть так:

Const

a: Array [1..2, 1..5] of Integer = ((–1, 23, 0, 7, 6), (2, 0, –12, 6, 4));

Трехмерный массив можно задать аналогично или следующим образом: Type

Cube = Array [0..1, 0..1, 0..1] of Integer; Const

M : Cube = (((0, 1), (2, 3)), ((4, 5), (6, 7)));

Элементы трехмерного массива будут хранить после этого следующие значения:

М[0, 0, 0] = 0; М[0, 0, 1] = 1; М[0, 1, 0] = 2; М[0, 1, 1] = 3; М[1, 0, 0] = 4; М[1, 0, 1] = 5; М[1, 1, 0] = 6; М[1, 1, 1] = 7.

3.3. Стандартные (типовые) задачи на двумерных массивах

Встандартной матричной задаче может потребоваться:

1)получить новую матрицу (ввести матрицу) по заданному правилу;

2)найти какую-либо величину, используя элементы данной матрицы;

3)преобразовать матрицу требуемым образом;

4)определить, обладает ли матрица (ее один или несколько элементов, строка, столбец) указанным свойством;

5)выполнить ту или иную операцию над матрицей (матрицами).

Задача 6 иллюстрирует использование вложенных циклов при вычислении двойных сумм.

Задача 6

100 50 1

Вычислить: ∑∑i + j2 .

i=1 j=1

{$N +, E} PROGRAM Lab7_6; Uses Crt;

var

sum: extended;

96

i, j : 1..100; Begin

ClrScr; sum : = 0;

Textcolor (LightRed);

For i : = 1

To 100 Do

Цикл по i

For j : = 1

To 50 Do

Цикл по j

sum : = sum + 1/ (1 + sqr (j));

WriteLn (' Сумма равна ', sum);

ReadKey;

End.

Пояснения к задаче 6

Заданная сумма sum суть:

1/(1 + 12) + 1/(1 + 22) + ... + 1/(1 + 502) + 1/(2 + 12) + 1/(2 + 22) + ... + + 1/(2 + 502) + 1/(100 + 12) + 1/(100 + 22) + … + 1/(100 + 502);

sum содержит 100 * 50 = 5 000 слагаемых, поэтому тип переменной, где

будет копиться сумма sum, объявим extended , иначе, если объявить Real, будет переполнение.

В программе идет перебор всех значений по индексу i, который меняет-

ся от 1 до 100 (внешний цикл), и перебор всех значений по индексу j, который меняется от 1 до 50 (внутренний цикл). Обратите внимание, что до входа

вцикл начальное значение суммы приравнивается к нулю (sum : = 0).

4.Контрольные вопросы

1.Что такое массив?

2.Что такое идентификатор массива?

3.Что такое переменная с индексом?

4.Какие значения принимает индекс у переменных массива на языке

Паскаль?

5.Верно ли, что массив – это структурированный тип данных, состоящий из фиксированного числа элементов, имеющих один и тот же тип?

6.Какие типы данных недопустимы для компонентов массива? Почему?

7.В каком разделе (разделах) программы допустимо описание данных

регулярного типа?

8.Где и как определяется общее число элементов массива?

9.Можно ли размерность массива определить с помощью типа диапа-

зонов?

10.Дайте определение индекса. Какие типы данных можно использовать

при описании индекса?

11.Может ли левая граница индексов массива быть меньше правой?

12.Может ли левая граница индексов массива быть положительной?

13.Может ли левая граница индексов массива быть равной нулю?

14.Может ли левая граница индексов массива быть отрицательной?

15.Как осуществляется доступ к каждому элементу массива?

97

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]