Читайте также: |
|
Массивы могут быть одномерные, двумерные, трехмерные, четырехмерные и т.д.:
array [1..10] of Integer -одномерный массив 10 ячеек
array [1..10, 1..5] of Integer -двумерный массив 50 ячеек
array [1..10, 1..5, 1..2] of Integer -трехмерный массив 100 ячеек
array [1..10, 1..5, 1..2, 1..3] of Integer -четырехмерный массив 300 ячеек
Массивы бывают не только числовые, но и символьные, строковые и прочие. Подходит любой известный нам тип. Например:
array [1..50] of Char
Это означает, что в каждой из 50 ячеек должно находиться не число, а произвольный символ. Еще один пример:
array [1..50] of String
Здесь в каждой из 50 ячеек должна находиться строка. Примеры программ с такими массивами мы увидим в 12.13.
Границы индексов в квадратных скобках тоже могут быть разными, например:
array [20..60] of Real
Здесь под вещественные числа отводится 41 ячейка.
array [0..9, -10..30] of Real
Здесь под вещественные числа отводится 10*41=410 ячеек.
Вообще индексы могут быть не только числовыми, но и любыми порядковыми. Например,
array [‘А’..’Я’] of Real
Зачем это нужно, будет ясно в 12.8.
Полная синтаксическая информация о массивах будет приведена в 14.8.
Какая польза от массивов при программировании игр? Вряд ли хоть одну «умную» игру можно запрограммировать без применения массивов. Возьмем хотя бы «крестики-нолики» на поле 3 на 3. Вам придется рисовать на экране большие клетки, а в них – нолики (кружочки) после ваших ходов и крестики (пересекающиеся линии) после ходов компьютера. Но этого недостаточно. Чтобы компьютер мог поставить крестик в свободном поле, он должен хотя бы знать, а в каких клетках крестики и нолики уже стоят. Анализировать для этого информацию о пикселах экрана очень неудобно. Гораздо разумнее заранее организовать VAR a: array[1..3,1..3] of Byte и записывать туда в нужные места нолики после ходов человека и единички после ходов компьютера. Сразу же после записи в массив 0 или 1 программа должна рисовать в соответствующем месте экрана кружок или крестик. Мыслить компьютер мог бы при помощи примерно таких операторов – if (a[1,1]=0) AND (a[1,2]=0) then a[1,3]:=1. Это очевидный защитный ход компьютера.
Определения констант
Приведем программу вычисления среднегодовой температуры для задания 1 из 12.3.
VAR s,i:Integer; t: array [1..365] of Integer;
BEGIN
for i:=1 to 365 do ReadLn(t[i]);
s:=0;
for i:=1 to 365 do s:=s+t[i];
WriteLn(s/365)
END.
Пусть нам потребовалось переделать эту программу на вычисление средней недельной температуры. Для этого достаточно везде в тексте программы число (константу) 365 заменить на число (константу) 7. В больших программах одна и та же константа может встречаться десятки раз и подобный процесс может потребовать значительного расхода времени. В 10.4 мы уже сталкивались с такой ситуацией. Там мы нашли выход в том, что вместо константы записывали переменную величину. Но в нашем случае этого не получится, так как Паскаль запрещает задавать границу в описании массива переменной величиной. В таких случаях поступают следующим образом. Константе придумывают имя (как переменной), например k, и в специальном разделе constей задается значение. Вот наша программа с использованием константы k:
CONST k =365; {Обратите внимание, что в определении вместо := стоит = }
VAR s,i:Integer;
t: array [1..k] of Integer;
BEGIN
for i:=1 to k do ReadLn(t[i]);
s:=0;
for i:=1 to k do s:=s+t[i];
WriteLn(s/k)
END.
В приведенном виде программа стала универсальной. Теперь для ее переделки под средненедельную температуру достаточно в одном месте поменять определение k=365 на k=7.
Значению константы запрещено меняться в процессе выполнения программы, то есть запрещены операторы вида k:=30 и ReadLn(k). Паскаль присматривает за этим.
Тип константы указывать нельзя[10]. Паскаль сам догадается о типе по записи:
CONST n =800; {тип целочисленный}
e =2.7; {тип Real}
bukva =’ж’; {тип Char}
Slash =’/’; {тип Char}
slovo =’хорошо’; {тип String}
OK =true; {тип Boolean}
Имя константы образуется из букв и цифр так же, как и имя переменной. Важное отличие константы от переменной в том, что значение переменной задается на этапе выполнения программы, а значение константы - раньше, на этапе компиляции. Рекомендую вам там, где можно, вместо переменных применять константы. Программа получается строже.
Дата добавления: 2015-11-14; просмотров: 53 | Нарушение авторских прав
<== предыдущая страница | | | следующая страница ==> |
Одномерные массивы | | | Действия над порядковыми типами |