Диапазон значений типа word

Уважаемые коллеги, мы рады предложить вам, разрабатываемый нами учебный курс по программированию ПЛК фирмы Beckhoff с применением среды автоматизации TwinCAT. Курс предназначен исключительно для самостоятельного изучения в ознакомительных целях. Перед любым применением изложенного материала в коммерческих целях просим связаться с нами. Текст из предложенных вам статей скопированный и размещенный в других источниках, должен содержать ссылку на наш сайт heaviside.ru. Вы можете связаться с нами по любым вопросам, в том числе создания для вас систем мониторинга и АСУ ТП.


Типы данных в языках стандарта МЭК 61131-3

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

Простые типы данных

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

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

Как помните, из статьи Знакомство с языком LD, при объявлении переменной необходимо указать, к какому типу данных будет принадлежать переменная. Как вы уже можете понять, число B016 будет занимать гораздо меньший объем памяти чем число 4 C4E5 01E7 7A9016. Также одни и те же операции с разными типами данных будут транслироваться в разные ассемблерные команды. В TwinCAT используются следующие типы данных:

Классификация типов данных TwinCAT 3

Биты

BOOL — это простейший тип данных, как уже было сказано, этот тип данных может принимать только два значения ​0 и 1. Так же в TwinCAT, как и в большинстве языков программирования, эти значения, наравне с 0 и 1, обозначаются как TRUE и FALSE и несут в себе количество информации, соответствующее одному биту. Минимальным объемом данных, который читается из памяти за один раз, является байт, то есть восемь бит. Поэтому, для оптимизации скорости доступа к данным, переменная типа BOOL занимает восемь бит памяти. Для хранения самой переменной используется нулевой бит, а биты с первого по седьмой заполнены нулями. Впрочем, на практике о таком нюансе приходится вспоминать достаточно редко.

BIT — то же самое, что и BOOL, но в памяти занимает 1 бит. Как можно догадаться, операции с этим типом данных медленнее чем с типом BOOL, но он занимает меньше места в памяти. Тип данных BIT отсутствует в стандарте МЭК 61131-3 и поддерживается исключительно в TwinCAT, поэтому стоит отдавать предпочтение типу BOOL, когда у вас нет явных поводов использовать тип BIT.

Целочисленные типы данных

BYTE — тип данных, по размеру соответствующий одному байту. Хоть с типом BYTE можно производить математические операции, но в первую очередь он предназначен для хранения набора из ​8 ​бит. Иногда в таком виде удобнее, чем побитно, передавать данные по цифровым интерфейсам, работать с входами выходами и так далее. С такими вопросами мы будем знакомится далее по мере изучения курса. В переменную типа BYTE ​можно записать числа из диапазона 0..255 (0..28-1).

WORD — то же самое, что и BYTE, но размером ​16​ бит. В переменную типа WORD можно записать числа из диапазона 0..65 535​ ​(0..216-1). Тип данных WORD переводится с английского как «слово». Давным-давно термином машинное слово называли группу бит, обрабатываемых вычислительной машиной за один раз. Была уместна фраза «Программа состоит из машинных слов.». Со временем этим термином перестали пользоваться в прямом его значении, и сейчас под термином «машинное слово» обычно подразумевается группа из 16​ бит.

DWORD — то же самое, что и BYTE, но размером 32 бит. В переменную типа DWORD можно записать числа из диапазона 0..4 294 967 295​​ ​(0..232-1). DWORD — это сокращение от double word, что переводится как двойное слово. Довольно часто буква «D» перед каким-либо типом данных значит, что этот тип данных в два раза длиннее, чем исходный.

LWORD — то же самое, что и BYTE, но размером 64 ;бит. В переменную типа LWORD можно записать числа из диапазона 0..18 446 744 073 709 551 615 (0..264-1). LWORD — это сокращение от long word, что переводится как длинное слово. Приставка «L» перед типом данных, как правило, означает что такой тип имеет длину 64 бита.

SINT — знаковый тип данных, длинной 8 бит. В переменную типа SINT можно записать числа из диапазона -128..127​​ ​(-27..27-1). В отличии от всех предыдущих типов данных этот тип данных предназначен для хранения именно чисел, а не набора бит. Слово знаковый в описании типа означает, что такой тип данных может хранить как положительные, так и отрицательные значения. Для хранения знака числа предназначен старший, в данном случае седьмой, разряд числа. Если старший разряд имеет значение 0, то число интерпретируется как положительное, если 1, то число интерпретируется как отрицательное. Приставка «S» означает short, что переводится с английского как короткий. Как вы догадались, SINT короткий вариант типа INT.

USINT — беззнаковый тип данных, длинной 8 бит. В переменную типа USINT можно записать числа из диапазона 0..255​​ ​(0..28-1). Приставка «U» означает unsigned, переводится как беззнаковый.

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

Тип данных Нижний предел Верхний предел Занимаемая память
BYTE 0 255 8 бит
WORD 0 65 535 16 бит
DWORD 0 4 294 967 295 32 бит
LWORD 0 264-1 64 бит
SINT -128 127 8 бит
USINT 0 255 8 бит
INT -32 768 32 767 16 бит
UINT 0 65 535 16 бит
DINT -2 147 483 648 2 147 483 647 32 бит
UDINT 0 4 294 967 295 32 бит
LINT -263 -263-1 64 бит
ULINT 0 -264-1 64 бит

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

  • Округление при делении: округление всегда выполняется вниз. То есть дробная часть просто отбрасывается. Если делимое меньше делителя, то частное всегда будет равно нулю, например, 10/11 = 0.
  • Переполнение: если к целочисленной переменной, например, SINT, имеющей значение 255, прибавить 1, переменная переполнится и примет значение 0. Если прибавить 2, переменная примет значение 1 и так далее. При операции 0 — 1 результатом будет 255. Это свойство очень схоже с устройством стрелочных часов. Если сейчас 2 часа, то 5 часов назад было 9 часов. Только шкала часов имеет пределы не 1..12, а 0..255. Иногда такое свойство может использоваться при написании программ, но как правило не стоит допускать переполнения переменных.

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

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

Типы данных с плавающей запятой

REAL — тип данных с плавающей запятой длинной 32 бита. В переменную типа REAL можно записать числа из диапазона -3.402 82*1038..3.402 82*1038​​.

