Pascal синтаксис операторов условного перехода множественный выбор. Условный оператор в паскаль

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

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

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

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

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

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

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

Базовые операции и математические процедуры и функции

Математические выражения в алгоритмической записи состоят из операций и операндов. Большинство операций является бинарными, т.е. содержат два операнда (унарные операции содержат один операнд, например: -а, взятие адреса @В).

Арифметические операции:

+, -, /, *, div (целочисленное деление), mod (остаток от деления),

Логические: not, and, or, xor,

Операции отношения: >, <, >=, <=, <>, =.

Логические вычисления и операции отношения

Наличие типа Boolean и операций с ним позволяет программировать логические вычисления, в основу которых заложена Булева алгебра. Введены четыре логических операции, результат которых всегда имеет тип Boolean и может иметь только одно из двух значений (Trueº1 (истинно) или Falseº0 (ложно)).

Чтобы не было ошибок, при логических вычислениях лучше расставлять скобки самим. Так, например, запись Not A And B будет воспринята компилятором как (Not A)And B, а, может быть, необходимо было бы так: Not (A And B).

Математические процедуры и функции

Системная библиотека Turbo Pascal’я приведена в таблице:

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

Большинство функций являются стандартными и не нуждаются в комментариях. Отдельно хотелось бы остановиться на специфических.

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

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

Типы данных

Лабораторная работа №2 (2 часа)

Вариант 5

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

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

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

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

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

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

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 ;

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

Goto m;

m – метка, заранее заданная в разделе описания меток. Следующая программа показывает как работает оператор безусловного перехода.

1
2
3
4
5
6
7
8
9
10

program goto_primer; {имя программы}
uses crt; {подключение модуля}
label m; {описание метки m}
begin
write (‘Karl Marx ‘ ) ; {вывод строки}
goto m; {требование перейти к метки}
write (‘clever’ ) ; {этот оператор пропускается}
m: write (‘fool’ ) ; {выполняется переход в эту область}
readkey; {для останова программы}
end .

В этой программе нет никаких условий, но именно о них будет идти далее речь.

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

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

Общий вид краткой формы:

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

Общий вид полной формы:

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

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

В краткой форме выполняется оператор 1 тогда, когда условие A истинно, иначе управление переходит к следующему оператору. В полной форме если условие A истинно, то выполняется оператор 1, иначе выполняется оператор 2. Следует запомнить, что перед else точка с запятой не ставится.

Пример программы с условным оператором, записанным в краткой форме:

Пример программы с условным оператором, записанным в полной форме:

В Паскале можно вкладывать один условный оператор в другой, причем делать это можно множество раз. При этом следует отметить, что каждому Then соответствует ближайшее Else .

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

Когда количество альтернатив больше двух применяется оператор выбора Case . Его вид:

Case <селектор> Of

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

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

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

Else <оператор>

Если селектором оператора If было логическое выражение, то в Case им выступает переменная, которая может быть целого, перечислимого, интервального или символьного типа. В случае совпадения селектора со значения выполняется соответствующий оператор. Задать значение селектору можно тремя способами:

1) перечислением: 1, 10, 100, 1000

2) диапазоном: ‘d’..’k’

3) перечислением и диапазоном: 1..10, 20, 30, 50, 70..100

Выполнятся в операторе выбора, может только одна ветка (идущая раньше), даже когда селектор совпадает с несколькими значениями. Также, в отличие от If в Case можно ставить точку с запятой перед Else .

Рассмотрим программу, в которой условия проверяет оператор выбора.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21

program case_primer;
uses crt;
var money: char ;
begin
write (‘Первая буква кода денежной единицы: ‘ ) ;
readln (money) ; {ввод значение в переменную}
case money of
‘A’ , ‘a’ : writeln (‘Французский франк’ ) ;
‘B’ , ‘b’ : writeln (‘Динар’ ) ;
‘C’ , ‘c’ : writeln (‘Юань’ ) ;
‘E’ , ‘e’ : writeln (‘Испанская песета’ ) ;
‘G’ , ‘g’ : writeln (‘Английский фунт стерлингов’ ) ;
‘I’ , ‘i’ : writeln (‘Итальянская лира’ ) ;
‘J’ , ‘j’ : writeln (‘Иена’ ) ;
‘R’ , ‘r’ : writeln (‘Рубль’ ) ;
‘U’ , ‘u’ : writeln (‘Доллар США’ ) ;
‘X’ , ‘x’ : writeln (‘Восточнокарибский доллар’ ) ;
else writeln (‘Неизвестная единица’ )
end ;
readkey;
end .

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