Мегаобучалка Главная | О нас | Обратная связь


БАЗОВЫЕ ЭЛЕМЕНТЫ ЯЗЫКА ТURBO РASCAL



2019-12-29 244 Обсуждений (0)
БАЗОВЫЕ ЭЛЕМЕНТЫ ЯЗЫКА ТURBO РASCAL 0.00 из 5.00 0 оценок




Язык программирования Pascal был разработан Никлаусом Виртом. Датой его рождения считается 1970 г. Он обеспечивает возможность создания больших программ, поддерживая их строгую логическую структуру. Считается важнейшим инструментом для обучения методам структурного программирования. В 1984 г. фирмой Borland была представлена первая версия компактного и довольно быстрого компилятора Turbo-Pascal. В состав Turbo-Pascal кроме компилятора входит инструментальная программная оболочка, способствующая повышению эффективности создания программ (среда ТР). Совершенствуя Turbo-Pascal, фирма Borland разрабатывала новые версии пакета. Уже первая версия Turbo-Pascal содержала расширения языка Pascal, хотя и небольшие. В последующих версиях расширений становилось все больше и больше: встроенная графика (версия 3.0), от которой потом отказались, модули (4.0), средства ООП (5.5) и т.д. и т.д. Начиная с версии 7.0, язык стал называться Borland Pascal. Со временем в Turbo Pascal появились дополнительные средства, обеспечивающие поддержку концепции объектно-ориентированного программирования, и язык программирования Turbo Pascal стал именоваться Object Pascal. На базе Object Pascal в фирме Borland был создан принципиально новый программный продукт, который получил название Delphi. Delphi - это среда разработки программ, ориентированных на работу в Windows.

АЛФАВИТ

Алфавит языка ТР включает:

§ прописные и строчные латинские буквы от a до z и от А до Z , а также знак подчеркивания (в ТР нет различия между прописными и строчными буквами алфавита, если только они не входят в строковые и символьные выражения),

§ арабские цифры от 0 до 9,

§ шестнадцатеричные цифры 0,1,2,...,9,A(a),B(b),...,F(f),

§ специальные символы + - * / = , ‘ . : ; < > [ ] ( ) { } ^ @ $ # и пробел,

§ составные символы := <> .. <= >= (* *) (вместо {}) (. .) (вместо [])

Неделимые последовательности знаков алфавита образуют слова, которые несут в программе определенный смысл и отделяются друг от друга  разделителями. Разделителем может служит пробел и другие символы, комментарий. Слова подразделяются на зарезервированные слова, стандартные идентификаторы и  идентификаторы пользователя.

Зарезервированные слова  являются составной частью языка, имеют фиксированное значение и определенной начертание. Например, begin end array const if then else ... (всего 69 для ТР 7.0). Зарезервированные слова не могут использоваться в качестве идентификаторов. Исключение составляют заразервированные слова, которые обозначают стандартные директивы (absolute assembler external far forward interrupt near private virtual) и связаны со стандартными объявлениями в программе. Можно переопределить стандартную директиву, т.е. объявить одноименный идентификатор. В среде ТР зарезервированные слова выделяются цветом (либо жирным шрифтом).

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

В модуле Graph  константы цвета Black=0, Blue=1,..., тип ТextSettingsType = records с полями Font:Word, Direction:Word, CharSize:Word, Horis:Word, Vert:Word, процедура MoveTo (X, Y: Integer) - смещает текущий указатель к точке X, Y, функция GetMaxX - возвращает максимальную горизонтальную координату графического экрана.

Например, константа MaxInt = 32767 (максимальное целое в типе integer), встроенные функции Sin, Exp. Любой из стандартных идентификаторов можно переопределить. Однако чаще всего это приводит к ошибкам (использование в стандартных модулях).

Идентификаторы пользователя - это имена констант, переменных, меток, типов, объектов, процедур, функций, модулей, программ и полей в записях. Есть правила:

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

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

- имена меток могут начинаться как буквой, так и цифрой

