Какой тип данных не используется в языке программирования паскаль
Перейти к содержимому

Какой тип данных не используется в языке программирования паскаль

  • автор:

Типы данных в Паскале

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

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

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

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

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

Переменные типа 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 .

Какой тип данных не используется в языке программирования паскаль

Теперь применим полученные знания о представлении текстовой информации на практике. В языке программирования Паскаль для работы с текстовой информацией есть специальный символьный тип переменных, который называется char (от английского character). Переменные этого типа занимают в оперативной памяти по `1` байту и, соответственно, могут принимать `256` различных значений. Значениями переменных этого типа являются элементы какой-либо однобайтовой кодовой таблицы (например, KOI-`8` или Windows-`1251`). Какие именно символы являются значениями данного типа, зависит от того, какая кодовая таблица используется в момент выполнения (а не написания) программы. То есть одна и та же программа, например, печатающая изображение всех символов кодовой таблицы, на компьютерах с различными текущими кодировками будет иметь различные результаты работы.

Переменным символьного типа можно присваивать значения при помощи оператора присваивания. При этом есть два способа записи символьных констант. Первый способ – записать явное изображение символа, заключив его в апострофы. Пусть, например, переменная C имеет тип char. Присвоим ей значение: C:= 'a'; Описанный способ записи символьных значений удобно применять практически всегда. Единственный недостаток этого способа заключается в том, что так невозможно представить служебные символы, которые не имеют явных изображений (в кодовой таблице это первые `32` символа). Поэтому существует ещё один способ записи символьных констант – сначала указать спецсимвол решётку ( # ), а потом код интересующего нас символа. Например, C:=#13; Недостаток этого способа заключается в том, что нужно помнить коды всех символов, поэтому обычно его применяют только для записи символов без явного изображения.

Переменные типа char можно выводить на экран при помощи оператора вывода и вводить с клавиатуры. Апострофы при вводе набирать не нужно (каждый апостроф также будет считаться отдельным символом). Служебные символы вводятся следующим образом: нужно зажать alt и на правой цифровой клавиатуре набрать код символа (например, 13).

К переменным типа char можно применять операции сравнения ( > , < , >= , ). При этом сравниваются коды символов и большим признаётся символ, имеющий больший код (то есть символ, находящийся дальше от нулевого). Результатом операции сравнения является логическое значение – true или false .

Существует `5` стандартных функций для работы с переменными символьного типа:

Функция

Действие

Тип

аргумента

Какой тип данных не используется в языке программирования паскаль

Структура рассмотренной программы имеет следующий вид:

Слова Program, begin и end выделяют две части программы - раздел описаний и раздел операторов. Такая структура обязательна для любой программы, что является следствием жесткого требования языка: любой нестандартный идентификатор, используемый в исполняемых операторах, должен быть предварительно описан в разделе описаний. (Стандартные идентификаторы связаны с предварительно объявленными объектами и входят в стандартную библиотеку Турбо Паскаля. Таким, например, является идентификатор WriteLn. Стандартные идентификаторы, если они используются в программе, описывать не нужно).

Требование предварительного описания идентификаторов кажется чрезмерно строгим и делающим язык менее свободным. На самом деле в нем проявляется тенденция развития языков программирования в сторону повышения надежности создаваемых программ. Кто программировал на Фортране или Бэйсике (в этих языках не требуется предварительное описание идентификаторов), знает, как порой бывает трудно обнаружить в большой программе ошибочно введенный или пропущенный символ в идентификаторе. Если, например, всюду в программе используется переменная с именем EPSILON, а в одном месте ошибочно написано EPSLION, то программа может благополучно откомпилироваться и даже давать почти правдоподобный результат для некоторых наборов данных, но в какой-то момент начнет вести себя странно. Обязательное предварительное описание идентификаторов в Турбо Паскале защищает программы от такого рода ошибок и повышает их надежность.

Описать идентификатор - это значит указать тип связанного с ним объекта программы (константы или переменной). Понятие типа - одно из фундаментальных понятий Турбо Паскаля. В гл.4 подробно рассмотрены различные типы; чтобы пояснить описываемые ниже особенности языка и при этом не слишком забегать вперед, укажем, что тип определяет, во-первых, способ внутреннего для компьютера представления объекта и, во-вторых, действия, которые разрешается над ним выполнять.

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

  • INTEGER - целочисленные данные, во внутреннем представлении занимают 2 байта; диапазон возможных значений - от -32768 до +32767; данные представляются точно;
  • REAL - вещественные данные, занимают 6 байт; диапазон возможных значений модуля - от 2.9Е-39 до 1.7Е+38; точность представления данных - 11. 12 значащих цифр;
  • CHAR - символ, занимает 1 байт;
  • STRING - строка символов, занимает МАХ+1 байт, где МАХ - максимальное число символов в строке;
  • BOOLEAN - логический тип, занимает 1 байт и имеет два значения: FALSE (ложь) и TRUE (истина).

При анализе этого фрагмента программы компилятор отнесет первую константу к типу INTEGER, вторую - к типу REAL, третью - к CHAR, четвертую - к STRING и последнюю - к BOOLEAN. Признаком, позволяющим отнести константу к REAL или к INTEGER, является наличие или отсутствие десятичной точки в ее значении. Разумеется, константы С2 и С4 относятся к разным типам: С2 - к REAL (в константе есть десятичная точка), а С4 - к STRING (константа обрамлена апострофами). Константу СЗ компилятор будет считать относящейся к типу CHAR: одиночный символ в апострофах относится к CHAR, в то время как несколько символов - к STRING.

В отличие от константы переменная именует объект программы, который может изменять свое значение в ходе счета. При описании переменных за идентификатором ставятся двоеточие и имя типа. Несколько однотипных переменных можно объединять в список, разделяя их запятыми. В начале раздела описания переменных должно стоять зарезервированное слово VAR (VARiables - переменные). Например:

sigma :Real; а,b,с,d :Char;

Как уже говорилось, тип данных определяет длину внутреннего представления соответствующих переменных. В частности, длина внутреннего представления переменных типа STRING (строка символов) зависит от максимального числа символов, которые могут составлять строку. В приведенном выше примере переменная text l описана с указанием ее максимальной длины (15 символов), а в описании переменной text2 максимальная длина не указана и компилятор установит для нее предельно допустимую в Турбо Паскале длину - 255 символов.

Рассмотрим еще одну несложную программу (пример 1.2). Ее назначение: ввести с клавиатуры два целых числа, найти результат деления первого числа на второе и вывести полученный результат на экран.

и выводит частное от деления 1-го на 2-е>

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

(* Это - тоже комментарий *)

Редактор Турбо Паскаля выделяет комментарии наклонным шрифтам (курсивом).

Комментарии с однотипными ограничителями нельзя вкладывать друг в друга, т.е. недопустимы последовательности вида

Однако можно вкладывать комментарии с ограничителями разных типов (не более одной глубины вложения):

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

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

работают следующим образом. Вначале оператор Write выводит строку на экран и оставляет курсор в конце только что выведенной строки текста. Заметим, что оператор

в примере 1 после вывода текста осуществлял перевод строки и устанавливал курсор в начало следующей строки экрана. Именно в этом простом действии (переводе строки) заключается единственное отличие в работе процедуры WriteLn от процедуры

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

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

Оператор присваивания используется практически во всех языках программирования. В некоторых языках, например в Фортране или Бейсике, символом присваивания является знак равенства, однако новичка, привыкшего к строгости математических формул, может озадачить типичная форма записи фортран-оператора присваивания, например, такая:

Вариант записи этого же оператора на Турбо Паскале:,

в этом смысле кажется более логичным. Разумеется, вряд ли кому-нибудь придет в голову видеть уравнения там, где их нет и не может быть. Конечно же, и в том, и в другом случае реализуется одно и то же алгоритмическое действие: к содержимому X прибавляется 1 и полученный результат вновь присваивается переменной X. Обратите внимание на оператор вывода результатов

В нем в качестве одного из параметров явно указывается константа типа строка символов 'nl/n2 = '. Конечно же, константы (в отличие от переменных) вовсе не обязательно описывать в разделе описаний, так как их тип легко определяется компилятором по форме записи константы. С учетом этого можно было бы записать программу из примера 1 предельно лаконично:

begin WriteLn('Я программирую на Турбо Паскале'); end.

Какой тип данных не используется в языке программирования паскаль

Горбачев Л.И. Основы программирования в среде Turbo Pascal.

Типы данных.

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

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

Например, значения переменной, равные 1 или 10 относятся к целочисленному типу, их можно складывать, умножать и выполнять другие арифметические операции. В языке Паскаль для описания типа в общем случае используется зарезервированное слово Type.

Формат: type имя_типа = значение_типа;

Все типы данных разделяются на две группы: скалярные (простые) и структурированные (составные). Скалярные типы в свою очередь подразделяются на стандартные и пользовательские. Стандартные типы данных предлагаются пользователям разработчиками системы Turbo Pascal.

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

Данные целочисленных типов могут быть представлены как в десятичной, так и в шестнадцатеричной системах. Если число представлено в шестнадцатеричной системе, перед ним без пробела записывается знак "$". Диапазон изменений шестнадцатеричных чисел от $0000 до $FFFF.

В десятичной системе числа с фиксированной точкой записываются по обычным правилам арифметики. Целая часть от дробной отделяется десятичной точкой. Если десятичная точка отсутствует, число считается целым. Перед числом может находиться знак "+" или "-". Если знак отсутствует, по умолчанию число считается положительным.

Например, $1F - шестнадцатеричное число; 25 - целое десятичное число; -1.9 - отрицательное вещественное число; 13.1 - вещественное число;

Вещественные десятичные числа в форме с плавающей точкой представлены в экспоненциальном виде: mE+p, где m - мантисса (целое или дробное число с десятичной точкой), "E" - означает "десять в степени", p - порядок (целое число).

Пример: 5.18E+02 - 5.18 * 10^2 = 518
10E-03 = 10 * 10^-3 = 0.01

Пользовательские типы - перечисляемый и интервальный - разрабатываются самим программистом.

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

Набор основных типов переменных Турбо-Паскаля можно представить в виде следующей схемы:

5.1. Скалярные типы данных.

5.1.1. Целочисленный тип.

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

Тип Наименование Допустимые значения Занимаемая память
shortint короткое целое -128..127 1 байт
byte байт 0..255 1 байт
integer целое -32768..32767 2 байта
word слово 0..65535 2 байта
longint длинное целое -2*10^9..2*10^9 4 байта


Пример: var X1, X2 : byte;
Y1 : word;
K, L : integer;

5.1.2. Вещественный тип.

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

Тип Наименование Допустимые значения Число значащих цифр Занимаемая память
real вещественный 10^-38-10^38 11-12 6 байт
single с одинарной точностью 10^-38-10^38 7-8 4 байта
double с двойной точностью 10^-308-10^308 15-16 8 байт
extended с повышенной точностью 10^-4931-10^4931 19-20 10 байт
comp сложный(длиное целое) -9*10^18-9*10^18 19-20 8 байт

Эффективное использование типом single, double, extended, comp возможно только при наличии сопроцессора 8087 при включенной директиве компилятора . По умолчанию она находится в выключенном состоянии - .
Пример: var Summa : single;
Root1, Root2 : double;

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

Символьный тип данных char обозначает множество символов кода ASCII (американский стандартный код для обмена информацией). Один символ требует для своего представления 8 бит = 1 байту. Символы пронумерованы от 0 до 127 в основной кодовой таблице и с 128 по 255 - в расширенной.

Тип Диапазон Требуемая память
Char Кодовая таблица ПЭВМ 1 байт


Пример: var Ch : char;
Let, Znak : char;

В программе значения переменных и констант типа char должны быть заключены в апострофы. Например, 'A' означает букву A, ' ' - пробел, ';' - точку с запятой и т.д.

Для типа данных char существуют следующие стандартные функции:

Функция Тип результата Результат выполнения функции
Ord(X) integer Номер ASCII - символа X
Chr(N) char ASCII - символ с номером
UpCase(X) char Прописная буква X, если она есть

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

Булевский тип представлен двумя значениями: True (истина) и False (ложь). Он широко применяется в логических выражениях и выражениях отношения.

Тип Диапазон Требуемая память
boolean True, False 1 байт


Пример: var Flag1, Flag2 : boolean;

5.2. Пользовательские типы.

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

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

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

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

Переменная типа "перечисление" задается перечислением значений, которые она может принимать. Описание этих переменных имеет вид:
1) type имя_типа = (список_значений);
var имя_переменной = имя_типа;
или
2) var имя_переменной: (список_значений);

