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

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

Переход осуществляется при помощи так называемых меток.
Метка - это идентификатор или целое число без знака в диапазоне от 0 до 9999, которое находится перед каким-либо оператором программы и отделен от него двоеточием. Все используемые в программе метки должны быть предварительно объявлены в разделе объявления меток, начинающимся СЛОВОМ label.

Можно теоретически показать, что рассмотренных операторов вполне достаточно для написания программ любой сложности. В этом отношении наличие в языке операторов перехода кажется излишним. Более того, современная технология структурного программирования основана на принципе “программировать без GOTO”: считается, что злоупотребление операторами перехода затрудняет понимание программы, делает ее запутанной и сложной в отладке. Тем не менее в некоторых случаях использование операторов перехода может упростить программу.

Оператор перехода имеет вид:

Здесь goto — зарезервированное слово (перейти [на метку]); — метка.

Label 1; // Объявляем метку с именем 1 var
a: Integer; begin
a: = 10;
Goto 1; // Переход на метку 1
а:= sqrt(a); // Этот оператор не будет выполняться никогда! 1: а:= а + а; // Оператор, помеченный меткой 1 end;

Операторы условного перехода

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

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

Оператор условия может быть записан и в упрощенной форме:

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

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

if а > 0 then b: = sqrt (a) else b: = a * 2; // Оператор условия
if a = 10 then b: = b + 1; // Упрощенная форма

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

В отличие от других языков программирования в Object Pascal приоритет операций отношения меньше, чем у логических» операции, по этому отдельные составные части сложного логического выражения заключаются в скобки. Например, такая запись предыдущего оператора будет неверной:
if a>b and b 0 then …// Ошибка так как фактически (с учетом приоритета операции) компилятор будет транслировать такую строку:
if a> (b and b)0 then…

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

if x>0 then y:=x+2 else y:=x-2

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

б) Ветвящаяся структура

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

Оператор условного перехода в Турбо Паскаль имеет вид:

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

условие - это логическое выражение, в зависимости от которого выбирается одна из двух альтернативных ветвей алгоритма. Если значение условия истинно (TRUE), то будет выполняться оператор 1 , записанный после ключевого слова then. В противном случае будет выполнен оператор 2 , следующий за словом else, при этом оператор 1 пропускается. После выполнения указанных операторов программа переходит к выполеннию команды, стоящей непосредственно после оператора if.

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

else - часть в операторе if может отсутствовать:

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

Тогда в случае невыполнения логического условия управление сразу передается оператору, стоящему в программе после конструкции if.

Следует помнить, что синтаксис языка допускает запись только одного оператора после ключевых слов then и else, поэтому группу инструкций обязательно надо объединять в составной оператор (окаймлять операторными скобками begin ... end). В противном случае возникает чаще всего логическая ошибка программы, когда компилятор языка ошибок не выдает, но программа тем не менее работает неправильно.

Примеры .

if x > 0 then modul:= x else modul:= -x;

if k > 0 then WriteLn("k - число положительное");

if min > max then begin

14.Оператор перехода. Метки и операторы перехода

Можно теоретически показать, что рассмотренных операторов вполне достаточно для написания программ любой сложности. В этом отношении наличие в языке операторов перехода кажется излишним. Более того, современная технология структурного программирования основана на принципе «программировать без GOTO»: считается, что злоупотребление операторами перехода затрудняет понимание программы, делает ее запутанной и сложной в отладке.

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

Оператор перехода имеет вид:

GOTO <метка>.

Здесь GOTO - зарезервированное слово (перейти [на метку]); <метка> - метка.

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

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

Пример

1: WriteLn("Переход к метке 1");

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

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

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

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

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

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

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

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);

Условные операторы предназначены для выбора к исполнению одного из возможных действий (операторов) в зависимости от некоторого условия (при этом одно из действий может отсутствовать). В качестве условий выбора используется значение логического выражения. В Турбо Паскале имеются два ус­ловных оператора: 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 описывается направление изменения значения параметра цикла?

На занятии рассматривается условный оператор в Паскале (if ). Объясняется, как использовать несколько условий в одной конструкции (AND и OR ). Рассмотриваются примеры работы с оператором

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

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

Блок-схема условного оператора:

Условный оператор в Паскале имеет следующий синтаксис:

Сокращенный вариант:

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

Полный вариант:

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

Условный оператор в Паскале — if — служит для организации хода задачи таким образом, при котором изменяется последовательность выполнения операторов в зависимости от какого-либо логического условия. Логическое условие может принимать одно из двух значений: либо true (истина), либо false (ложь), соответственно, оно может быть либо истинным, либо ложным.

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

Если при истинном условии необходимо выполнять несколько операторов, то их по правилам языка Pascal необходимо заключать в блок , начинающийся со служебного слова begin и заканчивающегося служебным словом end . Такой блок принято называть операторными скобками , а данную конструкцию — составным оператором :

Операторные скобки и составной оператор в Паскале:

if логическое выражение then begin оператор1; оператор2; end else begin оператор1; оператор2; end;

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

IF THEN ELSE
ЕСЛИ ТО ИНАЧЕ


В условии (в логическом выражении) используются операторы отношения.
Рассмотрим список операторов отношения Паскаля:

  • больше >
  • меньше
  • больше или равно в Pascal >=
  • меньше либо равно в Pascal
  • сравнение в Pascal =
  • не равно в Pascal

Пример: найти наибольшее из двух чисел

Вариант 1 Вариант 2


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

Пример: вычислить значение переменной у по одной из двух ветвей

Показать решение:

var x,y:real; begin writeln ("введите х"); read(x); if x>0 then y:=ln(x) else y:=exp(x); writeln ("y=", y:6:2) {итоговое число будет занимать 6 позиций, и в нем будет 2 знака после запятой} end.

Обратите внимание на то, как в данном примере выводится y . При выводе переменных типа в pascal, можно использовать так называемый форматированный вывод , или запись с двумя двоеточиями:
y:6:2
- цифра после первого двоеточия (6) указывает на то, сколько знаков будет занимать число при выводе на экран
- цифра после второго двоеточия (2) указывает на то, сколько знаков после запятой вещественного числа будет выводиться

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

Задача 0. Вычислить значение переменной у по одной из двух ветвей:

Задача 1. В компьютер вводятся два числа. Если первое больше второго, то вычислить их сумму, иначе - произведение. После этого компьютер должен напечатать результат и текст ЗАДАЧА РЕШЕНА

Задача 2. Дракон каждый год отращивает по три головы, но после того, как ему исполнится 100 лет - только по две. Сколько голов и глаз у дракона, которому N лет?

Логические операции в Паскале (в логическом выражении)

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

  • Логическая операция AND (И), поставленная между двумя условиями, говорит о том, что должны выполняться сразу оба эти условия (должны быть истинными). Логический смысл операции - "конъюнкция".
  • Поставленный между двумя условиями, знак OR (ИЛИ) говорит о том, что достаточно, если будет выполняться хотя бы одно из них (одно из двух условий истинно). Логический смысл операции - "дизъюнкция".
  • На языке Паскаль XOR - знак логической операции, имеющий смысл "строгая дизъюнкция" и указывающий на то, что необходимо, чтобы одно из двух условий выполнялось (истинно), а другое - не выполнялось (ложно).
  • Логическая операция NOT перед логическим выражением или переменной имеет смысл "отрицание" или "инверсия" и указывает на то, что если данная переменная или выражение истинны, то их отрицание - ложь и наоборот.

Важно: Каждое из простых условий обязательно заключать в скобки.

Пример : Рассмотрим примеры логических операций в логических выражениях в Паскале

1 2 3 4 5 6 7 8 var n: integer ; begin n: = 6 ; if (n>5 ) and (n<10 ) then writeln ("истина" ) ; if (n>7 ) or (n<10 ) then writeln ("истина" ) ; if (n>7 ) xor (n<10 ) then writeln ("истина" ) ; if not (n>7 ) then writeln ("истина" ) ; end .

var n:integer; begin n:=6; if (n>5) and (n<10) then writeln("истина"); if (n>7) or (n<10) then writeln("истина"); if (n>7) xor (n<10) then writeln("истина"); if not(n>7) then writeln("истина"); end.

Пример: Компания набирает сотрудников от 25 до 40 лет включительно. Ввести возраст человека и определить, подходит ли он для данной компании (вывести ответ «подходит» или «не подходит»).
Особенность: надо проверить, выполняются ли два условия одновременно.