Можно использовать как прописные, так и строчные буквы. Компилятор не делает различий между ними. На практике рекомендуется использовать эту особенность для более простого чтения и понимания значений идентификаторов (MyProgram). Для лучшего восприятия и последующего изменения серьезных программ полезно в имена закладывать смысл, которые несут эти переменные, константы и т.д. (например, обозначение дней недели не просто d, а Days или Dni).

 

КОНСТАНТЫ И ПЕРЕМЕННЫЕ

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

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

Формат: Const

<идентификатор> = <значение константы>;

Значениями констант в ТР могут быть

- целые числа. Записываются со знаком или без и могут иметь значения от -2 147 483 648 до 2 147 483 647. Если необходимо описать константу выходящую за эти границы, то это нужно делать с использованием десятичной точки и экспоненциальной части, т.е. описывать ее как вещественную.

- вещественные числа. Записываются со знаком или без него, может использоваться десятичная точка и экспоненциальная часть. Экспоненциальная часть начинается символом е(Е), за которой может следовать знак + или - и десятичный порядок.

Например, а = 3.14е5;  b = -72Е-3;

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

- шестнадцатеричные числа. Состоит из шестнадцатиричных цифр, которым предшествует знак $. Диапазон от $00000000 до $FFFFFFFF.

- логические константы. Это либо слово TRUE (истина), либо FALSE (ложь).

- символы. Любой символ из 8-битной таблицы символов компьютера, включающей и русские буквы, заключенный в апострофы

Например, Znak1 = 'd'; Znak2 = 'ф';

Если необходимо записать сам символ апострофа, то он удваивается ' ' ' '.

Допускается использование записи символа путем указания его внутреннего кода, которому предшестует символ #. Например, #90 - символ Z, #161 - символ б.

- строки символов. Любая последовательность символов (кроме символа CR - возврат каретки), заключенная в апострофы.

Если в строке нужно указать сам символ апострофа - он удваивается. Строка м.б. пустой. Можно составить из кодов нужных символов с предшествуюшими каждому коду знаком #. Можно чередовать запись с помощью самих символов в апострофах с записью кодов.

- конструкторы множеств. Список элементов множества, обрамленный квадратными скобками. Например,

[1,2,4..7,12] [red,blue,green] [true]

- и признак неопределенного указателя NIL.

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

Const

Ln10 = 2.3026;

Ln10R = 1 / Ln10;

X = MaxInt div SizeOf(real); (SizeOf - функция, возвращающая количество байт, отведенных на данный тип, Real - 6).

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

Формат: Var

<идентификатор> : <тип>;

Подробнее типы переменных будут рассмотрены позднее.

Существуют типизированные константы, которые являются к.б. промежуточным звеном между переменными и константами. Они описываются в разделе Const. Должен быть указан тип, как у переменных. <идентификатор>:<тип>=<значение>.Типизированная константа равнозначна переменной с заранее определенным значением. Действия над ней могут производиться, как над переменной. Смысл введения типизированных констант заключается в упрощении операции присваивания переменной начального значения, поскольку для любой обычной перменной перед ее использованием необходимо задать ее начальное значение в виде отдельной операции присваивания.

 

ВЫРАЖЕНИЯ И ОПЕРАЦИИ

Переменные и константы всех типов используются в выражениях. Выражение задает порядок выполнения действий над элементами данных и состоит из операндов (константы, переменные, обращения к функциям), знаков операций и круглых скобок. Операции определяют действия, которые надо выполнить над операндами. В примере (X + Y - 10)*4 X,Y,10,4 – операнды, "+", "-", "*" – знаки операций сложения, вычитания и умножения. Круглые скобки ставятся для управления порядком выполнения операций. Частным случаем выражения может быть одиночный элемент (константа, переменная или обращение к функции).

Операции в языке ТР подразделяются на арифметические, логические (булевские), отношения, строковые, операции с массивами и др. в зависимости от того какого типа операнды в них используются.

Операции могут быть унарные и бинарные. В первом случае операция относится к одному операнду и всегда записывается перед ним, во втором случае операция выражает отношение между двумя операндами и записывается между ними. Унарными операциями являются not (отрицание), @ (создание указателя на переменную), “+” (сохранение знака), “-“ (отрицание знака) (например, -Х, not Y). Последние две операции могут быть и бинарными (X + Y).

