Простые типы данных
К простым типам данных относятся: порядковые, вещественные типы и тип даты/времени.
Порядковые типы
К порядковым типам относятся: целые, логические, символьные, перечислимые типы и тип-диапазон. [7]
Для выражений порядкового типа определены следующие функции:
- Ord (x) – возвращает порядковый номер значения данного выражения. Для целых чисел это число совпадает со значением, для символьных типов совпадает с кодом символа, а для логического типа 0 – для False, 1 – для True. Для перечислимого типа будет возвращаться значение от 0 до 65535, для типа-диапазона результат зависит от свойст базового порядкового типа.
- Pred (x) – возвращает величину, предшествующую значению данного выражения.
- Succ (x) – возвращает величину, следующую за значением данного выражения.
Следует отметить, что функции Pred и Succ не определена для самого меньшего и самого большего значения.
Для константы или переменной порядкового типа так же определены следующие функции:
High(x) – возвращает максимально возможное значение для x.
Low(x) – возвращает минимально возможное значение для x. [7]
Числовые типы
Числовые типы могут быть целыми и вещественными.
Целые типы данных предназначены для представления целых чисел. Каждый тип целых чисел имеет различные диапазоны значений, а так же занимает различное количество байтов. Рассмотрим целочисленные типы данных в Lazarus.[7]
Тип | Диапазон значений | Размер (в байтах) |
Integer | -2147483648...2147483647 | |
Cardinal | 0..4294967295 | |
Shortint | -128...27 | |
Smallint | -32768.. 32767 | |
Longint | -2147483648..2147483647 | |
Int64 | -263..263-1 | |
Byte | 0..255 | |
Word | 0..65535 | |
LongWord | 0..4294967295 |
Отметим, что 32-х разрядные процессора наиболее быстро работают с 4-х байтными типами данных: Integer, Cardinal, LongWord, LongInt. Предполагаю, что на 64-х разрядных процессорах наиболее быстро будут работать типы данных 8-ми байтовые – int64.
|
Вещественные типы данных предназначены для представления действительных чисел. Поскольку в компьютере хранятся данные в двоичном виде, то действительные числа представляются приближенно, пусть и с значительной точностью. [7]
Тип | Диапазон значений | Количество значащих цифр | Размер (в байтах) |
Real | 5.0*10-324..1.7*10308 | 15-16 | |
Single | 1.5*10-45..3.4*1038 | 7-8 | |
Double | 5.0*10-324..1.7*10308 | 15-16 | |
Extended | 3.6*10-4951..1.1*104932 | 19-20 | |
Comp | -263..263-1 | 19-20 | |
Currency | -922337203685477.5808.. 922337203685477.5807 | 19-20 |
Тип Comp и Currency применяется для бухгалтерских расчётов. В типе Comp дробная часть отсутствует, а в типе Currency она ограничивается четырьмя цифрами. [7]
Логические типы
В Object Pascal логические типы могут принимать два типа: true (верно), false (ложь).
Тип | Размер (в байтах) |
Boolean | |
ByteBool | |
WordBool | |
LongBool |
В Паскаль основным типом является Boolean, остальные типы данных нужны для совместимости с другими языками программирования.
Операторы
Составной оператор
К составным операторам относится группа операторов, которые расположены между операторными скобками (begin … end). Составной оператор используется тогда, когда правилами Pascal можно использовать один оператор, а необходимо выполнить ряд операторов. Это происходит с операторами: if, while, with, for и т.п.[7]
Условный оператор IF
|
Условный оператор предназначен для выполнения выбора по заданному условию. Формат данного оператора:
if <условие> then <оператор> else <оператор>;
или
if <условие> then <оператор>;
Оператор выбора CASE
Оператор Case позволяет выполнить выбор из ряда значений.
Формат данного оператора:
Case <переменная> of
<значение 1>: <оператор>;
<значение 2>: <оператор>;
<значение 3>: <оператор>;
<значение 4>: <оператор>;
<значение 5>: <оператор>;
...
else <оператор>
end;
Следует отметить, что переменная должна быть порядкового типа.
Оператор безусловного перехода GoTo
Оператор Goto переводит выполнение программы к заданной метке. Рекомендуется не злоупотреблять данным оператором и по возможности, избегать его выполнение, т.к. такой оператор приводит к ухудшению читабельности программы, а так же высока возможность «зацикливания» программы.
Формат данного оператора: goto <метка>;
Метка – это идентификатор, который определён с помощью ключевого слова label.
Метку можно установить перед любым оператором и отделяется от него двоеточием.
Нельзя передавать управление внутрь сложных операторов, а так же из вызывающей программы в подпрограмму.
Пример. Сделаем приложение в котором по номеру месяца выводится его название. Причём, номер версии будет запрашиваться до бесконечности.
Листинг программы, реализующей данную задачу:
program consple_laz; {$mode objfpc}{$H+} {$AppType CONSOLE} label s1; // Объявление метки var NumberMonth: Byte; // Номер месяца begin s1: // Метка для повторного выполнения программы write('Month Number: '); // Запрашиваем номер месяца readln(NumberMonth); // Ввод Номера месяца Case NumberMonth of // По номеру месяца определяем его название 1: writeln('January'); // Январь 2: writeln('February'); // Февраль 3: writeln('March'); // Март 4: writeln('April'); // Апрель 5: writeln('May'); // Май 6: writeln('June'); // Июнь 7: writeln('July'); // Июль 8: writeln('August'); // Август 9: writeln('September'); // Сентябрь 10: writeln('October'); // Октябрь 11: writeln('November'); // Ноябрь 12: writeln('December'); // Декабрь else writeln('Error of month!'); // Ошибочно задан месяц End; writeln; // Добавляем пустую строку goto s1; // Повторяем выполнение программы end. |
|
На компакте Вы данный проект можете найти в папке Month.
Данная программа «зациклен» и выполняется до бесконечности, чтоб прервать её выполнение необходимо нажать Ctrl+Break или Ctrl+F2 (из среды разработки), так же можно просто закрыть окно приложения.
Операторы циклов
Операторы циклов нужны для повторного выполнения одинаковых операций. В Паскале предусмотрено три опратора циклов: for (цикл с параметром), white (цикл с предусловием), repeat (цикл с постусловием).
Оператор For
Оператор цикла for предназначен для выполнения количества циклов заранее известного количества.[7]
Формат цикла for:
for <переменная-счётчик>:=<начальное значение> to <конечное значение> do <оператор>;
Переменная-счётчик будет увеличиваться на 1 до тех пор, пока не достигнет конечного значения. Цикл выполняется столько раз, насколько цифра конечного значения отличается от начального значения.
Если, необходимо, чтоб значение счётчика не возрастало, а убывало, тогда вместо to ставится downto.
Пример. Реализуем простейшую задачу из школьного курса информатики – выведем таблицу Пифагора на экран.
Листинг программы [7]:
program consple_laz; {$mode objfpc}{$H+} {$AppType CONSOLE} var s, i, j: integer; // Переменные-счётчики begin for i:=1 to 10 do // Цикл по строкам begin for j:=1 to 10 do // Цикл по столбцам write(i*j:4); // Выводим цифру с форматированием в 4 символа writeln; // Переходим на следующую строку end; Readln; // Ожидаем нажатия клавиши end. |
Результат выполнения программы:
1 2 3 4 5 6 7 8 9 10 2 4 6 8 10 12 14 16 18 20 3 6 9 12 15 18 21 24 27 30 4 8 12 16 20 24 28 32 36 40 5 10 15 20 25 30 35 40 45 50 6 12 18 24 30 36 42 48 54 60 7 14 21 28 35 42 49 56 63 70 8 16 24 32 40 48 56 64 72 80 9 18 27 36 45 54 63 72 81 90 10 20 30 40 50 60 70 80 90 100 |
Оператор цикла While
Оператор цикла While выполняется до тех пор, пока верно логическое условие. Если логическое условие с самого начала не выполнятеся, тогда цикл не выполняется ни разу. Формат опрератора цикла While:
while <условие> do <оператор>;
Оператор цикла Repeat
Оператор цикла Repeat имеет вид:
Repeat
<оператор>;
<оператор>;
<оператор>;
<оператор>;
until <условие>;
Компилятор вначале выполняет все операторы, заключённые между repeat..until, после этого, делается проверка условия и если условие верно, тогда повторяется цикл. Таким образом, операторы в теле цикла выполняются по крайней мере один раз.