Глава 3. Элементы языка.

  3.2 Идентификаторы
  3.3 Константы
  3.4 Выражения
  3.5 Операции
  3.6 Структура программы
  Тест для закрепления материала

            оглавление

3.1. АЛФАВИТ


   Алфавит языка Турбо Паскаль включает буквы, цифры, шестнадцатеричные цифры, специальные символы и зарезервированные слова.
   Буквы - это буквы латинского алфавита от а до z и от А до Z. В Турбо Паскале нет различия между прописными и строчными буквами алфавита, если только они не входят в символьные и строковые выражения.
Цифры - арабские цифры от 0 до 9.
   Каждая шестнадцатеричная цифра имеет значение от 0 до 15. Первые 10 значений обозначаются арабскими цифрами 0...9, остальные шесть - латинскими буквами A...F или a...f.
Специальные знаки Турбо Паскаля - это символы: + - * / = , ' . : ; < > [ ] ( ) { } ^ @ $ #
К специальным знакам относятся также следующие пары символов: ; < > <= >= := (* *) (..)
В программе эти пары символов нельзя разделять пробелами, если они используются как знаки операций отношения или ограничители комментария. Символы (. и .) могут употребляться соответственно вместо [и]
Особое место в алфавите языка занимают пробелы, к которым относятся любые символы ASCII в диапазоне кодов от 0 до 32. Эти символы рассматриваются как ограничители идентификаторов, констант, чисел, зарезервированных слов. Несколько следующих друг за другом пробелов считаются одним пробелом (последнее не относится к строковым константам).
В Турбо Паскале имеются следующие зарезервированные слова:
and              end                     nil              shr
asm              file                      not            string
array            for                      object        then
begin            function              of               to
case             goto                   or               type
const            if                        packed       unit
constructor   implementation   procedure   until
destructor     in                       program      uses
div               inline                   record        var
do                interface             repeat        while
downto        label                   set              with
else              mod                   shl              xor
   Зарезервированные слова не могут использоваться в качестве идентификаторов.
Стандартные директивы первоначально связаны с некоторыми стандартными объявлениями в программе. К ним относятся:
absolute      far            near
assembler   forward   private
external      interrupt   virtual
   Вы можете переопределить любую стандартную директиву, т.е. объявить одноименный идентификатор. Стандартные директивы PRIVATE и VIRTUAL действуют только в пределах объявления объектов

                                               Вверх.


3.2. ИДЕНТИФИКАТОРЫ


   Идентификаторы в Турбо Паскале - это имена констант, переменных, меток, типов, объектов, процедур, функций, модулей, программ, полей в записях. Идентификаторы могут иметь произвольную длину, не значащими (уникальными в области определения) являются только первые 63 символа.
     Идентификатор всегда начинается буквой или знаком подчеркивания, за которым могут следовать буквы, цифры и знак подчеркивания (код; 95 в ASCII). Пробелы и специальные символы алфавита не могут входить в идентификатор.
    Примеры правильных идентификаторов:
ALPHA
МуРгоgramIsBestProgram
date_27_sep_39
external
_beta 
Примеры неправильных идентификаторов:
1Program     {начинается цифрой}
block#l         {содержит специальный символ}
My Program {содержит пробел}
Mod             {зарезервированное слово}

                                                   Вверх

3.3. КОНСТАНТЫ


     В качестве констант в Турбо Паскале могут использоваться целые, вещественные и шестнадцатеричные числа, логические константы, символы, строки символов, конструкторы множеств и признак неопределенного указателя NIL.
   Целые числа записываются со знаком или без него по обычным правилам и могут иметь значение от -2147483648 до +2147483647. Следует учесть, что, если целочисленная константа выходит за указанные границы, компилятор дает сообщение об ошибке. Такие константы должны записываться с десятичной точкой, т.е. определяться как вещественные числа.
   Вещественные числа записываются со знаком или без него с использованием десятичной точки и/или экспоненциальной части. Экспоненциальная часть начинается символом е или Е, за которым могут следовать знаки «+» или «-» и десятичный порядок. Символ е (Е) означает десятичный порядок и имеет смысл «умножить на 10 в степени». Например,
3.14Е5 - 3.14 умножить на 10 в степени 5;
-17е-2 - минус 17 умножить на 10 в степени минус 2.
    Если в записи вещественного числа присутствует десятичная то перед точкой и за ней должно быть хотя бы по одной цифре. Если используется символ экспоненциальной части е (£), за ним должна следов хотя бы одна цифра десятичного порядка.
   Шестнадцатеричное число состоит из шестнадцатеричных цифр которым предшествует знак доллара $ (код 36 в ASCII). Диапазон шестнадцатеричных чисел - от $00000000 до $FFFFFFFF.
 Логическая константа - это либо слово FALSE (ложь), либо TRUE (истина).
Символьная константа - это любой символ ПК, заключенный апострофы:
'z' - символ z; 'Ф' - символ Ф.
Если необходимо записать собственно символ апострофа, он удваивается:
'''' - символ ' (апостроф).
Допускается использование записи символа путем указания внутреннего кода, которому предшествует символ # (код 35), например
#97 - символ а:
#90 - символ Т.;
#39 - символ ';
#13 - символ CR.
    Строковая константа - любая последовательность символов (кроме символа CR - возврат каретки), заключенная в апострофы. Если в строке нужно указать сам символ апострофа, он удваивается, например
'Это - строка символов'; 'That''s string’.
Строка символов может быть пустой, т.е. не иметь никаких символов обрамляющих ее апострофах. Строку можно составлять из кодов нужных символов с предшествующими каждому коду символами #, например, строка #83#121#109#98#11#108 эквивалентна строке 'Symbol'.
   Наконец, в строке можно чередовать части, записанные в обрамляющих апострофах, с частями, записанными кодами. Таким способом можно вставлять в строки любые управляющие символы, в том числе символ CR, например:
#7 ’ Ошибка !’ 13’Нажмите любую клавишу ... '#7
  Конструктор множества - список элементов множества, обрамленный квадратными скобками, например:
[1,2,4..7,12] 
[blue, red] 
[]
[true]
  В отличие от стандартного Паскаля, в Турбо Паскале разрешается объявлении констант использовать произвольные выражения, операндами которых могут быть ранее объявленные не типизированные константы, имена типов и объектов, а также следующие функции от них:

abs lo ptr swap
chr odd round trunc
hi ord sizeof
length pred succ

например:

                          CONST

                 MaxReal = MaxLnt div SizeOf (real);

                           NumChar = ord('Z') - ('a')+1;


                 Ln10         = 2.302585092994;

                Ln10R      = 1/Ln10; 

                                                           

                                           Вверх


3.4. ВЫРАЖЕНИЯ


    Основными элементами, из которых конструируется исполняемая часть программы, являются константы, переменные и обращения к функциям. Каждый из этих элементов характеризуется своим значением и принадлежит к какому-либо типу данных. С помощью знаков операций и скобок из них можно составлять выражения, которые фактически представляют собой правила получения новых значений.
  Частным случаем выражения может быть просто одиночный элемент, т.е. константа, переменная или обращение к функции. Значение такого выражения имеет, естественно, тот же тип, что и сам элемент. В более общем случае выражение состоит из нескольких элементов (операндов) и знаков операций, а тип его значения определяется типом операндов и видом примененных к ним операций.
  Примеры выражений:
                    У
                   21
                 ( а + Ь) * с
                  sin(t)
                  а > 2
            not Flag and (a =b)
                    NIL
               [1, 3. .7] * set1

 
                                                 Вверх

3.5. ОПЕРАЦИИ


  В Турбо Паскале определены следующие операции:
« унарные not, @;
• мультипликативные *, /, div, mod, and, shl, shr,
• аддитивные +, -, or, xor,
отношение =, <>, <, >, <=, >=, in

    Приоритет операций убывает в указанном порядке, т.е. наивысшим приоритетом обладают унарные операции, низшим - операции отношения. Порядок выполнения нескольких операций равного приоритета устанавливается компилятором из условия оптимизации кода программы не обязательно слева направо. При исчислении логических выражен операции равного приоритета всегда вычисляются слева направо, при будут вычисляться все или только достаточные операции в зависимости ( установленной в среде Турбо Паскаля опция OPTIONS/COMPILER/COMPLETE BOOLEAN.EDIT.-при установлен ном значении этой опции вычисляются все операции отношения, не установленном - только те, которые достаточны для получения результата (см. прил. 1).
   Это обстоятельство необходимо учитывать при использовании операций отношения с функциями, в которых изменяются глобальные переменные или параметры, передаваемые по имени, например:

                    var
             а,Ь : Integer: 
        FUNCTION Add I(var x; integer) : Integer;
           Begin 
                inc(x);
           Addl :=x
   End {Add}
           BEGIN {main}
      if (a > b) or (Addl(a) > 100) then b := a;
   При выполнении этого фрагмента значение переменной А будет зависеть от настройки опции: если опция активизирована, значение . всегда наращивается на 1, если не активизирована - только в случае А • В.
Правила использования операций с операндами различного тип приводятся в табл. 2.

 
Опе-
рация
Действие Тип операндов Тип результата
not Отрицание Логический Логический
not То же Любой целый Тип операнда
@ Адрес Любой Указатель
* Умножение Любой целый Наименьший целый
* То же Любой вещественный Extended
* Пересечение множеств Множественный Множественный
/ Деление Любой вещественный Extended
div Цело численное деление Любой целый Наименьший целый
mod Остаток То же То же
and Логическое И Логический Логический
and То же Любой целый Наименьший целый
shl Левый сдвиг То же То же
shr Правый сдвиг         ''              ''
+ Сложение Любой целый  Наименьший целый
+ То же Любой вещественный Extended
+ Объединение множеств Множественный Множественный
+ Объединение строк Строковый Строковый
- Вычитание Любой целый Наименьший целый
or Логическое ИЛИ Логический Логический
or То же  Любой целый Наименьший целый
= Равно Любой простой или строковый Логический
<> Не равно То же То же
< Меньше Логический Логический
<= Меньше или равно То же То же
> Больше             ''             ''
>= Больше или равно                 ''          ''
                           
         При действиях с вещественным типом одним из операндов может быть значение любого целого типа. Результат операций имеет указанный в таблице тип EXTENDED только для установленного в среде Турбо Паскаля режима генерации кода, рассчитанного на арифметический сопроцессор или на его эмуляцию (см. прил.1). Если этот режим не установлен, результат будет иметь значение типа REAL.
Унарная операция @ применяется к операнду любого типа и возвращает результат типа POINTER (см. гл.6), в котором содержится адрес операнда. Пусть, например, задано описание
            type
              TwoChar - array [1..2] of char;
            var
              Int : integer;
             TwoCharPtr : ^TwoChar;
  Тогда оператор
                 TwoCharPtr :- @lnt;
   приведет к тому, что в TWOCHARPTR будет храниться адрес целочисленной переменной INT, которая может теперь интерпретироваться как совокупность двух символов. Поэтому возможен, например, такой оператор:
If TwoCharPtr[1)л - 'С' then ...
   Если операция @ применяется к процедуре, функции или методу в объекте, ее результатом будет адрес точки входа в эту процедуру (функцию, метод). Этот адрес можно использовать только в подпрограмме написанной на ассемблере, или в фрагментах INLINE.
В Турбо Паскале определены следующие логические операции:
not - логическое НЕ;
and - логическое И;
or - логическое ИЛИ;
хоr - исключительное ИЛИ.
   Логические операции применимы к операндам целого и логического типов. Если операнды - целые числа, то результат логической операции есть тоже целое число, биты которого (двоичные разряды) формируются из битов операндов по правилам, указанным в табл. 3. 1
   К логическим же в Турбо Паскале обычно относятся и две сдвиговые операции над целыми числами:
1 shl ] - сдвиг содержимого i на / разрядов влево; освободившиеся младшие разряды заполняются нулями;
i stir j - сдвиг содержимого / на / разрядов вправо; освободившиеся старшие разряды заполняются нулями.
               таблица 3
                                Логические операции над данными типа Integer
                                               (поразрядно)
                   
операнд1 операнд2 not and or xor
       1        ----     0     ---     ---     ---
        0       ----                 1      ---     ---     ---
       0               0     ---      0     0     0
        0         1        ---      0      1      1
        1         0      ---      0      1      1
         1         1      ---      1      1      0

 


   В этих операциях in/- выражения любого целого типа. С помощью программы примера 11 можно вывести на экран результат применения логических операций к двум целым числам.

{Программа вводит два целых числа и печатает результат применения к ним логических операций. Для выхода из программы ввести Ctrl-2 и нажать ввод}

var

  m,n : integer;

Begin

  While not EOF do

  Begin

    Write(‘n,m=’);

    Readln(n,m);

    Writeln(‘not=’ not n,’ ’ ,not );

    Writeln (‘ and= ‘,n  and m);

    Writeln (‘ or = ‘ ,n or m);

    Writeln (' xor= ' , n xor m);

    Writeln (' shl=' , n shjm);

    Writeln(' shr= ' , n shr m);

  end;

end.

   В программе организуются ввод двух произвольных целых чисел печать результата применения к ним всех логических операций. Для выхода из программы следует нажать CTRL-Z и «Ввод».
    Логические операции над логическими данными дают результат логического типа по правилам, указанным в табл. 4.
   Операция отношения IN применяется к двум операндам. Первый (левым) операндом должно быть выражение любого порядкового типа вторым - множество, состоящее из элементов того же типа, или идентификатор множественного типа. Операция дает TRUE, если левый операнд принадлежит множеству, например:
var
  с : char; 
type
  digit = jet of 'О’.. '9’;
  if с in digit then ........

 

Таблица 4

              Логические операции над данными типа BOOLEAN

операнд1 операнд2 not and or xor
false        ---  true     ---    ---    ---
true        ---    false     ---    ---    ---
 false false   ---  false false false
false  true   ---  false  true  true
 true  false   ---  false  true  true
true  true   ---   true    true   false

 

                                       Вверх
 


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


     Структура любой программной единицы (программы, процедуры или функции) должна быть такой:
                   <Объявление программной единицы>
                            { Раздел описаний }
                               BEGIN
                 { Раздел исполняемых операторов }
                     END <символ конца программной единицы>
     Здесь <Объявление программной единицы> - заголовок программы процедуры или функции; заголовок программы можно опускать без каких-либо последствий для программы; для процедур и функций наличие заголовка обязательно; 
<символ конца программной единицы> - символ «.» для программы или символ «;» - для процедуры и функции.
  Любой из двух разделов программной единицы - раздел описания или исполняемых операторов, или оба одновременно могут быть пустыми т.е. не содержать никаких описаний или исполняемых операторов.
    В разделе описаний должны содержаться описания всех идентификаторов, используемых в разделе исполняемых операторов. Исключением являются идентификаторы, определенные в интерфейсных частях программных модулей (библиотек), а также глобальные для процедуры или функции идентификаторы (см. гл. 8). Если программная единица использует идентификатор из интерфейсной части какого-либо модуля (см. глав. 9), в начале программы в предложении USES необходимо указать имя этого модуля. Последнее не относится к идентификаторам, определенным в стандартном модуле SYSTEM, т.е. имя этого модуля в предложения USES указывать не нужно. Более того, модуль SYSTEM считается предварительно объявленным, поэтому объявление 
                                  Uses system;
компилятор расценит как попытку двойного объявления модуля SYSTEM
и даст соответствующее сообщение об ошибке.
    В разделе описаний объявляются идентификаторы типов, объектов констант, переменных, а также метки, процедуры и функции. Описания типов и объектов должно предшествовать зарезервированное слово ТУРE
    описанию констант - CONST, переменных - VAR и меток – LABEL например:
            Type
DlgType set of '0'..'9';
StrType = string[10]:
const
N = 100:
EPS = 1e-9;
var
x,y : real;
st : StrType;
label
lb1, Ib2;
       В отличие от стандартного Паскаля разделы TYPE, CONST, Vam LABEL могут следовать друг за другом в любом порядке и встречаться в разделе описаний сколько угодно раз. 
       Описание процедуры или функции заключается в указании заголовки этой процедуры (функции) и ее тела (подробнее см. в гл. 8).
Структура программных библиотек (модулей) описана в гл.9.
 
                            Вверх    оглавление

Хостинг от uCoz