Рассмотрим три основных типа операций. Особенности остальных будут описаны при рассмотрении соответствующих типов данных.

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

Операции сложения “+”, вычитания “-“, умножения “*”, деления “/” выполняются как в обычных арифметических действиях. Для операций “+”, “-“, “*”, если операндами являются целые числа (типы Byte, ShortInt, Word, Integer, LongInt), то результат будет относится к целому типу, наименьшему, включающему типы операндов (общий тип). Т.е. X : Byte, Y : Word, Z := X + Y, Z : Word. Для тех же операций, если операнды – вещественные, то результат – Extended (при установленном сопроцессоре, если его нет – то Real). Аналогично, если один из операндов – целое число, а другой – вещественное. Операция деления “/” дает в результате тип Extended как при целых, так и вещественных операндах.

Целочисленное деление div отличается от обычного деления тем, что возвращает целую часть частного, а дробная часть отбрасывается. Оба операнда – целые, результат – общий тип. Примеры, 11 div 5 – результат 2, 2 div 3 – 0.

Деление по модулю mod восстанавливает остаток, полученный при выполнении целочисленного деления. Типы операндов такие же, как у div. Примеры, 11 mod 5 – 1, 2 mod 3 – 2.

Операции сдвига K shl N  и  K shr N оперируют с двоичным (битовым) представлением целых чисел. Они восстанавливают в качестве результата значение, полученное путем сдвига на N позиций влево или вправо числа К, представленного в двоичном виде. Оперируют с целыми числами, тип результата – общий тип. Например, 2 shl 7. (2)10 = (10)2. Сдвиг влево на 7 позиций приводит к (100000000)2 (освободившиеся младшие разряда заполняются нулями), что равно (256)10. Аналогично, 161 shr 2 дает 40. ((161)10 = 10100001, сдвиг на 2 вправо – (101000)2 = 8 + 32 = (40)10. Биты, которые уходят за край разрядности теряются).

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

К логическим операциям относятся and – логическое И, or – логическое ИЛИ, not – логическое отрицание, xor – исключительное ИЛИ. Они применяются к операндам как логического типа, так и целого типа. Логические операнды (логическая константа, логическая переменная, элемент массива логического типа,...) могут принимать значения True или False. Логические операции над логическими данными дают результат логического типа по следующим правилам (табл.)

 

Операнд 1 Операнд 2 and or xor not
False False False False False -
True False False True True -
False True False True True -
True True True True False -
True - - - - False
False - - - - True

 

Если операндами являются целые числа, то оперирование происходит с двоичным представлением чисел. При этом результат – общий тип. При использовании этих операций осуществляется побитное (поразрядное) сравнение операндов. Двоичные цифры результата образуются по следующим правилам (табл.)

 

Операнд 1 Операнд 2 and or xor not
0 0 0 0 0 -
1 0 0 1 1 -
0 1 0 1 1 -
1 1 1 1 0 -
1 - - - - 0
0 - - - - 1

 

Например, 12 or 22 соответствует сравнению, соответственно, 01100 и 10110. В соответствии с правилами получаем 11110, что соответствует (30)10. Т.е. 12 or 22 = 30.

Некоторая особенность появляется при работе с типами целых чисел, которые могут принимать отрицательные значения. К таким типам относятся ShortInt (-128..127) – 8 бит, Integer (-32768..32767) – 16 бит, LongInt (-2 147 483 648..2 147 483 647) – 32 бита. У этих типов старший разряд отводится под знак (0 – при положительном, 1 – при отрицательном). Для остальных разрядов, если число положительное, то кодировка осуществляется обычным образом (если Х = 12 и Х:ShortInt, то (Х)2 = 0 0001100). Если число отрицательное, то в остальных разрядах записывается число, которое в сумме с исходным дает модуль максимально допустимого значения для данного типа. Т.е., если X = -12, Х:ShortInt, модуль максимально допустимого значения для данного типа – 128, 116 + 12 = 128, поэтому (Х)2 = 1 1110100 – последние 7 цифр образуют число 116.