Пример: type God = (Zima, Vesna, Leto, Osen); var A1, A2: God;
или
var A1, A2: (Zima, Vesna, Leto, Osen);

Здесь A1, A2 - переменные типа "перечисление", которые могут принимать любые из заданных значений. Описание типа перечисляемой переменной одновременно упорядочивает ее значения. Для данного примера Zima < Vesna < Leto < Osen (в операциях сравнения).
Пример: type Gaz = (C, O, N, F);
Metall = (Fe, Co, Na, Cu, Zn);
var G1, G2, G3 : Gaz;
Met1, Met2 : Metall;
Season : (Winter, Spring, Summer, Autumn);

В данном примере приведены два явно описанных типа данных пользователя - Gaz и Metall. Определены их значения - обозначения некоторых газов и металлов периодической таблицы Д.И.Менделеева. Переменные G1, G2, G3 и Met1, Met2 могут принимать только одно из перечисленных значений. Попытка присвоить им любое другое значение вызовет программное прерывание.

Третий тип перечисления анонимный ( не имеет имени) и задается перечислением значений в разделе Var. Season является переменной этого типа и может принимать значения Winter, Spring, Summer и Autumn. Таким образом может быть задан любой тип, но это не всегда приемлемо, так как первый способ более понятен и больше соответствует характеру языка Паскаль.
Пример: Для разработки программы управления уличным светофором можно использовать описание света, которое принимает три значения: красный, желтый и зеленый. Это можно описать так:
type Lights = (Red, Yellow, Green);
var Color: Lights;

