Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Информатика [РТФ, Андреев, 2 семестр] / Экзамен (альтернатива).docx
Скачиваний:
10
Добавлен:
05.08.2022
Размер:
136.7 Кб
Скачать

Оператор цикла с предусловием

Структура оператора:

WHILE <условие> DO <оператор>.

WHILE, DO – зарезервированные слова (пока выполняется условие, делать);

<условие> – выражение логического типа;

<оператор> – произвольный оператор.

Если выражение <условие> имеет значение true, то выполняется <оператор>, после чего вычисление выражения <условие> и его проверка повторяются. Если <условие> имеет значение false, оператор while прекращает свою работу.

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

Оператор цикла с постусловием

Структура оператора:

REPEAT <тело цикла> UNTIL <условие>.

REPEAT, UNTIL – зарезервированные слова (повторять до тех пор пока не будет выполнено условие);

<тело цикла> – произвольная последовательность операторов;

<условие> – выражение логического типа.

Тело цикла выполняется хотя бы один раз, после чего вычисляется выражение <условие>: если его значение есть false, операторы тела цикла повторяются, в противном случае оператор REPEAT ... UNTIL завершает работу.

Оператор цикла с параметром

Структура оператора:

FOR <парам. цикла> := <нач. знач.> TO <кон. знач.> DO <оператор>

FOR, TO, DO – зарезервированные слова (для, до, выполнить).

<парам. цикла> – параметр цикла (переменная типа integer);

<нач. знач.>– начальное значение (выражение типа integer);

<кон. знач.>– конечное значение (выражение типа integer);

<оператор> – произвольный оператор.

Предполагается, что в выражения <нач. знач.> и <кон. знач.> не входит параметр цикла.

Например,

for i:= 1 to n do s := s + i* i* i

Читается это так: для i от 1 до n выполнить s := s + i3.

При выполнении оператора FOR сначала вычисляется выражение, задающее значение параметру цикла, затем это значение присваивается параметру цикла.

После этого следует:

1) проверка условия <парам. цикла> <= <конеч. знач.>;

если условие выполняется, то перейти к пункту 2, иначе к пункту 4;

2) выполнение оператора <оператор>;

3) наращивание переменной <парам. цикла> на единицу и переход к пункту 1;

4) завершение работы.

13 Паскаль-оператор выбора

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

  • Если вариантов всего два, то можно обойтись и условным оператором IF, с которым мы уже знакомы. Но если их, к примеру, десять, то использовать конструкцию if then else в pascal становится совсем нецелесообразно. В этом случае оптимален оператор CASE варианта.

  • var otmetka:integer;

  • begin

  • writeln('отметка?');

  • readln(otmetka);

  • case otmetka of

  • 1,2 : writeln ('кошмар!');

  • 3: writeln('плохо');

  • 4: writeln('неплохо');

  • 5: writeln('отлично!');

  • else writeln('таких отметок не бывает');

  • end

  • end.

14 структура паскаль-программы, содержащей нестандартные процедуры (функции)

Программист сам может создавать функции , но их надо описать.  Отличие процедуры и функции- их называют программами(набор действий),но  результат функции- одно единственное число , а процедуры- результат может быть группа чисел,  матрица, т.е не одно единственное число .  Заголовки  procedure <имя процедуры>(<список формальных параметров>);  function <имя функции> (<список форм пар>):<тип результата функции>;  Тело  (описательная часть функции/процедуры)-константы, переменные, типы и т.д.  Begin  (исполнительная часть функции/процедуры)  End;  Список формальных параметров-не обязательный  (параметры являются фактическими-?)  Структура Pascal с процедурами/функциями вложенными друг в друга  А-программа  А1,2- подпрограмма (процедуры/функция)  А1.1,2.1 и т.д.-подпрограммы подпрограммы

15 Формальные параметры паскаль-процедур

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

Формальные параметры в заголовке процедур и функций записываются в виде:

var имя праметраимя типа

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

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