Учитывая это обстоятельство, рассмотрим применение операции not к переменной, которая имеет определенное значение (Х = 5), но описывается с помощью разных типов.

Х:Byte, (X)2 = 00000101, not X = (11111010)2 = (250)10.

X:ShortInt, (X)2 = 0 0000101, not X = (1 1111010)2 = - (128-122)10 = -(6)10.

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

 

Операция Название Выражение Результата
= Равно А = В True, если А равно В
<> Не равно A <> B True, если А не равно В
> Больше А > B True, если А больше В
< Меньше А < B True, если А меньше В
>= Больше или равно А >= В True, если А больше или равно В
<= Меньше или равно А <= B True, если А меньше или равно В
in Принадлежность А in M True, если А находится в списке М

 

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

Приоритет операций.

Первый (высший) приоритет имеют унарные операции @, not.

Следующий (второй) приоритет у операций типа умножения *, /, div, mod, and, shl, shr.

Третий приоритет имеют операции типа сложения +, -, or, xor.

Четвертый (низший) приоритет - у операций отношения =, <>, <, >, <=, >=, in.

Имеются три основных правила для определения старшинства операций:

n операнд, находящийся между двумя операциями с различными приоритетами, связывается с операцией, имеющей более высокий приоритет;

n операнд, находящийся между двумя операциями с равными приоритетами, связывается с операцией, которая находится слева;

n выражение, заключенной в скобки, перед выполнением вычисляется, как отдельный операнд;

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

 

СТРУКТУРА ПРОГРАММЫ

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

Общее число символов в файле не должно быть больше 64535. Компилятор ТР воспринимает строки программы длиной не более 126 символов. Редактор ТР вставляет в конец каждой строки невидимый на экране символ-разделитель (вставляется клавишей Enter).

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

В полном варианте программа на языке ТР имеет следующий вид (по мере объяснения).

Program <имя программы>;

Uses <имя1>,<имя2>,…;

Label

1, 234, m1, Stop;

Const

MaxN: word = 100; {Типизированная константа}

Vxod = ‘Блок_1’; {Строковая константа}

Kod = $124;        {Константа – шестнадцатеричное число}

Type

Matrix = array[1..10] of real;

LatBukva = (‘a’..’z’);

Dni = 1..31;

Var

A, B, C : integer;

Result, Summa : real;

Vxod : boolean;

 

Procedure <имя>;

<тело процедуры>;

…;

Function <имя>;

<тело функции>;

…;

BEGIN

<операторы>;

END.

Регистр написания заголовков неважен. Любой раздел, кроме раздела операторов, может отсутствовать (если в нем нет необходимости). Название программы в ТР имеет чисто декоративное назначение, как комментарий. Конструкция Program <имя> не является необходимой в ТР, по сравнению с другими версиями Паскаля.

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

Раздел описания меток Label содержит перечисленные через запятую метки переходов, установленные в основном блоке программы. Метка, поставленная перед каким-либо оператором, позволяет выполнить прямой переход к этому оператору из любого места программы с помощью оператора безусловного перехода goto. Метки могут обозначаться целым числом 0..9999 или символьными конструкциями длиной не более 63 букв (см. пример).

В разделе описания констант Const производится присваивание идентификаторам констант постоянных значений (см. пример).

Тип данных может быть описан непосредственно в разделе описания переменных, либо определяется идентификатором (именем) типа. Стандартные типы данных не требуют специального описания. Пользовательские типы, которые имеют имена описываются разделе Type (см. пример) (подробное рассмотрение типов данных ТР – позднее).

Раздел описания глобальных переменных (переменных, которые могут быть использованы в любом месте, процедуре, функции программы) начинается зарезервированным словом Var. После чего перечисляются имена переменных с указанием через двоеточие их типа (см. пример).

В отличие от стандартного языка Pascal в ТР разделы Label, Type, Const, Var могут следовать друг за другом в любом порядке и встречаться в разделе описаний сколько угодно раз. Если в них нет необходимости, они могут отсутствовать. Однако поскольку программа компилируется последовательно, начиная с начала, важно соблюдать правило: все, что в программе используется должно быть перед этим описано. Например, если переменная, описывается, как массив М :array[1..Max] of integer, то величина Мах = 20 должна быть ранее (выше по программе) описана в разделе Сonst.