LREAL — тип данных с плавающей запятой длинной 64 бита. В переменную типа LREAL можно записать числа из диапазона -1.797 693 134 862 315 8*10308..1.797 693 134 862 315 8*10308​​.

При присваивании значения типам REAL и LREAL присваиваемое значение должно содержать целую часть, разделительную точку и дробную часть, например, 7.4 или 560.0.

Так же при записи значения типа REAL и LREAL использовать экспоненциальную (научную) форму. Примером экспоненциальной формы записи будет Me+P, в этом примере

  • M называется мантиссой.
  • e называется экспонентой (от англ. «exponent»), означающая «·10^» («…умножить на десять в степени…»),
  • P называется порядком.

Примерами такой формы записи будет:

  • 1.64e+3 расшифровывается как 1.64e+3 = 1.64*103 = 1640.
  • 9.764e+5 расшифровывается как 9.764e+5 = 9.764*105 = 976400.
  • 0.3694e+2 расшифровывается как 0.3694e+2 = 0.3694*102 = 36.94.

Еще один способ записи присваиваемого значения переменной типа REAL и LREAL, это добавить к числу префикс REAL#, например, REAL#7.4 или REAL#560. В таком случае можно не указывать дробную часть.

Старший, 31-й бит переменной типа REAL представляет собой знак. Следующие восемь бит, с 30-го по 23-й отведены под экспоненту. Оставшиеся 23 бита, с 22-го по 0-й используются для записи мантиссы.

В переменной типа LREAL старший, 63-й бит также используется для записи знака. В следующие 11 бит, с 62 по 52-й, записана экспонента. Оставшиеся 52 бита, с 51-го по 0-й, используются для записи мантиссы.

При записи числа с большим количеством значащих цифр в переменные типа REAL и LREAL производится округление. Необходимо не забывать об этом в расчетах, к которым предъявляются строгие требования по точности. Еще одна особенность, вытекающая из прошлой, если вы хотите сравнить два числа типа REAL или LREAL, прямое сравнение мало применимо, так как если в результате округления числа отличаются хоть на малую долю результат сравнения будет FALSE. Чтобы выполнить сравнение более корректно, можно вычесть одно число из другого, а потом оценить больше или меньше модуль получившегося результата вычитания, чем наибольшая допустимая разность. Поведение системы при переполнении переменных с плавающей запятой не определенно стандартом МЭК 61131-3, допускать его не стоит.

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

STRING — тип данных для хранения символов. Каждый символ в переменной типа STRING хранится в 1 байте, в кодировке Windows-1252, это значит, что переменные такого типа поддерживают только латинские символы. При объявлении переменной количество символов в переменной указывается в круглых или квадратных скобках. Если размер не указан, при объявлении по умолчанию он равен 80 символам. Для данных типа STRING количество содержащихся в переменной символов не ограниченно, но функции для обработки строк могут принять до 255 символов.

Объем памяти, необходимый для переменной STRING, всегда составляет 1 байт на символ +1 дополнительный байт, например, переменная объявленная как «STRING [80]» будет занимать 81 байт. Для присвоения константного значения переменной типа STRING присваемый текст необходимо заключить в одинарные кавычки.

Пример объявления строки на 35 символов:

sVar : STRING(35) := 'This is a String'; (*Пример объявления переменной типа STRING*)

WSTRING — этот тип данных схож с типом STRING, но использует по 2 байта на символ и кодировку Unicode. Это значит что переменные типа WSTRING поддерживают символы кириллицы. Для присвоения константного значения переменной типа WSTRING присваемый текст необходимо заключить в двойные кавычки.

Пример объявления переменной типа WSTRING:

wsVar : WSTRING := "This is a WString"; (*Пример объявления переменной типа WSTRING*)

Если значение, присваиваемое переменной STRING или WSTRING, содержит знак доллара ($), следующие два символа интерпретируются как шестнадцатеричный код в соответствии с кодировкой Windows-1252. Код также соответствует кодировке ASCII.

Код со знаком доллара Его значение в переменной
$<восьмибитное число> Восьмибитное число интерпретируется как символ в кодировке ISO / IEC 8859-1
‘$41’ A
‘$9A’ ©
‘$40’ @
‘$0D’, ‘$R’, ‘$r’ Разрыв строки
‘$0A’, ‘$L’, ‘$l’, ‘$N’, ‘$n’ Новая строка
‘$P’, ‘$p’ Конец страницы
‘$T’, ‘$t’ Табуляция
‘$$’ Знак доллара
‘$’ ‘ Одиночная кавычка

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

Пример:

  1. VAR CONSTANT

  2. sConstA : STRING :='Hello world';

  3. sConstB : STRING :='Hello world $21'; (*Пример объявления переменной типа STRING с спец символом*)

  4. END_VAR

Типы данных времени

TIME — тип данных, предназначенный для хранения временных промежутков. Размер типа данных 32 бита. Этот тип данных интерпретируется в TwinCAT, как переменная типа DWORD, содержащая время в миллисекундах. Нижний допустимый предел 0 (0 мс), верхний предел 4 294 967 295 (49 дней, 17 часов, 2 минуты, 47 секунд, 295 миллисекунд). Для записи значений в переменные типа TIME используется префикс T# и суффиксы d: дни, h: часы, m: минуты, s: секунды, ms: миллисекунды, которые должны располагаться в порядке убывания.

Примеры корректного присваивания значения переменной типа TIME:

TIME1 : TIME := T#14ms;
TIME1 : TIME := T#100s12ms; // Допускается переполнение в старшем отрезке времени.
TIME1 : TIME := t#12h34m15s;

Примеры некорректного присваивания значения переменной типа TIME, при компиляции будет выдана ошибка:

TIME1 : TIME := t#5m68s;   // Переполнение не в старшем отрезке времени недопустимо
TIME1 : TIME := 15ms;   // Пропущен префикс T#
TIME1 : TIME := t#4ms13d;   // Не соблюден порядок записи временных отрезок

LTIME — тип данных аналогичен TIME, но его размер составляет 64 бита, а временные отрезки хранятся в наносекундах. Нижний допустимый предел 0, верхний предел 213 503 дней, 23 часов, 34 минуты, 33 секунд, 709 миллисекунд, 551 микросекунд и 615 наносекунд. Для записи значений в переменные типа LTIME используется префикс LTIME#. Помимо суффиксов, используемых для записи типа TIME для LTIME, используются µs: микросекунды и ns: наносекунды.

