Типы данных языка Паскаль

Любые данные (константы, переменные, значения функций или выражения) в Турбо Паскале характеризуются своими типами. Тип определяет множество допустимых значений, которые может иметь тот или иной объект, а также множество допустимых операций, которые применимы к нему. Тип также определяет формат внутреннего представления данных в памяти компьютера.

Существуют следующие типы данных в Турбо-Паскале.

1) Простые типы:

– вещественные;

– символьные;

– булевские (логические);

– перечисляемые;

– ограниченные (диапазонные).

2) Составные (структурированные) типы:

– регулярные (массивы);

– комбинированные (записи);

– файловые;

– множественные;

– строковые;

– объекты.

3) Ссылочные типы (типизированные и нетипизированные указатели).

4) Процедурные типы.

В Турбо Паскале предусмотрен механизм создания новых типов данных, благодаря чему общее количество типов, используемых в программе может быть сколь угодно большим.

Целый тип . Значениями целого типа являются элементы подмножества целых чисел. В Турбо-Паскале существует пять целых типов. Их названия, диапазон значений, длина представления в байтах приведены в табл. 6.

Таблица 6

Целые типы данных

Целые переменные описываются с использованием указанных выше зарезервированных слов:

i, j, k: integer;

Данные целого типа хранятся в памяти точно. Например, переменные типа integer занимают в памяти 2 байта (16 бит), которые распределяются следующим образом: 1 бит отводится для хранения знака числа (0, если число положительное, и 1, если число отрицательное) и 15 бит для хранения числа в двоичной системе счисления. Максимальное десятичное число, которое можно записать как двоичное в 15 бит – это 32767.

При использовании процедур и функций с целочисленными параметрами следует руководствоваться «вложенностью» типов, т.е. везде где используется word, допускается использование byte (но не наоборот), в longint «входит» integer, который, в свою очередь, включает в себя shortint.

Для целого типа определены пять основных операций, результатом которых также является целое число: +, -,*, div, mod (сложение, вычитание, умножение, целочисленное деление и остаток от целочисленного деления). В арифметических выражениях операции *, div, mod имеют более высокий приоритет по сравнению с операциями +, -. Примеры записи выражений:

Перечень процедур и функций, применимых к целочисленным типам, приведен в табл. 7. Буквами b, s, w, i, l обозначены выражения соответственно типа byte, shortint, word, integer, и longint; x – выражение любого из этих типов; идентификаторы vb, vs, vw, vi, vl, vx обозначают переменные соответствующих типов. В квадратных скобках указывается необязательный параметр.

Таблица 7

Стандартные процедуры и функции, применимые к целым типам

Обращение Тип результата Действие
Abs (x) x Возвращает модуль x
Chr (b) Char Возвращает символ по его коду
Dec (vx [, i]) - Уменьшает значение vx на i, а при отсутствии i – на 1
Inc (vx [, i]) - Увеличивает значение vx на i, а при отсутствии i – на 1
Hi (i) Byte Возвращает старший байт аргумента
Hi (i) Byte То же
Lo (i) Byte Возвращает младший байт аргумента
Lo (w) Byte То же
Odd (l) Byte Возвращает true, если аргумент – нечетное число
Random (w) Как у параметра Возвращает псевдослучайное число, равномерно распределенное в диапазоне 0…(w-1)
Sqr (x) x Возвращает квадрат аргумента
Swap (i) Integer
Swap (w) Word Меняет местами байты в слове
Succ(x) Как у параметра Возвращает следующее целое значение, т.е. x+1
Pred(x) Как у параметра Возвращает предшествующее целое значение, т.е. x-1

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

Вещественный тип. Значения вещественных типов определяют произвольное число с некоторой конечной точностью, зависящей от внутреннего формата вещественного числа. В Турбо-Паскале существуют пять вещественных типов (табл. 8).

Таблица 8

Вещественные типы данных

Вещественные переменные описываются с использованием указанных выше зарезервированных слов:

Вещественное число в памяти компьютера состоит из 3-х частей:

Знаковый разряд числа;

Экспоненциальная часть;

Мантисса числа.

