Структура ветвления. Условный оператор

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

  1. простые;
  2. структурированные.

Простые операторы - это операторы, не содержащие в себе других операторов. К ним относятся:

  • оператор присвоения (:=);
  • оператор процедуры;
  • оператор безусловного перехода (GOTO).

Структурированные операторы - это операторы, которые содержат в себе другие операторы. К ним относятся:

  • составной оператор;
  • операторы условий (IF, CASE);
  • операторы цикла (FOR, WHILE, REPEAT);
  • оператор присоединения (WITH).

Простые операторы

Оператор процедуры

Оператор процедуры служит для вызова процедуры.

Формат: [имя_процедуры] (список параметров вызова);

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

  • Стандартные, которые описаны в самом языке и являются принадлежностью языка;
  • Процедуры пользователя, которые создает пользователь.

Для вызова стандартных процедур необходимо подключение в разделе USES имени модуля (библиотеки), где описана данная процедура. Ряд процедур, находящихся в модуле SYSTEM всегда подключается к программе автоматически и их подключение в разделе USES не нужно. Стандартные процедуры языка Паскаль - READ, WRITE, REWRITE, CLOSE, RESET.

READ ([файловая_переменная], [список_ввода])

READ (x,y)

Процедуры пользователя (нестандартные) должны быть созданы перед их использованием в программе и находятся либо в разделе описания самой программы, либо в отдельные программные единицы модуля. Если процедура находится в модуле, то имя этого модуля необходимо упомянуть в приложении USES.

Оператор безусловного перехода GOTO

Формат: GOTO [метка];

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

Действие GOTO передает управление соответствующему помеченному оператору. При использовании меток нужно руководствоваться следующими правилами:

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

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

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

Операторы условия IF

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

В языке Паскаль условный оператор IF это средство организации ветвящегося вычислительного процесса.

Формат: IF [логическое_выражение] Then [оператор_1]; Else [оператор_2];

IF, Then, Else - служебные слова. [оператор_1], [оператор_2] - обыкновенные операции языка Паскаль. Часть Else является необязательной (может отсутствовать).

Оператор IF работает следующим образом: вначале проверяется результат логического выражения. Если результат Истина(TRUE), то выполняется [оператор_1], следующий за служебным словом Then, а [оператор_2] пропускается. Если результат Ложь(FALSE), то [оператор_1] пропускается, а [оператор_2] исполняется.

Если часть Else отсутствует, то оператор IF имеет не полную форму:

IF [логическое_выражение] Then [оператор];

В этом случае, если результат Истина(TRUE), то выполняется [оператор], если Ложь(FALSE), то управление передается оператору, следующему за оператором IF.

имеются 2 числа A и B. Найти максимальное число.

Составной оператор

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

Формат: Begin [операторы]; End;

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

Оператор выбора CASE

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

Формат: CASE [ключ_выбора] OF

[константа_выбора_1]:[оператор_1];

[константа_выбора_2]:[оператор_2];

[константа_выбора_N]:[оператор_N];

ELSE [оператор];

CASE, OF, ELSE, END - служебные слова. [ключ_выбора] - это параметр одного из порядковых типов. [константы_выбора] - константы того же типа, что и ключ выбора, реализующие выбор. [оператор_1(N)] - обыкновенный оператор. ELSE может отсутствовать.

Оператор выбора работает следующим образом: до работы оператора определяется значение параметра ключ выбора. Этот параметр может быть либо выражен как переменная в программе, либо другим путем. Затем параметр ключ выбора последовательно сравниваем с константой выбора. При совпадении значения ключа выбора с одной из констант выбора, выполняется оператор, следующий за этой константой, а все прочие операторы игнорируются. В случае не совпадения ключа выбора ни с одним из констант, выполняется оператор, следующий за Else. Часто Else является не обязательной и в случае несовпадения ключа выбора ни с одной из констант выбора и при отсутствии Else, управление передается оператору, следующему за оператором CASE.

В операторе CASE нет явной проверки условия, характерного для оператора IF. В тоже время в неявном виде операция сравнения выполняется. CASE вносит диссонанс в программу на языке Паскаль, поскольку данные оператор завершается служебным словом End, которому нет парного Begin.

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