Пример:

LTIME1 : LTIME := LTIME#1000d15h23m12s34ms2us44ns; (*Пример объявления переменной типа LTIME*)

TIME_OF_DAY (TOD) — тип данных для записи времени суток. Имеет размер 32 бита. Нижнее допустимое значение 0, верхнее допустимое значение 23 часа, 59 минут, 59 секунд, 999 миллисекунд. Для записи значений в переменные типа TOD используется префикс TIME_OF_DAY# или TOD#, значение записывается в виде <часы : минуты : секунды> . В остальном этот тип данных аналогичен типу TIME.

Пример:

TIME_OF_DAY#15:36:30.123
tod#00:00:00

Date — тип данных для записи даты. Имеет размер 32 бита. Нижнее допустимое значение 0 (01.01.1970), верхнее допустимое значение 4 294 967 295  (7 февраля 2106), да, здесь присутствует возможный компьютерный апокалипсис, но учитывая запас по верхнему пределу, эта проблема не слишком актуальна. Для записи значений в переменные типа TOD используется префикс DATE# или D#, значение записывается в виде <год — месяц — дата>. В остальном этот тип данных аналогичен типу TIME.

DATE#1996-05-06
d#1972-03-29

DATE_AND_TIME (DT) — тип данных для записи даты и времени. Имеет размер 32 бита. Нижнее допустимое значение 0 (01.01.1970), верхнее допустимое значение 4 294 967 295 (7 февраля 2106, 6:28:15). Для записи значений в переменные типа DT используется префикс DATE_AND_TIME # или DT#, значение записывается в виде <год — месяц — дата — час : минута : секунда>. В остальном этот тип данных аналогичен типу TIME.

DATE_AND_TIME#1996-05-06-15:36:30
dt#1972-03-29-00:00:00

На этом раз мы заканчиваем рассмотрение типов данных. Сейчас мы разобрали не все типы данных, остальные можно найти в infosys по пути TwinCAT 3 → TE1000 XAE → PLC → Reference Programming → Data types.

Следующая статья будет целиком состоять из практической работы, мы напишем калькулятор на языке LD.


stesl писал(а): ↑23 мар 2021, 10:37
Тип Word — это целочисленный беззнаковый тип данных, в два байта. Диапазон 0-65535. Используется везде, где оказывается нужным.

Не путайте Word с UInt (unsigned integer16), он не относится к целочисленным, так как не кодирует числовые значения и не совместим с математическими операциями.
Потому что:

Sergy6661 писал(а): ↑23 мар 2021, 12:54
Вот для упаковки-распаковки битовых переменных и используется в основном.

Но не в основном, а только для этого. Если конечно в конкретном ПЛК не срабатывает неявное преобразование, из-за которого кажется, что Word — это целое число.

Отправлено спустя 21 минуту 7 секунд:
Не, иначе объясню:
Word — это когда ты в 16 бит записал 16 булевых значений, каждый из которых что-то значит в смысле true/false. Например, при управлении сервоприводом или частотником.
Int16, UInt16 — это числа, отдельные биты не представляют интереса (хотя бывают редкие исключения).
Математические операции умеют работать с числами, то есть Add(), Sub(), Mul(), Div() работают с Int16/UInt16, а с Word работает подозрительно, подсвечивает типа «глянь, что за дрянь ты задумал?», но воспринимает как число 0-65535. Извините, правда, зачем вы складываете слово управления частотника с числом -85?
Зато сдвиговые операции и операции со словами типа ANDW(), ORW(), NOT(W), XORW() работают именно со словами и подозрительно с целыми числами.

Это разные типы данных, хотя все они 16 бит.

На занятии рассматриваются основные стандартные типы данных в Паскаль, понятие переменной и константы; объясняется, как работать с арифметическими операциями

Содержание:

  • Типы данных в Паскале
    • Целочисленные типы данных в Паскаль
    • Комментарии в Паскале
    • Вещественные типы данных в Паскаль
  • Приведение типов
  • Константы в Паскале
    • «Красивый» вывод целых и вещественных чисел
  • Арифметические операции в Паскале
    • Порядок выполнения операций
  • Стандартные арифметические процедуры и функции Pascal

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

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

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

Рассмотрим наиболее распространенные в Pascal типы данных.

Целочисленные типы данных в Паскаль

Тип Диапазон Требуемая память (байт)
byte 0..255 1
shortint -128..127 1
integer -32768.. 32767 2
word 0..65535 2
longint -2147483648..2147483647 4

Нужно иметь в виду, что при написании программ в паскале integer (в переводе с англ. целое) является наиболее часто используемым, так как диапазон значений наиболее востребуем. Если необходим более широкий диапазон, используется longint (long integer, в переводе с англ. длинное целое). Тип byte в Паскале используется, когда нет необходимости работать с отрицательными значениями, то же самое касается и типа word (только диапазон значений здесь значительно больше).

Примеры того, как описываются (объявляются) переменные в Паскале:

Pascal PascalABC.NET
1
2
3
4
5
6
7
8
program a1;
var x,y:integer; {целочисленный тип}
    myname:string; {строковый тип}
begin
x:=1; y:=x+16;
myname:='Петр';
writeln ('имя: ',myname, ', возраст: ', y)
end.
1
2
3
4
5
6
7
8
program a1;
begin
  var x, y: integer; {целочисленный тип}
  var myname: string; {строковый тип}
  x := 1; y := x + 16;
  myname := 'Петр';
  print($'имя: {myname}, возраст: {y}')
end.
Результат: 
имя: Петр, возраст: 17

При использовании PascalABC.NET наиболее часто используются следующие целочисленные типы:

Тип Длина, байт Диапазон допустимых значений
integer 4 -2 147 483 648 .. 2 147 483 647
int64 8 -9 223 372 036 854 775 808 .. 9 223 372 036 854 775 807
BigInteger переменная неограниченный

Комментарии в Паскале

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

{Очень простая программа
для вывода слова "Привет"}
begin
// вывод 
write('Привет');
end.

Задача 5. Население Москвы равняется а=9000000 жителей. Население Нью-Васюков равняется b=1000 жителей. Напишите программу, которая определяет разницу в числе жителей между двумя городами. Используйте переменные величины.

[Название файла: L1task5.pas]

Вещественные типы данных в Паскаль

Вещественные числа в Паскале и вообще в программировании — это название дробных чисел.

