Глава 3. Компиляция проекта и прочие настройки
Итак, я ж совсем ни слова не сказал о том как компилировать проект. Ладно, сейчас объясню. Чтобы скомпилировать ваш исходный код программы, нужно нажать в панели инструментов на кнопочку с изображением молотка или нажать на клавиатуре F7.
После этого через некоторое время появится окно с
оповещением об удачной компиляции или ошибке.
Рис. 7. Сборка завершилась успешно Рис. 8. Сборка завершилась неудачно
Вот на рисунках 7 и 8 изображены результаты компиляции. Если сборка завершилась с ошибками, то ниже в консоли можете глянуть, где ошибка.
Рис. 9. Консоль сообщений о компиляции.
Так же в консоли можно два раза щелкнуть по сообщению об ошибке, тем самым выделится строка с ошибкой в редакторе кода.
Теперь о запуске скомпилированного приложения. Напомню, что скомпилированные приложения находятся в директории Вашего проекта в папке bin. Если сборка завершилась удачно, то в этой папке появятся два файла: архив с расширением *.jar и еще один файл с расширением *.jad. Jar – это и есть само приложение, которое можно загружать в телефон, а файл Jad – это дескриптор приложения и ссылка на Jar-файл. Файл jad нужен для установки приложения, т.к. некоторые не могут установить приложение через файл JAR (Телефоны Samsung, Philips, Sagem и др.). Файл Jar можно открыть любым архиватором, который поддерживает архивы ZIP (по сути, файл JAR – это и есть ZIP-архив).
Глава 4. Переменные и константы.
Теперь ознакомимся с такими важными частями языка, такие как переменные и константы. Начнем с констант.
Константа – это величина, которая не изменяется в течение выполнения программы. Вспомним, например число pi (π), или число Авогадро. Это обычные константы, которые не меняются, так же и в программе. Константы могут содержать числа и строки. Чтобы объявить константу – применяют зарезервированное слово const. прежде чем идти дальше, я предлагаю ознакомиться со структурой программы. Структура программы представлена ниже в виде кода:
Program заголовок_программы;
Const список констант;
Type типы;
Var список переменных;
Подпрограммы функций и процедур;
Begin
Операторы;
End.
Итак, посмотрели структуру программы? Хорошо! Идем далее. Не следует пока забивать голову всем этим кодом. Эта структура показывает, в каком порядке должно, что-либо объявляться.
Вернемся к константам. Вспомните пример программы Hello, world! Вспомнили? Отлично! А теперь попробуем записать этот пример с использованием констант.
Program HelloWorld;
Const
str = ‘Hello, world!’;
Begin
DrawText(str, 5, 5);
Repaint;
Delay(5000);
End.
Программка несколько усложнилась. Для начала изучим синтаксис оператора const:
Const имя_константы = значение;
В примере выше в качестве имени константы используется слово str. Можно использовать любое имя для константы, но оно должно быть на латинице, не должно начинаться с цифр, не должно содержать пробелов. Это самое главное.
Пример имен констант: val, chislo, loh, urod2 и тд. После присвоения имени константы какого-нибудь значения, его имя можно использовать в качестве его значения. Например если мы присвоим имени константы val число 5 то можно потом использовать имя val в качестве числа. Например:
Оригинальный пример: A := 5 + 5;
В этом примере используется переменная которая записывает в себя результат вычисления примера 5+5. То есть переменная получает значение 10. А вот как можно записать это используя константу:
Const
Val = 5;
Var
A:integer;
Begin
A:=val+val;
End.
Пока не обращайте внимание на слова var, integer о них чуть позже.
Вернемся к примеру:
Program HelloWorld;
Const
str = ‘Hello, world!’;
Begin
DrawText(str, 5, 5);
Repaint;
Delay(5000);
End.
Здесь процедура DrawText использует значение константы str в качестве строки. Так чтобы использовать в качестве параметра строку или число в функции или процедуре нужно поместить имя константы в параметр этой функции или процедуры. Константы в MIDlet Pascal могут быть одним из трех типов: целые числа, дробные числа и строки. Примеры записи констант всех трех типов:
Const
Chislo = 10;
RealChislo = 0.569;
Str = ‘Строка’;
Теперь поговорим о переменных. Переменные практически тоже самое что и константы. Отличаются они лишь тем, что могут изменять свои значения. Без переменных не было бы ни одного языка программирования. Для чего нужны переменные? Они нужны например для передачи значения другой подпрограмме. Например захотели вы создать калькулятор. Ну какой калькулятор без переменных? Числа ведь нужно во что-то записывать! Для того чтобы сложить два разных числа нужно объявить три переменные: для первого числа (пусть будет буква A), для второго числа (буква B) и результат (буква С). Таким образом для сложения числа получится вот такая формула: C:=A+B;
Вспомнили математику? Отлично! Пусть для переменной A мы ввели значение 6, для B – 5, а переменная С получает ответ, т.е. число 11. Думаю маленько понятно?
Итак, для того чтобы использовать переменную, ее нужно сначала объявить. Эту операцию мы делаем с помощью слова var, далее пишем ее имя (правила написания имени такие же, как и у констант) и указываем ее тип (число, строка и др.). Синтаксис объявления переменной:
Var имя_переменной : тип_переменной;
Например:
Var a: integer;
Если у Вас несколько переменных одного типа, то можно их записать по порядку, разделяя их запятой:
Var a, b, c : integer;
В MIDlet Pascal существуют 10 простых типов и 2 комплексных. Вот они все:
Простые:
ü boolean
ü char
ü integer
ü real
ü string
ü http
ü resource
ü image
ü recordStore
ü command
Комплексные:
ü record
ü array
И несколько не реализованных, один из которых тип file.
Далее буду объяснять типы этих данных. Начнем с первого типа boolean.
Тип boolean – этот тип называется так же булевым типом. Переменные типа boolean могут иметь только два значения true(истину) и false(ложь). Для чего же нужен этот тип? Ну например нужно сделать так - например переменная имеет значение true то включить в программе что-либо, например звук в плеере. То есть если переменная имеет значение true, то оставить звук включенным, если переменная имеет тип false, то звук выключить. Думаю что ясно. Все это рассмотрим на практике.
Тип char – этот тип называется символьным. Переменная, имеющая этот тип, может содержать в себе только один символ. С переменными этого типа можно делать такие операции, как конкатенация (сложение) +, сравнение >,<,<=,>=,=. Что же будет если мы сложим два символа? Ну например одной переменной присвоим значение ‘a’, а второй переменной – значение ‘b’, и если использовать процедуру drawText, то на экране мы увидим строку ab. Т.е. a и b сложились вместе. И заметьте что тип у строки ab будет уже string, так как переменная, имеющая тип char, может содержать в себе только один символ.
При операциях сравнения, переменная уже будет иметь тип boolean. Например: C:=’A’>’B’, здесь C получит значение false, так как A меньше (она стоит перед B), чем B.
Тип integer – это целочисленный тип, переменные которого могут иметь целое число или идентификатор объекта (текстового поля, шкалы и др.). Переменные этого типа могут иметь численное значение от -2147483647до2147483647. Нехило? Вот так вот! А вы думали, что это игрушки? Нее тут все серьезно. Для переменных этого типа доступны следующие операции:
Ø Операции сравнения: =, >, <, >=, <=
Ø Операции сложения/вычитания : +, -
Ø Операции деления/умножения: *, “/”, div, mod
Операция “/” и div не имеет никакой разницы. Mod – возвращает остаток от целочисленного деления.
Тип real – этот тип представляет собой значения дробных чисел. Операции с дробными числами медленны, так что вы должны понимать, что приложения со сложной математикой, могут выполняться довольно таки долго. MIDlet Pascal предоставляет около 20 функций для работы с реальными числами и предопределенную константу pi (π). Операции с этими переменными схожие с переменными типа integer, за исключением операций mod и div.
Тип string – этот тип служит для представления текста и содержит последовательности символов. Следующие операции доступны с переменными с этим типом:
Ø Операции сравнения: >, <, >=, <=, = (сравнение чувствительно к регистру)
Ø Операции сложения: + (вторым операндом может быть целое число, строка символ или логический тип (true или false))
Чтобы добавить в строку “кавычки” (‘) вводите ее два раза подряд (‘’’’), в этом случае MIDlet Pascal проинтерпретирует его как признак окончания строки.
Тип image – этим типом представляются графические изображения. Для загрузки изображения из JAR файла применяйте функцию LoadImage.
Тип command – этот тип служит для отображения команд на дисплее телефона. На рисунке 10 изображен пример команд. Бывает что в программе более двух команд. В этом случае команды группируются в специальное меню, у которых называются они по разному (на телефонах Sony Ericsson в меню “Функции”, у телефонов Siemens в меню “Опции”). Какую отобразить команду а какую поместить в меню функции решает сам аппарат (телефон). Это так же завит от приоритета команды.
Тип recordStore – этот тип предназначен для реализации хранилищ данных. Это например нужно для того чтобы сохранить настройки вашей программы. Хранилище на мобильном телефоне аналогично файлам на компьютерах. Как и файлы хранилища идентифицируются по имени. Данные из Рис.10. Команды.
хранилищ можно как считывать, так и записывать.
Тип http – этот тип служит для открытия соединения с сетью Интернет. У HTTP соединения существует следующий жизненный цикл:
v открытие подключения к удалённому web-серверу
v установка метода запроса http
v добавление полей-заголовков запроса (необязательно)
v добавление данных в тело запроса (только в случае, если запрос имеет тип POST)
v отправка запроса и ожидание ответа от сервера
v получение желаемых полей-заголовков из ответа
v получение данных ответа
v закрытие соединения
Тип Resource – этот тип служит для загрузки из JAR архива текстовые, бинарные и прочие файлы. Для распоряжения ими существуют следующие функции:
- openResource
- resourceAvailable
- closeResource
- readLine
- readByte
Тип array – этот тип служит для создания массивов (переменных одного и того же типа). Про массивы мы поговорим тоже чуть позже.
Комплексный тип record – с помощью этого типа Вы можете создавать свои типы данных. Зачем мне это нужно? Например вы пишите игру, в которой вы управляете героем игры на экране. Для описания позиции героя, уровня жизни - применяют этот тип. Например:
Type
HeroType = record
PosX, PosY: integer;
Health: integer;
Вот мы кратко ознакомились с типами переменными. Теперь объясню, как переменной присвоит значение. Для присваивания значения переменной применяют сочетание символов двоеточия и знака равенства (:=). Например:
Var
A: integer;
Begin
A:=5;
End.
Теперь попробуйте написать тот же Hello World! но используя при этом переменные. Подскажу лишь то, что тип переменной – string.
Ответ можете поглядеть здесь.
Глава 5. Условия.
Итак, теперь настало время переходить к условиям. Надеюсь что вы правильно меня поняли. Язык программирования без условий – это уже язык, за исключением языка BrainFuck. Какое не приличное слово!
Пример условия: «Если будет солнышко, то я пойду на улицу, иначе буду сидеть дома». Вот Вам простое условие. В MIDlet Pascal условия совершенно другие. Для условия применяется такая конструкция:
If … then … [else …]
Синтаксис оператора условия такой:
Ifусловие then
Begin
Операторы1;
End
[
Else
Begin
Операторы;
End;
]
Этот код читается так: «Если условие истинно (правдиво) то выполнить операторы1, иначе (если условие ложно) выполнить операторы2 ». Участок кода внутри квадратных скобок ([]) не обязателен.
Заметьте знакомую конструкцию:
Begin
Операторы1;
End;
В отличие от предыдущих, здесь после слова end стоит символ точка с запятой (;), а не точка (.). Дело в том, что точка ставится в самом конце программы после слова end, а если после слова end идут дальше операторы, то разделяем их символом точкой с запятой. Думаю что понятно вам.
Давай приведем пример оператора с условием:
If x>5 then drawText(‘Больше’,5,5);
Else drawText(‘меньше’,5,5);
Здесь я не стал ставить операторные скобки begin … end, потому что в условии стоит всего лишь один оператор, если стоят в условии несколько операторов, то в этом случае объедините их операторными скобками.
Для того чтобы посмотреть, как работает условный оператор мы напишем небольшую программку которая будет генерировать число от нуля до десяти и если это число будет больше 5, будет выводиться надпись “Больше 5”, а если меньше, то надпись “меньше 5”. Исходный код здесь.
Program NewProject;
Var
n: integer;
Begin
n:=random(11);
if n>=5 then drawText(‘Больше 5’,2,2);
else drawText(‘Меньше 5’,2,2);
drawText(‘Число ’+IntegerToString(n),2,40);
repaint;
delay(5000);
end.
В этом примере мы встретили две новые функции: IntegerToString и random.
Функция IntegerToString служит для перевода числа в строку, так как невозможно отобразить целочисленную переменную или число процедурой DrawText или какой-либо еще. В параметрах этой функции (в скобках), нужно указывать число или целочисленную переменную, которую нужно перевести строку. Синтаксис функции:
IntegerToString(число_или_целочиленная_перем.) :string;
Функция random служит для генерации случайного числа от 0 до n-1.
В скобках указывается число – это предел, т.е. для генерации числа между 0 и 10, нужно написать так;
N:=Random(11);
А почему мы параметр указали 11, а не 10? Дело в том что функция random генерирует число от 0 до максимального значения при этом от максимального значения вычитается 1, поэтому мы написали 11.
А теперь разберем и сам пример:
Начнем с переменной n: integer;. Эта переменная для функции Random, переменная будет получать случайное число. Далее идет сам условный оператор, который будет сравнивать число в переменной n с числом 5. Для того чтобы отобразилась строка “Больше 5”, число в переменной должно быть больше числа 5 (в этом случае условие будет истинно), а чтобы отобразилась строка “Меньше 5” – число в переменной n должно быть меньше пяти (в этом случае условие будет ложно и выполнятся операторы после слова Else). После условного оператора идет процедура DrawText, которая выводит слово “число ” и с помощью функции IntegerToString прибавляет сгенерированное число (в итоге на экране отображается слово “ число ” и сгенерированное функцией random, число). Далее это все отрисовывается и задерживается на пять секунд. И программа заканчивается. Кстати при следующем запуске мидлета будет сгенерировано совершенно другое число.
Ниже я представлю несколько примеров условных операторов с разными типами данных:
- if a = true then drawText(‘Условие истинно’,5,5);
- if a = false then drawText(‘Условие ложно’,5,5);
- if 5 = 5 then drawText(‘Пять равно пять – это правда!’,5,5);
- if 5>9 then drawText(‘Неправильно! Пять меньше девяти.’,5,5);
- if ‘a’ = ‘A’ then drawText(‘Условие ложно ‘a’ – прописная, ‘A’- заглавная ’,5,5);
- if ‘a’ < ‘b’ then drawText(‘Условие истинно, ‘b’ – стоит дальше ‘a’, а значит ‘b’ больше чем ‘a’’,5,5);
Думаю что этих примеров достаточно.
Кстати для проверки условия, необязательно проверять его таким образом:
if a = true then drawText(‘Привет’,0,0);
Можно проверить и так:
if a then drawText(‘Привет’,0,0);
Здесь все будет точно так же при условии, что A будет истинно.
Бывают случаи, когда нужно проверить сразу несколько условий, например 5 больше 1 и 7 меньше 2. Для этого применяют такие служебные слова:
v AND (Логическое И)
v OR (Логическое ИЛИ)
v XOR (Исключающее логическое ИЛИ)
v NOT (Логическое НЕ)
Например нужно сделать условие чтобы сразу два условия были истинны:
if (x = true) and (y = true) then DrawText(‘Условия верны’, 0,0);
Это можно прочитать так: «Если x = true и y = true – все это верно, то “Условия верны”»
Если например будет y = false, то условие не будет выполнено, так как в данном условии должны быть два операнда равные true ((x = true) and (y = true)).
Если вместо AND поставить OR,то условие выполнится, если хотя бы одно выражение будет истинным:
if (x = true) or (y = false) then DrawText(‘Условия верны’, 0,0);
То есть если x = true будет истинным или y = false будет истинным, то условие выполнится. Условие выполнится, если хотя бы одно выражение будет истинным.
Операция XOR отличается от OR лишь тем, что выражения с XOR возвращают false.
Операция NOT (НЕ) всегда возвращает false. Например: «Не Буратино!». Заметили что идет отрицание? Вот такие вот дела!
С такими условиями мы ознакомимся на практике.
Напишем программу, с использованием операции OR, которая будет выводить текст на экран при нажатии клавиш 1 и 3 на телефоне.
Program NewProject;
Begin
Repeat
delay(100);
setColor(255,255,255);
fillRect(0,0,getWidth,getHeight);
if (getKeyPressed = KE_KEY1)or(getKeyPressed = KE_KEY3) then begin
setColor(0,0,0);
drawText('Привет!',5,20);
end;
repaint;
until getKeyClicked = KE_KEY0; // Нажать 0 для выхода
end.
В этом примере мы встретили еще несколько незнакомых слов: setColor, fillRect, getKeyPressed, KE_KEY1, KE_KEY3, getKeyClicked и конструкцию repeat … until.
Начнем по порядку:
v setColor – эта процедура устанавливает цвет. Цвет задается в формате RGB. Процедура имеет три параметра, которые указываются целым числом. Например если вам нужно установить ярко-красный цвет – нужно написать так: setColor(255,0,0); чтобы указать белый цвет – пишем: setColor(255,255,255);. Цвета получаются в результате смешивания трех основных цветов: красного, зеленого и синего. В качестве одного из параметров указывается число в пределах 0…255.
v fillRect– эта процедура рисует закрашенный прямоугольник. В примере это было нужно для того, чтобы закрасить экран. Например, когда мы нажимали на 1 или на 3 (на телефоне) – появлялось слово “Привет”, при отпускании клавиши, надпись должна пропадать, но для этого нужно закрасить экран прямоугольником белого цвета. Процедура имеет параметры описывающие расположение прямоугольника, т.е. высота, ширина. Синтаксис: fillRect(x, y, width, height);
x – это начальная координата по горизонтали, y – это начальная координата по вертикали, width– конечная ширина, height – конечная высота. В примере мы использовали в качестве width слово getWidth, а в качестве height – слово getHeight. Функция getWidth – возвращает ширину дисплея телефона, getHeight – возвращает высоту. В качестве параметров процедуры fillRect мы ставили эти функции для того чтобы закрашивать экран полностью на всех моделях телефонов, на которых запущено приложение. Чтобы закрасить прямоугольник каким-либо цветом, используйте процедуру setColor перед процедурой fillRect
v getKeyPressed – эта функция предназначена для проверки нажатия клавиш. Когда мы нажимали на клавиши 1 и 3, проверялось условие
if (getKeyPressed = KE_KEY1)or(getKeyPressed = KE_KEY3) then begin
setColor(0,0,0);
drawText('Привет!',5,20);
end;
getKeyPressed = KE_KEY1 – это значит что нажата клавиша 1, getKeyPressed = KE_KEY3 – нажата клавиша 3.
То есть в этом условие было так: если нажать клавишу 1 или 3, то написать слово Привет!.
Для функции getKeyPressed существуют следующие константы клавиш телефонов:
§ KE_KEY0 – клавиша 0
§ KE_KEY1 – клавиша 1
§ KE_KEY2 – клавиша 2
§ KE_KEY3 – клавиша 3
§ KE_KEY4 – клавиша 4
§ KE_KEY5 – клавиша 5
§ KE_KEY6 – клавиша 6
§ KE_KEY7 – клавиша 7
§ KE_KEY8 – клавиша 8
§ KE_KEY9 – клавиша 9
§ KE_STAR – клавиша “Звездочка”
§ KE_POUND – клавиша “Решетка”
v getKeyClicked – эта функция отличается от функции getKeyPressed тем, что getKeyClicked для однократного нажатия, а getKeyPressed для удерживания нажатой клавиши.
v Repeat… until – эта конструкция образует цикл. Циклы повторяют код множество раз или определенное число раз. С циклами мы ознакомимся в следующей главе.
Глава 5. Циклы.
Итак, изучив условия, перейдем к следующему типу операторов – циклы.
Циклы тоже очень полезные операторы в MIDlet Pascal. Циклы используют для повторения выполнения операторов. В играх без циклов – никуда. Ведь надо каждый раз обновлять экран. С помощью циклов можно реализовать движение объектов, например, когда движется герой игры – все это происходит с помощью циклов. А вы что думали, что в сказку попали? Очнитесь! Вы в реальном мире!
Всего в MIDlet Pascal существует три оператора циклов:
- Цикл for … to … do
- Цикл while … do
- Цикл repeat … until
Начнем с цикла for … to … do. Этот оператор цикла называется счетчиком. Синтаксис цикла for … to …do:
For счетчик := начальное_значение to конечное_значение do
Begin
Операторы;
End;
Для цикла for нужно объявить переменную-счетчик. Приведем пример цикла:
For i:=0 to 10 do begin
x:= x + 2;
End;
В этом примере цикл выполнит код находящийся в операторных скобках begin … end десять раз (цикл сложит 10 раз выражение x:=x+2). Если, например x будет равен 0, то при выполнении цикла к переменной x будет прибавляться 2. Когда цикл окончится, x будет равен 20.
Чтобы показать на примере, как будет работать цикл, напишем небольшую программку, которая будет выводить цифры на экран от 0 до 100:
Program NewProject;
Var
i:integer;
Begin
For i:=0 to 100 do begin// начинаем счетчик
setColor(255,255,255); // белый цвет
fillRect(0,0,getWidth,getHeight);
setColor(0,0,0); // черный цвет
drawText(integerToString(i), 20, 20);
repaint;
delay(200); // задерживаем
end;
delay(2000);
end.
В этом примере код внутри цикла будет выполняться 100 раз и счетчик i будет увеличиваться на 1. Процедура DrawText будет использовать значение счетчика и выводить это значение на экран. С помощью задержки мы регулируем скорость выполнения цикла: чем меньше задержка, тем быстрее выполняется код внутри цикла. Последняя задержка, идущая после цикла, задерживает программу на две секунды.
Если вам нужно сделать обратный отсчет, то вместо to применяйте downto. Ниже приведен тот же код с использованием downto, который будет реализовывать обратный отсчет:
Program NewProject;
Var
i:integer;
Begin
For i:= 100 downto 0 do begin// начинаем счетчик
setColor(255,255,255); // белый цвет
fillRect(0,0,getWidth,getHeight);
setColor(0,0,0); // черный цвет
drawText(integerToString(i), 20, 20);
repaint;
delay(200); // задерживаем
end;
delay(2000);
end.
Объяснять я этот пример не буду, здесь практически так же как и в предыдущем примере.
Рис. 11. Цикл с предусловием while … do |
условие |
Тело цикла |
while условие do begin
операторы;
end;
Условие – это проверяемое условие. Если оно истинно, то цикл выполняется. Если внутри цикла больше чем один оператор, то их нужно заключить в операторные скобки begin … end.
Напишем для демонстрации небольшую программку, которая будет выводить на экран число, которое будет возрастать, при нажатии клавиши 5, счет будет закончен и программа завершится.
Program NewProject;
Var
a: integer;
Begin
a:=0;
while true do begin
setColor(0,0,0);
drawText(integerToString(a),5,5);
repaint;
a:=a+1;
setColor(255,255,255);
fillRect(0,0,getWidth,getHeight);
if getKeyClicked = KE_KEY5 then break; // прерываем цикл
end;
End.
Начну объяснять пример с цикла. В условии цикла стоит булево значение true, в таком случае условие истинно и из-за этого запускается цикл, который будет выполнять код внутри цикла до бесконечности, пока вы не нажмете кнопку пять на клавиатуре своего телефона. При нажатии на клавишу пять – запускается оператор break и цикл прерывается.
Если цикл не прервать оператором break или не остановить его ложным условием, то произойдет зацикливание и приложение “зависнет”.
Рис.12. Цикл с постусловием. repeat … until |
Тело цикла |
условие |
Хотел бы заметить, что для выполнения цикла с постусловием, условие должно иметь булево значение false. Если, например условие будет равно true, то тело цикла все равно выполнится, но только один раз. Если условие false, то тело цикла будет выполняться до тех пор, пока условие не станет true или не прервется оператором break. Иначе может так же случится зацикливание. На рисунке 12 графически изображен
цикл с постусловием.
Предыдущий пример можно было бы записать с циклом с постусловием таким образом:
Program NewProject;
Var
a: integer;
Begin
a:=0;
Repeat
setColor(0,0,0);
drawText(integerToString(a),5,5);
repaint;
a:=a+1;
setColor(255,255,255);
fillRect(0,0,getWidth,getHeight);
if getKeyClicked = KE_KEY5 then break; // прерываем цикл
untilfalse;
End.
Объяснять думаю, не придется.
Глава 6. Массивы.
Теперь поговорим о массивах. Массив – это упорядоченный набор переменных (элементов) одного и того же типа. Для чего нужны массивы? Допустим вам надо написать 200 переменных:
Var
p1, p2 ,p3 , …, pN: integer;
Хотелось бы Вам так писать? Думаю, что нет. Гораздо лучше написать это все таким образом:
Var
p:array[0..199] of integer;
Так гораздо лучше!
Массивы объявляются в разделе объявления переменных. Синтаксис:
Имя массива: array[нижний индекс .. верхний индекс] of Тип;
Нижний индекс и верхний индекс указывает размерность массива, т.е. количество элементов (переменных). Нижний индекс может начинаться от нуля.
Примеры массивов:
a:array[1..5]of integer;
Создает массив, состоящий из 5 целочисленных элементов
a, b:array[1..15] of real;
Создает 2 массива с именем a и b состоящих из 15 вещественных (дробных) элементов
a:array[0..19] of string;
Создает массив, состоящий из 20 элементов (нумерация с нуля).
Для обращения к элементу, как к обычной переменной осуществляется через индекс элемента массива. Например, есть массив, состоящий из пяти элементов
Var
a: array[0..4] of integer;
второму элементу нужно присвоить значение числа два:
a[1]:=2;
пятому присвоить значение, состоящее из числа 9:
a[4]:=9;
То, что находится внутри квадратных скобок – это и есть индекс массива.
Давайте напишем пример заполнения массива случайными числами в диапазоне от 0 до 20:
Program Array_example;
Var
A: array[1..10] of integer;
I, y: integer;
Begin
y:=0;
For I:=1 to 10 do begin
A[i]:=random(21);
drawText(IntegerToString(A[i]),5,y);
y:=y+13;
repaint;
End;
Delay(10000);
End.
Если запустить программу, то она выведет на экран 10 чисел. При каждом новом запуске программа выведет совсем другие числа. Получить случайное число помогает функция random (описывали ее выше).
Выражение y:=y+13 служит для того, чтобы каждая выводимая строка числа была ниже на 13 пикселей. Как вы заметили, что в качестве индекса мы используем переменную цикла I, т.к. мы заполняем наш массив по порядку, а переменная I как раз изменяет свое значение в большую сторону на 1. Мы бы могли заполнить массив и таким образом:
A[1]:=random(21);
A[2]:=random(21);
A[3]:=random(21);
A[4]:=random(21);
A[5]:=random(21);
A[6]:=random(21);
A[7]:=random(21);
A[8]:=random(21);
A[9]:=random(21);
A[10]:=random(21);
Но вряд ли бы кто хотел бы писать, таким образом, думаю, что не к чему лишний код.