В разделе описания процедур и функций размещаются тела подпрограмм. Подпрограмма - это программная единица, имеющая имя, по которому она может быть вызвана из других частей программы. В языке ТР роль подпрограмм выполняют процедуры и функции. В общем случае подпрограмма имеет ту же структуру, что и программа (состоит из раздела описаний и раздела операторов). Для описания подпрограмм используются зарезервированные слова Procedure и Function. Заголовки процедур и функций записываются в начале программы до раздела операторов. Обычно за заголовком сразу следует реализация (тело) процедуры и функции, но они могут быть и разнесены внутри программы. Процедуры и функции подразделяются на стандартные и определенные пользователем. Стандартные - являются частью языка и могут вызываться без предварительного описания. Описание процедур и функций пользователя обязательно. Более подробное рассмотрение будет в следующих разделах.

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

Основным в программе является раздел операторов. Именно в нем с предварительно описанными переменными, константами, значениями функций выполняются действия, позволяющие получить результат, ради которого создавалась программа. Это раздел начинается словом Begin, далее следуют операторы языка, отделенные друг от друга «;». Завершает раздел слово End и точка. Операторы выполняются строго последовательно в том порядке, в котором они записаны, а также в соответствии с синтаксисом языка и правилами пунктуации. Раздел операторов завершает программу.

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

Текст программы может также содержать директивы компилятора, которые используются программистом для управления режимами компиляции, т.е. включать или выключать контроль ошибок, использовать или эмулировать математический сопроцессор, изменять распределение памяти и т.д. Эти директивы, как и комментарии, заключаются в фигурные скобки, но они имеют отличительный признак $, после чего указывается буква-ключ с последующим знаком “+” (включить режим) или “-“ (выключить) (не допускаются пробелы между открывающей скобкой, знаком $ и ключом компилятора). Директивы могут быть переключающими, условными и параметрическими. Переключающие директивы воздействуют на те опции, которые включены в диалоговое окно OPTIONS/COMPILER; условные директивы определяют условия, при которых компилируются те или иные франменты программы; параметрические директивы задают параметры, которые должен учитывать компилятор. Некоторые директивы могут действовать только на часть текста программы (локальные директивы). В отличие от этого глобальные директивы располагаются в начале текста программы (модуля) и действуют сразу на всю программу (модуль) в целом. Например, {$R-} – отключить проверку диапазонов индексов массивов, {$N+} – использовать сопроцессор 80Х87.


ТИПЫ ДАННЫХ ЯЗЫКА ТР

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

Общая структура данных ТР.

ПРОСТЫЕ ТИПЫ

Эти типы определяют тип только одного отдельного значения.

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

К любому из порядковых типов (целые, логический, символьный, перечисляемый и тип-диапазон) применима функция ORD(X), которая возвращает порядковый номер значения Х. Применительно к целым эта функция возвращает само значение Х (т.е. ORD(X) = X). Применительно к логическому типу дает в результате 0 или 1, к символьному - целое число от 0 до 255 (коды), к перечисляемому - целое число от 0 до 65535. Тип-диапазон сохраняет все свойства базового порядкового типа, поэтому результат применения к нему функции ORD(X) зависит от свойств этого типа.

К порядковым типам также применимы функции:

n PRED(X) - возвращает предыдущее значение порядкового типа (значение, которое соответствует порядковому номеру ORD(X)-1). Следовательно, ORD(PRED(X)) = ORD(X) - 1.

n SUCC(X) - возвращает следующее значение порядкового типа (соответствует номеру ORD(X) +1). Т.е. ORD(SUCC(X)) = ORD(X) + 1;

Запрещены Pred ( первый элемент перечисления ) и Succ (последний элемент перечисления).

Пример,

Var

c,d : char;

begin

c := ‘f’;

d := PRED(c);

end.

Значение переменной d - это символ ‘e’.

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

 

ЦЕЛЫЕ ТИПЫ

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

 