Программа работает следующим образом: с клавиатуры процедурой Read вводится символ буквы цвета светофора. Если введена буква ‘з’ соответствующая зеленому цвету, то в операторе CASE введено значение в списке выбора найдет константу выбора ‘з’ и будет выведено сообщение “Зеленый цвет, движение разрешено”. При вводе символа букв ‘к’ и ‘ж’ буду выведены аналогичные сообщения. При вводе любого другого символа будет выведено сообщение “Светофор не работает”, поскольку в этом случае работает часть Else, оператора CASE.

Операторы цикла

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

В цикле с параметром всегда имеются так называемые параметры цикла: X, X n , X k , ∆X. Иногда цикл с параметром называют регулярным циклом. Характерной чертой является то, что число циклов и повторений можно определить до выполнения цикла.

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

В языке Паскаль имеются три оператора, реализующих циклические вычислительные структуры:

  • счетный оператор FOR. Он предназначен для реализации цикла с параметром и не может быть использован для реализации итерационного цикла;
  • оператор цикла с предусловием WHILE;
  • оператор цикла с постусловием REPEAT.

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

Оператор FOR

Формат: FOR [параметр_цикла] := [н_з_п_ц] To [к_з_п_ц] Do [оператор];

FOR, To, Do - служебные слова. [параметр_цикла] - параметр цикла. [н_з_п_ц] - начальное значение параметра цикла. [к_з_п_ц] - конечное значение параметра цикла. [оператор] - произвольный оператор.

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

Работу оператора рассмотрим на его алгоритме:

На первом шаге значение параметра цикла принимает [н_з_п_ц], затем осуществляется проверка параметр цикла меньше или равен [к_з_п_ц]. Это условие является условием продолжения цикла. Если выполнено, то цикл продолжает свою работу и выполняется [оператор], после чего параметр цикла увеличивается (уменьшается) на единицу. Затем с новым значением параметр цикла, проверяется условие продолжения цикла. Если оно выполняется, то действия повторяются. Если условие не выполняется, то цикл прекращает свою работу.

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

  • телом оператора For. Оператор может не выполниться ни разу, поскольку проверка условия продолжения цикла выполняется до тела цикла;
  • шаг изменения параметра цикла постоянный и равен 1;
  • тело цикла в операторе For представлено одним оператором. В том случае, если действие тела цикла требует более одного простого оператора, то эти операторы необходимо превратить в один составной оператор посредством операторных скобок (BEGIN-END);
  • Параметр цикла может быть только переменой порядкового типа.

Пример использования оператора FOR: составить таблицу перевода рублей в доллары.

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

Формат: WHILE [условие] Do [оператор];

WHILE, Do - служебные слова. [условие] - выражение логического типа. [оператор] - обыкновенный оператор.

;

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

При работе с While надо обратить внимание на его свойства:

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

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

Формат: REPEAT [тело_цикла]; UNTIL [условие];

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

Оператор Repeat имеет следующие особенности:

  • в Repeat проверяется условие завершения цикла и если условие выполняется, то цикл прекращает работу;
  • тело цикла всегда выполняется хотя бы один раз;
  • параметр для проверки условия изменяется в теле цикла;
  • операторы тела цикла не надо заключать в операторские скобки (BEGIN-END), при этом роль операторных скобок выполняют Repeat и Until.

Вычислить y=sin(x), где xn=10, xk=100, шаг равен 10.

Условные операторы предназначены для выбора к исполнению одного из возможных действий (операторов) в зависимости от некоторого условия (при этом одно из действий может отсутствовать). В качестве условий выбора используется значение логического выражения. В Турбо Паскале имеются два ус­ловных оператора: if и case.

Оператор условия if

Оператор условия if может принимать одну из следующих форм:

if <условие> then <оператор1>

else <оператор2>;

if <условие> then <оператор>;

Оператор условия if выполняется следующим образом. Сначала вычисляется выражение, записанное в условии. В результате его вычисления получается значе­ние булевского типа. В первом случае, если значение выражения есть True (истина), выполняется <оператор1>, указанный после слова then. Если результат вычисления выражения в условии есть False (ложь), то выполняется <оператор2>. Во втором случае - если результат выражения Тгuе, выполняется <оператор>, если False - выполняется оператор, следующий сразу за оператором if. По правилам каждая из ветвей может содержать либо один выполняемый оператор, либо несколько, объединенных в составной оператор. Точка с запятой перед E lse не ставится.

