Аннотация: Типы данных языка Pascal: классификация и описания. Арифметические и порядковые типы данных, действия с ними. Арифметические выражения: функции, операции и порядок действий. Совместимость и преобразования типов данных.
Типы данных языка Pascal
Компиляторы языка Pascal требуют, чтобы сведения об объеме памяти, необходимой для работы программы, были предоставлены до начала ее работы. Для этого в разделе описания переменных ( var ) нужно перечислить все переменные, используемые в программе. Кроме того, необходимо также сообщить компилятору, сколько памяти каждая из этих переменных будет занимать. А еще было бы неплохо заранее условиться о различных операциях, применимых к тем или иным переменным.
Все это можно сообщить программе, просто указав тип будущей переменной. Имея информацию о типе переменной , компилятор «понимает», сколько байт необходимо отвести под нее, какие действия с ней можно производить и в каких конструкциях она может участвовать.
Pascal. Типы данных
Для удобства программистов в языке Pascal существует множество стандартных типов данных и плюс к тому возможность создавать новые типы.
Конструируя новые типы данных на основе уже имеющихся (стандартных или опять-таки определенных самим программистом), нужно помнить, что любое здание должно строиться на хорошем фундаменте. Поэтому сейчас мы и поговорим об этом «фундаменте».
На основании базовых типов данных строятся все остальные типы языка Pascal , которые так и называются: конструируемые .
Разделение на базовые и конструируемые типы данных в языке Pascal показано в таблице:
boolean
char
shortint byte integer word longint
real single double extended comp
pointer
week = (su, mo, tu, we, th, fr,sa);
budni = mo..fr;
text file
Типы данных, конструируемые программистом, описываются в разделе type по следующему шаблону:
type = ;
type lat_bukvy = ‘a’..’z’,’A’..’Z’;
Базовые типы данных являются стандартными, поэтому нет нужды описывать их в разделе type . Однако при желании это тоже можно сделать, например, дав длинным определениям короткие имена. Скажем, введя новый тип данных
type int = integer;
можно немного сократить текст программы.
Стандартные конструируемые типы также можно не описывать в разделе type . Однако в некоторых случаях это все равно приходится делать из-за требований синтаксиса. Например, в списке параметров процедур или функций конструкторы типов использовать нельзя (см. лекцию 8).
Порядковые типы данных
Среди базовых типов данных особо выделяются порядковые типы . Такое название можно обосновать двояко:
- Каждому элементу порядкового типа может быть сопоставлен уникальный (порядковый) номер. Нумерация значений начинается с нуля. Исключение — типы данных shortint , integer и longint . Их нумерация совпадает со значениями элементов.
- Кроме того, на элементах любого порядкового типа определен порядок (в математическом смысле этого слова), который напрямую зависит от нумерации. Таким образом, для любых двух элементов порядкового типа можно точно сказать, который из них меньше, а который — больше 2 Математический порядок определен и на вещественных числах . Однако в программировании вещественные типы данных противопоставлены порядковым: возможность нумерации доминирует над возможностью упорядочивания. .
Стандартные подпрограммы, обрабатывающие порядковые типы данных
Только для величин порядковых типов определены следующие функции и процедуры:
Паскаль с нуля [ч2]. Переменные и типы данных
- Функция ord(x) возвращает порядковый номер значения переменной x (относительно того типа, к которому принадлежит переменная х).
- Функция pred(x) возвращает значение, предшествующее х (к первому элементу типа неприменима).
- Функция succ(x) возвращает значение, следующее за х (к последнему элементу типа неприменима).
- Процедура inc(x) возвращает значение, следующее за х (для арифметических типов данных это эквивалентно оператору x:=x+1).
- Процедура inc(x,k) возвращает k-е значение, следующее за х (для арифметических типов данных это эквивалентно оператору x:=x+k).
- Процедура dec (x) возвращает значение, предшествующее х (для арифметических типов данных это эквивалентно оператору x:=x-1).
- Процедура dec (x,k) возвращает k-e значение, предшествующее х (для арифметических типов данных это эквивалентно оператору x:=x-k).
На первый взгляд кажется, будто результат применения процедуры inc(x) полностью совпадает с результатом применения функции succ(x) . Однако разница между ними проявляется на границах допустимого диапазона. Функция succ(x) неприменима к максимальному элементу типа, а вот процедура inc(x) не выдаст никакой ошибки, но, действуя по правилам машинного сложения, прибавит очередную единицу к номеру элемента. Номер, конечно же, выйдет за пределы диапазона и за счет усечения превратится в номер минимального значения диапазона. Получается, что процедуры inc() и dec () воспринимают любой порядковый тип словно бы «замкнутым в кольцо»: сразу после последнего вновь идет первое значение.
Поясним все сказанное на примере. Для типа данных
type sixteen = 0..15;
попытка прибавить 1 к числу 15 приведет к следующему результату:
+ 1 1 1 1 1 1 0 0 0 0
Начальная единица будет отсечена, и потому получится, что inc(15)=0 .
Аналогичная ситуация на нижней границе допустимого диапазона произвольного порядкового типа данных наблюдается для процедуры dec (x) и функции pred(x) :
dec(min_element)= max_element
Типы данных, относящиеся к порядковым
Опишем теперь порядковые типы данных более подробно.
- Логический тип boolean имеет два значения: false и true , и для них выполняются следующие равенства:
ord(false)=0, ord(true)=1, false
shortint byte integer word longint
1 1 2 2 4
8 8 16 16 32
-128..127 0..255 -32768..32767 0..65535 -2147483648..2147483647
-27..27-1 0..28-1 -215..215-1 0..216-1 -231..231-1
type week =(sun,mon,tue,wed,thu,fri,sat) 0 1 2 3 4 5 6
Напомним, что для этого типа данных:
inc(sat) = sun, dec(sun) = sat.
type month = 1..12; budni = mon..fri;
type valid_for_identifiers = ‘a’..’z’,’A’..’Z’,’_’,’0′..’9′;
Этот тип состоит из объединения нескольких интервалов, причем в данном случае изменен порядок латинских букв: если в стандартном типе char ‘A’ < ‘a’ , то здесь, наоборот, ‘a’ < ‘A’ . Для величин этого типа выполняются следующие равенства:
inc(‘z’)=’A’; dec(‘0′)=’_’, pred(‘9′)=’8’; ord(‘b’)= 2.
Вещественные типы данных
Напомним, что эти типы данных являются арифметическими, но не порядковыми.
single real double extended comp
4 6 8 10 8
1.5*10-45..3.4*1038 2.9*10-39..1.7*1038 5.0*10-324..1.7*10308 3.4*10-4932..1.1*104932 -263+1..263-1
Конструируемые типы данных
Эти типы данных (вместе с определенными для них операциями) мы будем рассматривать далее на протяжении нескольких лекций:
Лекция 3. Массивы
Лекция 5. Строки и множества
Лекции 6 и 7. Файлы
Лекция 7. Записи
Лекция 8. Процедурный тип данных
Лекция 10. Указатели
Источник: intuit.ru
Типы данных в Паскале
Любая программа, написанная на любом языке программирования, по большому счету предназначена для обработки данных. В качестве данных могут выступать числа, тексты, графика, звук и др. Одни данные являются исходными, другие – результатом, который получается путем обработки исходных данных программой.
Данные хранятся в памяти компьютера. Программа обращается к ним с помощью имен переменных, связанных с участками памяти, где хранятся данные.
Переменные описываются до основного кода программы. Здесь указываются имена переменных и тип хранимых в них данных.
В языке программирования Паскаль достаточно много типов данных. Кроме того, сам пользователь может определять свои типы.
Тип переменной определяет, какие данные можно хранить в связанной с ней ячейке памяти.
Переменные типа integer могут быть связаны только с целыми значениями обычно в диапазоне от -32768 до 32767. В Pascal есть другие целочисленные типы ( byte , longint ).
Переменные типа real хранят вещественные (дробные) числа.
Переменная булевского (логического) типа ( boolean ) может принимать только два значения — true (1, правда) или false (0, ложь).
Символьный тип ( char ) может принимать значения из определенной упорядоченной последовательности символов.
Интервальный тип определяется пользователем и формируется только из порядковых типов. Представляет собой подмножество значений в конкретном диапазоне.
Можно создать собственный тип данных простым перечислением значений, которые может принимать переменная данного типа. Это так называемый перечисляемый тип данных.
Все вышеописанное – это простые типы данных. Но бывают и сложные, структурированные, которые базируются на простых типах.
Массив – это структура, занимающая в памяти единую область и состоящая из фиксированного числа компонентов одного типа.
Строки представляет собой последовательность символов. Причем количество этих символов не может быть больше 255 включительно. Такое ограничение является характерной чертой Pascal.
Запись – это структура, состоящая из фиксированного числа компонент, называемых полями. В разных полях записи данные могут иметь разный тип.
Множества представляют собой совокупность любого числа элементов, но одного и того же перечисляемого типа.
Файлы для Pascal представляют собой последовательности однотипных данных, которые хранятся на устройствах внешней памяти (например, жестком диске).
Понятие такого типа данных как указатель связано с динамическим хранением данных в памяти компьютера. Часто использование динамических типов данных является более эффективным в программировании, чем статических.
Явное преобразование типов
В ряде случаев в Pascal происходит автоматический переход от одного типа данных к другому (от целого к действительному, от символьного к строковому и т.д.). Существует также ряд функций, осуществляющих преобразование типов ( ord , chr , trunc , round ). Наряду с этим в Паскаль возможно явное преобразование типов (ретипизация данных). Для того, чтобы осуществить явное преобразование типа, необходимо использовать имя типа аналогично тому, как используется имя функции. В качестве параметра в этом случае указывается имя преобразуемой переменной.
Преобразовать можно любой тип к любому другому, однако следует выполнять требование: в операторе присваивания переменная слева должна занимать в памяти столько же или больше байт, сколько занимает преобразуемое значение.
Пример задачи, где используется явное преобразование типов
Вычислить значение функции sign(x) = 1 при x > 0; 0 при x = 0; -1 при x < 0.
var x: real; sign: integer; begin readln(x); sign := byte(x > 0) — byte(x < 0); writeln(sign); end.
В программе при положительном значении x выражение x > 0 принимает значение true , а выражение x < 0 — false. В результате получается, что byte(x >0) = 1 , byte(x < 0) = 0 , а sign = 1 . При отрицательном значении x byte(x >0) = 0 , byte(x < 0) = 1 , sign = -1 . При нулевом значении x sign = 0 .
Источник: pas1.ru
Типы данных в программе паскаль
Типы, используемые в программе, написанной на в Паскале, делятся на стандартные и пользовательские. Первые «известны Паскалю» изначально. Они являются частью языка. Поэтому их иногда называют предопредедёнными.
Вторые, пользовательские типы, описаны (определены) в программе, либо в одном из подключённых модулей, даже если этот модуль входит в состав системной библиотеки. Фактически, они являются расширением языка.
С другой стороны, в Паскале, как и во многих других языках программирования, выделяют простые и составные типы данных.
Простые типы данных иначе называют скалярными. Данные таких типов не могут быть разбиты на части. К ним традиционно относятся группы порядковых, действительных и, несколько условно, – укозательных типов. Обратите внимание, что для действительного типа мы можем вычислить целую и дробную части, а целого типа определить знак, но мы их именно вычисляем, а не «берём готовенькими».
Составные типы данных
Порядковые типы
Целочисленные типы
Byte | 1 | 0 .. 255 |
Shortint | 1 | -128 .. 127 |
Smallint | 2 | -32 768 .. 32 767 |
Word | 2 | 0 .. 65 535 |
Integer | 2 или 4 | как у smallint или longint |
Cardinal | 4 | Longword |
Longint | 4 | -2 147 483 648 .. 2 147 483 647 |
Longword | 4 | 0 .. 4 294 967 295 |
Int64 | 8 | -9 223 372 036 854 775 808 .. 9 223 372 036 854 775 807 |
QWord | 8 | 0 .. 18 446 744 073 709 551 615 |
Типы Cardinal , Longword , Smallint , Int64 , QWord используются во Free Pascal, но в Borland (Turbo) Pascal не используются. Могут отсутствовать и в других версиях языка Pascal, таких, как Pascal ABC.
Целочисленные типы делятся по размеру занимаемой памяти, а также — по возможности или невозможности сохранять отрицательные значения. Первые называются знаковыми, вторые — беззнаковыми.
Логический ( boolean — булевский) тип
Boolean | 1 | False или True |
По техническим причинам могут существовать другие логические типы, отличающиеся своим размером от стандартного boolean , но нас они не интересуют.
Символьный тип (Char)
Стандартный для языка Pascal символьный тип имеет 256 значений. Переменные этого типа занимают один байт.
Char | 1 | #0 .. #255 (Множество выводимых символов и соответствующие им номера зависят от кодировки) |
Вещественные типы (типы с плавающей запятой)
Эти типы используются для работы с дробными или с очень большими значениями. Обратите внимание, значения этих типов всегда рассматриваются как приближённые значения.
Real | 4 или 8 | Зависит от платформы | . |
Single | 4 | 1.5e-45 .. 3.4e38 | 7-8 |
Double | 8 | 5.0e-324 .. 1.7e308 | 15-16 |
Extended | 10 | 1.9e-4932 .. 1.1e4932 | 19-20 |
Comp | 8 | -2e64+1 .. 2e63-1 | 19-20 |
Currency | 8 | -922 337 203 685 477.5808 .. 922 337 203 685 477.5807 | 4 |
Тип Currency используются во Free Pascal, но в Borland (Turbo) Pascal не используется. Может отсутствовать и в других версиях языка Pascal, таких, как Pascal ABC.
Тип Comp предназначен для хранения больших целых чисел со знаком, но использовать переменные данного типа вместо integer , например — в качестве счётчика в цикле for , нельзя. Он относится к группе real -подобных типов.
Источник: wiki.nsunc.com