Мантисса имеет длину от 23 (Single) до 63 (Extended) двоичных разрядов, что и обеспечивает точность 7-8 для Single и 19-20 для Extended десятичных цифр. Десятичная точка (запятая) подразумевается перед левым (старшим) разрядом мантиссы, но при действиях с числом ее положение сдвигается влево или вправо в соответствии с двоичным порядком числа, хранящимся в экспоненциальной части, поэтому действия над вещественными числами называют арифметикой с плавающей точкой (запятой).

Доступ к типам Single, Double и Extended осуществляется только при особых режимах компиляции. Для включения данных режимов следует выбрать пункт меню Options , Compiler… и включить опцию 8087/80287 в группе Numeric processing .

Особое положение в Турбо Паскаль занимает тип Comp, который трактуется как вещественное число без экспоненциальной и дробной частей. Фактически, Comp – Это большое целое число со знаком, сохраняющее 19…20 значащих десятичных цифр. В то же время в выражениях Comp полностью совместим с любыми другими вещественными типами: над ним определены все вещественные операции, он может использоваться как аргумент математических операций и т.д.



Вещественные числа задаются в десятичной системе счисления в одной из двух форм .

В форме с фиксированной точкой запись состоит из целой и дробной частей, отделенных друг от друга точкой, например:

0.087 4.0 23.5 0.6

В форме с плавающей точкой запись содержит букву Е, которая означает «умножить на десять в степени», причем степень является целым числом, например:

7Е3 6.9Е-8 0.98Е-02 45Е+04

Над объектами вещественного типа определены следующие операции: +, -, *, /.

Операции «*» и «/» имеют более высокий приоритет по сравнению с операциями «+» и «-».

Если хотя бы один операнд вещественный, то операции +, -, *, / приводят к вещественному результату. Операция деления / приводит к вещественному результату и в случае двух целых операндов, например: 9/3 = 3.0.

Для работы с вещественными данными могут использоваться стандартные математические функции, представленные в табл. 9. Результат работы этих функций также является вещественным.

Таблица 9

Математические функции, работающие с вещественными данными

Переменные и константы типа REAL запрещается использовать:

– в функциях pred(x), succ(x), ord(x);

– в качестве индексов массивов;

– в качестве меток в операторах передачи управления;

– в качестве управляющих переменных (параметров цикла).

Для перевода вещественного числа в целое можно воспользоваться функциями:

trunc(x) – целая часть х (х – вещественное);

round(x) – округление до ближайшего целого (х- вещественное).

Символьный тип. Символьные переменные описываются с помощью зарезервированного слова char:

Значения этого типа выбираются из упорядоченного множества символов (из множества ASCII), состоящего из 256 символов. Каждому символу приписывается целое число из диапазона 0..255. Например, прописные буквы латинского алфавита A..Z имеют коды 65..90, а строчные буквы – коды 97..122.

Значением переменной символьного типа является один символ, заключенный в апострофы, например:

‘F’ ‘8’ ‘*’

Символьные переменные можно сравнивать между собой, при этом сравниваются коды символов.

Существуют функции, которые устанавливают соответствие между символом и его кодом:

ord(с) – выдает номер символа с;

chr(i) – выдает символ с номером i.

Эти функции являются обратными по отношению друг к другу.

Логический тип . Логические переменные описываются с помощью зарезервированного слова boolean:

p1, p2: boolean;

Переменные логического типа принимают два значения: true (истина), false (ложь).

Эти величины упорядочены следующим образом: false < true. false имеет порядковый номер 0, true имеет порядковый номер 1.

Переменным логического типа можно либо присвоить значение непосредственно, либо использовать логическое выражение. Например,

a, d, g, b: boolean;

Операции отношения (<, <=, >, >=, =, <>), применяемые к целым, вещественным и символьным переменным, дают логический результат.

Логические операции над операндами логического типа также дают логический результат (операции приведены в порядке убывания приоритета) (подробнее см. табл. 3 и 5):

not – отрицание (операция НЕ);

and – логическое умножение (операция И);

or – логическое сложение (операция ИЛИ);

xor – исключающее ИЛИ.

Выражение (not a) имеет значение, противоположное значению а.

Выражение (a and b) дает значение true, если только и а и b имеют значение true, в остальных случаях значение этого выражения есть false.

Выражение (a or b) дает значение false, если только и а и b имеют значение false, во всех остальных случаях результат true.

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

x = (w1, w2, …, wn);

где х – имя типа, w1, w2,…, wn – значения, которые может принимать переменная типа х.

