Pascal. Простые типы данных
При описании переменной необходимо указать ее тип. Тип переменной описывает набор значений, которые она может принимать, и действия, которые могут быть над ней выполнены. Описание типа определяет идентификатор, который обозначает тип.
Простые типы делятся на стандартные (порядковые) и перечисляемые (ограниченные).
Стандартные типы
Турбо-Паскаль имеет четыре встроенных стандартных типа: integer (целое), real (вещественное), boolean (логический) и char (символьный).
Целочисленный тип (integer)
В Турбо-Паскале имеется пять встроенных целочисленных типов: shortint (короткое целое), integer (целое), longint (длинное целое), byte (длиной в байт) и word (длиной в слово). Каждый тип обозначает определенное подмножество целых чисел, как это показано в следующей Таблице.
Встроенные целочисленные типы.
Тип
Диапазон
Формат
8 битов со знаком
16 битов со знаком
32 бита со знаком
8 битов без знака
16 битов без знака
Арифметические действия над операндами целочисленного типа осуществляются в соответствии со следующими правилами:
- Тип целой константы представляет собой встроенный целочисленный тип с наименьшим диапазоном, включающим значение этой целой константы.
- В случае бинарной операции (операции, использующей два операнда), оба операнда преобразуются к их общему типу перед тем, как над ними совершается действие. Общим типом является встроенный целочисленный тип с наименьшим диапазоном, включающим все возможные значения обоих типов. Например, общим типом для целого и целого длиной в байт является целое, а общим типом для целого и целого длиной в слово является длинное целое. Действие выполняется в соответствии с точностью общего типа и типом результата является общий тип.
- Выражение справа в операторе присваивания вычисляется независимо от размера переменной слева.
Операции совершаемые над целыми числами:
SQR — возведение в квадрат
DIV — после деления отбрасывает дробную часть
MOD — получение целого остатка после деления
ABS — модуль числа
RANDOM(X)-получение случайного числа от 0 до Х
а:=100; b:=60; a DIV b результат - 1 а MOD b результат - 40
Описываются переменные целого типа следующим образом:
var список переменных: тип;
Например: var а,р,n:integer;
Вещественный тип(real)
К вещественному типу относится подмножество вещественных чисел, которые могут быть представлены в формате с плавающей запятой с фиксированным числом цифр. Запись значения в формате с плавающей запятой обычно включает три значения — m, b и e — таким образом, что m*b е , где b всегда равен 10, а m и e являются целочисленными значениями в диапазоне вещественного типа. Эти значения m и e далее определяют диапазон и точность вещественного типа.
Имеется пять видов вещественных типов: real, singlе, duble, exnende, comp. Вещественные типы различаются диапазоном и точностью связанных с ними значений
Диапазон и десятичные цифры для вещественных типов
Тип
Диапазон
Цифры
2.9×10Е-39 до 1.7×10Е 38
1.5×10Е-45 до 3.4×10Е 38
5.0×10Е-324 до 1.7×10Е 308
3.4×10Е-493 до 1.1×10Е 403
Операции совершаемые над вещественными числами:
- Все операции допустимые для целых чисел.
- SQRT(x)-корень квадратный из числа х.
- SIN(X), COS(X), ARCTAN(X).
- LN(X)-натуральный логарифм.
- EXP(X)-экспонента Х (е х ).
- EXP(X*LN(A))-возведение в степень (А х ).
- Функции преобразования типов:
- TRUNC(X)-отбрасывает дробную часть;
- ROUND(X)-округление.
- Если в арифметическом действии встречаются числа типа real и integer, то результат будет иметь тип real.
- Все составные части выражения записываются в одну строку.
- Используются только круглые скобки.
- Нельзя подряд ставить два арифметических знака.
Описываются переменные вещественного типа следующим образом:
var список переменных: тип;
var d,g,k:real;
Символьный тип(char)
K типу char относится любой символ заключенный в апострофы. Для представления апострофа как символьную переменную, надо заключить его в апостроф:’’’’.
Каждый символ имеет свой код и номер. Порядковые номера цифр 0,1..9 упорядочены по возрастанию. Порядковые номера букв также упорядочены по возрастанию, но не обязательно следуют друг за другом.
К символьным данным применимы знаки сравнения:
Функции, которые применимы к символьным переменным:
- ORD(X) — определяет порядковый номер символа Х. Пример:
ord(‘a’)=97;
chr(97)=’a’;
pred(‘B’)=’A’;
succ(‘A’)=’B’;
Перечислимый тип
Перечислимый тип данных назван так потому, что задается в виде перечисления констант в строго определенном порядке и в строго определенном количестве.
Перечислимый тип состоит из списка констант. Переменные этого типа могут принимать значение любой из этих констант. Описание перечислимого типа имеет вид:
Type =(список констант); Var :;
где — это особый вид констант, задаваемых через запятую и имеющих свой порядковый номер, начиная с 0.
type направление=(север, юг, запад, восток); месяц=(июнь,июль,август,январь); емкость=(ведро,бочка,канистра,бак); var поворот:направление; отъезд:месяц; объем:емкость;
var поворот:(свер, юг, запад, восток); отъезд:(июнь, июль, август, январь); объем:(ведро, бочка, канистра, бак);
Можно выполнить такие операторы присваивания:
поворот:=юг; отъезд:=август; объем:=бак;
но нельзя выполнять смешанные присваивания:
отъезд:=юг; объем:=август;
К переменным перечислимого типа применимы следующие функции:
1. ORD — порядковый номер
2. PRED — предшествующий элемент
3. SUCC — последующий элемент.
PRED(бочка)=ведро; SUCC(юг)=запад; ORD(июль)=1;
Переменные перечислимого типа можно сравнить, так как они упорядочены и пронумерованы. Так выражения: север < юг, июнь < январь имеют значения TRUE, а юг>запад и бак
Ограниченный тип
Если переменная принимает не все значения своего типа, а только в некотором диапазоне, то ее можно рассматривать как переменную ограниченного типа.
Каждый ограниченный тип задается путем накладывания ограничения на базовые типы.
TYPE =константа1..константа2
При этом должны выполняться следующие правила:
- Обе ограниченные константы должны быть одного типа.
- В качестве базового типа можно использовать любой простой тип, кроме действительного(real).
- Начальные значение при определении ограниченного типа не должно быть больше конечного значения.
type index=0..63; letter=’a’..’z’; var char1,char2:letter; a,g:index;
Можно описывать сразу в разделе описания переменных:
var a,g:0..63; char1,char2:’a’..’z’.
Тип данных word паскаль
Все простые типы, за исключением вещественных, называются порядковыми типами. Для величин порядковых типов определены стандартные процедуры и функции: Dec, Inc, Ord, Pred, Succ (см. п. 13.1).
.1. Целые типы
В отличие от языка Паскаль, где определен единственный целый тип Integer, в Turbo Pascal имеется пять стандартных типов целых чисел: Shortint, Integer, Longint, Byte, Word. Характеристики этих типов приведены в табл. 2.
Таблица 2. Целые типы данных
| Тип | Диапазон | Формат | Размер в байтах |
| Shortint | -128 .. 127 | Знаковый | 1 |
| Integer | -32768 .. 32767 | Знаковый | 2 |
| Longint | -2147483648 .. 2147483647 | Знаковый | 4 |
| Byte | 0 .. 255 | Беззнаковый | 1 |
| Word | 0 .. 65535 | Беззнаковый | 2 |
.2. Логический тип
Стандартный логический тип Boolean (размер — 1 байт) представляет собой тип данных, любой элемент которого может принимать лишь два значения: True и False. При этом справедливы следующие условия: False
.3. Символьный тип
Стандартный символьный тип Char определяет полный набор ASCII-символов. Функция Ord от величины типа Char дает код соответствующего символа. Сравниваются величины символьного типа по своим кодам.
.4. Перечисляемый тип
Перечисляемый тип не является стандартным и определяется набором идентификаторов, с которыми могут совпадать значения параметра. Список идентификаторов указывается в круглых скобках, идентификаторы разделяются запятыми:
Важно, в каком порядке перечислены идентификаторы при определении типа, т. к. первому идентификатору присваивается порядковый номер 0, второму — 1 и т. д. Один и тот же идентификатор можно использовать в определении только одного перечисляемого типа. Функция Ord от величины перечисляемого типа дает порядковый номер ее значения.
Пример. Перечисляемый тип.
type Operat = (Plus, Minus, Mult, Divide);
Логический тип является частным случаем перечисляемого типа:
type Boolean = (False, True);
.5. Тип-диапазон
В любом порядковом типе можно выделить подмножество значений, определяемое минимальным и максимальным значением, в которое входят все значения исходного типа, находящиеся в этих границах, включая и сами границы. Такое подмножество определяет тип-диапазон. Тип-диапазон задается указанием минимального и максимального значений, разделенных двумя точками:
Минимальное значение при определении такого типа не должно быть больше максимального.
Пример. Определение типов-диапазонов.
type Dozen = 1..12; AddSub = Plus..Minus;
.6. Вещественные типы
В отличие от стандарта языка Паскаль, где определен только один вещественный тип Real, в Turbo Pascal имеется пять стандартных вещественных типов: Real, Single, Double, Extended, Соmр. Характеристики этих типов см. в табл. 3. Таблица 3. Вещественные типы данных
| Тип | Диапазон | Число значащих цифр | Размер в байтах |
| Real | 2.9*10-39..1.7*1038 | 11-12 | 6 |
| Single | 1.5*10-45..3.4*1038 | 7-8 | 4 |
| Double | 5.0*10-324.-1.7*10308 | 15-16 | 8 |
| Extended | 3.4*10-4932..1.1*104932 | 19-20 | 10 |
| Comp | -263+1..263-1 | 19-20 | 8 |
Тип Comp фактически является типом целых чисел увеличенного диапазона, однако порядковым не считается.
Типы Single, Double, Extended и Comp можно использовать в программах только при наличии арифметического сопроцессора или при включенном эмуляторе сопроцессора (см. пп. 17.5.8 и 17.7.1).
Data types. Standard data types. Integer types. Ordinal types. Functions Ord , Pred , Succ . Function SizeOf
In a program, data is characterized by a so-called type defined for each variable declared in the program. In other words, each variable has its own specific type. The type of a variable is a characteristic that determines the set of values that a variable can take. Based on the type of the variable, a corresponding memory size is allocated for each variable.
The Pascal programming language allows you to use a set of types, which are divided into two groups:
- standard (predefined) types;
- custom types. These are user-defined (programmer) types.
Standard types have well-defined names and are available anywhere in the program. All standard types are described in the System module. To use standard types, the program does not need to include the System unit in the uses clause, since this unit is included by default. Standard types are available in any module of the program.
It is allowed to override the names of standard types in the program. Also the type can be accessed by using the module name System as shown below
System.LongInt System.Real System.Boolean System.Char
User-defined types are programmer-defined types. These types are necessary to provide a more preferable solution to the task at hand. With the help of user-defined types in the program, you can more accurately describe the data required to solve the problem.
In Pascal, the following user-defined types are distinguished:
- enumerated type;
- interval type;
- pointer types (except for the standard Pointer type);
- structured types;
- object types.
2. Classification of standard types
The names and the number of types change in different versions of Pascal. There are basic Pascal types and additional types added in new subsequent versions and varieties of this language: Delphi (Object Pascal), Lazarus, PascalABC.
The standard types of the Pascal language are:
- integers ShortInt , Integer , LongInt , Byte , Word ;
- real types Single , Real , Double , Extended , Comp ;
- boolean types Boolean , ByteBool , WordBool , LongBool ;
- character type Char ;
- string types String , PChar ;
- pointer type Pointer ;
- text type named Text .
New standard types have been added to the Free Pascal language:
- integers SmallInt , Cardinal , LongWord , Int64 , QWord ;
- real type Currency ;
- character type WideChar .
The following types have been added to the Delphi language:
- integers SmallInt , Cardinal , LongWord , Int64 , UInt64 , NativeInt , NativeUint ;
- real types Real48 , Currency .
3. Ordinal types. Concepts. Characteristics of ordinal types. Ord , Pred , Succ functions
Ordinal data types include the following standard types:
- integers ShortInt, Integer, LongInt, Byte, Word, SmallInt, Cardinal, LongWord, Int64 , QWord ;
- boolean types Boolean , ByteBool , WordBool , LongBool ;
- character types Char , WideChar .
For ordinal types, you can define the following properties.
- for each ordinal type, a set of admissible values is defined, which are an ordered sequence. Each element of the ordinal type has its own ordinal number, represented by an integer. The first value in ordinal types Byte , Word , Boolean , ByteBool , WordBool , LongBool has ordinal 0, followed by ordinal 1, etc. In ordinal types ShortInt , Integer , LongInt , the ordinal is equal to the value of these types;
- for any ordinal type, the standard Ord function is applicable, which determines the ordinal number of this value;
- for any ordinal type, the standard Pred function is applicable, which returns the previous value relative to a given value. If the Pred function is applied to the first valid value of an ordinal type (other than boolean types), then the ordinal of the last value is returned;
- any ordinal type can be used in the standard Succ function that returns the value that follows the specified one. If this function is applied to the last valid value of an ordinal type (other than boolean types), then the ordinal of the first value is returned.
4. An example demonstrating the use of ordinal types in combination with the Pred , Succ functions
The example shows the use of the Pred , Succ functions for the standard types of classical Pascal. These functions can also be used for new types of Free Pascal language.
program TestOrdinalTypes; uses crt; var // Declaring variables of ordinal types // 1. Group of integer types i, pred_i, succ_i : Integer; bt, pred_bt, succ_bt : Byte; si, pred_si, succ_si : ShortInt; li, pred_li, succ_li : LongInt; w, pred_w, succ_w : Word; // 2. Boolean types b, pred_b, succ_b : Boolean; bb, pred_bb, succ_bb : ByteBool; wb, pred_wb, succ_wb : WordBool; lb, pred_lb, succ_lb : LongBool; // 3. Char type c, pred_c, succ_c : Char; begin // 1. Group of integer types // 1.1. Тип Integer i:=25; pred_i := Pred(i); // 24 succ_i := Succ(i); // 26 Writeln('Integer: ', pred_i:6, i:6, succ_i:6); // 1.2.
Byte type bt:=0; pred_bt := Pred(bt); // 255 succ_bt := Succ(bt); // 1 Writeln('Byte: ', pred_bt:6, bt:6, succ_bt:6); // 1.3. ShortInt type si:=-1; pred_si := Pred(si); // -2 succ_si := Succ(si); // 0 Writeln('ShortInt:', pred_si:6, si:6, succ_si:6); // 1.4. LongInt type li:=0; pred_li := Pred(li); succ_li := Succ(li); Writeln('LongInt: ', pred_li:6, li:6, succ_li:6); // 1.5. Word type w := 0; pred_w := Pred(w); // 65535 succ_w := Succ(w); // 1 Writeln('Word: ', pred_w:6, w:6, succ_w:6); // 2. Boolean types // 2.1. The Boolean type b:=True; pred_b := Pred(b); // False succ_b := Succ(b); // True Writeln('Boolean: ', pred_b:6, b:6, succ_b:6); // 2.2.
WordBool type wb:=False; pred_wb := Pred(wb); // True succ_wb := Succ(wb); // True Writeln('WordBool:', pred_wb:6, wb:6, succ_wb:6); // 2.3. ByteBool type bb:=True; pred_bb := Pred(bb); // True succ_bb := Succ(bb); // False Writeln('ByteBool:', pred_bb:6, bb:6, succ_bb:6); // 2.4. The LongBool type lb:=False; pred_lb := Pred(lb); // True succ_lb := Succ(lb); // True Writeln('LongBool:', pred_lb:6, lb:6, succ_lb:6); // 3. Char type c:='D'; pred_c := Pred(c); succ_c := Succ(c); Writeln('Char: ', pred_c:6, c:6, succ_c:6); end.
Integer: 24 25 26 Byte: 255 0 1 ShortInt: -2 -1 0 LongInt: -1 0 1 Word: 65535 0 1 Boolean: FALSE TRUE TRUE WordBool: TRUE FALSE TRUE ByteBool: TRUE TRUE FALSE LongBool: TRUE FALSE TRUE Char: C D E
5. Integer types. Characteristics of integer Types in standard Pascal and Free Pascal
Table 1 displays the characteristics of integer types implemented in standard Pascal.
Type description
Memory size
Figure 1. Characteristics of integer types in Pascal
Important characteristics of a type include memory size in bytes and range of numbers. Memory size determines how many bytes will be allocated to store one variable or constant in memory. If you declare a variable of type LongInt , then 4 bytes of memory will be allocated to store it.
In Free Pascal, the list of integer types has been changed (see table 2), namely:
- added additional types SmallInt , Cardinal , LongWord , Int64 , QWord ;
- the Integer type can occupy memory of 2 or 4 bytes in order to ensure compatibility between 16-bit words and 32-bit words implemented in different generations of processors.
Table 2 contains additional integer types added in Free Pascal.
0..4294967295 same as LongWord
Delphi adds the following integer types: SmallInt , Cardinal , LongWord , Int64 , UInt64 , NativeInt , NativeUint . These types have the same characteristics as the types of the same name from Table 2. The NativeInt type has the same characteristics as the LongInt type. The NativeUint type corresponds to the LongWord type.
6. An example of declaring and using variables of integer types
Below is a snippet of the declaration of variables and constants of standard Pascal integer types.
program TestOrdinalTypes; uses crt; // Declaring constants of integer types const Max = 300; Min = 0; NumberDays = 7; // Declaring variables of integer types var s:ShortInt; i:Integer; l:LongInt; b:Byte; w:Word; begin // Assigning values to variables of types ShortInt, Integer, LongInt s := -35; Writeln(s); i := 2021; Writeln(i); l := 3000000; Writeln(l); // An attempt was made to assign a value to a variable that exceeds its valid bounds. b:=2000; // b = 208 - overflow Writeln(b); // Assigning a value to a variable of type Word w := 65000; Writeln(w); end.
-35 2021 3000000 208 65000
7.
Determination of the minimum and maximum allowable values of integer types programmatically. Example
For some types, there are predefined constants that determine the minimum or maximum allowable value that a variable of a certain type can receive. The list of these constants may differ in different languages (Free Pascal, Delphi, PascalABC).
Below is an example of using the MaxInt and MaxLongInt constants in Delphi and Lazarus systems
// Print the maximum value of types Integer and LongInt Writeln(System.MaxInt); // 2147483647 Writeln(System.MaxLongint); // 2147483647
8. Determining the size of the type programmatically. Function SizeOf . Example
To get the size of a type occupied by a variable, use the SizeOf function. In general, a function call looks like this:
SizeOf(variableName_or_constantName);
SizeOf(typeName);
- variableName_or_constantName – the name of a variable or constant for which you need to determine the size of the memory allocated for it;
- typeName – the name of the type for which the size is determined.
Example.
program TestTypes; uses crt; // Declaring constants const Pi = 3.1415; // Declaring variables var i:Integer; d:Double; qw:QWord; size:Integer; begin // SizeOf function - determine the size of a variable or type // 1. Get the size of the variable i size := SizeOf(i); // size = 4 Writeln('SizeOf(i) = ', size); // 2. Get the size of the variable qw size := SizeOf(qw); // size = 8 Writeln('SizeOf(qw) = ', size); // 3. Get the size of type LongInt size := SizeOf(LongInt); // size = 4 Writeln('SizeOf(LongInt) = ', size); // 4. Display dimensions of other types Writeln('SizeOf(Currency) = ', SizeOf(Currency)); // 8 Writeln('SizeOf(SmallInt) = ', SizeOf(SmallInt)); // 2 // 5. Get the size of the constant Pi Writeln('SizeOf(Pi) = ', SizeOf(Pi)); // 8 end.SizeOf(i) = 4 SizeOf(qw) = 8 SizeOf(LongInt) = 4 SizeOf(Currency) = 8 SizeOf(SmallInt) = 2 SizeOf(Pi) = 8
Related topics
- Boolean types. Character types. String types
- Pointer types Pointer , ^ . Text type




