- •Модуль и его структура
- •Структура модуля
- •Список uses
- •Интерфейс
- •Реализациия
- •Инициализация и завершение
- •Ключевые слова
- •Слово const
- •Слово type
- •Слово var
- •Комментарии
- •Переменные
- •Типы данных и переменные
- •Преобразование типов
- •Знаки операций
- •Массивы
- •Одномерные массивы
- •Многомерные массивы
- •Функции Low и High
- •Динамические массивы
- •Короткая строка
- •Длинная строка
- •Расширенная строка
- •Строка с терминальным нулем
- •Операции со строками Слияние
- •Извлечение символа
- •Управляющие символы в строках
- •Разбиение литерала по строкам программы
- •Сравнение строк
- •Строковые функции
- •Форматирование строк
- •Множества
- •Объявление записи
- •Оператор with
- •Массивы записей
- •Совместимость типов данных
- •Указатели
- •Статические и динамические переменные
- •Размещение динамических переменных
- •Разыменование указателя
- •Управление вычислениями Операторы if, then, else
- •Выполнение нескольких инструкций.
- •Вложенные условия.
- •Циклы Элементы структуры цикла
- •Цикл for…
- •Функции Pred и Succ
- •Цикл while
- •Цикл repeat
- •Управление циклами
- •Оператор goto
- •Оператор case
- •Область видимости идентификаторов
- •Подпрограммы
- •Процедуры и функции
- •Объявление и определение подпрограммы
- •Параметры подпрограмм
- •Локальные процедуры и функции
- •Перегрузка подпрограмм
- •Параметры по умолчанию
- •Включение внешнего файла в модуль
Объявление записи
Синтаксис оператора record имеет вид
name = record
field_1 : data_type;
field_2 : data_type;
.
.
.
field_n : data_type;
end;
Оператор with
Оператор with применяется как к записям, так и к объектам. Здесь мы рассмотрим то как он используется вместе с записями. Выше мы написали код, заполняющий структуру записи данными:
CD.Number :=1;
CD.Title :=’Aftermath’;
CD.Artist :=’The Rolling Stones’;
CD.Year := 1986;
CD.Recorded:=’ABCKO Music and Records,Inc’;
CD.Price := 80;
CD.Market := ’Горбушка’;
С помощью оператора with этот код можно несколько упростить:
with CD do
begin
Number :=1;
Title :=’Aftermath’;
Artist :=’The Rolling Stones’;
Year := 1986;
Recorded:=’ABCKO Music and Records,Inc’;
Price := 80;
Market := ’Горбушка’;
end;
Оператор with присоединяет квалификатор (имя записи) по умолчанию к блоку кода. Все, что находится внутри begin – end рассматривается как собственность записи CD.
Массивы записей
В любой программе можно объявить массив записей аналогично объявлению массива данных целого или вещественного типов:
var
MyCDs : array [0..9] of TCDRecord;
begin
MyCDs[0].Number :=1;
MyCDs[0].Title :=’Aftermath’;
MyCDs[0].Artist :=’The Rolling Stones’;
MyCDs[0].Year := 1986;
MyCDs[0].Recorded:=’ABCKO Music and Records,Inc’;
MyCDs[0].Price := 80;
MyCDs[0].Market := ’Горбушка’;
MyCDs[1].Number := 2;
MyCDs[1].Title := ’Between the buttons’;
MyCDs[1].Artist := ’The Rolling Stones’;
MyCDs[2].Number := 3;
MyCDs[2].Title := ’Willage Green Preservation Society’;
MyCDs[2].Artist := ’The Kinks’;
Label1.Caption := MyCDs[2].Artist;
{ Продолжение . . . }
end;
Это выглядит чуть сложнее, чем в случае массива целого или вещественного типа. Так, индекс следует за именем массива MyCDs, а затем – точка и имя поля.
Совместимость типов данных
Новый термин. Совместимость типов означает, что данные одного типа можно трактовать как данные другого типа. Тем самым, переменные (объекты) родственных типов, можно трактовать как переменные одного и того же общего типа. Принцип совместимости позволяет выполнять преобразование типа переменной. На английском языке это называется typecasting.
Ниже дан пример, показывающий как узнать цифровой код, соответствующий букве «А» латинского алфавита:
procedure TForm1.Button1Click(Sender: TObject);
var
AChar : Char;
AnInteger : Integer;
begin
AChar := 'A';
AnInteger := Integer(AChar);
Label1.Caption := IntToStr(AnInteger);
end;
В этом примере выражение Integer(AChar) есть указание компилятору преобразовать значение переменной AChar типа Char в значение типа Integer. Такое преобразование необходимо постольку поскольку мы не можем присвоить значение типа Char переменной целого типа. Если бы мы сделали такое присваивание, минуя операцию приведения типа, компилятор выдал бы сообщение «Incompatible types: 'Integer' and 'Char'».
Приведение типов, однако, возможно не всегда. Рассмотрим следующий код:
procedure TForm1.Button1Click(Sender: TObject);
var
Pi : Double;
AnInteger : Integer;
begin
Pi := 3.14;
AnInteger := Integer(Pi);
Label1.Caption := IntToStr(AnInteger);
end;
Здесь мы пытаемся трактовать данные типа Double как данные типа Integer. Это недопустимо. Компилятор выдаст сообщение «Invalid typecast». Для преобразования вещественного значения в целочисленное необходимо использовать функции Trunc, Floor, или Ceil.
ПРИМЕЧАНИЕ.
Функция Trunc возвращает целую часть вещественного числа
Функция Floor округляет вещественное до ближайшего целого снизу
Функция Ceil округляет вещественное до ближайшего целого сверху
Для преобразования типа указателя используется оператор as. (Указатели рассматриваются в следующем разделе, а использование оператора as объясняется ниже в разделе "Ключевые слова классов is и as."