Эти значения являются упорядоченными w1

К аргументу w перечисляемого типа применимы следующие стандартные функции:

succ(w), pred(w), ord(w).

color=(red, black, yellow, green)

ww=(left, up, right, down);

f: array of ww;

succ(d) = yellow;

Переменные а и в имеют тип w. они могут принимать одно из трех значений, причем on

К величинам перечисляемого типа применимы операции отношения: =, <>, <=, >=, <, >.

Допускается указывать константы перечисляемого типа непосредственно в разделе var без использования раздела type , например

c,d: (red, black, yellow, green);

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

Описание ограниченного типа имеет вид

Здесь а – имя типа, min, max – константы.

При задании ограниченного типа должны выполняться следующие правила:

– обе граничные константы min и max должны быть одинакового типа;

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

col = red.. yellow;

letter = ‘a’..’f’;

– переменные ограниченного типа можно описать в разделе var, не обращаясь к разделу type:

– ограниченный тип наследует все свойства базового типа, из которого он создается;

– граница min всегда должна быть меньше границы max.

Массивы . Массив – это сложный тип, представляющий собой структуру, состоящую из фиксированного числа компонент одного типа. Тип компонента называется базовым типом. Все компоненты массива можно легко упорядочить и обеспечить доступ к любому из них простым указанием его порядкового номера. Описание массива в разделе var имеет вид:

a: array of t2;

где а – имя массива, array , of – служебные слова (означают «массив из…»), t1 – тип индексов; t2 – тип компонент (базовый тип).

Количество индексов определяет размерность массива. Индексы могут быть целого (кроме longint), символьного, логического, перечисляемого и диапазонного типов. Индексы разделяются запятыми и заключаются в квадратные скобки. Компоненты массива могут быть любого типа, кроме файлового.

Пример 1. Рассмотрим одномерный массив С, значениями которого являются пять вещественных чисел:

4.6 6.23 12 -4.8 0.7

Описание этого массива выглядит следующим образом:

c: array of real;

По конкретному значению индекса можно выбрать определенную компоненту массива (например, C означает третий элемент массива С, т.е. число 12).

Пример 2. Рассмотрим двумерный массив В (матрицу В), значением которого является таблица из целых чисел:

Описание данного массива выглядит следующим образом:

b of integer;

Здесь b – имя массива, первый индекс является номером строки и принимает значения от 1 до 2, второй – номер столбца и принимает значения от 1 до 4. По конкретным значениям индексов можно выбрать определенную компоненту массива (например, b означает элемент таблицы, стоящий в первой строке и третьем столбце, т.е. число -4).

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

a: array of real;

a[(i+1)*2] := 24;

Набор операций над элементами массива полностью определяется типом этих элементов.

Строковый тип . Строковый тип – множество символьных цепочек произвольной длины (от нуля до заданного числа). Переменные строкового типа описываются с помощью служебного слова string :

b: string ;

Особенности:

– значение строковой переменной может быть введено с помощью клавиатуры, присвоено в операторе присваивания, прочитано из файла. При этом длина введенной строки может быть любой (меньше указанного размера, равна размеру или больше, в последнем случае, лишние символы отбрасываются); a:= ‘Результаты’;

– допускается использовать операцию конкатенации в операторе присваивания, так как строки могут динамически изменять свою длину: а:= a + ‘ вычислений’;

– максимальная длина строковой переменной 255 символов, это указание длины может быть опущено:

a: string ;

a1: string ;

Переменные а и а1 – одинаковы (эквивалентное описание).

– память под переменные строкового типа отводится по максимуму, но используется лишь часть памяти, реально занятая символами строки в данный момент. Для описания строковой переменной длины n используется n+1 байт памяти: n байтов - для хранения символов строки, n+1 –й байт – для хранения текущей длины.

– над значениями строковых типов определены операции сравнения: < <= > >= = <>. Короткая строка всегда меньше длинной. Если строки имеют одинаковую длину, то сравниваются коды символов.

– возможен доступ к отдельным элементам строки аналогично доступу к элементам массива: а, a. В квадратных скобках указывается номер элемента строки.

Процедуры и функции, ориентированные на работу со строками.

concat (s1, s2,…) – функция слияния строк, s1, s2, …- строки, число строк может быть произвольным. Результатом работы функции является строка. Если длина результирующей строки больше 255 символов, то строка усекается до 255 символов.