НАЗВАНИЕ Длина, байт Диапазон значений
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

 

Целочисленные значения записываются привычным способом: 123 4 -5 -63333. Число должно быть записано без всяких преобразований. Будет ошибкой задать целое число следующим образом: 1е+2 (в смысле 100), 123.0.

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

Стандартные функции, которые применяются к целым типам, будут рассмотрены после рассмотрения вещественных типов.

 

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

Значениями переменных логического типа может быть либо TRUE, либо FALSE (это по сути логические константы). Требуется 1 байт памяти. С логическими переменными связаны рассмотренные ранее логические операции. Широко применяются в условных операторах языка. Обозначение Var X:Boolean; (ORD(false) = 0; ORD(true) = 1).

 

СИМВОЛЬНЫЙ ТИП

Значениями переменных символьного типа является множество всех символов ПК. Каждому символу приписывается целое число (код) в диапазоне 0...255 (оно возвращается функцией ORD) - всего 8 бит (1 байт).

Для кодировки используется код ASCII (American Standard Code of Information Interchange). Это 7-битный код, с его помощью кодируются буквы латинского алфавита, знаки препинания и служебные символы (можно закодировать лишь 128 символов в диапазоне 0...127). Символы с номерами 128...255 отводятся под национальный алфавит и могут меняться для разных компьютеров. Наибольшее распространение в России получила т.н. альтернативная кодировка (альтернативная ГОСТу), в которой символы псевдографики расположены на тех же места как в кодировке IBM (символы 176-223) (в кодировке IBM вместо русских букв расширение латинского алфавита для западноевропейских языков). Формат: Var X:Char; К типу Char применимы операции отношения, а также встроенные функции:

CHR(X) (обратная ORD) - преобразует выражение Х:Byte в символ и возвращает этот символ;

UPCASE(X) - возвращает прописную букву, если Х - строчная латинская буква, в противном случае (например, если Х - русская буква) возвращает сам символ Х.

В программе значения переменных (как и констант) символьного типа должны быть заключены в апострофы (например, Х := ‘ф’). Кроме того, допускается использование записи символа путем указания его кода, которому предшествует символ # (операция присваивания Х := #228 аналогична предыдущей).

 

ПЕРЕЧИСЛЯЕМЫЙ ТИП

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

Type

colors = (red,white,blue);

Var

Color1,Color2 : colors;

или иначе

Var

Color3 : (red,white,blue);

Переменные Сolor1,Color2,Color3 могут принимать только одно из трех перечисленных значений. Имена внутри круглых скобок являются константами. Паскаль не поддерживает операции ввода-вывода значений перечисляемого типа. Значения перечисляемого типа должны иметь синтаксис идентификаторов, поэтому не допускаются использование цифр, строк, служебных символов. Соответствие между значениями перечисляемого типа и порядковыми номерами этих значений (которые возвращаются функцией ORD) устанавливается следующим образом: первое значение в списке получает номер 0, второе – 1 и т.д. Максимальная мощность перечисляемого типа составляет 65536 значений.

 

ТИП–ДИАПАЗОН

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

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

Type

digit1 = ‘1’..’9’; (базовый тип – Сhar)

digit2 = 1..9;  (базовый тип – целый)

или

 

Var

LatChr : ‘A’..’Z’;

Левая граница не должна превышать правую границу. Два символа .. рассматриваются как один, поэтому между ними недопустимы пробелы.

В библиотеке ТР есть две функции, поддерживающие работу с типами-диапазонами:

HIGH(X) – возвращает максимальное значение типа-диапазона (для digit2 – это 9);

LOW(X) – возвращает минимальное значение (digit2 – 1).

 

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

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

 

Название Длина, байт Кол-во значащих цифр Диапазон десятичного порядка
Real 6 11...12 -39...+38
Single 4 7...8 -45…+38
Double 8 15...16 -324...+308
Extended 10 19...20 -4932...+4932
Comp 8 19...20 -9.2*10+18…9.2*1018 (-263…(263-1)) (диапазон значений)

 

Вещественное число в ТР может занимать от 4 до 10 смежных байт и имеет следующую структуру в памяти компьютера:

