Тип word в паскале
Переменные похожи на константы, но их значения могут быть изменены во время выполнения программы. В Pascal переменные должны быть сначала объявлены, прежде чем они могуть быть использованы:
IdentifierList - несколько идентификаторов, разделённых запятыми (,). Все идентификаторы в списке объявляются как имеющие одинаковый тип.
Основные типы данных Pascal включают:
Стандартный Pascal не предусматривает строкового типа данных, но большинство современных компиляторов имеют его. Опытные программисты на Pascal также используют указатели для динамического распредедения памяти, объекты для объектно-ориентированного прграммирования и многие другие, но эти позволят вам начать.
Дополнительная информация о типах данных Pascal:
- Free Pascal поддерживает тип String, как он определён в Turbo Pascal: последовательность символов с необязательным указанием размера. Он также поддерживает ansistring (с неограниченной длиной), как в Delphi. Возможные объявления:
- Предопределённый тип ShortString определён как строка длиной 255.
- AnsiString - строки, которые не имеют ограничения по длине. Это строки с подсчётом ссылок и гарантированно завершающиеся нулевым символом. Внутренне ansistring рассматривается как указатель: реальное содержимое строки хранится в куче, в которой выделяется столько памяти, сколько необходимо для хранения содержимого строки.
- Тип Widestring (используется для представления строк юникодных символов) реализован во многом подобно ansistring: с подсчётом ссылок, нуль-терминированный массив, только реализованный как массив WideChar вместо обычных Char.
- Тип данных boolean может иметь только два значения: TRUE (истина) и FALSE (ложь).
Пример объявления нескольких переменных:
Из документации FPC:
Free Pascal осуществлят автоматическое преобразование типов в выражениях, где используются различные виды целых типов.
* Обратите внимание, что для 64-разрядных версий Windows и целей, не относящихся к Intel, Extended является псевдонимом для Double.
При описании переменной необходимо указать ее тип. Тип переменной описывает набор значений, которые она может принимать, и действия, которые могут быть над ней выполнены. Описание типа определяет идентификатор, который обозначает тип.
Простые типы делятся на стандартные (порядковые) и перечисляемые (ограниченные).
Стандартные типы
Турбо-Паскаль имеет четыре встроенных стандартных типа: integer (целое), real (вещественное), boolean (логический) и char (символьный).
Целочисленный тип (integer)
В Турбо-Паскале имеется пять встроенных целочисленных типов: shortint (короткое целое), integer (целое), longint (длинное целое), byte (длиной в байт) и word (длиной в слово). Каждый тип обозначает определенное подмножество целых чисел, как это показано в следующей Таблице.
Встроенные целочисленные типы.
Тип
Диапазон
Формат
8 битов со знаком
16 битов со знаком
32 бита со знаком
8 битов без знака
16 битов без знака
Арифметические действия над операндами целочисленного типа осуществляются в соответствии со следующими правилами:
- Тип целой константы представляет собой встроенный целочисленный тип с наименьшим диапазоном, включающим значение этой целой константы.
- В случае бинарной операции (операции, использующей два операнда), оба операнда преобразуются к их общему типу перед тем, как над ними совершается действие. Общим типом является встроенный целочисленный тип с наименьшим диапазоном, включающим все возможные значения обоих типов. Например, общим типом для целого и целого длиной в байт является целое, а общим типом для целого и целого длиной в слово является длинное целое. Действие выполняется в соответствии с точностью общего типа и типом результата является общий тип.
- Выражение справа в операторе присваивания вычисляется независимо от размера переменной слева.
Операции совершаемые над целыми числами:
SQR - возведение в квадрат
DIV - после деления отбрасывает дробную часть
MOD - получение целого остатка после деления
ABS - модуль числа
RANDOM(X)-получение случайного числа от 0 до Х
Описываются переменные целого типа следующим образом:
var список переменных: тип;
Например: var а,р,n:integer;
Вещественный тип(real)
К вещественному типу относится подмножество вещественных чисел, которые могут быть представлены в формате с плавающей запятой с фиксированным числом цифр. Запись значения в формате с плавающей запятой обычно включает три значения - m, b и e - таким образом, что m*b е , где b всегда равен 10, а m и e являются целочисленными значениями в диапазоне вещественного типа. Эти значения m и e далее определяют диапазон и точность вещественного типа.
Имеется пять видов вещественных типов: real, singlе, duble, exnende, comp. Вещественные типы различаются диапазоном и точностью связанных с ними значений
Диапазон и десятичные цифры для вещественных типов
Тип
Диапазон
Цифры
2.9x10Е-39 до 1.7x10Е 38
1.5x10Е-45 до 3.4x10Е 38
5.0x10Е-324 до 1.7x10Е 308
3.4x10Е-493 до 1.1x10Е 403
Операции совершаемые над вещественными числами:
- Все операции допустимые для целых чисел.
- SQRT(x)-корень квадратный из числа х.
- SIN(X), COS(X), ARCTAN(X).
- LN(X)-натуральный логарифм.
- EXP(X)-экспонента Х (е х ).
- EXP(X*LN(A))-возведение в степень (А х ).
- Функции преобразования типов:
- TRUNC(X)-отбрасывает дробную часть;
- ROUND(X)-округление.
- Если в арифметическом действии встречаются числа типа real и integer, то результат будет иметь тип real.
- Все составные части выражения записываются в одну строку.
- Используются только круглые скобки.
- Нельзя подряд ставить два арифметических знака.
Описываются переменные вещественного типа следующим образом:
Символьный тип(char)
K типу char относится любой символ заключенный в апострофы. Для представления апострофа как символьную переменную, надо заключить его в апостроф:’’’’.
Каждый символ имеет свой код и номер. Порядковые номера цифр 0,1..9 упорядочены по возрастанию. Порядковые номера букв также упорядочены по возрастанию, но не обязательно следуют друг за другом.
К символьным данным применимы знаки сравнения:
Функции, которые применимы к символьным переменным:
-
ORD(X) - определяет порядковый номер символа Х.
Перечислимый тип
Перечислимый тип данных назван так потому, что задается в виде перечисления констант в строго определенном порядке и в строго определенном количестве. Перечислимый тип состоит из списка констант. Переменные этого типа могут принимать значение любой из этих констант. Описание перечислимого типа имеет вид:
где - это особый вид констант, задаваемых через запятую и имеющих свой порядковый номер, начиная с 0.
Можно выполнить такие операторы присваивания:
но нельзя выполнять смешанные присваивания:
К переменным перечислимого типа применимы следующие функции:
1. ORD - порядковый номер
2. PRED - предшествующий элемент
3. SUCC - последующий элемент.
Переменные перечислимого типа можно сравнить, так как они упорядочены и пронумерованы. Так выражения: север < юг, июнь < январь имеют значения TRUE, а юг>запад и бак
Ограниченный тип
Если переменная принимает не все значения своего типа, а только в некотором диапазоне, то ее можно рассматривать как переменную ограниченного типа. Каждый ограниченный тип задается путем накладывания ограничения на базовые типы.
Как и любой другой язык программирования, Паскаль имеет свой алфавит. Под алфавитом языка программирования понимают набор символов, с помощью которых могут быть образованы величины, выражения и операторы.
Алфавит языка Паскаль включает:
Для описания величин в языке Паскаль используются константы и переменные.
Константы – величины, не изменяющие своего значения в процессе выполнения программы.
Переменные – величины, в ходе выполнения программы могут быть неоднократно переопределены.
Типы констант и переменных
Паскаль позволяет использовать следующие типы констант и переменных:
- Простые
- целочисленный тип (integer);
- логический (boolean);
- символьный (char);
- перечисляемый (задается перечислением всех возможных значений переменной);
- интервальный (задается с указанием наибольшего и наименьшего значений);
- вещественный (real);
- строка (string);
- массивы (array);
- записи (record);
- множества (set);
- файл (file);
Каждому из перечисленных типов соответствует свой набор операций по обработке данных. Так, для целочисленного и вещественного типов используются операции арифметических действий (сложение, вычитание, умножение, деление). Для логического типа выполняются операции and – логическое и, or – логическое или, xor – логическое исключающее или, not – логическое не.
Кроме того, Паскаль предусматривает возможность вычисления для каждого типа данных значений стандартных функций.
В данной таблице приведены стандартные арифметические функции.
Вычисление косинуса числа
Вычисление синуса числа
Вычисление абсолютного значения числа
Вычисление квадрата числа
Вычисление квадратного корня числа
Вычисление арктангенса числа
Вычисление экспоненты числа
Вычисление натурального логарифма числа
Вычисление четности числа
Вычисление целой части числа
Примечание: Во всех тригонометрических функциях число x указывают в радианах.
Переменные и константы с помощью знаков операций, стандартных функций и круглых скобок могут связываться в выражения. Правила их записи близки к соответствующим правилам записи математических выражений. При вычислении значений выражений устанавливается следующий приоритет выполнения операций:
- Not;
- *, /, mod, div, and;
- +, -, or;
- , >=, <>, =.
Операции одного и того же старшинства выполняются слева направо в порядке их появления в выражении. Выражения в круглых скобках вычисляются в первую очередь.
Любая программа, написанная в Паскаль, строится в соответствии с рядом правил, определяющих ее структуру. В частности, в состав любой программы должны входить три раздела:
- Объявления и соглашения;
- Тексты процедур и функций;
- Основной блок программы.
Лишь в простейших программах второй из перечисленных разделов может отсутствовать. Каждый раздел имеет в свою очередь составные части, так что в целом структуру программы, написанной на языке Паскаль, можно представить следующим образом.
Раздел объявлений и соглашений
Кроме того, в программе могут использоваться комментарии – любой текст, ограниченный (*…*) или . Комментарий может быть помещен в любом месте программы.
Рассмотрим более подробно назначение каждой части программы.
Заголовок программы состоит из зарезервированного слова Program и идентификатора – имени программы.
В строке Uses производится подключение используемых в данной программе библиотек (стандартных модулей). Паскаль содержит ряд модулей, в том числе:
- System – системный модуль низкоуровневых программ поддержки языка Паскаль; подключается автоматически, даже при отсутствии ссылки на него в строке uses;
- Dos и WinDos – модули поддержки часто используемых функций MS DOS и Windows;
- Crt – модуль управления режимами вывода информации на экран;
- Printer – модуль управления выводом информации на печать;
- Overlay – модуль управления оверлеями языка Паскаль; позволяет выполнять программы, которым требуются большие объемы памяти;
- Strings – используется при написании программ, совместимых с Windows;
- Graph – модуль для работы с графикой.
В разделе описания меток содержатся сведения об используемых в программе метках. Переход по ним выполняется оператором goto. Метки отделяются от помечаемого оператора знаком “:”, должны быть описаны, могут быть целочисленными (от 0 до 9999) или идентификаторами. Каждая описанная метка обязательно должна появиться в программе.
Для описания констант используется ключевое слово const, имя константы, знак “=” и значение константы:
В разделе описания типов Type программист может задавать свои типы, сформированные на основе определенных правил с использованием стандартных типов.
В разделе Var описываются переменные, используемые в программе:
В списке переменных их имена отделяются запятой, в качестве имени типа можно использовать один из стандартных типов или идентификатор типа, объявленного в разделе Type. Описанные таким образом переменные могут использоваться в пределах блока, где они были описаны, а также во всех вложенных блоках, если в них эти переменные не описаны повторно.
В разделе текстов процедур и функций в соответствии с определенными правилами производится описание процедур и функций.
Процедура
Процедура имеет следующую структуру:
Раздел объявлений процедуры может включать подразделы Label, const, type, var для обявления локальных меток, постоянных, типов и переменных собственно. Слово «локальный» означает, что все перечисленные объекты могут быть использованы только в рамках данной процедуры или других подчиненных ей процедур.
Функция
Описание функций отличается по структуре от описания процедур только заголовком:
Функция – это особый вид процедуры, результатом разботы которой является единственное значение. С этим значением связывается имя функции, в то время как име процедуры служит только для ее вызова.
Основной блок программы состоит из ряда операторов и является выполняемой частью программы. Он начинается со слова Begin и заканчивается словом end, после которого должна стоять точка. Операторы языка Паскль не привязаны к определенной позиции строки. В одной строке можно указывать несколько операторов. Исполняемые операторы отделяются друг от друга знаком « ; ».
Допускается перенос с одной строки на другую частей операторов (но без разделения ключевых слов).
Как было указано выше, основной блок программы представляет собой некоторый набор операторов.
Оператор – неделимый элемент программы, который позволяет выполнить определенные действия.
Операторы должны записываться строго в соответствии с правилами, установленными для данного языка программирования. Рассмотрим основные операторы языка Паскаль.
Оператор присваивания
Данный оператор предписывает запомнить некоторое значение в переменной. Значение и индентификатор переменной разделены парой знаков « := ». Типы объектов с обеих сторон данного знака должны строго совпадать, за исключением того случая, когда тип переменной – real, а тип выражения – integer.
Общий вид оператора:
Операторы ввода/вывода
Немногие программы обходятся без ввода данных и совсем нет таких, которые не выводят полученные результаты. Ввод данных с клавиатуры дисплея выполняется операторами:
Где - последовательность имен переменных, разделенных запятыми. Буквы ln добавляются в конце оператора для того, чтобы курсор автоматически переходил на следующую строку при выводе на экран текстов или результатов выполнения программы.
При выполнении оператора read (readln) программа останавливается и ждет, пока нужное количество чисел не будет введено с клавиатуры. Вводимые числа разделяют пробелами или нажатием клавиши Enter. По завершении ввода данных следует нажать Enter, после чего компьютер перейдет к выполнению следующего оператора программы.
Вывод данных на экран дисплея выполняется операторами:
Выражения в списке разделяются запятыми. Значения выражений сначала вычисляются, а затем выводятся на экран. Буквы ln имеют то же значение, что и в операторе readln.
Вслед за выражением через двоеточие можно указать ширину поля экрана, в котором разместится выводимое значение.
займет для вывода числа 10 три позиции, а для вывода числа 55 – шесть позиций на экране.
При выводе вещественных значений можно указать, сколько десятичных цифр следует сохранить в дробной части числа, причем количество цифр указывается вслед за шириной поля после двоеточия.
Если х =3,14159, то оператор
займет для вывода переменной х шесть позиций, две из которых будут использованы для дробной части х (т.е. значение х будет округлено до 3,14).
Для того, чтобы прокомментировать выводимые значения, в список ввода можно помещать строки любых символов, заключенные в одинарные кавычки – апострофы.
При выполнении фрагмента программы
На экран будет выведено:
Приведем пример Паскаль-программы.
Задача – составить программу для подсчета суммы двух заданных чисел. Для этого необходимо ввести текст в память компьютера и сохранить на диске под именем pr1. Далее запустить программу на выполнение. При наличии ошибок внести соответствующие исправления. Получить результаты работы программы.
На занятии будет объяснен алгоритм создания типов данных пользователя в Паскаль (Type). Будут разобраны примеры.
Создание типов данных пользователя в Pascal
Типы данных в Pascal делятся на простые и сложные.
К простым типам относятся стандартные, перечисляемые и ограниченные.
К сложным типам – массивы, множества, записи, файлы. Элементами сложных типов могут быть простые и сложные типы. Мы познакомимся со сложными типами данных позже.
Одним из наиболее распространенных типов является порядковый стандартный тип.
Порядковый стандартный тип обозначает конечное линейное множество значений. К нему обычно относят целые типы, байтовые, символьные и логические.Новые (пользовательские) типы данных нужны в первую очередь для наглядности и удобства:
Пример: Задана матрица размерностью 10 x 50. Выполнить описание матрицы, используя пользовательский тип данных
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; var .
Три варианта описаний матрицы эквивалентны:
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 1: Заданы массивы а[1…5], b[1…10] и c[1…15]. Найти среднее арифметическое минимальных элементов массива (использовать процедуру формирования массива (элементы должны генерироваться случайно) и процедуру определения минимального элемента).
При описании процедур использовать пользовательские типы данных.Пример результата:
Перечисляемый тип и интервальный тип в Паскаль
Перечисляемый тип
В программе можно использовать переменные такого типа, который не совпадает ни с одним из стандартных типов.
Так, тип может задаваться перечислением значений при объявлении; переменная данного типа может принимать любое из этих значений.
Эти значения не могут являться строками, их нельзя вывести на печать и нельзя ввести в компьютер при помощи операторов Read и Write .
Рассмотрим пример создания перечисляемого типа в Паскаль:
type pt=(word1,word2, . wordN); var w: pt;
Интервальный тип определяет конкретное подмножество значений, которые может принимать данная переменная. Создается путем задания наименьшего и наибольшего значения порядкового типа. В качестве констант (минимального и максимального значений) могут использоваться значения любых простых типов кроме вещественных типов.
Рассмотрим пример объявления интервального типа:
Совместное использование перечисляемого и интервального типов
Переменную интервального типа можно задать с основой на базовый перечисляемый тип. Рассмотрим пример:
Пример: Если переменная b может принимать одно из значений red, yellow, green, то эту переменную можно описать так: b: red..green; базовым типом для b является тип color:
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 интервального типа определена при помощи базового перечисляемого типа.
Пример: Известно, сколько дней в каждом месяце года. Сколько дней летом?
31,28,31,30,31,30,31,31,30,31,30,31Один из вариантов решения данной задачи выглядит так:
const dni: array[1..12] of byte = (31,28,31,30,31,30,31,31,30,31,30,31); var s,i: integer; begin s:=0; for i:=6 to 8 do s:=s+dni[i]; writeln(s) end.
Код данного решения обладает не самой лучшей наглядностью, к тому же приходится самому вычислять номера месяцев начала и конца лета (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; BEGIN s:=0; for i:=june to august do s:=s+dni[i]; WriteLn(s) END.
Type 4: Правда ли, что сентябрь наступает позже июля?
Вывести «правда» или «ложь».
Замечание: Использовать перечисляемый тип.Использование интервального типа в качестве диапазонного ограничителя
Пример:
Поезд отправляется в путь в 22 часа и находится в пути 10 часов. Во сколько он прибывает на место назначения?Следующий пример продемонстрирует неправильное решение данной задачи:
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.
A word is the processor’s native data unit. Modern consumer processors have a word width of 64 bits.
Data type
Most run-time libraries provide the native data type of a processor as the Pascal data type word . It is a subset of all whole numbers (non-negative integers) that can be represented by the processor’s natural data unit size.
On a 64-bit architecture this means a word is an integer within the range [math]\displaystyle< [0,~2^-1] >[/math] . On a 32-bit architecture a word will be an integer in the range [math]\displaystyle< [0,~2^-1] >[/math] , and so on, respectively.
In GNU Pascal a word is just an alias for cardinal , which has the same properties regarding possible values.
If a signed integer having the processor’s native size is wanted, the data type integer provides this functionality.
For source compatibility reasons, FPC defines word in the same way as Turbo Pascal and Delphi: the subrange data type 0 .. 65535 . The high value 65535 is [math]\displaystyle< 2^-1 >[/math] . Thus a system . word occupies two bytes of space. Subrange data types are stored in a quantity that serves best the goals of performance and memory efficiency.
The processor’s native word size, as defined above, corresponds to different types depending on the purpose you want to use it for:
- the (as of 2020 still undocumented) system . ALUSint and system . ALUUint types correspond to the native word size used by the processor’s ALU (arithmetic and logical unit), as define at the beginning of this page. In general, this type should not be used in high level code. Instead, choose a data type based on the values it should be able to represent, as this is safer and more portable. It is the compiler’s job to generate optimal code. corresponds to the size of pointers to code, such as the address of a procedure. This can be different from a pointer to data, e. g. on targets that support multiple memory models. corresponds to the size of pointers to data.
On many platforms, all of these types have the same size, but it is not the case everywhere.
Читайте также: