Транслирующая грамматика переводящая условный оператор языка pascal. Условные операторы. Условный оператор IF

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

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

if ... then ... else ... if ... then ...

2. Какой вид имеет полная форма оператора условного перехода if в языке Паскаль?

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

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

Действие оператора состоит в следующем: сначала вычисляется значение выражения условие . Если оно истинное (равное TRUE ), то выполняется оператор, который следует за словом then (оператор1 ). Если значение ложное (FALSE ), то выполняется оператор, который следует за словом else (оператор2 ).

Операторы оператор1 и оператор2 могут быть составными, то есть содержать несколько строк кода. Такие операторы берутся в операторные скобки begin … end . Такая необходимость возникает, если после зарезервированных слов then или else нужно указать несколько операторов.

В этом случае общий вид оператора условного перехода может иметь, например, следующий вид:

if условие then begin // несколько операторов ... end else begin // несколько операторов ... end ;

3. Какой вид имеет сокращенная форма оператора условного перехода?

Сокращенная форма оператора условного перехода не содержит блока else и имеет вид:

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

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

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

if условие then begin // два или больше оператора ... end ;

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

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

var a,b:real; // a, b - переменные, для которых ищется максимум max:real; // максимум ... begin ... // a, b - задаются if a>b then max:=a else max:=b; ... end ;

Пример 2.

Фрагмент программного кода, решающего эту задачу:

... var x,f:real; begin ... // x - задается if -5 then f:= x*x+8 else f:= -x*x*x+2 ; // в переменной f - результат ... end ;

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

Пример 1. Фрагмент кода, который находит минимальное значение между двумя вещественными числами x и y .

... var min:real; ... begin ... // x, y - заданы min:= x; if minthen min:= y; ... end ;

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

var x, f:real; begin ... // x - задано if x<-6 then f:=3 *x*x-x; if (-6 <=x) and (x<=5 ) then f:=sqrt(7 -x); if x>5 then f:=8 *x-3 ; ... end ;

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

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

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

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

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

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

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

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

Переход осуществляется при помощи так называемых меток.
Метка - это идентификатор или целое число без знака в диапазоне от 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 выражение then
  • оператор1
  • оператор2

Элемент выражение является логическим выражением. Если выражение имеет значение true (истина), то выполняется оператор1 (ветвь then ), иначе – оператор2 (ветвь else ). Затем, управление передается оператору, следующему после условного.

Рассмотрим фрагмент кода программы, определяющей минимальное значение из двух чисел:

{Фрагмент кода программы}

  • if (a > b) then
  • minDig:= b
  • minDig:= a;
  • writeln (minDig);

Если значение переменной a окажется больше значения переменной b , то выполнится оператор присваивания по ветке then (minDig получит значение b ), иначе - по ветке else (minDig получит значение a ), затем будет выведено значение переменной minDig .

В условном операторе после then и после else может располагаться только один оператор. Поэтому, если требуется использовать не один, а несколько операторов, то применяется составной оператор.

Краткая форма условного оператора

Краткая форма условного оператора записывается в следующем виде:

  • if выражение then
  • оператор

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

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

  • составной оператор;
  • условный оператор 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;

В продолжение темы:
Интернет

Поступил в продажу фаблет от компании Lenovo с большим экраном, который призван заменить собой два устройства – смартфон и планшет. Многие пользователи, желающие всегда иметь...