s е m

Здесь s – знаковый разряд числа (один двоичный разряд), е – экспоненциальная часть (содержит порядок в двоичном представлении), m – мантисса числа (в двоичном представлении). Мантисса имеет длину от 23 (для Single) до 63 (для Extended) двоичных разрядов, что обеспечивает ту точность в десятичных цифрах, которая обозначена в таблице.

Вещественные значения могут записываться обычным способом с десятичной точкой (Х := -0.009), а также в экспоненциальном формате (Y := 123.4e-23). Если присутствует десятичная точка, за ней и перед ней д.б. хотя бы одна цифра. Если есть символ е - за ним д.б. хотя одна цифра.

Несмотря на большое разнообразие вещественных типов, все они кроме Real вводятся в расчете на арифметический сопроцессор – устройство, которое подключается непосредственно к центральному процессору и предназначен для выполнения операций над числами в формате с плавающей точкой и длинными целыми числами. Сопроцессор значительно (в десятки раз) ускоряет вычисления, связанные с вещественными числами. В процессорах, начиная с 80486 он встроен. Сопроцессор всегда обрабатывает числа в формате Extended (наиболее мощном). При этом остальные вещественные типы получаются простым усечением результатов до нужных размеров, что применяется в основном для экономии памяти. Т.е. если

Var

e1,e2 : Extended;

e3 : Double;

result : Single;

. . .

result := e1*e2/e3;

то значение выражения справа будет вычислено как тип Extended. Но при присваивании его переменной result меньшей мощности Single будет произведено усечение и значительно уменьшится число значащих цифр после десятичной точки.

Тип Real оптимизирован на работу без сопроцессора, поэтому его использование при наличии сопроцессора будет крайне неэффективно (время, «съедаемое» на преобразование его в сопроцессорный тип, перекрывает ускорение, а точности при этом не добавляется). Поэтому, если предполагается использовать разработанную программу на разных компьютерах (с сопроцессором и без него), целесообразно ввести свой вещественный тип (например, Float), и с помощью него описать все переменные. Конкретный тип, которому соответствует Float, зависит от наличия сопроцессора.

Type

Float = Real; {без сопроцессора}

Float = Double; {с сопроцессором}

Var

X : Float;

Y : array [1..9] of Float;

Чтобы программа могла задействовать возможности сопроцессора она должна иметь в своем начале директиву (ключ компилятора) $N+. Однако даже если в компьютере нет сопроцессора, ТР дает возможность эмулировать его работу программным путем. Т.е. можно создать программу, которая будет работать с вещественными числами большой точности, независимо от наличия сопроцессора. Это достигается существенными потерями в скорости счета. Включением эмуляции управляет ключ компилятора $E.

Особое место занимает тип Comp. Он трактуется как вещественное число без экспоненциальной и дробной части. Фактически, Comp – это «большое» целое число со знаком, сохраняющее 19…20 значащих цифр. В то же время тип Comp полностью совместим с любыми другими вещественными типами, над ним определены все вещественные операции и т.д. Наиболее подходящей областью применения являются бухгалтерские операции, когда денежные суммы выражаются в целых рублях (копейках), а действия над ними могут привести к очень длинным целым числам.

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

 

МАТЕМАТИЧЕСКИЕ ФУНКЦИИ

ABS(X) – возвращает абсолютное значение аргумента Х (Х – целое/вещественное, результат – как у аргумента);

Pi – значение числа «Пи» (результат – ве



2019-12-29 244 Обсуждений (0)
БАЗОВЫЕ ЭЛЕМЕНТЫ ЯЗЫКА ТURBO РASCAL 0.00 из 5.00 0 оценок









Обсуждение в статье: БАЗОВЫЕ ЭЛЕМЕНТЫ ЯЗЫКА ТURBO РASCAL

Обсуждений еще не было, будьте первым... ↓↓↓

Отправить сообщение

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



©2015-2024 megaobuchalka.ru Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. (244)

Почему 1285321 студент выбрали МегаОбучалку...

Система поиска информации

Мобильная версия сайта

Удобная навигация

Нет шокирующей рекламы



(0.015 сек.)