Оператор выбора case

Если один оператор if может обеспечить выбор из двух альтернатив, то оператор выбораcase позволяет сделать выбор из произволь­ного числа имеющихся вариантов.

case <выражение-селектор> of

<список1>: <оператор1>;

<список2>: <оператор2>;

<списокN>: <операторN>;

Оператор caseработает следующим образом. Сначала вычисляется значение выражения-селектора, затем обеспечивается реализация того оператора, константа выбора которого равна текущему значению селектора. Если ни одна из констант не равна текущему значению селектора, выполняется оператор, стоящий за словомelse. Если словоelseотсутствует, активизируется оператор, находящийся за словомend, т.е. первый оператор за границейcase.

Выражение-селектор - это простая переменная целого, символьного, перечисляемого или логического типов, в зависимости от значения которой принимается решение;

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

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

Ветвь Else не обязательна, и в отличие от оператора if, перед ней можно ставить точку с запятой.

Операторы повтора

Если в программе возникает необходимость неоднократно выполнить некоторые операторы, то используются операторы повтора (цикла). В языке Паскаль раз­личают три вида операторов цикла: while, repeat, for.

Оператор while

Оператор while (пока) называют оператором цикла с Предусловием за то, что проверка условия выполнения тела цикла производится в самом начале оператора.

while <условие продолжения повторений> do

<тело цикла>;

Условие – логическое выражение. Тело цикла – простой или составной оператор. Составной оператор используется в тех случаях, когда тело цикла состоит из 2-х и более операторов.

Перед каждым выполнением тела цикла вычисляется значение выражения условия. Если результат равен True, тело цикла выполняется и снова вычисляется выражение условия. Если результат равен False, происходит выход из цикла и пере­ход к первому оператору, стоящему сразу за телом цикла.

Оператор повтора repeat

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

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

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

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

until <условие окончания цикла>;

Операторы, заключенные между словами repeat и until, являются телом цикла. Вначале выполняется тело цикла, затем проверяется условие выхода из цикла. Если результат логического выражения равен False, то тело цикла активизируется еще раз; если результат True, происходит выход из цикла.

Оператор повтора for

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

Оператор повтора for может быть представлен в двух форматах:

for <параметр цикла> := to do <тело цикла>;

for <параметр цикла> := downto do <тело цикла>;

где <параметр цикла> - это переменная целого, символьного, логического или перечисляемого типов;

SI и S2 - выражения, определяющие соответственно начальное и конечное значения параметра цикла;

for ... do - заголовок цикла;

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

Действие команды. Параметру цикла присваивается значение выражения S1. Если оно меньше или равно, чем значение выраженияS2, то выполняется тело цикла. После этого значение параметра автоматически увеличивается на единицу и оно снова сравнивается со значением выраженияS2 и т.д. Когда значение параметра станет больше, чем значение выраженияS2, то выполняется следующий после цикла оператор.

Шаг изменения параметра цикла для оператора for…to…doравен +1, а для оператораfor…downto…doравен -1.

Вопросы для самопроверки:

    Формат оператора присваивания. Допустимо ли использование величин разных типов в арифметическом выражении?

    В чем заключается отличие оператора ввода Read от оператора Readln?

    Укажите форматы вывода данных.

    Какие виды ветвлений реализованы в Turbo Pascal?

    Для чего используются ветвления? Приведите примеры.

    Две формы записи условного оператора If.

    Формат записи вложенного оператора If.

    Формат записи оператора выбора Case?

    В каких случаях используется составной оператор Begin…end?

    Как в блок-схемах изображаются разветвленные алгоритмы?

    Что такое цикл?

    Какие виды циклов реализованы в Turbo Pascal?

    Что такое тело цикла?

    В каком случае тело цикла заключается в операторные скобки begin…end?

    В чем отличия операторов повтора while и repeat?

    В каких случаях предпочтительнее использовать для организации циклов оператор повтора for? Что записывается в заголовке этого оператора?

    Каким образом в операторе цикла for описывается направление изменения значения параметра цикла?

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

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

Оператор присваивания

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

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

Например, для оператора

Rezult:=A div В;

сначала выполняется целочисленное деление значения переменной А на значение переменной В , а затем результат присваивается переменной Rezult .

Примеры применения оператора присваивания:

А := 8;

S:= A * В ;

Ostatok:= A mod B;

Ratio:= A / B;

Оператор безусловного перехода (go to)

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

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

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

Правила использования оператора безусловного перехода. Использование безусловных передач управления в программе считается теоретически избыточным и подвергается серьезной критике, так как способствует созданию малопонятных и трудно модифицируемых программ, которые вызывают большие сложности при отладке и сопровождении. Поэтому рекомендуется минимальное использование оператора go to с соблюдением следующих правил:

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

Расстояние между меткой и оператором перехода на нее не должно превышать одной страницы текста (или высоты экрана дисплея).

Пример применения оператора безусловного перехода:

label Metka; {в раздале описания меток описали метку с именем Metka }

begin {основная программа}

{операторы основной программы}

{операторы основной программы помеченные меткой}

Порядок выполнения работы

    Изучить теоретические сведения по теме: “Написание программы на Паскале с использованием операторов присваивания и безусловного перехода ”.

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

    Показать работающую программу преподавателю.

    Ответить на контрольные вопросы.

Контрольные вопросы

    Основные элементы программирования.

    Основные характеристики программы. Понятия языка, оверлеев, глобальных и локальных блоков.

    Операторы языка программирования Паскаль. Оператор присваивания. Формат, примеры.

    Оператор безусловного перехода. Формат, примеры. Основные правила использования

Лабораторная работа № 7

Написание программы на Паскале с использованием условных операторов и оператора выбора Case

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

Краткие теоретические сведения

Условные операторы

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

В Турбо Паскале имеются два условных оператора: if и case.

Оператор условия if

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

Он может принимать одну из следующих форм:

    if <условие> then <оператор1>

else <оператор2>;

    if <условие> then <оператор>;

В переводе с английского языка данные форматы можно определить как:

    ЕСЛИ<условие> ТО<оператор1> ИНАЧЕ<оператор2>

    ЕСЛИ<условие> ТО<оператор>

Оператор условия if выполняется следующим образом. Сначала вычисляется выражение, записанное в условии. В результате его вычисления получается значение булевского типа.

В первом случае, если значение выражения есть True (истина), выполняется <оператор1>, указанный после слова then (в переводе –“то”). Если результат вычисления выражения в условии есть False (ложь), то выполняется <оператор2> .

Во втором случае, если результат выражения True , выполняется <оператор>, если False - оператор, следующий сразу за оператором if . Операторы if могут быть вложенными .

Пример фрагмента программы с оператором условия if:

if Ch="N" then Parol:= True

else Parol:= False;

if Parol = True then

if X = 100 then Write("Пароль и код правильные")

Writeln("Ошибка в коде");

В данном примере с клавиатуры считывается значение переменной символьного типа Ch . Затем проверяется условие С h =" N " . Если оно выполняется, то переменной Parol булевского типа присваивается значение True , если условие не выполняется, False . Затем с клавиатуры считывается значение кода X . Далее оператор if проверяет условие Parol = True. Если оно имеет значение True , то выполняется проверка введенного пароля оператором if X=100 . Если условие Х=100 имеет значение True , то выводится сообщение "Пароль и код правильные", и управление в программе передается на оператор, следующий за словом end , если оно имеет значение False , выполняется составной оператор, стоящий после, слова else , который выводит на экран видеомонитора сообщение "Ошибка в коде", и вызывает стандартную процедуру Halt(1) для остановки программы.

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

if условие1 then if условие2 then <оператор1> else <оператор2>

Возникающая двусмысленность, к какому оператору if принадлежит часть else <оператор2>, разрешается тем, что служебное слово else всегда ассоциируется (связывается) с ближайшим по тексту служебным словом if, которое еще не связано со служебным словом else .

В связи с этим следует проявлять аккуратность при записи вложенных операторов условия.

Пример 1 . Составить программу, которая вычисляет частное двух целых чисел. В связи с тем, что делить на нуль нельзя, организовать контроль ввода данных.

Для контроля вводимых значений делителя используем оператор условного перехода if ... then ... else.

Текст программы может выглядеть следующим образом:

program Primer1;

А, В: integer;

Write("Введите значение делимого А: ");

Write("Введите значение делителя В: ");

if B=0 {Контроль ввода числа B }

then Writeln("Ha нуль делить нельзя") {Условие выполнено}