copy (s, index, count) – функция выделения строки из исходной строки s длиной count символов, начиная с символа под номером index .

delete (s, index, count) – процедура удаления из строки s подстроки длиной count символов, начиная с символа с номером index .

insert (s1, s2, index) – процедура вставки строки s1 в строку s2 , начиная с символа с номером index .

length(s) – функция определения текущей длины строки, возвращает число равное текущей длине строки.

pos(s1, s2) – функция поиска в строке s2 подстроки s1 . выдает номер позиции первого символа подстроки s1 в строке s2 (или 0, если этой строки нет).

val (st, x, code) – процедура преобразования строки s в целую или вещественную переменную x . Параметр code содержит 0, если преобразование прошло успешно (и в x помещается результат преобразования), или номер позиции строки, где обнаружен ошибочный символ (в таком случае значение x не меняется).

Совместимость и преобразование типов . Турбо Паскаль – это типизированный язык. Он построен на основе строго соблюдения концепции типов, в соответствии с которой все применяемые в языке операции определены только над операндами совместимых типов.

Два типа считаются совместимыми, если:

– оба они есть один и тот же тип;

– оба вещественные;

– оба целые;

– один тип есть тип-диапазон второго типа;

– оба являются типами диапазонами одного и того же базового типа;

– оба являются множествами, составленными из элементов одного и того же базового типа;

– оба являются упакованными строками (определены с предшествующим словом packed) одинаковой максимальной длины;

– один есть тип-строка, а другой – тип-строка или символ;

– один тип есть любой указатель, а другой – указатель на родственный ему объект;

– оба есть процедурные типы с одинаковым типом результата (для типа-функции), количеством параметров и типом взаимно соответствующих параметров.

Совместимость типов приобретает особое значение в операторах присваивания. Пусть t1 – тип переменной, а t2 – тип выражения, то есть выполняется присваивание t1:=t2. Это присваивание возможно в следующих случаях:

– t1 и t2 есть один и тот же тип, и этот тип не относится к файлам, массивам файлов, записям, содержащим поля-файлы, или массивам таких записей;

– t1 и t2 являются совместимыми порядковыми типами, и значение t2 лежит в диапазоне возможных значений t1;

– t1 и t2 являются вещественными типами, и значение t2 лежит в диапазоне возможных значений t1;

– t1 – вещественный тип и t2 – целый тип;

– t1 – строка и t2 – символ;

– t1 – строка и t2 – упакованная строка;

– t1 и t2 – совместимые упакованные строки;

– t1 и t2 – совместимые множества и все члены t2 принадлежат множеству возможных значений t1;

– t1 и t2 – совместимые указатели;

– t1 и t2 – совместимые процедурные типы;

– t1 – объект и t2 – его потомок.

В программе данные одного типа могут преобразовываться в данные другого типа. Такое преобразование может быть явным или неявным.

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

Неявное преобразование возможно только в двух случаях:

– в выражениях, составленных из вещественных и целочисленных переменных, последние автоматически преобразуются к вещественному типу, и все выражение в целом приобретает вещественный тип;

– одна и та же область памяти попеременно трактуется как содержащая данные то одного, то другого типа (совмещение в памяти данных разного типа).

3.2. Простые типы данныхв Turbo Pascal 7

Простой тип определяет упорядоченное множество значений параметра. В Turbo Pascal имеются следующие группы простых типов:

  • целые типы;
  • логический тип;
  • символьный тип;
  • перечисляемый тип;
  • тип-диапазон;
  • вещественные типы.

Все простые типы, за исключением вещественных, называются порядковыми типами. Для величин порядковых типов определены стандартные процедуры и функции: Dec, Inc, Ord, Pred, Succ (см. п. 13.1).

3.2.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

3.2.2. Логический тип

Стандартный логический тип Boolean (размер - 1 байт) представляет собой тип данных, любой элемент которого может принимать лишь два значения: True и False. При этом справедливы следующие условия:
False Ord (False) = 0
Ord (True) = 1
Succ (False) = True
Pred (True) = False