Все формальные параметры можно разбить на четыре категории:

  • параметры-значения (эти параметры в основной программе подпрограммой не меняются);

  • параметры-переменные (эти параметры подпрограмма может изменить в основной программе);

  • параметры-константы (используются только в версии 7.0);

  • параметры-процедуры и параметры-функции (т. е. процедурного типа).

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

function Max(A: arrayt1..100] of Real): Real;

Чтобы правильно записать этот заголовок, следует в основной программе ввести тип-массив, а затем использовать его в заголовке:

type tArr = arrayt1..100] of Real; function Max(A: tArr): Real;

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

16 структура модулей в паскале

Всякий модуль Паскаля имеет следующую структуру:

Unit <имя_модуля>; interface <интерфейсная часть>; implementation < исполняемая часть >; begin  <инициирующая часть>;  end .

Здесь UNIT – зарезервированное слово (единица); начинает заголовок модуля;

  • <имя_модуля> - имя модуля (правильный идентификатор);

  • INTERFACE – зарезервированное слово (интерфейс); начинает интерфейсную часть модуля;

  • IMPLEMENTATION – зарезервированное слово (выполнение); начинает исполняемую часть модуля;

  • BEGIN – зарезервированное слово; начинает инициирующую часть модуля; причем конструкция begin <инициирующая часть> необязательна;

  • END – зарезервированное слово – признак конца модуля.

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

17 Специфика компиляции модулей и примеры их применения

Модуль компилируется точно таким же как и обы­чные программы. Можно компилировать из интегриро­ванной среды или с помощью компилятора командной стро­ки. Но так как модуль не является непосредственно выпол­няемой единицей, то в результате его компиляции образует­ся внешний файл с расширением .TPU(Turbo Pascal Unit). При этом имя файла до расширения .tpu совпадает с именем исходного файла (текста на паскале) до расширения .pas. Чтобы получить доступ к интерфейсным объек­там модуля, необходимо в программе в предложении использования записать имя нужного TPU-файла. Об­щий вид предложения использования:

uses

U1, U2, U3;

где uses- служебное слово, U1, U2, U3- идентификаторы ис­пользуемых модулей. Это предложение должно быть записано сразу после заголовка программы. Если модуль использует объекты другого модуля, то такая специ­фикация должна следовать сразу после служебного слова interface.

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

Следующий пример иллюстрирует использование модуля CmplVals:

program UsingComplex;

uses CmplVals;

var

C1, C2, C3 : Complex;

begin

InitC(1,2,C1); InitC(3,4,C2); MultC(C1,C2,C3); WriteC(C3);

DivC(C1,C2,C3); WriteC(C3)

end.

18 Внешние процедуры (фрункции) в паскале

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

Внешняя процедура (функция) в программе, написанной на Турбо Паскале, объявляется своим заголовком, за которым следует стандартная директива EXTERNAL, например:

Function LoCase (ch : char):char; external;

Procedure Swapping (var a,b; N:word); external;

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

{$L<имя файла>}, где <имя фата> - имя OBJ-файла.

Диск и каталог, в котором следует искать этот файл, если он не обнаружен в текущем каталоге, указываются опцией OPTIONS/DIRECTORIES/OBJECT DIRECTORIES. 

Обращение к функциям операционной системы  Турбо Паскаль предоставляет программисту практически неограниченные возможности использования любых функций стандартной операционной системы MS-DOS. Единственным механизмом обращения к функциям ДОС является инициация программного прерывания.  Прерывание - это особое состояние вычислительного процесса. В момент прерывания нарушается нормальный порядок выполнения команд программы и управление передается специальной процедуре, которая входит в состав ДОС и называется процедурой обработки прерывания. Каждое прерывание характеризуется в рамках ДОС порядковым номером и связано со своей процедурой обработки. 

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

type

Registers = record case integer of

0 : (AX, BX, CX, BP, SI, DI, DS, ES, Flags : word);