Тип Диапазон Требуемая память (байт)
real 2.9 * 10E-39 .. 1.7 * 10E38 6
single 1.5 * 10 E-45 .. 3.4 * 10E38 4
double 5 * 10E-324 .. 1.7 * 10E308 8
extended 1.9 * 10E-4951 .. 1.1 * 10E4932 10

Тип real в Паскале — наиболее часто используемый из вещественных типов.

Выше были представлены простые типы данных в Паскаль, к которым относятся:

  • Порядковые
  • Целые
  • Логические
  • Символьные
  • Перечисляемые
  • Интервальные
  • Вещественные

Для вывода значений переменных вещественного типа обычно используется форматированный вывод:

  • в формате используется либо одно число, означающее число позиций, отводимых на это число в экспоненциальной форме;
  • p:=1234.6789;
    Writeln(p:12);  {_1.2346E+004}
  • либо два числа, первое из которых обозначает общий размер поля, отведенного под это число, второе — число знаков после запятой, т.е. точность.
  • p:=1234.6789;
    Writeln(p:6:2); {1234.68}

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

    Приведение типов

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

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

    integer → int64
    int64  → real
    integer → BigInteger

    Пример использования операции приведения типов:

    var a := 10; // integer
    var b := 123456789012345; // int64
    var c := -3bi; // BigInteger
     
    var i := int64(a); // приведение integer → int64
    var x := real(b); // приведение int64  → real
    var p := BigInteger(a); // приведение integer → BigInteger

    Обратное приведение с помощью функций

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

    real → integer

    Пример:

    ##
    var x := Sqrt(3); // корень квадратный из 3, тип real
    var a := Trunc(x); // приведение к integer с отсечением дробной части. рез-т 1
    var b := Round(x); // приведение к integer с округлением до ближайшего целого. рез-т 2

    Константы в Паскале

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

    Объявление константы в Паскале происходит до объявления переменных (до служебного слова var) и выглядит следующим образом:

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

    Pascal PascalABC.NET
    1
    2
    3
    4
    5
    6
    
    const x=17;
    var myname:string;
    begin
    myname:='Петр';
    writeln ('имя: ',myname, ', возраст: ', х)
    end.
    1
    2
    3
    4
    5
    
    const x = 17;
    begin
      var myname := 'Петр';
      print($'имя: {myname}, возраст: {x}')
    end.

    «Красивый» вывод целых и вещественных чисел

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

    Вывод целых чисел

    Вывод целых чисел

    Вывод вещественных чисел

    Вывод вещественных чисел

    Арифметические операции в Паскале

    ДЕЙСТВИЕ РЕЗУЛЬТАТ СМЫСЛ
    2 + 3 5 плюс
    4 — 1 3 минус
    2 * 3 6 умножить
    10 / 5 2 разделить
    10 ** 2 100 возведение в степень с результатом типа real
    17 div 5 3 целочисленное деление
    17 mod 5 2 остаток от целочисленного деления

    арифметические операции в паскале

    Порядок выполнения операций

    1. вычисление выражений в скобках;
    2. умножение, деление, div, mod слева направо;
    3. сложение и вычитание слева направо.

    порядок выполнения операций


    Канонический способ:

    var 
      a: integer;
      b: real;
     
    begin
      a := 1;
      writeln('a := 1; a = ',a);
      a += 2; // Увеличение на 2
      writeln('a += 2; a = ',a);
      a *= 3; // Умножение на 3
      writeln('a *= 3; a = ',a);
      writeln;
      b := 6;
      writeln('b := 6; b = ',b);
      r /= 2;
      writeln('b /= 2; b = ',b);
    end.

    Стандартные арифметические процедуры и функции Pascal

    Здесь стоит более подробно остановиться на некоторых арифметических операциях.

    • Операция inc в Паскале, произносимая как инкремент, это стандартная процедура pascal, которая обозначает увеличение на единицу.
    • Пример операции inc:

      1
      2
      3
      
      x:=1;
      inc(x); {Увеличивает x на 1, т.е. x=2}
      writeln (х)

      Более сложное использование процедуры inc:
      Inc(x,n) где x — порядкового типа, n — целого типа; процедура inc увеличивает x на n.

    • Аналогично работает процедура Dec в Паскале: Dec(x) — уменьшает x на 1 (декремент) или Dec(x,n) — уменьшает x на n.
    • Оператор abs представляет собой модуль числа. Работает следующим образом:
    • a:=-9;
      b:=abs(a); { b = 9}
    • Оператор div в паскале является часто используемым, так как целый ряд задач связан с действием деление нацело.
    • Остаток от деления или оператор mod в pascal тоже незаменим при решении ряда задач.
    • Заслуживающей внимания является стандартная функция odd Паскаля, которая определяет, является ли целое число нечетным. Т. е. возвращает true (истина) для нечетных чисел, false (ложь) для четных чисел.
    • Пример использования функции odd:

      1
      2
      3
      4
      
      begin
          WriteLn(Odd(5)); {True}
          WriteLn(Odd(4)); {False}
      end.
    • Функция exp в паскале возвращает экспоненту параметра. Записывается как exp(x), где x типа real.
    • Квадрат числа в Паскале вычисляется при помощи процедуры sqr.
    • Пример использования процедуры sqr в Pascal:

      1
      2
      3
      4
      5
      
      var x:integer;
      begin
      x:=3;
      writeln(sqr(x)); {ответ 9}
      end.
    • Операция возведение в степень в Паскале отсутствует как таковая. Но для того чтобы возвести в степень число можно использовать функцию exp.
    • Формула такая: exp(ln(a)*n), где а — число, n — степень (а>0).

      Однако в компиляторе pascal abc возведение в степень осуществляется значительно проще:

       WriteLn(Power(2,3)); {ответ 8}
    • Извлечь квадратный корень в Паскале можно при помощи процедуры sqrt.
    • Пример использования процедуры sqrt в Pascal:

      1
      2
      3
      4
      5
      
      var x:integer;
      begin
      x:=9;
      writeln(sqrt(x)); {ответ 3}
      end.

    Задача 6. Известны размеры спичечной коробки: высота — 12.41 см., ширина — 8 см., толщина — 5 см. Вычислить площадь основания коробки и ее объем

    (S=ширина * толщина, V=площадь*высота)

    [Название файла: L1task6.pas]

    Задача 7. В зоопарке три слона и довольно много кроликов, причем количество кроликов часто меняется. Слону положено съедать в сутки сто морковок, а кролику — две. Каждое утро служитель зоопарка сообщает компьютеру количество кроликов. Компьютер в ответ на это должен сообщить служителю общее количество морковок, которые сегодня нужно скормить кроликам и слонам.

    [Название файла: L1task7.pas]

    Задача 8. Известно, что x кг конфет стоит a рублей. Определите, сколько стоит y кг этих конфет, а также, сколько килограмм конфет можно купить на k рублей. Все значения вводит пользователь.

    [Название файла: L1task8.pas]

      

    В приведенных ниже примерах все функции имеют аргументы. Аргументы
    m и n имеют целочисленный тип,
    a и b – тип real,
    x и y – любой из этих типов.

    Abs(x) – возвращает абсолютное значение аргумента x;
    Ceil(x) - возвращает ближайшее целое, не меньшее, чем х;
    Floor(x) - возвращает ближайшее целое, не превышающее х;
    Frac(x) - возвращает дробную часть аргумента x;
    Max(x, y, …) – возвращает максимальное из значений x, y, …;
    Min(x, y, …) – возвращает минимальное из значений x, y, … ;
    Random(m) – возвращает случайное число из интервала [0 ; m-1];
    Random(a) – возвращает случайное число из интервала [0 ; a);
    Random(m, n) – возвращает случайное число из интервала [m ; n];
    Random(a, b) – возвращает случайное число из интервала [a ; b);
    Random2(m) – возвращает кортеж из двух случайных чисел в интервале [0 ; m-1];
    Random2(a) – возвращает кортеж из двух случайных чисел в интервале [0 ; a);
    Random2(m, n) – возвращает кортеж из двух случайных чисел в интервале [m ; n];
    Random2(a, b) – возвращает кортеж из двух случайных чисел в интервале [a ; b);
    Random3(m) – возвращает кортеж из трех случайных чисел в интервале [0 ; m-1];
    Random3(a, b) – возвращает кортеж из трех случайных чисел в интервале [a ; b);
    Round(x) - возвращает округленное до целых по правилам арифметики значение типа integer;
    Round(x, n) - возвращает значение х, округленное до n знаков в дробной части;
    Sign(x) – возвращает -1 при x < 0, 0 при x = 0 и 1 при x > 0;
    Sin(x) – возвращает sin(x) типа real;
    Sqr(a) – возвращает a2;
    Sqr(m) – возвращает m2 типа int64;
    Sqrt(x) – возвращает √x типа real;
    Trunc(a) – возвращает целую часть значения a того же типа
    

    Новости           

    Программы

    Turbo Pascal

    Игры

    Документация

    «Странности»

    FAQ

    Ссылки

    Гостевая
    книга

    Благодарности

    От автора

     

    ТИПЫ
    ДАННЫХ

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

    Турбо Паскаль
    характеризуется разветвлённой структурой
    типов данных.




     

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

    ПРОСТЫЕ ТИПЫ

    К простым типам относятся
    порядковые и вещественные типы.

    Порядковые типы отличаются тем, что каждый из них имеет
    конечное число возможных значений. Эти
    значения можно определённым образом
    упорядочить (отсюда – название типов) и,
    следовательно, с каждым из них можно
    сопоставить некоторое целое число –
    порядковый номер значения.

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

    ПОРЯДКОВЫЕ
    ТИПЫ

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

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

    ЦЕЛЫЕ
    ТИПЫ

    НАЗВАНИЕ

    Длина,

    байт

    Диапазон
    значений

    Byte

    1

    0…255

    ShortInt

    1

    -128…+127

    Word

    2

    0…65535

    Integer

    2

    -32768…+32767

    LongInt

    4

    -2
    147 483 648…+2 147 483 647

    При
    использовании процедур и функций с
    целочисленными параметрами следует
    руководствоваться «вложенностью» типов, т.е.
    везде, где может использоваться
    Word,
    допускается использование
    Byte (но
    не наоборот), в
    LongInt “входит” Integer,
    который, в свою очередь, включает в себя
    ShortInt.

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

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

    ЛОГИЧЕСКИЕ
    ТИПЫ

    Название

    Длина,
    Байт

    OS

    Значение

    BOOLEAN

    1

    Linux,
    DOS

    False,
    True

    BYTEBOOL

    1

    Совместим
    с С

    False,
    True

    WORDBOOL

    2

    Win

    False,
    True

    LONGBOOL

    4

    Win

    False,
    True

    . Значениями логического типа может
    быть одна из предварительно объявленных
    констант
    FALSE
    (ложь) или
    TRUE (истина).

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

    Символьный тип. CHAR
    – занимает 1 байт. Значением символьного
    типа является множество всех символов ПК.
    Каждому символу присваивается целое число
    в диапозоне 0…255. Это число служит кодом
    внутреннего представления символа.

    Для
    кодировки испоьзуется код
    ASCII (American
    Standart
    Code for Information
    Interchange
    – американский стандартный код для обмена
    информацией). Это 7-битный код, т.е. с его
    помощью можн озакодировать лишь 128 символов
    в диапозоне от 0 до 127. В то же время в 8-битном
    байте, отведенном для хранения символа в
    Турбо Паскале, можно закодировать в два
    раза больше символов в дапозоне от 0 до 255.
    Первая половина символов ПК с кодами 0…127
    соответствует стандарту
    ASCII.
    Вторая половина символов с кодами 128ююю255 не
    ограничена жёсткими рамками стандарта и
    может менятся на ПК разных типов.

    Символы
    с кодами 0…31 относятся к слжебным кодам.
    Если эти коды использовать в символьном
    тексте программы, они считаются пробелами.

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

    Type

             
    Colors = (red, white, blue);

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

    Соответствие
    между значениями перечисляемого типа и
    порядковыми номерами этих значений
    устанавливается порядком перечисления:
    первое значение списке получает порядковый
    номер 0, второе – 1 и т.д. максимальная
    мощность перечисляемого типа составляет
    65536 значений, поэтому фактически
    перечисляемый тип задаёт некоторое
    подмножество целого типа
    WORD
    и может рассматриваться как компактное
    объявление сразу группы целочисленных
    констант со значениями 0,1 и т.д.

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

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

    Тип-диапазон
    задаётся границами своих значений внутри
    базового типа:

    <мин.знач.>..<макс.знач.>

    Здесь
    <мин.знач.> — минимальное значение типа-диапазона.

    <макс.знач.>
    — максимальное его значение.

    Type

             
    Digit = ‘0’ ..’9’;

             
    Dig
    2 = 48 .. 57;

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

    1.    
    два символа «..» рассматриваются как
    один символ, поэтому между ними недопустимы
    пробелы.

    2.    
    левая
    граница диапазона не должна превышать его
    правую границу.

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

    ВЕЩЕСТВЕННЫЕ ТИПЫ

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

    Длина, байт

    Название

    Количество
    значащих цифр

    Диапазон
    десятичного порядка

    6

    Real

    11…12

    -39…+38

    4

    Single

    7…8

    -45…+38

    8

    Double

    15…16

    -324…+308

    10

    Extended

    19…20

    -4951…+4932

    8

    comp

    19…20

    -2*1063+1…+2*1063-1

    СТРУКТУРИРОВАННЫЕ ТИПЫ

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

    МАССИВЫ

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

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

    <имя
    типа> = array
    [<сп.инд.типов>] of
    <тип>

    Здесь <имя типа> —
    правильный индификатор;

    Array,
    of
    зарезирвированые слова (массив, из);

    <спюиндютипов> — список
    из одного или нескольких индексных типов,
    разделённых запятыми; квадратные скобки,
    обрамляющие список, — требование синтаксиса;

    <тип> — любой тип Турбо
    Паскаля.

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

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

    ЗАПИСИ

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

    Структура объявления типа
    записи такова:

    <имя
    типа> = RECORD <спюполей> END

    Здесь
    <имя типа> — правильный индификатор;

    RECORD,
    END
    зарезервированые слова (запись, конец);

    <сп.полей> — список полей;
    представляет собой последовательность
    разделов записи, между которыми ставится
    точка с запятой.

    МНОЖЕСТВА

    Множества
    это набор однотипных логическх
    связанных друг с другом объектов. Характер
    связей между объектами лишь
    подразумевается програмистом и никак не
    контролируется Турбо Паскалем.количество
    элементов, входящих в множество, может
    менятся в пределах от 0до 256 (множество, не
    содержащее элементов, называется пустым).именно
    непостоянством количества своих элементов
    множества отличаются от массивов и записей.

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

    Описание типа множества
    имеет вид:

    <имя
    типа> = SET OF <баз.тип>

    Здесь <имя типа> — правильный
    индификатор;

    SET,
    OF
    зарезирвированные слова (множество, из);

    <баз.тип>
    — базовый тип элементов множества, в
    качестве которого может использоваться
    любой порядковый тип, кроме WORD,
    INTEGER и LONGINT.

    Для
    задания множества используется так
    называемый конструктор множества: список
    спецификаций элементов множества,
    отделяемых друг от друга запятыми; список
    обрамляется квадратными скобками.
    Спецификациями элементов могут быть
    константы или выражения базового типа, а
    также – тип-диапазон того же базового типа.

    СТРОКИ

              Тип STRING
    (строка) в Турбо Паскале широко
    используется для обработки текстов. Он во
    многом похож на одномерный массив символов ARRAY [0..N]
    OF CHAR,
    однако, в отличие от последнего, количество
    символов в строке – переменной может
    менятся от 0 до N,
    где N
    максималльное количество символов в строке.
    Значение N
    определяется объявлением типа STRING[N]
    N и может
    быть любой константой порядкового типа, но
    ен больше 255. Турбо Паскаль разрешает не
    указывать N,
    в том случае длина строки принимается
    максимально возможной, а именно N=255.

    Строка в Турбо Паскале
    трактуется как цепочка символов. К любому
    символу в строке можно обратиться точно так
    же, как к элементу одномерного массива ARRAY
    [0..N] OF
    CHAR.

    ФАЙЛЫ

    Под файлом
    понимается либо именованная область
    внешней памяти ПК, либо логическое
    устройство – потенциальный источник или
    приёмник информации.

    Любой файл имеет три
    характерные особенности. Во-первых, у него
    есть имя, что даёт возможность программе
    работать одновременно с несколькими
    файлами. Во-вторых, он содержит компоненты
    одного типа. Типом компонентов может быть
    любой тип Турбо Паскаля, кроме файлов. Иными
    словами, недьзя создать «файл файлов». В-третьих,
    длина вновь создаваемого файла никак не
    оговаривается при его объявлении и
    ограничивается только ёмкостью устройств
    внешней памяти.

    Файловый тип или переменную
    файлового типа можно задать одним из трёх
    способов:

    <имя>=
    FILE OF <тип>;

    <имя>=TEXT;

    <имя>
    = FILE;

    Здесь
    <имя> — имя файлового типа (правильный
    индификатор);

    FILE,
    OF
    зарезервированные слова (файл, из);

    TEXT
    – имя стандартного типа текстовых файлов;

    <тип>
    — любой тип Турбо Паскаля, кроме файлов.

    В зависимости от способа
    объявления можно выделить три вида файлов:

    ·      
    типизированные файлы (задаются
    предложением FILE
    OF…);

    ·      
    текстовые файлы (определяются типом
    TEXT);

    ·      
    нетипизированные файлы (определяются
    типом FILE).

    ПРОЦЕДУРНЫЕ ТИПЫ

    Процедурные
    типы
    — это нововедение фирмы Borland (в стандартном Паскале таких
    типов нет). Основное назначение этих типов
    —дать програмисту гибкие средства
    передачи функций и процедур в качестве
    фактических параметров обращения к другим
    процедурам и функциям.

    Для объявления
    процедурного типа используется заголовок
    процедуры (функции), в котором опускается её
    имя, наприме:

    type

    Proc
    = procedure;

    Proc1
    = procedure(var X, Y: Integer);

    StrProc
    = procedure(S: String);

    MathFunc
    = function(X: Real): Real:

    DeviceFunc
    = function(var F: Text): Integer;

    MaxFunc
    = function(A, B: Real; F: MathFunc): Real;

    Как видно из приведённых
    примеров существует два вида процедурных
    типов: тип-роцедура и тип-функция.

    В программе могут быть
    объявлены переменные процедурных типов,
    например, так:

    Var

             
    P1      :
    Proc1;

             
    F1, f2 : MathFunc;

             
    Ap     : array
    [1..N] of Proc1

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

    ТИП ОБЪЕКТ

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

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

    Сфера действия типа объекта
    состоит из него самого и всех его
    порожденных типов.

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

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

    ТИП УКАЗАТЕЛЬ

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

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

    Переменной-указателю можно
    присвоить значение с помощью процедуры New,
    операции @ или функции Ptr.
    Процедура New
    отводит новую область памяти в динамически
    распределяемой области для динамических
    переменных и сохраняет адрес этой области в
    переменной указателя. Операция @
    ориентирует переменную указателя на
    область памяти, содержащую существующую
    переменную, включая и те переменные,
    которые имеют идентификаторы. Функция Ptr
    ориентирует переменную указателя на
    определенный адрес в памяти.

    Зарезервированное
    слово nil
    обозначает константу со значением
    указателя, которая ни на что не указывает.

    Встроенный указатель типа
    обозначает нетипизованный указатель, то
    есть указатель, который не указывает ни на
    какой определенный тип. Переменные типа Pointer
    могут быть разыменованы; указание символа ^
    после такой переменной вызывает появление
    ошибки. Как и значение, обозначаемое словом nil,
    значения типа Pointer
    совместимы со всеми другими типами
    указателей.

    В разделе «Указатели и
    динамические переменные» в Главе4 вы
    можете найти синтаксис ссылки на
    динамические переменые, которые
    указываются с помощью указателя-переменной.

     

    Типы

    Приветствуем тебя, юный (или не очень юный) читатель нашего сайта! Сегодня мы с вами поговорим про типы в PascalABC.NET: числовые, символьные и логические. Они немного отличаются от стандартных типов Turbo Pascal.

    Давайте вспомним какими могут быть величины? Об этом говорилось в отдельной статье. Сейчас мы быстренько все впомним. Любая величина может быть трех типов: числовой, символьной и логическй. Раньше мы использовали всего несколько типов (integer, real, boolean ), но пришло время расширить знания.

    Типы

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

    Важно! Все диапазоны и типы действительны только для PascalABC.NET, во Free Pascal и Turbo Pascal у этих типов будут другие значения. Например, в  PascalABC.NET тип integer имеет диапазон от -2147483648 до 2147483647, а в Turbo Pascal  у этого типа диапазон  от -32768 до 32767.

    Числовые типы

    Принято разделять числовые типы на две большие подгруппы: целые и вещественные.

    Целые типы

    Тип  Размер в байтах Диапазон значений
    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

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

    Тип  Размер в байтах Диапазон значений Количесвто значащих цифр
    real 8 -1.8∙10308.. 1.8∙10308 15-16
    double 8 -1.8∙10308.. 1.8∙10308 15-16
    single 4 -3.4∙1038.. 3.4∙1038 7-8

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

    Константа(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.

    Давайте поэкспериментируем, составим вот такую небольшую программку.

    program Chr_Ord_Example;
    
    begin
      writeln(ChrUnicode(30000));
      writeln(OrdUnicode('*'));
      writeln(Chr(42));
      writeln(Ord('*'));
    end.

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

    Символьный тип в Паскаль

    Накладываются. Просто Unicode длиннее, чем кодировка Windows.

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

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

    Строки могут иметь произвольную длину.  Строки изменяемы.

    Наверное, сейчас вы сомневаетесь в том, что в PascalABC.NET строки могут быть произвольной длины. Давайте проверим это с помощью небольшой программы.

    program String_Example;
    
    label m1;
    begin
      var s: string; {Так как мы с вами работает в PascalABC.NET, то данная конструкция здесь не является ошибкой.}
      var n := 0; 
      s := 'HelluuHelluuuuuuuulluuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuo! Helluuuuuuuuuuuuuuuuuuuuuuuuuuuuuo! Huuuuuuuuuuuuuuuuuuuuuuuuuuuuuo! HHelluuuuuuuuuuuuuuuuuuuuuuuuuuuuuo! Huuuuuuuuuuuuuuuuuuuuuuuuuuuuuo! Huuuuuuuuuuuuuuuuuuuuuuuuuuuuuo! Huuuuuuuuuuuuuuuuuuuuuuuuuuuuuo! Huuuuuuuuuuuuuuuuuuuuuuuuuuuuuo! Huuuuuuuuuuuuuuuuuuuuuuuuuuuuuo! Huuuuuuuuuuuuuuuuuuuuuuuuuuuuuo! Huuuuuuuuuuuuuuuuuuuuuuuuuuuuuo! Huuuuuuuuuuuuuuuuuuuuuuuuuuuuuo! Huuuuuuuuuuuuuuuuuuuuuuuuuuuuuo! Huuuuuuuuuuuuuuuuuuuuuuuuuuuuuo! Huuuuuuuuuuuuuuuuuuuuuuuuuuuuuo! Huuuuuuuuuuuuuuuuuuuuuuuuuuuuuo! Huuuuuuuuuuuuuuuuuuuuuuuuuuuuuo! Huuuuuuuuuuuuuuuuuuuuuuuuuuuuuo! Huuuuuuuuuuuuuuuuuuuuuuuuuuuuuo! Huuuuuuuuuuuuuuuuuuuuuuuuuuuuuo! Huuuuuuuuuuuuuuuuuuuuuuuuuuuuuo! Huuuuuuuuuuuuuuuuuuuuuuuuuuuuuo! Huuuuuuuuuuuuuuuuuuuuuuuuuuuuuo! Huuuuuuuuuuuuuuuuuuuuuuuuuuuuuo! Huuuuuuuuuuuuuuuuuuuuuuuuuuuuuo! Huuuuuuuuuuuuuuuuuuuuuuuuuuuuuo! Huuuuuuuuuuuuuuuuuuuuuuuuuuuuuo! Huuuuuuuuuuuuuuuuuuuuuuuuuuuuuo! Huuuuuuuuuuuuuuuuuuuuuuuuuuuuuo! Huuuuuuuuuuuuuuuuuuuuuuuuuuuuuo! Huuuuuuuuuuuuuuuuuuuuuuuuuuuuuo! Huuuuuuuuuuuuuuuuuuuuuuuuuuuuuo! Huuuuuuuuuuuuuuuuuuuuuuuuuuuuuo! Huuuuuuuuuuuuuuuuuuuuuuuuuuuuuo! Huuuuuuuuuuuuuuuuuuuuuuuuuuuuuo! Huuuuuuuuuuuuuuuuuuuuuuuuuuuuuo! Huuuuuuuuuuuuuuuuuuuuuuuuuuuuuo! Huuuuuuuuuuuuuuuuuuuuuuuuuuuuuo! Huuuuuuuuuuuuuuuuuuuuuuuuuuuuuo! Huuuuuuuuuuuuuuuuuuuuuuuuuuuuuo! Huuuuuuuuuuuuuuuuuuuuuuuuuuuuuo! Huuuuuuuuuuuuuuuuuuuuuuuuuuuuuo! Huuuuuuuuuuuuuuuuuuuuuuuuuuuuuo! Huuuuuuuuuuuuuuuuuuuuuuuuuuuuuo! Huuuuuuuuuuuuuuuuuuuuuuuuuuuuuo! Huuuuuuuuuuuuuuuuuuuuuuuuuuuuuo! Huuuuuuuuuuuuuuuuuuuuuuuuuuuuuo! Huuuuuuuuuuuuuuuuuuuuuuuuuuuuuo! Huuuuuuuuuuuuuuuuuuuuuuuuuuuuuo! Huuuuuuuuuuuuuuuuuuuuuuuuuuuuuo! Huuuuuuuuuuuuuuuuuuuuuuuuuuuuuo! Huuuuuuuuuuuuuuuuuuuuuuuuuuuuuo! Huuuuuuuuuuuuuuuuuuuuuuuuuuuuuo! Huuuuuuuuuuuuuuuuuuuuuuuuuuuuuo! Huuuuuuuuuuuuuuuuuuuuuuuuuuuuuo! Huuuuuuuuuuuuuuuuuuuuuuuuuuuuuo! Huuuuuuuuuuuuuuuuuuuuuuuuuuuuuo! Huuuuuuuuuuuuuuuuuuuuuuuuuuuuuo! Huuuuuuuuuuuuuuuuuuuuuuuuuuuuuo! Ho! uuuuuuuuuuuuuuuuuuuuuuuuuuuuuo! Huuuuuuuuuuuuuuuuuuuuuuuuuuuuuo! Huuuuuuuuuuuuuuuuuuuuuuuuuuuuuo! Huuuuuuuuuuuuuuuuuuuuuuuuuuuuuo! Huuuuuuuuuuuuuuuuuuuuuuuuuuuuuo! Huuuuuuuuuuuuuuuuuuuuuuuuuuuuuo! Hlluuuuuuuuuuuuuuuuuuuuuuuuuuuuuo! Huuuuuuuuuuuuuuuuuuuuuuuuuuuuuo! Huuuuuuuuuuuuuuuuuuuuuuuuuuuuuo! Huuuuuuuuuuuuuuuuuuuuuuuuuuuuuo! Huuuuuuuuuuuuuuuuuuuuuuuuuuuuuo! Huuuuuuuuuuuuuuuuuuuuuuuuuuuuuo! Huuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuo! HelluuHelluuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuo! uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuo! uuuuuuuuuuuuuuuuuuuuuuo! HelluuHelluuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuoHelluuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuo! HelluuHelluuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuo! uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuo! uuuuuuuuuuuuuuuuuuuuuuo! HelluuHelluuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuo! HelluuHelluuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuo! uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuo! uuuuuuuuuuuuuuuuuuuuuuo! HelluuHelluuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuoHelluuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuo! HelluuHelluuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuo! uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuo! uuuuuuuuuuuuuuuuuuuuuuo! HelluuHelluuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuo! uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuo! uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuo! uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuo! HelluuHelluuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuo! uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuo! uuuuuuuuuuuuuuuuuuuuuuo! HelluuHelluuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuoHelluuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuo! HelluuHelluuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuo! uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuo! uuuuuuuuuuuuuuuuuuuuuuo! HelluuHelluuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuo! uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuo! uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuo!';
      writeln(Length(s)); {Функция length() возвращает длину строки.}
      m1: {ставим метку}
      s := s + s; {В программировании операция сложения, выполненная со строками, называется конкатенацией}
      Inc(n);
      if n < 11 then goto m1;
      writeln(Length(s));
    end.

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

    Кроме того, в PascalABC.NET реализованы размерные строки. Для их описания используется тип string[n], где n — константа целого типа, указывающая длину строки.

    Перечислимый и диапазонный типы

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

    Перечислимый тип определяется упорядоченным набором идентификаторов. Чтобы объявить  новый тип, используется специальное слово — type. Его необходимо ставить перед var.

    type
      typeName = (value1, value2,..., valueN);

    Значения перечислимого типа занимают 4 байта. Каждое значение value представляет собой константу типа typeName, попадающую в текущее пространство имен.

    Например:

    type
      Month = (January, February, March, April, May, June, July, August, September, October, November, December);

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

    var
      a, b: month;
    
    begin
      a := February;
      b := Month.August;
    end.

    Для значений перечислимого типа можно использовать функции Ord, Pred и Succ, а также процедуры Inc и Dec (Подробнее про эти функции и процедуры). Функция Ord возвращает порядковый номер значения в списке констант соответствующего перечислимого типа, нумерация при этом начинается с нуля.

    program type_example;
    
    type
      Month = (January, February, March, April, May, June, July, August, September, October, November, December);
    
    var
      a, b: month;
    
    begin
      a := February;
      b := Month.August;
      writeln(a,', ', b);
      Inc(a);
      b := pred(b);
      writeln(a,', ', b);
      writeln(Ord(a),', ', Ord(b));
    end.

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

    Результат работы программы

    Диапазонный тип

    Диапазонный тип представляет собой подмножество значений целого, символьного или перечислимого типа и описывается в виде a..b, где a — нижняя, b — верхняя граница интервального типа, a<b.

    Пример.

    program type_example;
    
    type
      Month = (January, February, March, April, May, June, July, August, September, October, November, December);
    
    var
      a : January..May;
      b : 1..10;
      c : 'a'..'z';
    
    begin
      a := March;
      b := 2;
      c := 'b';
      b := pred(b);
      writeln(a,', ', b,', ', c);
    end.

    Диапазонный тип

    Результат работы программы

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

    На сегодня все! Урок получился объемным, но, надеюсь, понятным. Если же у вас возникли вопросы, напишите нам.

    Понравилась статья? Поделить с друзьями:
  • Диапазон возраста в excel
  • Диапазон значений на excel график
  • Диапазон в таблице ms excel это все ячейки одной строки
  • Диапазон значений в excel больше меньше
  • Диапазон в word это