Структурированные инструкции

К структурированным инструкциям относят:

  • Блочные.
  • Условные.
  • Циклические.
  • Инструкция with доступа к элементам записи.
  • Обработки исключений.

Блочная инструкция

Содержит произвольное количество любых инструкций, отделенных друг от друга точкой с запятой и ограниченных скобками begin…end. Инструкция используется для превращения группы инструкций в одну там, где по правилам языка может применяться только одна инструкция, а действий несколько. Формат ирструкции

begin
p1;      // инструкция 1
{…}          // …….
pn;       // инструкция N
end;

Условные инструкции

На практике редко встречаются задачи, алгоритм решения которых является линейным. Часто оказывается, что алгоритм решения даже элементарной задачи не является линейным. Например, пусть надо вычислить по формуле ток в электрической цепи, деля напряжение на сопротивление. Если предположить, что пользователь всегда будет вводить верные данные, то алгоритм решения этой задачи действительно является линейным. Однако полагаться на то, что пользователь будет вести себя так, как надо программе, не следует. Формула расчета предполагает, что величина сопротивления не равна нулю. А что будет, если пользователь введет 0? Ответ простой: возникнет ошибка “Деление на ноль”, и программа аварийно завершит работу. Можно, конечно, возложить ответственность за это на пользователя, но лучше внести изменения в алгоритм решения, чтобы расчет выполнялся только в том случае, если введены верные данные.

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

Ветвления if…then…else Для выбора одной ветви из двух
Выбора case of Для выбора одной ветви из многих

Инструкции if…then…else

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

if <Условие>
then <Инструкция1>
else <Инструкция2>;

В состав инструкции входят:

if Если
<Условие> <Условие> истинно (равно true)
then то
< Инструкция 1> Ветвь then
else иначе
< Инструкция 2> Ветвь else

Алгоритм выполнения

  • Проверяется <Условие>.
  • При <Условие> = true (истинно) выполняется Ветвь then (то).
  • При <Условие> = false (ложно) выполняется Ветвь else (иначе).

pascal100

Простое <Условие> состоит из двух операндов и оператора сравнения. БНФ <Условия>

<Условие> ::= <Операнд 1> <Инструкция_сравнения > <Операнд 2>

<Операнд> ::= <Переменная> | <Константа> | <Выражение>

В языке FPC есть шесть операторов сравнения:

Инструкция Описание Результат сравнения
> Больше True, если <Операнд 1> больше <Операнд 2>,

иначе False

< Меньше True, если <Операнд 1> меньше <Операнд 2>,

иначе False

= Равно True, если <Операнд 1> равен <Операнд 2>,

иначе False

>= Больше или равно True, если <Операнд 1> не меньше <Операнд 2>, иначе False
<= Меньше или равно True, если <Операнд 1> не больше <Операнд 2>, иначе False
<> Не равно True, если <Операнд 1> не равен <Операнд 2>, иначе False

Сокращенная форма инструкции

if <Условие> then <Инструкция>;

Применяется, если надо при определенных условиях пропустить операции.

pascal101

Вложенные инструкции if…then…else

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

If  <Условие1>   then If  <Условие2> then <Иструкция 1>
else <Иструкция 2>
else If  <Условие3> then <Иструкция 3>
else <Иструкция 4>;

pascal102

В листинге программы во вложенных условных инструкциях рекомендуется фразы then и else каждого уровня начинать с одного и того же столбца. При отсутствии фразы else у вложенных условных инструкциях возникает неопределенность. По соглашению else связывается с первым предшествующим then. При необходимости следует включить пустую фразу else. При большом числе ветвей в одной точке алгоритма применение вложенных условных инструкций приводит к громоздкой программе. В этом случае лучше применить инструкцию выбора Case of.

Инструкция выбора Case of

Применяется для множественного ветвления. Формат инструкции

case <Селектор> of
<Список 1>: < Иструкция 1>;
<Список 2>: < Иструкция 2>;
……..;
<Список N> : < Иструкция N>;
[else < Иструкция >;]
end;

В состав инструкции входят:

case Выбрать
<Селектор> из <Селектора> константу
of Найти константу в
<Список 1>…<Список N> списках
else Если ее нет,
< Иструкция > то выполнить < Иструкция >
end Конец иструкции

Фраза else < Инструкция > необязательна. В коде скобки [ ] не нужны. Требования к инструкции

  • <Селектор> – имя переменной или выражение порядкового типа.
  • Список состоит из констант. Часть констант списка представляет собой интервал.
  • Константы должны быть разными и порядкового типа, совместимого с <Селектором> .
  • Нельзя использовать <Селектор>  строкового типа.
  • После последней строки списка точка с запятой нужна даже, если фраза else отсутствует.

Примеры БНФ для списков

<Список> ::= <Константа>[,<Список>]  Например 1,3,7.

<Список> ::= <Интервал>[,<Список>]    Например: ’A’..’Z’.

Алгоритм инструкции

  • По значению <Селектора> определяется константа для поиска в списках.
  • Константа ищется в списках <Список 1>…<Список N>.
  • Если константа найдена , то выполняется инструкция списка, где обнаружена константа.
  • Если список с константой не найден, то выполняется инструкция фразы else (если она присутствует).
  • Инструкция case of завершается.

pascal103

В примере программа принимает с клавиатуры код клавиши и в зависимости от него выводит на дисплей текстовый комментарий.

program Mnozhest_Vetvlenie;

{$mode objfpc}{$H+}

uses SysUtils, RusTrans;                         // Ссылка на модули
var
Symbol: Char;                             // Переменная <Селектора>
begin
writeln(Rus(‘Нажмите любую клавишу’));          // Приглашение
readln(Symbol);                                // Чтение символа
case Symbol of                                  // Анализ, вывод сообщения
’A’..’Z’,’А’..’Я’: writeln(Rus(’Заглавная буква ’),Symbol);
’a’..’z’,’а’..’я’: writeln(Rus(’Строчная буква ’), Symbol);
else writeln(Rus(’Код ASCII ’), Symbol);
end;
readln;                                         // Пауза, смотрю результат
end.

Twitter SEO Community Ваау! News2.ru Chipp Korica SMI2 Google Bookmarks Digg I.ua Закладки Yandex Linkstore Myscoop Communizm Ru-marks Webmarks Ruspace Linkomatic Kli.kz Web-zakladka Zakladok.net Reddit delicious Ma.gnolia Technorati Slashdot Yahoo My Web БобрДобр.ru Memori.ru rucity.com МоёМесто.ru Mister Wong

Copyright © 2009-2010 Программирование на паскале.