Компания ALT Linux
Опубликован: 10.04.2015 | Доступ: свободный | Студентов: 762 / 0 | Длительность: 14:03:00
Специальности: Программист, Преподаватель
Лекция 2:

Общие сведения о языке программирования Free Pascal

2.4.4 Тип дата-время

Тип данных дата-время TDateTime предназначен для одновременного хранения даты и времени. В памяти компьютера он занимает восемь байтов и фактически представляет собой вещественное число, где в целой части хранится дата, а в дробной — время.

2.4.5 Логический тип данных

Данные логического типа могут принимать только два значения: истина (true) или ложь (false). В стандартном языке Pascal был определён лишь один логический тип данных — boolean. Логические типы данных, определённые в языке Free Pascal, представлены в табл. 2.3.

Таблица 2.3. Логические типы данных
Тип Размер, байт
Boolean 1
ByteBool 1
WordBool 2
LongBool 4

Пример объявления логической переменной:

var FL : boolean;

2.4.6 Создание новых типов данных

Несмотря на достаточно мощную структуру встроенных типов данных, в среде Lazarus предусмотрен механизм создания новых типов. Для этого используют служебное слово type:

type новый_тип_данных = определение_типа;

Когда новый тип данных создан, можно объявлять соответствующие ему переменные:

var список_переменных: новый_тип_данных;

Применение этого механизма мы рассмотрим в следующих параграфах.

2.4.7 Перечислимый тип данных

Перечислимый тип задаётся непосредственным перечислением значений, которые он может принимать:

var имя_переменной: (значение_1, значение_2,..., значение_N);

Такой тип может быть полезен, если необходимо описать данное, которое принимает ограниченное число значений. Например:

	
var
animal : ( fox, rabbit );
color : ( yellow, blue, green );

Применение перечислимых типов делает программу нагляднее:

type //Создание нового типа данных — времена года.
year_seasons = ( winter, spring, summer, autumn );
var //Описание соответствующей переменной.
yt : year_seasons;

2.4.8 Интервальный тип

Интервальный тип задаётся границами своих значений внутри базового типа:

var

имя_переменной: минимальное_значение.. максимальное_значение;

Обратите внимание, что в данной записи два символа точки рассматриваются как один, поэтому пробел между ними не допускается. Кроме того, левая граница диапазона не должна превышать правую. Например:

var
date : 1.. 3 1;
symb : ’ a ’.. ’ h ’;

Применим механизм создания нового типа данных:

type
//Создание перечислимого типа данных — дни недели.
Week_days = (Mo, Tu, We, Th, Fr, Sa, Su );
//Создание интервального типа данных — рабочие дни.
Working_days = Mo.. Fr;
var //Описание соответствующей переменной days — рабочие дни.
days : Working_days;

2.4.9 Структурированные типы

Структурированный тип данных характеризуется множественностью образующих его элементов. В языке Free Pascal это массивы, строки, записи, множества и файлы.

Массив — совокупность данных одного и того же типа4Подробно о массивах см. в главе 5. Число элементов массива фиксируется при описании типа и в процессе выполнения программы не изменяется.

Для описания массива используют ключевые слова array...of:

имя_массива : array [ список_индексов ] of тип_данных;

где:

  • имя_массива — любой допустимый идентификатор;
  • тип_данных — любой тип языка.
  • список_индексов — перечисление диапазонов изменения номеров элементов массива; количество диапазонов совпадает с количеством измерений массива; диапазоны отделяются друг от друга запятой, а границы диапазона, представляющие собой интервальный тип данных, отделяют друг от друга двумя символами точки: [ индекс1_нач.. индекс1_кон, индекс2_нач.. индекс2_кон,... ]

Например:

var
//Одномерный массив из 10 целых чисел.
a : array [ 1.. 10 ] of byte;
//Двумерный массив вещественных чисел (3 строки, 3 столбца).
b : array [ 1.. 3, 1.. 3 ] of real;

Ещё один способ описать массив — создать новый тип данных. Например, так:

type
//Объявляется новый тип данных — трёхмерный массив целых чисел.
massiv=array [ 0.. 4, 1.. 2, 3.. 5 ] of word;
var //Описывается переменная соответствующего типа.
M: massiv;

Для доступа к элементу массива достаточно указать его порядковый номер, а если массив многомерный (например таблица), то несколько номеров:

имя_массива[номер_элемента]

Например: a[5], b[2, 1], M[3, 2, 4].

Строка — последовательность символов. В Lazarus строка трактуется как массив символов, то есть каждый символ строки пронумерован, начиная с единицы.

При использовании в выражениях строка заключается в апострофы. Описывают переменные строкового типа так:

имя_переменной : string;

или:

имя_переменной : string [ длина_строки ];

Например:

const S= ’СТРОКА ’;
var
Str1 : string;
Str2 : string [ 255 ];
Stroka : string [ 100 ];

Если при описании строковой переменной длина строки не указывается, это означает, что она составляет 255 символов. В приведённом примере строки Str1 и Str2 одинаковой длины.

Запись — это структура данных, состоящая из фиксированного количества компонентов, называемых полями записи. В отличие от массива поля записи могут быть разного типа. При объявлении типа записи используют ключевые слова record..end:

имя_записи = record список_полей end;

здесь имя_записи — любой допустимый идентификатор, список_полей — описания полей записи. Например:

//Описана структура записи.
//Каждая запись содержит информацию о студенте и
//состоит из двух полей — имя и возраст.
type
student = record
name : string;
age : byte;
end;
var
//Объявлены соответствующие переменные — три объекта типа запись.
a, b, c : student;

Доступ к полям записи осуществляется с помощью составного имени:

имя_записи.имя_поля

Например:

a. name:= ’ Ivanov  Ivan ’;
a. age := 18;
b. name:=a.name;

Оператор присоединения with имя_записи do упрощает доступ к полям записи:

with a do
begin
name:= ’ Petrov  Petr ’;
age := 19;
end;

Множество — это набор логически связанных друг с другом объектов. Количество элементов множества может изменяться от 0 до 255. Множество, не содержащее элементов, называется пустым. Для описания множества используют ключевые слова set of:

имя_множества = set of базовый_тип_данных;

Например:

type
TwoNumbers = set of 0.. 1;
var
Num1, Num2, Num3 : TwoNumbers;

Файл — это именованная область внешней памяти компьютера. Файл содержит компоненты одного типа (любого типа, кроме файлов). Длина созданного файла не оговаривается при его объявлении и ограничивается только ёмкостью диска, на котором он хранится. В Lazarus можно объявить типизированный файл:

имя_файловой_переменой = file of тип_данных;

нетипизированный файл:

имя_файловой_переменой = file;

и текстовый файл:

имя_файловой_переменой = TextFile;

Например:

var
f1 : file of byte;
f2 : file;
f3 : TextFile;

2.4.10 Указатели

Как правило, при обработке оператора объявления переменной

имя_переменной: тип_переменной

компилятор автоматически выделяет память под переменную имя_переменной в соответствии с указанным типом. Доступ к объявленной переменной осуществляется по её имени. При этом все обращения к переменной заменяются адресом ячейки памяти, в которой хранится её значение. При завершении подпрограммы, в которой была описана переменная, память автоматически освобождается.

Доступ к значению переменной можно получить иным способом — определить собственные переменные для хранения адресов памяти. Т акие переменные называют указателями.

Указатель — это переменная, значением которой является адрес памяти, где хранится объект определённого типа (другая переменная). Как и любая переменная, указатель должен быть объявлен. При объявлении указателей всегда указывается тип объекта, который будет храниться по данному адресу:

var имя_переменной : ^тип;

Такие указатели называют типизированными. Например:

var p : ^ integer;
//По адресу, записанному в переменной p,
//будет храниться переменная типа int,
//или, другими словами, p указывает
//на тип данных integer.

В языке Free Pascal можно объявить указатель, не связанный с каким либо конкретным типом данных. Для этого применяют служебное слово pointer:

var имя_переменной : pointer;

Например:

var x, y : pointer;

Подобные указатели называют нетипизированными и используют для обработки данных, структура и тип которых меняются в процессе выполнения программы, то есть динамически.

Юрий Шутиков
Юрий Шутиков

По первому тесту выполнил дважды задания. Результат получается правильный (проверял калькулятором). Пишет, что "Задание не проверено" и предлагает повторить. 
 

Евгений Силуков
Евгений Силуков

Еще в декабре выполнил тест №1, а его все так и не проверили.