Как записать разделитель то в операторе условия. Операторы языка паскаль. Условный оператор IF

На занятии рассматривается условный оператор в Паскале (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 лет включительно. Ввести возраст человека и определить, подходит ли он для данной компании (вывести ответ «подходит» или «не подходит»).
Особенность: надо проверить, выполняются ли два условия одновременно.

Оператор перехода

В этот раз я продолжу рассмотрение темы “Операторы”.

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

Авторская версия языка предполагает оформление метки в виде целого десятичного числа в диапазоне 1..9999 . В качестве меток Turbo Pascal допускает использование идентификаторов. При использовании операторов перехода необходимо соблюдать следующие правила:

1) Все метки, находящиеся в блоке, должны быть описаны. При этом каждая метка может быть описана не более одного раза. Т.е. в пределах блока не может быть двух меток с одним и тем же именем.

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

3) Попытка перехода (передачи управления) внутрь структурного оператора может вызвать непредсказуемые эффекты, хотя в данном случае компилятор может не выдать сообщения об ошибке.

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

1) если кажется невозможным обойтись без операторов перехода, необходимо стремиться применять их для передачи управления только вниз по тексту программы (вперёд); при возникновении необходимости передачи управления “назад” лучше использовать операторы цикла (см. далее);

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

Метки определяются посредством описаний, которые начинаются со служебного слова label и содержат последовательность имён меток через запятую. Для передачи управления оператору, помеченному меткой, предусмотрен оператор безусловного перехода goto . Метка отделяется от следующего за ней оператора символом ‘:’ (двоеточие). Пример:

var j: integer;

{ объявляем две метки }

label Start, Finish;

Start: writeln(‘Начало программы’);

goto Finish;

Finish: writeln(‘Конец программы’);

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

Самым простейшим структурным оператором является составной оператор. Данный оператор задаёт последовательность выполнения содержащихся в нём операторов. Составной оператор оформляется в виде списка операторов, отделённых друг от друга символом ‘;’ (точка с запятой) и заключённых между служебными словами begin и end .

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

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

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

Условный оператор выполняется следующим образом. Предварительно вычисляется выражение, указанное после служебного слова IF . Если условие выполняется, то управление передаётся оператору, указанному после служебного слова then , если нет, то выполняется оператор, указанный после служебного слова else. При этом часть условного оператора, начиная со слова else, может отсутствовать. Вот примеры условных операторов:

If Keypressed then writeln(‘Клавиша нажата’);

If A > B then Min:= B

else Min:= A;

if X1 > X2 then begin

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

При составлении вложенных условных операторов следует учитывать, что ветвь else всегда принадлежит предшествующему ветвлению IF , у которого ещё нет ветви else. Т.е. следующую конструкцию

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

для ясности, можно трактовать так

if Условие1 then begin

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

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

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

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

type TWay = (Up, Right, Down, Left);

var Way: TWay;

MapX, MapY: word;

if Way = Up then MapY:= MapY - 1

else if Way = Right then MapX:= MapX + 1

else if Way = Down then MapY:= MapY + 1

else MapX:= MapX - 1;

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

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

case Way of

Up: MapY:= MapY - 1;

Right: MapX:= MapX + 1;

Down: MapY:= MapY + 1;

Left: MapX:= MapX - 1;

Ну вот, совсем другое дело. Теперь рассмотрим порядок выполнения данного оператора. Предварительно вычисляется значение выражения, следующего за служебным словом case , но так как в данном случае стоит имя переменной Way , то производится чтение значения этой переменной. Полученное значение сравнивается поочерёдно с каждой альтернативой (константной, непосредственным значением), указанной после служебного слова of . В случае равенства значения выражения очередной константе, выполняется оператор-альтернатива, следующий за этой константой, отделённый от неё двоеточием. После завершения выполнения альтернативного оператора действие переходит к оператору, следующему за оператором варианта. При несовпадении значения Way ни с одной константой, данный оператор варианта не производит никаких действий.

А как же быть, если необходимо предусмотреть некоторую ветвь операторов, которая выполнялась бы в случае несовпадения значения выражения ни с одной константой? Для этого можно использовать альтернативу else, например:

case Way of

Up: MapY:= MapY - 1;

Right: MapX:= MapX + 1;

Down: MapY:= MapY + 1;

else MapX:= MapX - 1;

Следовательно, конструкция, построенная с помощью оператора case полностью эквивалентна конструкции, построенной ранее с помощью оператора IF . К тому же она нагляднее и нет риска запутаться во многочисленных else .

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

case Way of

Up, Down: writeln(‘Двигаемся по вертикали’);

Right, Left: writeln(‘Двигаемся по горизонтали’);

case X of

10,20,30: writeln(‘десятки’);

1..9: writeln(‘единицы’);

В последней конструкции оператор writeln(‘единицы’) выполнится, если переменная X будет иметь одно из значений 1,2,3,..,8,9 .

Как вы могли заметить, строки с константами я выровнял по двоеточиям, так как мне кажется, что такой вид нагляднее, хотя это дело вкуса, а как известно, на вкус и цвет товарища нет;O)

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

1) Допустимые значение выражения - “переключателя”, записанного после служебного слова case , должны удовлетворять дискретному типу: для целого типа они должны лежать в диапазоне -32768..32767 .

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

3) Константы в альтернативах не должны повторяться в пределах оператора варианта, а диапазоны не должны пересекаться и не должны содержать констант, указанных в данной или других альтернативах.

И ещё одно. Конструкция case предусматривает один оператор для каждой альтернативы. Если возникает необходимость выполнения нескольких операторов, следует сгруппировать их в составной оператор begin..end . Есть возможность указать пустой оператор для альтернативы, поставив символ ";" (точка с запятой) сразу после двоеточия, который ничего не будет выполнять. А синтаксис ветви else предусматривает указание последовательности операторов, разделённых символом ‘;’ (точка с запятой).

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

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

  • Сергей Савенков

    какой то “куцый” обзор… как будто спешили куда то