{Условие не выполнено}

Rezult:= А / В;

Writeln("Частное чисел ",А," и " ,В, " = ", Rezult);

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

Формат :

GoTo <метка>;

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

Формат : Label <имя1, имя2,... >;

<операторы>

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

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

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

<операторы>

Действие оператора GoTo состоит в передаче управления соответствующему меченному оператору.

При использовании меток необходимо руководствоваться следующими правилами:

ü метка, на которую ссылается оператор GoTo, должна быть описана в разделе описаний и она обязательно должна встретиться где-нибудь в теле программы;

ü метки, описанные в процедуре (функции), локализуются в ней, поэтому передача управления извне процедуры (функции) на метку внутри нее невозможна.

Например, в результате выполнения программы:

label 1,2; //метки

2: if i<0 then goto 1; //условие перехода к метке 1

write(i); //выводим значение i

Dec(i); //увеличиваем i на 1

goto 2; //переходим к метке 2

1: //метка 1

будет выведено 6543210.


ТЕМА 7. Оператор выбора Case

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

Оператор выбора Case часто используют для замены конструкций из вложенных условных операторов. Управляющая конструкция «выбор» является идеальным средством для обработки ситуаций со многими (более чем двумя) исходами, т.е. в случае, когда условие может принимать более двух значений. Оператор «выбор» имеет следующую структуру:

Case <параметр: порядковая переменная> OF

<значение 1>: <оператор 1>;

<значение 2>: <оператор 2>;


<значение N>: <оператор N>;

END; {для Case}

В этой структуре: < параметр: порядковая переменная> – порядковая переменная, значение которой проверяется; <значение *> – константы, с которыми сравнивается значение порядковой переменной; <оператор *> – операторы, из которых выполняется тот, с константой которого совпадает значение порядковой переменной.

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

Если для нескольких констант нужно выполнять один и тот же оператор, их можно перечислить через запятую, сопроводив их одним оператором. Существует возможность указать диапазон возможных значений. Например, диапазон от 1 до 100 включительно указывается так:
1 .. 100.

0, 2, 4, 6, 8: Writeln("Чётная цифра");

1, 3, 5, 7, 9: Writeln("Нечётная цифра");

10 .. 100: Writeln("Число от 10 до 100");

Writeln("Отрицательное число или больше 100");

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

CASE <порядковая переменная> OF

<значение 1>:

<оператор 1_1>;

<оператор 1_n>

<значение 2>:

<оператор 2 _1>;

<оператор 2_n>

<значение N>:

<оператор N­­_1>;

<оператор N_n>

<оператор Е_1>;

<оператор Е_n>

Необходимо заметить, что из всех возможных ветвей операторов управляющей конструкции выбор , выполняется только одна ветвь, даже если значение порядковой переменной совпадает с несколькими возможными значениями, отвечающими за разные ветви операторов. Выполняется та ветвь, которая расположена раньше. Значение порядковой переменной сравнивается последовательно со всеми возможными значениями, и как только найдётся значение, которому равна порядковая переменная, выполняется ветвь операторов, сравнения прекращаются и управляющая конструкция прекращает свою работу. Поэтому при составлении программ с использованием управляющей конструкции выбор , раньше необходимо располагать более «строгие» последовательности операторов.


ТЕМА 8. Циклические программы

Цель лабораторной работы: закрепить практические навыки работы с системой PascaABC, научиться правильно использовать различные операторы циклов; научиться составлять программы решения задач с использование циклических структур.

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

В практике программирования часто встречаются циклические программы. В циклических программах какой-либо алгоритм повторяется многократно, при этом один или несколько параметров изменяются. Операторов цикла (повтора) в Паскале три: for, repeat, while.

Структурированными операторами называются такие операторы, которые включают в себя другие операторы и управляют последовательностью их выполнения. К ним относятся:

  • составной оператор;
  • условный оператор If ;
  • условный оператор Case ;
  • оператор цикла Repeat ;
  • оператор цикла While ;
  • оператор цикла For .

Составной оператор

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

Формат оператора:

оператор №1;

оператор №2;

оператор №3;

оператор № n-1;

оператор № n; End;

Слово Begin играет роль открывающей скобки, слово End – роль закрывающей скобки.

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

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

В последующих разделах смысл и назначение составного оператора будут проиллюстрированы на многочисленных примерах.