1 : (AL, AH, BL, BH, CL, CH, DL, DH : byte)

end ;

Процедура INTR. С помощью этой процедуры инициируется программное прерывание с требуемым номером. Обращение:

INTR (B,<регистры>)

Здесь B- выражение типа BYTE; номер прерывания; <регистры> - переменная типа REGISTERS; в этой переменной процедуре обработки прерывания передается содержимое регистров и в ней же возвращается выходная информация. 

Процедура KEEP. Завершает работу программы и оставляет ее резидентной в памяти. Обращение:

KEEP (<код>)

19 Использование встроенных машинных кодов

В Турбо Паскале имеется возможность непосредственного включения в программу небольших фрагментов, написанных в машинных кодах. Для этого используется стандартная директива INLINE, за которой в круглых скобках следует один или несколько элементов машинного кода, разделяемых косыми чертами. Элемент кода, в свою очередь, строится из одного или более элементов данных, разделенных знаками "+" или "-"

Значением идентификатора является смещение соответствующего объекта. Если переменная – глобальная, смещение задается относительно сегмента данных, хранящееся в регистре DS, если это локальная переменная, – относительно сегмента стека регистр SP). Базовым сегментом типизированной константы является сегмент кода регистр CS).

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

С помощью директивы INLINE можно также задавать последовательность машинных кодов, которую необходимо несколько раз вставить в программу. Для этого используется описание INLINE-процедуры, например:

Procedure DisableInterrupts;

inline ($FA); {CLI}

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

DisableInterrupt;

Компилятор вставит команду запрета прерываний CLI. Таким образом, INLINE-процедуры служат своеобразным средством расширения возможностей стандартного компилятора Турбо Паскаля и подобны макросам ассемблера. Использование INLINE-процедур увеличивает скорость исполнения программы, так как не осуществляется генерация (и исполнение) команд передачи управления в процедуру. По этой причине в INLINE-процедурах не следует использовать команды выхода из подпрограммы. INLINЕ-процедура может иметь параметры, однако на них нельзя ссылаться в INLINE-директивах (на другие символы Турбо Паскаля ссылаться можно).

В следующем примере перемножаются два числа типа INTEGER, результат имеет тип LONGINT:

FUNCTION LongMul(X,YInteger): Longint;

inline (

$5 А/ {POP AX; получить в АХ число Х }

$58/ { POP DX; получить в DX число Y }

$F7/$EA); { IMUL DX; DX:AX;= X * Y }

Отметим, что в силу упоминавшегося сходства с макросами ассемблера, имена INLINE-подпрограмм не могут использоваться в качестве аргументов в операторах @ или служить параметрами функций ADDROFS и SEG.

20 оверлей в паскале

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

Работа оверлейных программ обеспечивается с помощью процедур и функций библиотечного модуля OVERLAY, входящего в библиотечный файл TURBO.TPL.

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

  • Выделить главную часть программы и разбить оставшуюся часть на несколько модулей. Отметим, что никаких дополнительных ограничений на модули, по сравнению с описанными в гл.9, не накладывается за одним исключением: в оверлейных модулях нельзя использовать процедуры обработки прерываний. Желательно продумать состав модулей таким образом, чтобы по возможности минимизировать количество их перезагрузок в оверлейный буфер в процессе исполнения программы.

  • В главной части программы указать с помощью директив компилятора вида {$О <имя>} те модули, которые будут оверлейными, например:

Program Main;

Uses CRT, DOS,Graph, Overlay, UnitA, UnitB;

{$0 DOS}

{$0 UnitA}

{$O UnitB}

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

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

  • В начале главной программы и каждого оверлейного модуля необходимо поместить директивы компилятора {$О+} и {$F+} или установить опции OPTIONS /COMPILE/FORCE FAR CALLS и OPTIONS/ COMPILE/ OVERLAYS ALLOWED (см. прил.1) в активное состояние, после чего откомпилировать программу на диск. Программа готова к работе.