- •Тема №1 Типы данных, преобразование типов
- •Тема №2 Массивы, как параметры функций и процедур
- •Тема №з Условный оператор. Логические выражения
- •Тема №4 Функции и их использование
- •Тема №5 Оператор альтернативного выбора
- •Тема №6 Оператор цикла со счетчиком
- •Тема№7-8
- •Тема №9 Логические операторы и логические выражения. Тип boolean
- •Тема№10 Одномерные и двумерные массивы
- •Тема №11 Условный оператор
- •Тема№12 Процедуры. Глобальные и локальные переменные
- •Тема№13 Строковые переменные. Процедуры и функции для работы со строками
- •Тема№14 Двумерные массивы и вложенные циклы
- •Тема№15 Структура программы в языке Pascal
- •Тема№16 Операторы присваивания, ввода, вывода. Соответствие типов
- •Тема№17 Записи. Синтаксис описания записей
- •Тема№18 Сравнение массивов и записей. Работа с полями записей
- •Тема№19 Символьные переменные Операции и функции для работы с ними.
- •Тема №20 Арифметические выражения. Стандартные математические функции
- •Тема№21 Типизированные файлы. Процедуры и функции для работы с ними
- •Тема№22 Типы файлов. Процедуры и функции для работы с ними
- •Тема№23 Текстовые файлы. Процедуры и функции для работы с ними
- •Тема№24 Арифметические и логические операции и их приоритет
- •Тема№25 Область видимости переменных
- •Тема№ 26 Механизмы передачи параметров процедурам
- •Тема№ 27 Запись и чтение файлов. Открытие и закрытие файлов
- •Тема№28 Понятие алгоритма. Линейный, разветвляющийся, циклический алгоритмы.
- •Тема№29 Структурированные типы: массивы, строки, записи, файлы.
Тема№29 Структурированные типы: массивы, строки, записи, файлы.
Массивы
Как и Turbo Pascal, FPC поддерживает массивы. Поддерживаются и многомерные, упакованные и динамические массивы в стиле Delphi.
Массив – упорядоченная индексированная совокупность однотипных компонент, имеющих общее имя. Массив определяется:
именем,
индексами (номерами компонент). Индексы должны иметь порядковые типы.
Размерность массива определяет числом индексов. Размерность массива ограничена только доступной памятью. Возможны массивы:
одномерный (или вектор),
двумерный (или матрица),
многомерный.
Различают массивы:
Статический. Память для него выделяется компилятором при объявлении переменной (в статической памяти).
Динамический. Память для него выделяется при исполнении программы (в динамической памяти). Перед обращением к элементам такого массива необходимо задать его фактическую размерность с помощью функции SetLength, чтобы в динамической памяти под массив была выделена область нужного размера.
Любой тип массива перед употреблением должен быть объявлен. Имя типа любое уникальное.
Статические массивы
Массив называется статическим, когда в определение массива включена размерность массива. Попытка доступа к элементу массива с индексом, лежащим вне объявленного диапазона, приведет к ошибке времени выполнения при условии, что включён контроль границ.
Объявление Значения
type
<Имя>=array[<Индексы>] of <Тип компонент>;
Набор из заданного количества компонент указанного типа. Каждый индекс задается диапазоном через горизонтальное двоеточие.
type
MyArray=array[1..7,1..10] of real; // Объявление типа массива
var
Ar1:MyArray; // Явное объявление массива
Ar2:array[1..20,1..15] of real; // Неявное объявление массива
Доступ к элементу массива: Ar1 [2, 2]
Динамические массивы
Объявление Значения
type
<Имя > = array of <Тип компонент>;
var
<Имя переменной> = array of <Имя типа>;
Фактическая размерность массива задается с помощью функции
SetLength(<Имя переменной>, <Размер индекса>);
Для многомерного массива структура array of повторяется столько раз, сколько индексов имеет массив.
Набор из заданного базовым типом количества компонент. Индекс нумеруется от 0.
Пример
type
MyArray=array of byte; // Объявление типа массива. Размера нет
var
Ar1:MyArray; // Явное объявление массива
begin
SetLength(Ar1,10); // Фактическая размерность массива 10
end.
Записи (комбинированные типы)
Запись – это набор компонент разного типа, размещаемых в полях записи. Имена полей локальны в записи. Различают записи:
Фиксированные.
Вариантные. Никак не связаны с типом Variant – вариант.
Любой тип записи перед употреблением должен быть объявлен. Имя типа любое уникальное
Объявление Значения
type
<Имя типа>=record
<Имя поля 1>:<Тип 1>;
{…….}
<Имя поля N>:<Тип N>;
[вариантная часть]
end;
Точки с запятой в конце строки нет.
Вариантная часть содержит список вариантов. Для каждого варианта указывается ключ выбора и список его полей.
Записи без вариантной части
Пример:
type
MyData=record // Мои данные
FirstName:string[15]; // Имя
LastName:string[20]; // Фамилия
BirthDay:byte; // День рождения
BirthMonth:byte; // Месяц рождения
BirthYear:word; // Год рождения
Phone:string[15]; // Телефон
Address:string[30]; // Адрес
end;
Записи с вариантной частью
Пример:
type
MyData=record // Персона
FirstName:string[15]; // Имя
LastName:string[20]; // Фамилия
BirthData:date; // Дата рождения
case Citezen:Boolean of // Гражданство (да или нет)
True:BirthPlace:String[40]; // Если да – место рождения,
False:(Country:String[20], // Если нет – страна гражданства,
EntryDate:Date, // Дата вьезда,
ExitDate:Date); // Дата выезда
end; // Конец вариантной части
end; // Конец записи
Множества
Множество – это набор компонент из заданного набора. В множестве компонент присутствует в единственном экземпляре. Например, множества [1, 2, 3] и [1, 2, 2, 3] эквивалентны. Любой тип множества перед употреблением должен быть объявлен. Имя типа любое уникальное.
Объявление Значения
type
<Имя>=set of <Имя целевого типа>;
var
<Имя переменной>:<Имя типа>; Набор компонент из заданного перечня
Целевой тип – порядковый тип с числом компонент не более 256. Возможны Byte, Char, интервальные и перечислимые типы. Значения множественного типа заключают в квадратные скобки.
Пример:
type
Set1=set of byte; // Целые числа 0..255
Set2=set of char; // Символы с № 0..255
Set3=set of 1..12; // Тип-поддиапазон
Svetofor=set of (‘Red’,’Green’,’Yellow’,’Dead’); // Перечисляемый тип
Файлы
Файл – это последовательность однотипных компонент на внешнем устройстве. В FPC определены файлы:
типизированный, это последовательность однотипных компонент,
текстовый, это последовательность строк символов,
нетипизированный, это последовательность байтов.
Любой файловый тип перед употреблением должен быть объявлен. Имя типа любое уникальное.
type
<Имя типа>=file of <Имя типа компонент>;
Компоненты файла любые, кроме:
файлов,
структурированных с файлами.
Пример
type
MyFile1=file of real; // Типизированный файл
MyFile2=file of text; // Текстовый файл
MyFile3=file; // Нетипизированный файл