Условный оператор IF

Оператор If реализует алгоритмическую конструкцию «Решение» и позволяет изменить порядок выполнения операторов в зависимости от истинности или ложности некоторого условия. Формат оператора может быть записан в двух формах: полной и неполной форме.

Формат оператора в полной форме:

If<условие> Then<оператор 1> Else<оператор 2>

Формат оператора в неполной форме:

If<условие>Then<оператор 1>

If (если), Then (тогда), Else (иначе) – зарезервированные слова.

Блок-схемы оператора if представлены ниже:

Условный оператор работает следующим образом. Сначала вычисляется условное выражение < условие >. Если результат есть True (истина), то выполняется < оператор 1 > (после слова Then), а < оператор 2 > пропускается. Если результат есть False (ложь), то < оператор 1 > пропускается, а выполняется < оператор 2 > (после слова Else). Перед Else никогда не ставится точка с запятой, поскольку это еще не конец оператора If .

Часть Else <оператор 2> условного оператора If может быть опущена. Если < условие > оператора If принимает значение True , то выполняется <оператор 1> , в противном случае этот оператор пропускается. В этом случае формат условного оператора имеет неполную форму:

Сравним две конструкции:

If <условие>Then<оператор 1>;

If <условие>Then<оператор 1>; <оператор 2>;

В первой строке <оператор 1> или выполняется, или не выполняется в зависимости от выполнения <условия> . Во второй строке <оператор 2> выполняется всегда, поскольку после <оператора 1> стоит разделитель «;» и все что стоит поле разделителя считается другим оператором. Поэтому в соответствии с форматом оператора If после зарезервированных слов Then и Else может стоять всего лишь один оператор.

Пример:

If a > 0 Then b:=1;

If a > 0 Then b:=1; a:=b; {оператор a:=b; выполняется всегда}

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

В этом случае оператор If будет иметь следующий вид:

If<условие>Then

оператор 11;

оператор 1n;

оператор 21;

оператор 2n;

Пример .

If a>0 Then begin b:=1; a:=b; end;

ЗАДАЧА 1. Вычислить значение функции, заданной неравенствами

y=x+1 при x<0; y=2∙x при x>0. program a5; var x,y:real; begin write(‘Введите значение x: ’); readln(x); if x writeln(‘Значение у равно: ’, y:6:2) end.

Результаты работы программы:

Введите значения x:0.5

Значение у равно: 1.00

ЗАДАЧА 2. Написать программу решения квадратного уравнения. Если дискриминант меньше нуля, то выводить соответствующее сообщение.

Program a6; var a,b,c:real; {коэффициенты уравнения} x1,x2:real; {корни уравнения} d:real; {дискриминант} begin Writeln(‘Решение квадратного уравнения’:50); Write(‘Введите значения коэффициентов a,b,c:’); Readln(a,b,c); {ввод коэффициентов} d:=b*b-4*a*c; if (d<0) then Writeln(‘Уравнение не имеет корней.’) else begin {операторные скобки} x1:=(-b+sqrt(d))/(2*a); x2:=(-b-sqrt(d))/(2*a); WriteLn(‘Корни уравнения: ’, x1:8:2,x2:8:2); end; end.

Результаты работы программы:

Решение квадратного уравнения

Введите значения коэффициентов a,b,c:3 1 6

Уравнение не имеет корней.

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

Пример.

if условие then
begin Операторные скобки
оператор; вложенный
оператор IF ,
неполная форма
if условие then опеатор
else оператор;
end
else
begin Операторные скобки
оператор; вложенный
оператор IF ,
неполная форма
if условие
then оператор;
end;

При работе с вложенными операторами if следует учитывать следующие правила:

  • перед зарезервированным словом else символ «;» никогда не ставится;
  • зарезервированное слово else всегда связывается с ближайшим перед ним стоящим зарезервированным словом then .

ЗАДАЧА 3. Усовершенствуем программу решения квадратного уравнения (ЗАДАЧА 2). При значении коэффициента a=0 уравнение вырождается. В программе этот факт не учитывался, что вызовет фатальную ошибку при исполнении программы (деление на нуль). Для того чтобы исключить деление на нуль, выполним проверку значения коэффициента а после его ввода оператором Readln(a,b,c) .

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