В Turbo Pascal 7.0 добавлено еще три логических типа ByteBool (размер - 1 байт), WordBool (размер - 2 байта) и LongBool (размер - 4 байта). Они введены для унификации с другими языками программирования и со средой Windows. Отличие их от стандартного типа Boolean заключается в фактической величине параметра этого типа, соответствующей значению True. Для вех логических типов значению False соответствует число 0, записанное в соответствующее количество байтов. Значению же True для типа Boolean соответствует число 1, записанное в его байт, а для других типов значению True соответствует любое число, отличное от нуля (хотя функция Ord в этом случае дает значение 1).

3.2.3. Символьный тип

Стандартный символьный тип Char определяет полный набор ASCII-символов. Функция Ord от величины типа Char дает код соответствующего символа. Сравниваются величины символьного типа по своим кодам.

3.2.4. Перечисляемый тип

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

type
= ();)

Важно, в каком порядке перечислены идентификаторы при определении типа, т. к. первому идентификатору присваивается порядковый номер 0, второму - 1 и т. д. Один и тот же идентификатор можно использовать в определении только одного перечисляемого типа. Функция Ord от величины перечисляемого типа дает порядковый номер ее значения.

Пример. Перечисляемый тип.

type Operat = (Plus, Minus, Mult, Divide);

Логический тип является частным случаем перечисляемого типа:

type Boolean = (False, True);

3.2.5. Тип-диапазон

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

type = . . ;

Минимальное значение при определении такого типа не должно быть больше максимального.

Пример. Определение типов-диапазонов.

type
Dozen = 1..12; {числа от 1 до 12}
AddSub = Plus..Minus; {операции сложения и вычитания}

3.2.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).

В языке Паскаль переменные характеризуются своим типом . Тип - это свойство переменой, по которому переменная может принимать множество значений, допустимых этим типом, и участвовать во множестве операций, допустимых над данным типом.

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

Например:

n:integer;

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

[имя] = [тип]

Система стандартных типов имеет разветвленную, иерархическую структуру.

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

Структурированные типы строятся по определенным правилам из простых типов.

Указатели формируются из простых видов и используются в программах для задания адресов.

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

Объекты являются также нововведением, и они предназначены для использования языка, как объектно-ориентированного языка.

В языке Паскаль целые типы бывают 5 видов. Каждый из них характеризует диапазон принимаемых значений и занимаемым местом их в памяти.

При использовании целочисленных чисел следует руководствоваться вложенностью типов, т.е. типы с меньшим диапазоном могут быть вложены в типы с большим диапазоном. Тип Byte может быть вложен во все типы занимающие 2 и 4 байта. В тоже время тип Short Int, занимающий 1 байт не может быть вложен в тип Word, поскольку не имеет отрицательных значений.

Можно выделить 5 вещественных типов:

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

2358.8395

0.23588395*10 4

0.23588395*E 4

Особое положение в Паскаль занимает тип Comp, фактически это большое целое число со знаком. Этот тип совместен со всеми вещественными типами и может быть использован для большого целого числа. При представлении вещественных чисел с плавающей запятой десятичная точка, всегда подразумевается перед левой или старшей мантиссой, но при действии с числом сдвигается влево или вправо.

Порядковые типы

Порядковые типы объединяют в себе несколько простых типов. К ним относятся:

  • все целые типы;
  • символьный тип;
  • логический тип;
  • тип-диапазон;
  • перечисляемый тип.

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

К значениям порядкового типа может быть применена функция ODD(x), которая возвращает порядковый номер аргумента x.

Функция PRED(x) - возвращает предшествующее значение порядкового типа. PRED(A) = 5.

Функция SUCC (x) - возвращает следующее значение порядкового типа. SUCC(A) = 5.

Символьный тип

Значениям символьного типа является 256 символов из множества допустимых кодовой таблицей используемого компьютера. Начальная область этого множества, то есть диапазон от 0 до 127 соответствует множеству кодов ASCII, куда загружаются символы алфавита, арабских чисел и специальных символов. Символы начальной области всегда присутствуют на клавиатуре ПК. Старшая область называется альтернативной, она содержит символы национальных алфавитов и различные специальные символы, и символы псевдографики, не соответствующие коду ASCII.

Значение символьного типа занимает один байт в оперативной памяти. В программе значении заключаются в апострофы. Так же значения можно задавать в виде его ASCII-коде. В этом случае перед числом, обладающим код символа нужно поставить знак #.

C:= ’A’

Логический (булевский) тип

