- •Модуль и его структура
- •Структура модуля
- •Список uses
- •Интерфейс
- •Реализациия
- •Инициализация и завершение
- •Ключевые слова
- •Слово const
- •Слово type
- •Слово var
- •Комментарии
- •Переменные
- •Типы данных и переменные
- •Преобразование типов
- •Знаки операций
- •Массивы
- •Одномерные массивы
- •Многомерные массивы
- •Функции Low и High
- •Динамические массивы
- •Короткая строка
- •Длинная строка
- •Расширенная строка
- •Строка с терминальным нулем
- •Операции со строками Слияние
- •Извлечение символа
- •Управляющие символы в строках
- •Разбиение литерала по строкам программы
- •Сравнение строк
- •Строковые функции
- •Форматирование строк
- •Множества
- •Объявление записи
- •Оператор with
- •Массивы записей
- •Совместимость типов данных
- •Указатели
- •Статические и динамические переменные
- •Размещение динамических переменных
- •Разыменование указателя
- •Управление вычислениями Операторы if, then, else
- •Выполнение нескольких инструкций.
- •Вложенные условия.
- •Циклы Элементы структуры цикла
- •Цикл for…
- •Функции Pred и Succ
- •Цикл while
- •Цикл repeat
- •Управление циклами
- •Оператор goto
- •Оператор case
- •Область видимости идентификаторов
- •Подпрограммы
- •Процедуры и функции
- •Объявление и определение подпрограммы
- •Параметры подпрограмм
- •Локальные процедуры и функции
- •Перегрузка подпрограмм
- •Параметры по умолчанию
- •Включение внешнего файла в модуль
Функции Low и High
Функции Low и High предназначены для работы с массивами. Функция Low возвращает нижнюю, а функция High – верхнюю границу индексов массива :
var
X, I, Lower, Upper : Integer;
MyArray : array[10..20] of Integer;
begin
{ Code to initialize MyArray here. }
Lower := Low(MyArray); { Lower содержит 10 }
Upper := High(MyArray); { Upper содержит 20 }
X := 0;
for I := Lower to Upper do
X := X + MyArray[I];
{ продолжение кода . . . }
end;
Применение функций Low и High для работы с массивами – хороший способ избежать ошибок, связанных с выходом индекса за допустимые пределы.
Динамические массивы
При объявлении динамического массива достаточно указать только тип его элементов. Память для размещения его элементов на этом этапе не выделяется. Фактически массив создается только во время выполнения программы. Для этого используется функция SetLength. Как только необходимость в массиве отпадает, следует освободить память вызовом процедуры Finalize. Рассмотрим пример:
var
BigArray : array of Integer; {размер массива не указан }
X : Integer;
begin
X := GetArraySize; { Функция вычисляет размер массива }
SetLength(BigArray, X); { Динамическое размещение массива }
{ Теперь массив можно использовать}
. . . . . . . .
{ Массив больше не нужен }
Finalize(BigArray);
end;
Новый термин. Динамический массив размещается в оперативной памяти во время выполнения программы.
Размер динамического массива можно увеличивать или уменьшать во время выполнения. программы
По окончании использования его следует уничтожить.
Несомненное преимущество динамических массивов над статическими заключается в том, что в случае неопределенности потребного количеством элементов нам не надо объявлять массив «с запасом». Достаточно объявить динамический массив и управлять его размерами непосредственно из программы.
Для изменения размеров массива используют функцию Copy. Рассмотрим такой пример. Пусть динамический массив BigArray содержит 100 элементов. Нам необходимо увеличить его размер до 200 элементов. Для этого обращаемся к функции Copy:
Copy(BigArray, 200);
Предыдущее содержимое (значения элементов) массива остается неизменным, а его размер увеличен до 200 элементов.
Двумерные динамические массивы создаются аналогично. Объявление двумерного динамического массива имеет вид:
var
BigArray : array of array of Integer;
begin
SetLength(BigArray, 20, 20);
BigArray[0][0] := 200;
{ . . . . . . . . . . . . }
Finalize(BigArray);
end;
Строки
Строки в программах используются весьма интенсивно. Object Pascal дает нам три различных строковых типа: длинная строка, короткая строка и расширенная строка. Кроме того, есть строки с терминальным нулем.
Короткая строка
Короткая строка – это строка фиксированной длины с числом символов не более 255. Имеются два способа объявления строк фиксированной длины. В первом случае используется предопределенный тип ShortString, который объявляет строку длиной 255 байт. Во втором случае – ключевое слово string со спецификацией длины:
var
S1 : ShortString; { строка длиной 255 символов }
S2 : string[20]; { строка длиной 20 символов }
Так как объем памяти, выделяемой для строк этого типа, в процессе работы программы не изменяется, операции над строками фиксированной длины выполняются очень быстро. Однако, короткие строки – устаревший тип данных. В программах рекомендуется использовать длинные строки. Короткие строки называют строками с байтом длины, ибо первый ее элемент равен текущему числу символов в ней. Значение первого элемента можно прочесть и узнать сколько в строке символов, например,
var
S:ShortString; { строка длины 255 символов }
Len:Integer;
begin
S := 'Hello';
Len:= Ord(S[0]); {Значение Len теперь равно длине S,т.е. 5}
end;
В этом примере для определения длины строки используется значение S[0]. Можно также воспользоваться функцией Length.
ПРИМЕЧАНИЕ. Для преобразования значения типа Char в целую величину используется функция Ord. Функция Ord также применяется к перечислимым типам.
Ели это необходимо, первому элементу короткой строки можно присвоить значение длины. Это может потребоваться в некоторых специальных случаях. Отметим, что программное изменение длины строки относится к «продвинутой» технике и начинающим программистам этого делать не стоит.