Меню сайта

Урок 14
Двухмерные массивы —
Сегодня я продолжаю тему массивов. Останавливаться пока, я считаю рано — во-первых, массивы как таковые очень часто используются в программировании, во-вторых, мы еще не прошли все возможности, связанные с массивами. —
Одна из такие возможностей — пожалуй, самая главная, это создание многомерных массивов. Многомерность означает, что массив содержит не только элементы, упорядоченные один за другим в строку: —
1 — 2 — 3 — 4 — 5 —
но и дополнительные элементы — например, помимо строк массив имеет и столбцы: —
1 2 3 4 5
2 — 4 6 8 10
3 6 9 12 15
4 8 12 16 18
5 10 15 20 25
Чаще всего среди многомерных массивов используются двухмерные массивы, пример которого вы и можете видеть выше. Двухмерный — значит измеряющийся двумя индексами. Здесь первым индеском служит строка, вторым — столбец. —
Как описываются такие массивы и где применяются я покажу немножко ниже, а пока давайте разберем, как поисходит эта самая индексация по номерам строк и символов в них (столбцов). —
К примеру, имеем вышеописанный массив — таблица Пифагора то 1го до 5ти. Как мы можем обратиться к элементу, который находится в строке 5, столбце 3 (число 15)? Вот и всплывает упомянутое выше измерение двумя индеками. Мы так и поступим: в качестве первого индекса укажем номер строки, в качестве второго — столбец. Смотрите, что получиться: —
Mas[5,3]-
Думаю, вы поняли как происходит обращение к элементам такого массива. Более конкретные примеры использования см. ниже. А теперь давайте разберемся, как же такие массивы создаются в программе. —
Создание 2х мерных массивов —
Создать такой массив не сложнее, чем одномерный. Вот пример: —
var —
Mas: Array[1..5, 1..5] of Integer- —
Здесь создается двухмерный массив, размером в 5 строк и 5 столбцов. Сначала указывается количество строк, после — через запятую — количество столбцов. Вот еще один пример создания массива: —
var —
Mas: Array[1..50, 1..25] of Integer- —
А теперь давайте посмотрим, как же эти массивы можно использовать. Для начала напишем маленькую программу, которая будет создавать массив и записывать в него таблицу умножения, после чего распечатывать ее на экран. Вот сама программа: —
— — Program N1- —
— — uses Crt- —
— — var —
— — -Mas: Array[1..10, 1..10] of Integer- —
— — -I, J: Byte- —
— — begin —
— — -ClrScr- —
— — -For I := 1 to 10 do —
— — — For J := 1 to 10 do —
— — — — Mas[I, J] := I * J- —
— — -For I := 1 to 10 do —
— — -begin —
— — — — For J := 1 to 10 do —
— — — — — — If Mas[I, J] &lt- 10 then Write(Mas[I, J], ‘ ‘) else Write(Mas[I, J], ‘ ‘)- —
— — — Writeln- —
— — end- —
— — — — Readln- —
— — end. —
Запустите эту программу. Видите, массив распечатыват таблицу умножения, причем наглядно видна сама структура массива. Сразу бросается в глаза, что это 2х мерный массив, не так ли? —
При выполнении этой программы я использую очень простой алгоритм для заполнения массива таблицей умножения. Вы должны помнить его по прошлым выпускам, когда мы просто ее печатали. —
Также заметьте, я использую изученый модуль CRT — и его процедуру ClrScr. Учитесь использовать модули, это очень важно. —
Двигаемся дальше. Я считаю, что это тема не должна вызывать затруднений, так как с массивами вы уже знакомы, а 2х мерные — это всего лишь интерпритация. —
Итак, давайте теперь напишем программу, которая будет интенсивно использовать массивы. На этот раз это будет пример реализации «бегущих огней», которая пока использует одномерный массив, но тем не менее показывает новый алгоритм по его обработке. а именно сдвиг элементов по массиву. —
Бегущие огни: —
— — uses crt- —
— — — -const n=80- —
— — — -Var A:array[1..n] of byte- —
— — — -i,r:byte- —
— — — c:char- —
— — Begin —
— — -clrscr- —
— — -write(‘ Esc -&gt- Exit’)- —
— — -for i:=1 to n do a[i]:=random(2)- —
— — repeat —
— — -for i:=1 to n do —
— — -begin —
— — — — -gotoxy(i,4)- —
— — — — if a[i]=0 then write(‘*’) —
— — — — — — -else write(‘-‘)- —
— — — — gotoxy(81-i,8)- —
— — — — if
a[i]=0 then write(‘*’) —
— — — — — — -else write(‘-‘)- —
— — -end- —
— — r:=a[1]- —
— — -for i:=1 to n-1 do a[i]:=a[i+1]- —
— — -a[n]:=r- —
— — -c:=readkey- —
— — — — until c=#27- —
— — -end. —
Запустите эту программу. Теперь нажмите любую клавишу. Видите, происходит сдвиг огней? Разноцветные огни реализованы двумя символами » * » и » — «. —
Как же Огонек бежит по кругу? Если цепочку лампочек представить массивом чисел (1010010) то 1 шаг огней, есть сдвиг элементов массива на 1 (0100101) то есть: —
a[1]:=a[2]- —
a[2]:=a[3]- и т.д. —
a[n]:= {то что было в a[1], надо запомнить! } —
Итак сдвиг всех элементов массива на 1 шаг влево это: —
R:=a[1]- —
for i:=1 to N -1 do a[i]:=a[i+1]- —
a[n]:=R-
А теперь несколько заданий, связанных с программой, которые вам предстоит выполнить самостоятельно. —
Разработать программу программу движения огней: —
вертикально, —
по прямоугольнику 40 х 10, (N x M) — сегодняшняя тема двухмерных массивов —
в обратную сторону, —
в одну и в другую сторону в зависимости от нажатой клавиши
Это самостоятельное задание. Постарайтесь сделать его, вам необходимо как можно лучше разобраться в массивах. Ну а на сегодня все. Материала, как вы можете заметить не очень много, это связано с тем, что вам нужно хорошенько попрактиковаться с массивами и пока можно ограничиться новыми заданиями. Кроме того, один из ближайших выпусков будет практическим, где мы будем уже составлять более серьезные программы с применением массивов. Так что помните — чтобы двигаться дальше, необходимо разобраться в текущем материале.
Категория: Уроки по Pascal | Дата: 01.05.13

Меню раздела
Блок