Возможны несколько вариантов проведения корректного сравнения значений вещественной переменной с нулем:

ЗАДАЧА 4. Усовершенствованная программа решения квадратного уравнения.

Program a7;Var a,b,c:real; {коэффициенты уравнения} x1,x2:real; {корни уравнения} d:real; {дискриминант} begin Writeln(‘Решение квадратного уравнения’:50); Write(‘Введите значения коэффициентов a,b,c: ’); Readln(a,b,c); {ввод коэффициентов} if round(a)<>0 then begin d:=b*b-4*a*c; if d<0 then Writeln(‘Уравнение не имеет корней.’) else begin{операторные скобки} x1:=(-b+sqrt(d))/(2*a); x2:=(-b-sqrt(d))/(2*a); WriteLN(‘Корни уравнения: ’, x1:8:2,x2:8:2); end; end else Writeln(‘Деление на нуль.’); end.

Результаты работы программы:

Решение квадратного уравнения Введите значения коэффициентов a,b,c:0 1 6 Деление на нуль.

Условный оператор выбора Case

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

В качестве ключа выбора используется выражение, которое располагается между зарезервированными словами Case и of. Выражение может быть целого, логического и символьного типов. Выражение не может иметь тип Real, String.

Формат оператора:

Case of "<ключ выбора>" константа1:оператор 1; константа2:оператор 2; константа3:оператор 3; ... константаN-1:оператор N-1; константаN:оператор Nn; Else оператор End;

Здесь Сase (в случае), of (из), Else (иначе), End (конец) являются зарезервированными словами.

Ключ выбора – это выражение любого типа кроме Real и String .

Константа1 – константа того же типа, что и выражение.

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

Оператор выбора действует следующим образом. Вначале вычисляется выражение <ключ выбора> , а затем в последовательности операторов отыскивается такой, которому предшествует константа, равная вычисленному значению <ключ выбора> . Найденный оператор выполняется, после чего оператор выбора завершает свою работу (управление передается на end). Если в списке констант не будет найдена константа, соответствующая вычисленному значению ключа выбора, управление передается оператору, стоящему за словом Else .

Часть Else <оператора> можно опустить, тогда при отсутствии в списке констант нужной константы ничего не происходит, и оператор выбора просто завершает свою работу.

ЗАДАЧА 5. Написать программу простого калькулятора .

Program a8; var x,y:real; z:real; {результат} op:char; {ключ выбора} begin Write(‘Введите операнды x,y: ’); Readln(x,y); Write(‘Введите операцию(+,-,*,/): ’); Readln(op); case op of ‘+’:z:=x+y; ‘-‘:z:=x-y; ‘*‘:z:=x*y; ‘/‘:if y0 then z:=x/y Elsewriteln(‘Деление на нуль’); Else writeln(‘Действие не предусмотрено!’); end; {op} {так можно пометить, «чей» end} writeln(‘Результат равен=’,z:8:2); end.

Результаты работы программы:

Введите операнды x,y:4 2

Введите операцию (+,-,*,/):*

Результат равен= 8.00

В программе ключом выбора является переменная символьного типа. В зависимости от введенного значения символов (+, -, *, /) выполняется одно из арифметических действий: сложение, вычитание, умножение или деление. Если в качестве делителя будет введен нуль, то деление невозможно и выдается сообщение «Деление на нуль». Если будет введен какой-либо другой символ, то результатом будет сообщение «Действие не предусмотрено!». Если введены допустимые операции, то выдается результат.

ЗАДАЧА 6. Написать программу, которая запрашивает у пользователя номер дня недели, затем выводит название дня недели или сообщение об ошибке, если введены неверные данные.

Program a9; Var n: integer; {номер дня недели} Begin write(‘Введите номер дня недели:’); readln(n); case n of 1: writeln(‘Понедельник’); 2: writeln(‘Вторник’); 3: writeln(‘Среда’); 4: writeln(‘Четверг’); 5: writeln(‘Пятница’); 6: writeln(‘Суббота’); 7: writeln(‘Воскресенье’); else write(‘вы ошиблись!’) end; {n} end.

Результаты работы программы:

Введите номер дня недели:1

Понедельник

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

case n of 1,3,5,7,9: writeln(‘Это нечетные цифры’); 2,4,6,8,10: writeln(‘Это четные цифры’); end;