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

7.3. Многомерные массивы

Массивы могут иметь и более одного измерения. В таких случаях говорят о многомерных массивах. Многомерные массивы широко используются в математике, статистике и некоторых других прикладных науках (например, для матричных вычислений). Объявление двумерного массива выглядит следующим образом:

Var

TwoDimensionalArray: Array [1..80, 1..25] of Char;

Переменной TwoDimensionalArray соответствует некоторая матрица или двумерный массив, причем каждому элементу данного массива может быть поставлена в соответствие некоторая позиция на экране компьютера (на экране помещается 80 столбцов (с номерами от 1до 80) и 25 строк (с номерами от 1 до 25)). Таким образом, каждый элемент массива может быть использован для хранения одного символа, отображенного в соответствующей позиции экрана.

Поскольку элементы массивов расположены упорядоченно в соответствии с их номерами-индексами, необходимо внимательно относиться к изменению индексов. Обработка таких одномерных массивов ведется, как правило, с использованием вложенных циклов For…to…do.

Пример:

Применение некоторого двумерного массива.

Переменные Line и Column определяют номера строк и столбцов на экране.

Program DemoUsesTwoDimensionalArray;

Uses Crt;

Var

TwoDimensionalArray: Array[18..0, 1..25] of char;

Column, Line: integer;

Begin

ClrScr;

for Line:= 1 to 25 do

for Column: = 1 to 80 do

TwoDimensionalArray[Column, Line]:= Chr(32+Column);

{Вывод элементов массива. Номер столбца изменяется чаще}

{номера строки}

ClrScr;

for Line:= 1 to 25 do

begin

for Column: = 1 to 80 do

Write(TwoDimensionalArray[Column, Line]);

Writeln;

end;

End.

Пример:

Программа, которая выполняет «зеркальное» отображение элементов матрицы размерности m*n, элементами которой являются целые числа. Отображение осуществляется относительно вертикальной оси симметрии (меняет местами элементы первого столбца с последним, второго с предпоследним и т.д.).

Program VertMirrow;

Const

m = 10; {число строк}

n = 15; {число столбцов}

type

TMatr= array[1..m, 1..n] of integer;

Var

Matr: TMatr;

B: Integer;

i, j: integer;

Begin

Clrscr;

for i: =1 to m do {Ввод исходных значений матрицы}

for j: =1 to n do

readln(Matr[i, j]);

writeln ('Исходная матрица');

for i: =1 to m do

begin

for j: =1 to n do write (Matr [i, j]: 5);

writeln;

end;

writeln;

{Зеркальное отображение матрицы относительно вертикальной}

{оси симметрии}

for j: =1 to n div 2 do (Берем столбцы от первого до среднего)

for i: =1 to m do (Меняем местами симметричные столбцы)

begin

B:= Matr[i, j];

Matr[i,j]:= Matr [i, n-j+1];

Matr[i, n-j+1]:= B;

end;

Writeln('Преобразованная матрица:');

for i: =1 to m do

begin

for j: =1 to n do write (Matr [i, j]: 5);

writeln;

end;

writeln;

End.

Пример:

Программа, осуществляющей вывод элементов квадратной матицы порядка n и вывод, выполняя обход матрицы по «спирали», как показано на рисунке.

i

p

p+1 n–p

n–p+1

1

2

3

4

5

6

j p n–p+1

p

p+1

n–p+1

1 2 3 4 5 6

p n–p n–p+1

P –номер текущего витка «Спирали»

Программа, соответствующая данной схеме, имеет вид:

Program SpiralWrite;

Uses Crt;

const

n =10; {порядок квадратной матрицы}

type

TMatr = array[1…n, 1…n]of integer;

Var

Matr: TMatr; {исходная матрица}

i, j, p: integer;

Begin

ClrScr;

for i: =1 to n do

begin

for j: = 1 to n do read(Matr [i,j]);

end

writeln ('Исходная матрица:');

for i: = 1 to n do

begin

for j: = 1 to n do

write(Matr [i,j]:5);

writeln;

end;

writeln;

{Выписывание элементов матрицы по «спирали»}

for p: = 1 to (n+1) div 2 do

begin

{Выписывание элементов верхней строки p–го витка}

for j: =p to n-p+1 do

write(Matr[p, j]:4);

{Выписывание элементов правого столбца p–го витка}

for i: =p+1 to n-p+1 do

write(Matr[i,n-p+1]:4);

{Выписывание элементов нижней строки p–го витка}

for j: =n-p downto p do

write(Matr[n-p+1,j]:4);

{Выписывание элементов левого столбца p–го витка}

for i: =n-p downto p+1 do

write(Matr[i,p]:4);

end;

End.

В Турбо Паскаль можно одним оператором присвоения передать все элементы одного массива другому массиву того же типа, например:

Var

a,b: array [1…5]of integer;

begin

. . . .

a: =b

. . . .

end.

После этого присваивания все пять элементов массива a получат те же значения, что и в массиве b. Однако над массивами не определены операции отношения. Нельзя, например, записать: if a =b then…

Сравнить два массива можно поэлементно, например:

Var

a,b: array [1…5] of singl;

eq: Boolean;

i: byte;

Begin

. . . .

eq: = true;

for i: = 1 to 5 do

if a[1]< > b[j] then

eq: =fals;

if eq= false then

. . . .

End.

Задачи

  1. Заполнить два массива размера nn, все элементы которого целые числа. Вычислить сумму двух массивов.

  2. Заполнить массив размера nn, все элементы которого целые числа, затем ввести число. Вычислить произведение матрицы на число.

  3. Заполнить массив размера nn, все элементы которого целые числа. Преобразовать массив, заменив строки столбцами.

  4. Заполнить массив размера nn, все элементы которого целые числа. Преобразовать его:

а) расставив строки в порядке возрастания первого элемента каждой строки;

б) расставив строки в порядке убывания первого элемента каждой строки;

в) расставить столбцы в порядке возрастания первого элемента каждого столбца;

г) расставить столбцы в порядке убывания последнего элемента каждого столбца.

  1. Усложнить предыдущую задачу условием: в случае равенства первых элементов провести расстановку по вторым элементам, затем в случае равенства вторых – по третьим и т.д.

  2. Заполнить массив размера nn, все элементы которого целые числа. Вывести на экран:

а) строки, первые элементы которых – четные числа;

б) строки, первые элементы которых – положительные числа;

в) строки, сумма элементов которых – четное число;

г) столбцы, первые элементы которых – положительные числа;

д) столбцы, первые элементы которых – четные числа;

е) те строки, где элемент главной диагонали массива – четное число.

  1. Заполнить массив размера nn, все элементы которого натуральные числа. Подсчитать число комбинаций символов 'н', 'о'. Комбинации 'но', 'он', , входят в это число.

  2. Заполнить случайным образом массив nn, все элементы которого целые числа. Вывести на экран максимальные элементы строк.

  1. Заполнить случайным образом массив размера nn, все элементы которого целые числа. Получить новый массив, переставляя его блоки в соответствии с рисунком:

а) б)

1

2

3

4

2

1

3

4

  1. Заполнить случайным образом массив размера nn. Определить максимальный элемент в заштрихованной области.

а

) б) в)