Имена из списка перечисляемого типа (внутри круглых скобок) являются константами соответствующего типа перечисления и соответствуют обычным правилам для констант. Эти идентификаторы должны быть уникальны в пределах блока; недопустимы описания двух и более перечислимых типов с совпадающими константами. Например, описания вида:
type Color1 = (Red, Yellow, Blue);
Color2 = (Green, Blue, Gray);
являются некорректными из-за повторного использования идентификатора Blue.

Выражения и константы перечисляемого типа допустимы для использования в операторе CASE. Операция отношения и логические операции допустимы для значений перечисления одного и того же типа. Упорядочение осуществляется по номеру элемента в описании типа.

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

Для работы с данными перечисляемого типа в языке Паскаль предназначены стандартные функции Succ, Pred, Ord.

Функция Тип результата Результат выполнения функции
Succ(X) порядковый тип X следующий за X в описании типа (если таковой существует)
Pred(X) порядковый тип X предшествующий X в описании типа (если таковой существует)
Ord(X) integer номер X в описании типа (начиная с 0

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

Интервальный тип позволяет задавать две константы, определяющие границы диапазона значений для данной переменной. Компилятор при каждой операции с переменной интервального типа генерирует подпрограммы проверки, определяющие, остается ли значение переменной внутри установленного для нее диапазона. Обе константы должны принадлежать одному из стандартных типов (напомним, что тип real здесь недопустим). Значение первой константы должно быть обязательно меньше значения второй.

Для переменных ограниченного (диапазонного) типа указывается подмножество значений, которые они могут принимать. Описание этих переменных имеет вид:
1) type имя_типа = Min..Max;
var имя_переменной: имя_типа;
или
2) var имя_переменной: Min..Max;

Здесь Min, Max - константы, определяющие левую и правую границы значений, которые может принимать ограниченная переменная. Эти константы могут быть целого, символьного или перечисляемого типа, например: type God: (Zima, Vesna, Leto, Osen); A1 = Vesna..Osen; L1 = 1..80; var X: A1; Y: L1;

В самой программе (в разделе операторов) используются имена переменных (X, Y), а не имена типов (A1, L1). В данном случае тип God, из которого был "вырезан" тип A1, является базовым относительно типа A1. В качестве базового типа можно использовать любой простой тип, кроме REAL.
Пример: type DayMonth = 1 .. 31;
var WorkDay, BolnDay : DayMonth;

В этом примере переменные WorkDay, BolnDay имеют тип DayMonth и могут принимать любые значения из диапазона 1..31. Выход из диапазона вызывает программное прерывание.

Можно определить интервальный тип и более универсальным способом, задав границы диапазона не значениями констант, а их именами, например:
const Min := 1;
Max := 31;
Type DayMonth = Min .. Max;
var WorkDay, BolnDay : DayMonth;

5.3. Структурированные типы данных.

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

Главная Новости TurboPascal Учебное пособие Лекции Исходники Математика Книги Лекции Шпоры ЦТ и ЕГЭ Физика

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *