34855

Процедуры прерываний

Лекция

Информатика, кибернетика и программирование

00 Типизированные константы Пример . c1 и c2 идентификаторы обычной и типизированной констант type тип константы данный элемент присутствует в описании только типизированной константы это и является её основной внешней отличительной особенностью; vlue значение...

Русский

2013-09-08

78 KB

0 чел.

Процедуры прерываний

Обработка <Ctrl + Break>

Прерывание исполнения программы можно вызвать нажатием комбинации клавиш Ctrl + Break (применяется, если программа «зависла»)

Процедура Break

Осуществляет принудительный выход из цикла.

Если цикл организован с помощью оператора FOR, WHILE или REPEAT, применение процедуры Break приводит к передаче управления следующему (после тела цикла) оператору. Это напоминает действие оператора GOTO, осуществляющего переход к метке, находящейся сразу после тела цикла.

При вызове процедуры Break вне цикла FOR, WHILE или REPEAT имеет место ошибка.

Процедура Continue

Осуществляет переход к следующей итерации цикла.

Если цикл организован с помощью оператора FOR, WHILE или REPEAT, применение процедуры Continue прерывает текущую итерацию и инициирует переход к следующей итерации. При вызове процедуры Continue вне цикла FOR, WHILE или REPEAT имеет место ошибка.

Процедура Exit

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

Если текущим блоком является тело программы, обращение к процедуре Exit инициирует завершение программы.

Процедура Halt(Cod)

Останавливает выполнение программы и передаёт управление операционной системе. Cod – необязательный параметр, содержащий код завершения программы.

Пример:

Найти первое отрицательное число во входном потоке из вещественных чисел (не более 100)

--------------------------------------------------------------------

Program L_6;

 Var i: integer;

        a: real;

    begin

        for i:=1 to 100 do

                 begin

                 read(a);

                  if a>=0 then continue; {при выполнении условия изменяется

                                                                               параметр цикла  и цикл  повторяется сначала}

                                 writeln(‘первое отр. число =,а:5:2’);

                                 Break      {выход из цикла}

                             end;

 end.

---------------------------------------------------------

Ответ:

4

2

1

-8

первое отр число=-8.00

----------------------------------------------------------

Типизированные константы

                                                Пример

                                     .

                                                                               .

                                               const

 Вид <идентификатор> = <значение>                 c1=value

  Вид <идентификатор> : <тип> = <значение>       c2:type=value

                                                                                .

                                                                                .

         Здесь для сравнения даны описания обычной(c1) и типизированной(c2) констант.

        c1 и c2 – идентификаторы обычной и типизированной констант

        type – тип константы, данный элемент присутствует в описании только типизированной константы – это и является её основной внешней отличительной особенностью;

       value – значение, присваиваемое константе (как типизированной, так и нетипизированной) при объявлении.

        И те и другие константы описываются в разделе описаний констант.

Константы вида <идентификатор>=<значение> изменять в программе нельзя.

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

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

Константы простых типов

Здесь всё просто. Указывается идентификатор константы, её тип и значение.

Const

     a1 : real = 6.565;

     symb : char = ’B’;

     start : integer = 10;

     rest : integer = 20;

 

Идентификаторы типизированных констант нельзя использовать в описаниях других констант, типов и переменных. Например, если, используя объявленные выше константы start и rest попробовать объявить переменную:

Var

  a : array [start .. rest] of char;

то будет зафиксирована ошибка.

Также не допускается в разделе описания констант объявлять типизированные (а также и обычные) константы списком:

Const

  symb1, symb2, symb3 : char=’B’;

Константы – строки

Пример

   c5 : string = ‘привет’;

   rl : string = ‘простые типы’;

 

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

Если максимальная длина не указана, по умолчанию эта величина принимается равной 255 символов. Вот пара примеров:

Const

  readline : string [10] = ‘Глава’;

          AB : string [26] = ‘abcdefghijklmopqrstuvwxyz’;

Константы – массивы

В константах-массивах список констант разделяется запятыми и заключается в круглые скобки:

 mass : array [0 .. 4] of byte = (1, 2, 3, 7, 8);

vector : array [1 .. 3] of real = (1.5, 0.8, -5.4);

Массив символов может быть описан следующими эквивалентными записями:

mas : array [-1 .. 2] of char = ‘abcd’;

или

mas : array [-1 .. 2] of char = (‘a’, ’b’, ’c’, ’d’);

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

Например:

Const

 matr : array [1 .. 2, 1 .. 4] of byte = ((0, 1, 3, 5),(4, 1, 2, 3));

a : array [0 .. 1, 1 .. 2, 1 .. 3] of byte = (((0, 2, 1),(4, 3, 3)),((6, 7, 8),(12, 11, 13)));

Константы-записи

         Определение константы-записи имеет вид:

<идентификатор> : <тип записи> = (<список значений полей>);

          

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

Например:

    Type

          Port = record

                    x, y : real;

      end;

   const

       s : port = (x : 1.5; y : 1.2);

Константы-множества

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

Type

   a1 : set of  1..15;

   a2 : set of char;

const

   b1 : a1 = [1, 2, 3..5, 8, 12..15];

   b2 : a2 = [‘a’, ‘d’, ‘f..i’, ‘l’];

   b3 : set of ‘0’..’9’ = [‘1’, ‘3’, ‘5’..’8’];

В этом примере в описаниях первых двух констант (b1 и b2) использованы ранее объявленные типы (a1 и a2). В описании третьей константы (b3) использован анонимный тип (set of ‘0’..’9’).

Константы – указатели

При объявлении константы–указателя для определения её значения обычно используется константное адресное выражение.

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

Рассмотрим примеры:

   Type

           p = ^byte;

    const

           pp : p = nil;

           pb : byte = 0;

           pa : p = @pb;

Здесь объявлен тип p, являющийся указателем на адрес в памяти, по которому содержатся данные типа Byte. Кроме того, объявлены три константы-указателя – pp, pa, pb. Первая константа (pp) имеет тип p и ей присвоено значение nil.

Вторая константа (pb) объявлена с типом byte, и, наконец, третья константа (pa) имеет тип p, (как и pp) и ей присвоено значение @pb .

Иными словами, pa – это указатель на адрес в памяти, по которому содержится константа pb. Здесь nil и @pbконстантные адресные выражения. (@ - оператор, позволяющий создавать указатели).

Структура программы

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

<Объявление программной единицы>

{Раздел описаний}

BEGIN

{Раздел исполняемых операторов}

END.    {символ конца программной единицы} 

<Объявление программной единицы> - заголовок программы, процедуры или функции. Заголовок программы можно опускать, для процедур и функций  наличие заголовка обязательно.

{Символ конца программной единицы}- это точка для программы  или «;» для процедуры или функции.

В {разделе описаний} объявляются идентификаторы типов, объектов, констант, переменных, а также метки, процедуры и функции.

Каждый блок определяется своим ключевым словом. Структура программы имеет вид:

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

                   USES     <список библиотечных модулей>;

                  LABEL  <список меток в основном блоке>;

                  CONST  <определение констант>;

                     TYPE

                            <определение типов>;

                     VAR

  <определение глобальных переменных>

  <определение процедур>

  <определение функций>

                  BEGIN

   <основной блок программы>

                   END.

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

                  USES CRT, DOS, GRAPH;  

производится подключение трех модулей СRТ, DOS и GRAPH.

Модуль СRТ содержит процедуры и функции для управления вывода текста на дисплей, звуковым генератором и чтения с клавиатуры. DOS содержит программы операционной системы. GRAPH содержит комплекс графических программ универсального назначения.

В блоке LABEL перечисляются через запятую метки, используемые в программной единице. Метка может содержать числовое значение от 0 до 9999 либо являться идентификатором, состоящим не более чем 63 символов. Например:

LABEL 1, 400, М1, EPS;

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

Блок CONST описывает константы двух видов:

CONST <имя1>=<константа 1>;

                       <имя2>=<константа 2>;

                 …….

или

        CONST <имяК>:<тип>=<константаК>;

                     < имяR>: <тип>=<константаR>;

                 ……..

Например:

CONST 

NI = 100;

d : real = 7.65432;

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

 

Блок ТУРЕ содержит определения вводимых программистом нестандартных  типов в следующих формах

TYPE <идентификатор>=(список компонентов);

или

TYPE <идентификатор>=<описание типа> или<имя другого типа>;

Пример:    TYPE FAMILY= (FATHER, MATHER);

Если в Паскале используются только стандартные типы, например: INTEGER, REAL, то этот блок опускается.

Блок VAR описывает имена переменных, а также имена массивов:

VAR

A1, A2.....An: <тип1>;

В1, В2.....Вn: <типК>;

<имя массива>: АRRАY [диапазон] OF <тип>;

 

где буквами А1, B1 указаны имена переменных, а <тип1>.<типК> - типы соответствующих переменных, [диапазон]  указывает начальное и конечное значения индексов массива, <тип> задает тип элементов массива.

Пример:

VAR

А, В, С: INTEGER;             {объявлены три переменные целого типа} 

   D, M: REAL:                    {объявлены две вещественные переменные}

    MASS1: ARRAY [1..10] OF REAL;      {массив из 10 чисел} 

    MASS2: ARRAY [-2..2] OF CHAR;      {массив из пяти символов}

Основной  блок программы начинается с ключевого слова BEGIN и заканчивается  END, после которого ставится точка. Основной блок содержит программу из выполняемых операторов, в которой используется все, что было объявлено и описано в разделе описаний. Пример программы, явно преобразующей вещественные числа в целые:

PROGRAM INTREAL:

VAR 

А, В, С : INTEGER;

X,Y, Z : REAL;

BEGIN

READ (X, Y);

Z:=Y+X;

A:=TRUNC(Z);               {выделение целой части} 

B:=ROUND(Z);               {* округление *}

C:=В-А;

WRITELN(‘Z=', Z, 'A=', А, 'B=', В, 'C=', С);

END.

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

Пример. Программа, вычисляющая сумму двух чисел.

Program pr1;                                        {заголовок программы}

vаг                                                       {раздел объявления переменных}

 x, y, summa: real;

 begin                                                   {тело программы} 

   Write ('Введите числа Х и Y ');      {вывод сообщения на экран}

   ReadLn (Х, Y);                                 {чтение двух чисел}

     Summa:= Х + Y;                             {определение суммы} 

       WriteLn ('Сумма чисел Х и Y равна ', Summa)   {вывод результата}

 End.


 

А также другие работы, которые могут Вас заинтересовать

76410. Построение переходной функции по ВЧХ замкнутой системы 297.32 KB
  Характеристику построенную в натуральном масштабе по оси частот аппроксимируем стандартными характеристиками :тогда очевидно чтогде616В настоящее время чаще всего используют в качестве стандартных характеристик трапеции рис. 68 при этом интеграл 616 может быть вычислен в видеРис 68617где параметр трапеции характеризующий ее форму см. рис. Рассмотрим построение переходной функции САР если ее ВЧХ имеет вид показанный на рис.
76411. Определение величины перерегулирования по ВЧХ 17.81 KB
  Приближенное значение величины перерегулирования можно определить по виду графиков ВЧХ -если ВЧХ монотонно убывающая, то = О, -если ВЧХ не возрастающая, то максимальное значение перерегулирования если ВЧХ возрастающая, то максимальное значение перерегулирования ...
76412. Алгоритм построения логарифмической амплитудной характеристики последовательного соединения типовых звеньев 59.87 KB
  Построение асимптотической ЛАХ последовательного соединения типовых звеньев сводится к суммированию на графике отрезков прямых линий с наклонами кратными 20 дБ дек. Используем более эффективный способ построения ЛАХ последовательного соединения звеньев который не требует построения ЛАХ отдельно каждого звена и последующего суммирования этих ЛАХ. Очевидно что результирующая ЛАХ от такого перераспределения параметров должна остаться без изменений. Построим ЛАХ звеньевсомножителей из 4.
76413. Признаки переходного и установившегося режимов работы САР 49.49 KB
  Признаки переходного и установившегося режимов работы САР Можно ли изучая выходной сигнал САР определить работает она на данном отрезке времени в переходном или установившемся режиме Для этого нужно более точно сформулировать что такое переходный и что такое установившийся режимы с практической точки зрения. Красная кривая переходный процесс при идеальном ступенчатом воздействии. Нарастание воздействия со скоростью примерно 8 ед сек сопровождается заметным переходным процессом голубая линия при скорости 4 ед сек переходный процесс...
76415. Преобразование Лапласа и его свойства 89.59 KB
  Различают прямое и обратное преобразование Лапласа. Прямое преобразование Лапласа определяется уравнением. Обратное преобразование Лапласа определяют из решения.
76416. Частотные характеристики САУ 83.42 KB
  Если на вход подавать синусоидальные колебания 1 то на выходе после затухания переходных процессов этим заниматься не будем также возникают синусоидальные гармонические колебания с той же частотой но с другой амплитудой и сдвинутые по фазе относительно входных колебаний: где φ сдвиг по фазе выходных колебаний относительно входных.угол φ Зависимость модуля АФЧХ от частоты колебаний ω называется амплитудно-частотной характеристикой. Зависимость сдвига фаз входных и выходных колебаний φ от частоты ω называется фазочастотной...
76417. Дифференциальные уравнения и передаточные функции 38.88 KB
  Введем понятие звена автоматической системы. При математическом описании системы удобно разбить систему на звенья и для каждого звена записать свое уравнение. Уравнение такого звена связывает две величины: x входная величина или воздействие и y выходная величина или реакция. Пусть момент времени t=0 выбран так что начальные условия на выходе звена являются нулевыми.
76418. Типовые сигналы 139.87 KB
  Дельтафункция является четной функцией между функцией Хэвисайда и Дирака существует связь выраженная соотношением: или На практике считается что на вход объекта подана функция функция если время действия прямоугольно го импульса намного меньше времени переходного процесса. Сдвинутые элементарные функции К этим функциям относятся функции Хевисайда и Дирака с запаздыванием т. и Рисунок 4 при этом Все...