Что такое type в паскале
Урок 11. Типы в PascalABC.NET. Создание своего типа
Приветствуем тебя, юный (или не очень юный) читатель нашего сайта! Сегодня мы с вами поговорим про типы в PascalABC.NET: числовые, символьные и логические. Они немного отличаются от стандартных типов Turbo Pascal.
Давайте вспомним какими могут быть величины? Об этом говорилось в отдельной статье. Сейчас мы быстренько все впомним. Любая величина может быть трех типов: числовой, символьной и логическй. Раньше мы использовали всего несколько типов (integer, real, boolean ), но пришло время расширить знания.
Все типы я буду оформлять в удобную табличку, хотя некоторые моменты буду пояснять. Таблица будет иметь три столбца: тип, размер в байтах, дапозон значений.
Принято разделять числовые типы на две большие подгруппы: целые и вещественные.
Целые типы
Тип | Размер в байтах | Диапазон значений |
shortint | 1 | -128..127 |
smallint | 2 | -32768..32767 |
integer, longint | 4 | -2147483648..2147483647 |
int64 | 8 | -9223372036854775808..9223372036854775807 |
byte | 1 | 0..250 |
word | 2 | 0..65535 |
longword, cardinal | 4 | 0..4294967295 |
uint64 | 8 | 0..18446744073709551615 |
Вещественные типы
Для удобства в Паскале заведены специальные константы, которые возвращают на свое место минимальное или максимальное значение разных типов. Ниже вы можете посмотреть таблицу, в которую занесены все константы.
Константа(1) | Константа(2) | Значение |
MaxShortInt | shortint.MaxValue | Максимальное значение типа shortint |
MaxByte | byte.MaxValue | Максимальное значение типа byte |
MaxSmallInt | smallint.MaxValue | Максимальное значение типа smallint |
MaxWord | word.MaxValue | Максимальное значение типа word |
MaxInt | integer.MaxValue | Максимальное значение типа integer |
MaxLongWord | longword.MaxValue | Максимальное значение типа longword |
MaxInt64 | int64.MaxValue | Максимальное значение типа int64 |
MaxUint64 | uint64.MaxValue | Максимальное значение типа uint64 |
MaxDouble | double.MaxValue | Максимальное значение типа double |
MinDouble | real.Epsilon | Минимальное значение типа double |
MaxReal | real.MaxValue | Максимальное значение типа real |
MinReal | real.Epsilon | Минимальное значение типа real |
MaxSingle | single.MaxValue | Максимальное значение типа single |
MinSingle | single.Epsilon | Минимальное значение типа single |
Логический тип
В PascalABC.NET только один логический тип — boolean. Про него была написана целая статья. Тип Boolean принимает значение true или false, и его размер — 1 байт.
Символьный тип и строки
Символьный тип
Символьный тип char занимает 2 байта и хранит Unicode-символ.
Чтобы не писать отдельную статью про символьный тип, вкратце расскажу про него здесь. В PascalABC.NET помимо стандартных функций chr и ord, добавлены новые функции — ChrUnicode и OrdUnicode.
Chr(n) — функция, возвращающая символ с кодом n в кодировке Windows;
Ord(с) — функция, возвращающая значение типа byte, представляющее собой код символа c в кодировке Windows.
ChrUnicode(w) — возвращает символ с кодом w в кодировке Unicode;
OrdUnicode(с) — возвращает значение типа word, представляющее собой код символа c в кодировке Unicode.
Давайте поэкспериментируем, составим вот такую небольшую программку.
Этой программой я хочу проверить накладываются ли друг на друга кодировка Windows и Unicode. Ниже, на скриншоте вы можете посмотреть результат работы программы.
Накладываются. Просто Unicode длиннее, чем кодировка Windows.
Строковой тип
Строки имеют тип string, состоят из набора последовательно расположенных символов char и используются для представления текста.
Строки могут иметь произвольную длину. Строки изменяемы.
Наверное, сейчас вы сомневаетесь в том, что в PascalABC.NET строки могут быть произвольной длины. Давайте проверим это с помощью небольшой программы.
Кроме того, в PascalABC.NET реализованы размерные строки. Для их описания используется тип string[n], где n — константа целого типа, указывающая длину строки.
Перечислимый и диапазонный типы
Перечислимый тип
Перечислимый тип определяется упорядоченным набором идентификаторов. Чтобы объявить новый тип, используется специальное слово — type. Его необходимо ставить перед var.
Значения перечислимого типа занимают 4 байта. Каждое значение value представляет собой константу типа typeName, попадающую в текущее пространство имен.
К константе перечислимого типа можно обращаться непосредственно по имени, а можно использовать запись typeName.value, в которой имя константы уточняется именем перечислимого типа, к которому она принадлежит:
Для значений перечислимого типа можно использовать функции Ord, Pred и Succ, а также процедуры Inc и Dec (Подробнее про эти функции и процедуры). Функция Ord возвращает порядковый номер значения в списке констант соответствующего перечислимого типа, нумерация при этом начинается с нуля.
Результат работы программы
Диапазонный тип
Диапазонный тип представляет собой подмножество значений целого, символьного или перечислимого типа и описывается в виде a..b, где a — нижняя, b — верхняя граница интервального типа, a Результат работы программы
Тип, на основе которого строится диапазонный тип, называется базовым для этого диапазонного типа. Значения диапазонного типа занимают в памяти столько же, сколько и значения соответствующего базового типа.
На сегодня все! Урок получился объемным, но, надеюсь, понятным. Если же у вас возникли вопросы, напишите нам.
Pascal: Занятие № 9. Типы данных пользователя Паскаль Type
Создание типов данных пользователя в Pascal
Типы данных в Pascal делятся на простые и сложные.
К простым типам относятся стандартные, перечисляемые и ограниченные.
К сложным типам – массивы, множества, записи, файлы. Элементами сложных типов могут быть простые и сложные типы. Мы познакомимся со сложными типами данных позже.
Одним из наиболее распространенных типов является порядковый стандартный тип.
Порядковый стандартный тип обозначает конечное линейное множество значений. К нему обычно относят целые типы, байтовые, символьные и логические.
Новые (пользовательские) типы данных нужны в первую очередь для наглядности и удобства:
const n = 10; m = 50; type matr = array [1..n, 1..m] of integer; var a : matr;
Но другой причиной является то, что в Паскале в определенных конструкциях разрешено записывать лишь имена типов, а не их определения.
Например, при описании процедур с параметрами считается неверным писать:
procedure p(a: array[1..10] of Integer);
Зато следует создать тип данных и записать так:
type vector = array[1..10] of integer; var procedure p(a: vector);
Примеры описания массивов при помощи новых типов
Три варианта описаний матрицы эквивалентны:
type vector = array[1..10] of integer; matritsa = array[1..8] of vector;
type matritsa = array[1..8] of array[1..10] of integer;
type matritsa = array[1..8,1..10] of integer;
В следующем примере переменные c и d описаны одинаково:
type vector = array[1..10] of integer; matritsa = array[1..8] of vector; var a,b: vector; c:matritsa; d:array[1..8] of vector;
Пример результата:
Перечисляемый тип и интервальный тип в Паскаль
Перечисляемый тип
В программе можно использовать переменные такого типа, который не совпадает ни с одним из стандартных типов.
Рассмотрим пример создания перечисляемого типа в Паскаль:
Интервальный тип определяет конкретное подмножество значений, которые может принимать данная переменная. Создается путем задания наименьшего и наибольшего значения порядкового типа. В качестве констант (минимального и максимального значений) могут использоваться значения любых простых типов кроме вещественных типов.
Рассмотрим пример объявления интервального типа:
Совместное использование перечисляемого и интервального типов
Переменную интервального типа можно задать с основой на базовый перечисляемый тип. Рассмотрим пример:
type color=(red,yellow,green,blue); var b:red..green; begin b:=red; writeln(b); b:=yellow; writeln(b); b:=green; writeln(b); readln end.
В данном примере тип color — является базовым. Переменная b интервального типа определена при помощи базового перечисляемого типа.
Один из вариантов решения данной задачи выглядит так:
Код данного решения обладает не самой лучшей наглядностью, к тому же приходится самому вычислять номера месяцев начала и конца лета (6 и 8).
Удобство и наглядность таких программ можно повысить следующим образом:
TYPE mes = (january, february, march, april, may, june, july, august, september, october, november, december); CONST dni:array[january..december] of Byte = (31,28,31,30,31,30,31,31,30,31,30,31); VAR s:Integer; i:mes; <переменная счетчика цикла i задана типом mes, а не Integer>BEGIN s:=0; for i:=june to august do s:=s+dni[i]; WriteLn(s) END.
Использование интервального типа в качестве диапазонного ограничителя
Следующий пример продемонстрирует неправильное решение данной задачи:
var otpravlenie,pribitie:byte; begin otpravlenie:=22; pribitie:=otpravlenie+10; writeln(pribitie) end.
программа вместо ответа «8» напечатает ответ «32».
Введение ограниченного диапазонного типа позволит избежать неправильного результата, однако компилятор все равно выдаст ошибку:
var otpravlenie,pribitie:0..24; begin otpravlenie:=22; pribitie:=otpravlenie+10; writeln(pribitie) end.
Зная об ошибке, теперь можно ее исправить.
type znak=(oven,lev,strelets,vesi,vodoley, bliznetsi,rak,skorpion,ribi,kozerog,telets,deva); var a:znak; begin a:=lev; if a =vesi) and (a =rak) and (a =kozerog) and (a
Pascal. Типы данных
Понятие данных является одним из ключевых в программировании, да и вообще в компьютерных науках. Грубо говоря, данные в информатике это информация, находящиеся в состоянии хранении, обработки или передачи, в какой-то отрезок времени. В машинах Тьюринга информация имеет тип, а он в свою очередь, зависит от рода информации.
Типы данных в Паскале определяют возможные значения переменных, констант, выражений и функций. Они бывают встроенными и пользовательскими. Встроенные типы изначально присутствуют в языке программирования, а пользовательские создаются программистом.
По способу представления и обработки типы данных бывают:
В этой статье будут рассмотрены лишь, наиболее простые типы данных, так как на начальных этапах обучения, вашей программе будет проще обойтись, например, без файлов и записей, чем без целочисленных или строковых переменных.
Целочисленный тип
Сюда входят несколько целочисленных типов, которые различаются диапазоном значений, количеством байт отведённых для их хранения и словом, с помощью которого объявляется тип.
Тип | Диапазон | Размер в байтах |
shortint | -128…127 | 1 |
integer | -32 768…32 767 | 2 |
longint | -2 147 483 648…2 147 483 647 | 4 |
byte | 0…255 | 1 |
word | 0…65 535 | 2 |
Объявить целочисленную переменную можно в разделе Var, например:
Над переменными этой категории можно выполнять все арифметические и логические операции за исключением деления (/), для него нужен вещественный тип. Также могут быть применены некоторые стандартные функции и процедуры.
Вещественный тип
В Паскале бывают следующие вещественные типы данных:
Тип | Диапазон | Память, байт | Количество цифр |
Real | 2.9e-39 … 1.7e38 | 6 | 11-12 |
Single | 1.5e-45 … 3.4e38 | 4 | 7-8 |
Double | 5.0e-324 …1.7e308 | 8 | 15-16 |
Extended | 3.4e-4932 … 1.1e493 | 10 | 19-20 |
Comp | -9.2e63 … (9.2e63)-1 | 8 | 19-20 |
Над ними может быть выполнено большее количество операций и функций, чем над целыми. Например, эти функции возвращают вещественный результат:
ln(x) – натуральный логарифм;
sqrt(x) – квадратный корень;
Логический тип
Переменная, имеющая логический тип данных может принимать всего два значения: true (истина) и false (ложь). Здесь истине соответствует значение 1, а ложь тождественная нулю. Объявить булеву переменную можно так:
Символьный тип
Символьный тип данных – это совокупность символов, используемых в том или ином компьютере. Переменная данного типа принимает значение одного из этих символов, занимает в памяти компьютера 1 байт. Слово Char определяет величину данного типа. Существует несколько способов записать символьную переменную (или константу):
К величинам символьного типа данных применимы операции отношения и следующие функции:
Succ(x) — возвращает следующий символ;
Pred(x) — возвращает предыдущий символ;
Ord(x) — возвращает значение кода символа;
Chr(x) — возвращает значение символа по его коду;
UpCase(x) — переводит литеры из интервала ‘a’..’z’ в верхний регистр.
Для плодотворной работы с символьным типом рекомендую пользоваться таблицей ASCII.
Строковый тип
Строка в Паскале представляет собой последовательность символов заключенных в апострофы, и обозначается словом String. Число символов (длина строки) должно не превышать 255. Если длину строки не указывать, то она автоматически определиться в 255 символов. Общий вид объявления строковой переменной выглядит так:
Каждый символ в строке имеет свой индекс (номер). Индекс первого байта – 0, но в нем храниться не первый символ, а длина всей строки, из чего следует, что переменная этого типа будет занимать на 1 байт больше числа переменных в ней. Номер первого символа – 1, например, если мы имеем строку S=‘stroka’, то S[1]=s;. В одном из следующих уроков строковый тип данных будет рассмотрен подробнее.
Перечисляемый тип данных
Перечисляемый тип данных представляет собой некоторое ограниченное количество идентификаторов. Эти идентификаторы заключаются в круглые скобки, и отделяются друг от друга запятыми.
Type Day=(Monday, Tuesday, Wednesday, Thursday, Friday, Saturday, Sunday);
Переменная A может принимать лишь значения определенные в разделе Type. Также можно объявить переменную перечисляемого типа в разделе Var:
Var A: (Monday, Tuesday);
Что такое type в паскале
Горбачев Л.И. Основы программирования в среде Turbo Pascal.
Типы данных.
Понятие тип связано с фиксированным набором данных. Переменная относится к определенному типу, если ей можно присвоить данные, принадлежащие к набору, определяющему этот тип. В языке Турбо-Паскаль необходимо явное определение типа каждой из переменных в программе.
Например, значения переменной, равные 1 или 10 относятся к целочисленному типу, их можно складывать, умножать и выполнять другие арифметические операции. В языке Паскаль для описания типа в общем случае используется зарезервированное слово Type.
Формат: type имя_типа = значение_типа;
Все типы данных разделяются на две группы: скалярные (простые) и структурированные (составные). Скалярные типы в свою очередь подразделяются на стандартные и пользовательские. Стандартные типы данных предлагаются пользователям разработчиками системы Turbo Pascal.
К стандартным скалярным типам относятся целочисленные, вещественные, символьные, булевские типы данных и указатели.
В десятичной системе числа с фиксированной точкой записываются по обычным правилам арифметики. Целая часть от дробной отделяется десятичной точкой. Если десятичная точка отсутствует, число считается целым. Перед числом может находиться знак «+» или «-«. Если знак отсутствует, по умолчанию число считается положительным.
Структурированные типы в своей основе имеют один или несколько скалярных типов данных. К структурированным типам относятся строки, массивы, множества, записи, файлы и данные процедурного типа и типа 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 байт |
5.1.3. Символьный тип.
Тип | Диапазон | Требуемая память |
Char | Кодовая таблица ПЭВМ | 1 байт |
Пример: var Ch : char;
Let, Znak : char;
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);
Третий тип перечисления анонимный ( не имеет имени) и задается перечислением значений в разделе 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. Операция отношения и логические операции допустимы для значений перечисления одного и того же типа. Упорядочение осуществляется по номеру элемента в описании типа.
Например, будет истинно выражение Winter
В отличии от данных других типов, Паскаль не поддерживает операции ввода-вывода значений пользовательского перечисляемого типа. При необходимости программист сам должен организовать ввод-вывод таких данных.
Для работы с данными перечисляемого типа в языке Паскаль предназначены стандартные функции 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;
В этом примере переменные WorkDay, BolnDay имеют тип DayMonth и могут принимать любые значения из диапазона 1..31. Выход из диапазона вызывает программное прерывание.
5.3. Структурированные типы данных.
Структурированные типы данных определяют упорядоченную совокупность скалярных переменных и характеризуются типом своих компонентов. В языке Паскаль допускаются следующие структурированные типы данных: строки, массивы, множества, записи, файлы, указатели, процедурные типы и объекты. Все они требуют отдельного рассмотрения и будут подробно описаны (кроме объектов) ниже.
Главная |
Новости |
TurboPascal |
Учебное пособие |
Лекции |
Исходники |
Математика |
Книги |
Лекции |
Шпоры |
ЦТ и ЕГЭ |
Физика |
© Copyright(c) 2004 Amro Group. All rights reserved
- Что такое type в python
- Что такое type в питоне