Имеются два значения булевского типа: Истина (True) и Ложь (False). Переменные данного типа задаются служебным словом BOOLEAN. Значение булевского типа занимают один байт в оперативной памяти. Значениям Истина и Ложь соответствуют числовые значения 1 и 0.

Тип-диапазон

Есть подмножество своего базового типа в качестве, которого может выступать любой порядковый тип. Тип-диапазон задается границами внутри базового типа.

[минимальное-значение]…[максимальное-значение]

Тип-диапазон можно задавать в разделе Type, как определенный тип, а можно непосредственно в разделе Var.

При определении тип-диапазона необходимо руководствоваться:

  • левая граница не должна превышать правую границу;
  • тип-диапазон наследует все свойства базового типа, но с ограничениями, связанными и с его меньшей мощностью.

Перечисляемый тип

Данный тип относится к порядковым типам и задается перечислением тех значений, которых он может перечислять. Каждое значение именуется неким идентификатором и располагается в списке обрамленным в круглых скобках. Перечисляемый тип задается в Type:

Peoples = (men, women);

Первое значение - 0, второе значение - 1 и т.д.

Максимальная мощность 65535 значений.

Строковый тип

Строковый тип относится к группе структурированных типов и состоит из базового типа Char. Строковый тип не относится к порядковым типам. Он определяет множество символьных цепочек произвольной длины до 255 символов.

В программе строковый тип объявляется, словом String. Поскольку String является базовым типом, он описан в языке и объявление переменной типа String осуществляется в Var. При объявлении переменной строкового типа за String в квадратных скобках целесообразно указывать длину строки. Для указания используется целое число от 0 до 255.

Fam: String;

Указание длины строки позволяет компилятору отвести под данную переменную указанное число байтов в ОЗУ. Если длина строки не указана, то в этом случае компилятор отведет под значение этой переменной максимальное возможное число байт (255).

Для того чтобы машина смогла обработать какие бы то ни было входные данные, она должна «понимать», к какому типу принадлежат переменные, в которые занесены значения. При отсутствии информации о формате данных компьютер не сможет определить, допустима ли в конкретном случае та или иная операция: например, интуитивно понятно, что нельзя возвести букву в степень или взять интеграл от строки. Таким образом, пользователь должен определить, какие действия позволительно осуществлять с каждой переменной.

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

Подразделение типов переменных

Типы переменных в Паскале делятся на простые и структурированные. Простые включают в себя вещественные и порядковые типы. К структурированным относятся массивы, записи, множества и файлы. Отдельно выделяются указатели, объекты и процедурные типы.

Рассмотрим порядковые и вещественные типы. К порядковым относятся 5 целых типов, перечисляемый и тип-диапазон.

Порядковые типы

Существует 5 целых типов, различающихся длиной в байтах и диапазоном значений.

Длина Byte и ShortInt - 1 байт. Различие между ними состоит в том, что Byte хранит только неотрицательные значения, а ShortInt позволяет хранить и отрицательные (от -128 до +127). Аналогично соотносятся друг с другом типы Word и Integer, с тем лишь различием, что их размер - 2 байта.

Наконец, LongInt позволяет хранить и отрицательные, и положительные значения, используя 4 байта - в числовом измерении 16-й степени в обе стороны от нуля. Различные виды переменных в Паскале способствуют эффективному решению пользовательских задач, поскольку в каждом конкретном случае может требоваться как малый, так и большой диапазон значений, а также не исключено наличие ограничений по объему выделяемой памяти.

Важно понимать, что нуль занимает столько же места в памяти, сколько и любое другое число. Таким образом, при формировании диапазона значений минимальное отрицательное число по модулю будет на единицу больше, чем положительное: например, от -128 до +127.

Переменные, принадлежащие к могут принимать значение TRUE (истина) или FALSE (ложь) и требуют 1 байт памяти.

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

Вещественные типы

Среди типов переменных в Паскале выделяется несколько числовых с возможностью записи дробной части. Различие между типами Single, Real, Double и Extended сводится к диапазону принимаемых значений, количеству значащих цифр после запятой и размеру в байтах.

В соответствии с порядком, представленным выше, переменная каждого типа будет занимать 4, 6, 8 или 10 байт.

Массивы

Структурированные типы данных являются сложными и позволяют объединять в рамках одной переменной ряд простых значений. Яркий пример представляет собой массив, который можно задать следующим образом:

String=array of char;

Таким образом, мы получили тип под названием String, позволяющий задавать переменные длиной в 100 символов. В последней строке задан непосредственно одномерный массив Y, имеющий тип String. Описание переменных в Паскале осуществляется путём размещения с левой стороны идентификатора, а справа, после знака равенства, значения переменной.

Диапазон индексов, записанный в позволяет обращаться к каждому конкретному элементу массива:

В данном случае мы произвели чтение второго элемента созданного ранее массива Y.

Частным случаем одномерного массива являются и строковые переменные в Паскале, ведь строка - это последовательность символов, т. е. элементов типа char.

Записи

Запись состоит из нескольких полей, заполненных данными любых типов кроме файлового. В целом переменная такого типа похожа на элемент базы данных. Например, можно занести в неё имя человека и номер его телефона:

type NTel = Record

В первой строке слева указывается имя типа, а справа - служебное слово record. Во второй строке задано поле с именем, в третьей - номер телефона. Слово «end» говорит о том, что мы ввели все поля, которые хотели, и на этом процесс создания записи завершается.

Наконец в последней строке мы задаём переменную One, имеющую тип NTel.

Обращаться можно как к записи в целом, так и к отдельным её компонентам, например: one.NAME (т. е. имя_переменной.имя_поля_записи).

Файлы

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

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

‘C:\Folder\File2.txt’

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

Задать переменную файлового типа можно следующим образом:

f1: file of integer;

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

В заключение

Без умения использовать различные типы переменных в Паскале пользователь не сможет реализовать даже простейшую задачу. Для того чтобы программа выполняла алгоритм без ошибок, требуется выучить как служебные слова, так и синтаксис, поскольку машина умеет «понимать» команды только в том случае, если они написаны единственно верным способом.



Эта статья также доступна на следующих языках: Тайский

  • Next

    Огромное Вам СПАСИБО за очень полезную информацию в статье. Очень понятно все изложено. Чувствуется, что проделана большая работа по анализу работы магазина eBay

    • Спасибо вам и другим постоянным читателям моего блога. Без вас у меня не было бы достаточной мотивации, чтобы посвящать много времени ведению этого сайта. У меня мозги так устроены: люблю копнуть вглубь, систематизировать разрозненные данные, пробовать то, что раньше до меня никто не делал, либо не смотрел под таким углом зрения. Жаль, что только нашим соотечественникам из-за кризиса в России отнюдь не до шоппинга на eBay. Покупают на Алиэкспрессе из Китая, так как там в разы дешевле товары (часто в ущерб качеству). Но онлайн-аукционы eBay, Amazon, ETSY легко дадут китайцам фору по ассортименту брендовых вещей, винтажных вещей, ручной работы и разных этнических товаров.

      • Next

        В ваших статьях ценно именно ваше личное отношение и анализ темы. Вы этот блог не бросайте, я сюда часто заглядываю. Нас таких много должно быть. Мне на эл. почту пришло недавно предложение о том, что научат торговать на Амазоне и eBay. И я вспомнила про ваши подробные статьи об этих торг. площ. Перечитала все заново и сделала вывод, что курсы- это лохотрон. Сама на eBay еще ничего не покупала. Я не из России , а из Казахстана (г. Алматы). Но нам тоже лишних трат пока не надо. Желаю вам удачи и берегите себя в азиатских краях.

  • Еще приятно, что попытки eBay по руссификации интерфейса для пользователей из России и стран СНГ, начали приносить плоды. Ведь подавляющая часть граждан стран бывшего СССР не сильна познаниями иностранных языков. Английский язык знают не более 5% населения. Среди молодежи — побольше. Поэтому хотя бы интерфейс на русском языке — это большая помощь для онлайн-шоппинга на этой торговой площадке. Ебей не пошел по пути китайского собрата Алиэкспресс, где совершается машинный (очень корявый и непонятный, местами вызывающий смех) перевод описания товаров. Надеюсь, что на более продвинутом этапе развития искусственного интеллекта станет реальностью качественный машинный перевод с любого языка на любой за считанные доли секунды. Пока имеем вот что (профиль одного из продавцов на ебей с русским интерфейсом, но англоязычным описанием):
    https://uploads.disquscdn.com/images/7a52c9a89108b922159a4fad35de0ab0bee0c8804b9731f56d8a1dc659655d60.png