Предисловие дорогие друзья !

Вид материалаДокументы

Содержание


§15. Условный оператор IF.
Program Ex24; Var
Program Ex24_1; Var
Для любознательных
Пример: input.txt output.txt
Подобный материал:
1   ...   5   6   7   8   9   10   11   12   ...   29

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


Здесь у меня столовая,

В ней мебель вся дубовая,

Вот это стул – на нем сидят,

Вот это стол – за ним едят.

C. Я. Маршак

15.1. Пîëíûé óñëîâíûé îïåðàòîð. Нам часто приходится что-либо делать лишь при выполнении определённых условий. Например, если завтра выходной, то мы пойдём гулять в парк, а иначе нам придётся идти в школу. Аналогичное положение мы встречаем и в математике, например,

Если х0, то вычислить у=х+5,

Если х>0, то вычислить у=х2.

Это условие можно записать короче:

Если х0, то вычислить у=х+5,

иначе вычислить у=х2.

Здесь в зависимости от условия выполняется одно из двух действий: либо вычисляется у=х+5, либо у=х2. например, если х=5, то условие не выполняется, и значение у будет равно 52=25. Если же х = -3, то условие выполняется, и значение у будет равно

-3+5=2.

Блок-схема алгоритма решения задачи изображена на рисунке 12.

Если алгоритм содержит базовую структуру ВЕТВЛЕНИЕ, то его называют разветвляющимся.

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

îáùèé âèä условного оператора в полной форме òàêîé:

if <логическое выражение> then <îïåðàòîð_1> else <îïåðàòîð_2>.

Здесь оператор_1 и оператор_2 простые или составные операторы, а IF (если), THEN (тогда), ELSE (иначе) — служебные слова.

Âûïîëíяется óñëîâíый îïåðàòîð в полной форме следующим образом:
  1. âû÷èñëяется çíà÷å­íèе ëîãè÷åñêîãî âûðàæåíèÿ, çàïèñàííîãî â óñëîâèè.
  2. Åñëè óñëîâèå èñ­òèííî (TRUE), òî âûïîëíÿåòñÿ <îïåðàòîð1> и происходит выход из команды.
  3. Åñëè óñëîâèå ложíî (FALSE), то âûïîëíÿåòñÿ <îïåðà­òîð2> и происходит выход из команды.

Åñëè â êà÷åñòâå <îïåðàòîðà> äîëæíы âûïîëíèòьñÿ несколько îïåðàòî­ðîâ, òî îíè çàêëþ÷àþòñÿ â îïåðàòîðíûå ñêîáêè Begin-End и выполняются как один оператор. Обратите внимание, что «;» (точка с запятой) перед служебным словом ELSE не ставится.

Запишем условный оператор для разобранного выше примера:

IF x<=0 THEN y:=x+5 ELSE y:=SQR(x);

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

Пример 21. Âûâåñòè íà ýêðàí áîëüøåå èç äâóõ äàííûõ ÷èñåë.

Решение. Алгоритм решения этой задачи был разобран в параграфе 1. В приведённой ниже программе не используется переменная MAX, а просто выводится на экран большее число. Попробуйте самостоятельно изменить программу так, чтобы она соответствовала блок-схеме параграфа 1.

Program Ex21;

Var x,y: Integer;

Begin

Write ('ââåäèòå 2 ÷èñëà');

Readln(x,y); {ââîäèì äâà öåëûõ ÷èñëà ÷åðåç ïðîáåë}

If x>y Then Writeln(x) {åñëè (If) x áîëüøå y, òî (Then) âûâîäèì x,}

Else Writeln(y); {èíà÷å (Else) âûâîäèì y}

Readln; {этот оператор служит для задержки изображения}

End.

Ââåäåì äâà ÷èñëà — 5 è 7. Ïåðåìåííàÿ x ïîëó÷èò çíà÷åíèå 5, à ïåðåìåííàÿ y — çíà÷åíèå 7 (x=5, y=7). Óñëîâèå x>y íå âûïîëíÿåòñÿ, òàê êàê 5 íå áîëüøå 7. Óïðàâëåíèå ïåðåäàåòñÿ íà îïåðàòîð, ñòîÿùèé ïîñëå Else, òî åñòü Writeln(y), à ñëåäîâàòåëüíî, íà ýêðàíå ïîÿâèò­ñÿ 7. Следует заметить, что данный алгоритм не анализирует случай, когда числа равны.

Условие, управляющее разветвлением вычислений, не обязательно должно иметь форму операции отношения. Оно может принимать вид любого логического выражения и, в частности, логической переменной. Если в программе Ех21 описать логическую переменную В типа BOOLEAN и определить её значение отдельно В:=Х>Y, то условный оператор примет вид

If В Then Writeln(x) Else Writeln(y);

В этом случае Паскаль позволяет не записывать отношение В=TRUE, а указывать только имя логической переменной. Если её значение истинно, то будет выполняться ветвь THEN, иначе (если значение В ложно) — ветвь ELSE.

Рассмотрим ещё несколько примеров.

Пример 22. Вычислить А=В*С, если В>10, но меньше 30. при всех других значениях B вычислить А=2*(В+С). условный оператор в этом случае имеет вид:

IF (B>10) AND (B<30) THEN A:=B*C ELSE A:=2*(B+C);

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

Пример 23. Если А>В, то нужно вычислить два оператора: Y=12, X=A*B. В противном случае (если АВ) нужно выполнить три оператора: Y=2*A, X=A+B, A=B. условный оператор в этом случае имеет вид:

IF (А>В) THEN

BEGIN

Y:=12;

X:=A*B;

END

ELSE

BEGIN

Y:=2*А;

X:=A+B;

А:=В;

END;

При использовании составного оператора следует быть внимательным. Часто встречающаяся при этом ошибка: после слов THEN или ELSE имеют в виду составной оператор, а операторные скобки BEGIN—END ставить забывают. В этом случае транслятор выдаёт сообщение об ошибке.

Ïðèìåð 24. Íàïèñàòü ïðîãðàììó, ïðîâåðÿþùóþ, ïðèíàäëåæèò ëè целое ÷èñëî, ââåäåí­íîå ñ êëàâèàòóðû, èíòåðâàëó (0; 5).




Program Ex24;

Var x: integer;

Begin

Write ('ââåäèòå ÷èñëî õ');

Readln(x);

If (õ>0) and (õ<5) Then Writeln (x,' ïðèíàäëåæèò интервалу (0; 5)') Else Writeln(x,' íå ïðèíàäëåæèò интервалу (0; 5)');

Readln;

End.


Ðåøåíèå. Îáîçíà÷èì ÷åðåç x ÷èñëî, ââîäèìîå ñ êëàâèàòóðû ïîëüçîâàòåëåì (ýòî ïåðåìåííàÿ öåëîãî òèïà). Ïðèíàäëåæíîñòü ÷èñëà õ èíòåðâàëó (0; 5) îïðåäåëÿåòñÿ ñëåäóþùåé парой íåðàâåíñòâ: x>0 и x<5, которые должны выполняться одновременно.

Блок-схема и программа на языке Паскаль решения поставленной задачи изображена на рисунке 12.

15.2. Íåïîëíûé óñëîâíûé îïåðàòîð. Âåòâü Else ìîæåò îòñóòñòâîâàòü, åñëè â ñëó÷àå íåâûïîëíåíèÿ óñ­ëîâèÿ íè÷åãî äåëàòü íå íàäî. Íàïðèìåð, ðàññìîòðèì ñëåäóþùóþ çàäà­÷ó: åñëè çíà÷åíèå ïåðåìåííîé x ìåíüøå 0, òî ïîìåíÿòü åãî íà ïðîòè­âîïîëîæíîå, с положительными числами и нулём ничего делать не надо. Блок-схема решения этой задачи приведена на рисунке 14. Для записи неполного ветвления в языке Паскаль используется условный оператор, который тоже называется неполным (кратким). В этом случае он имеет вид:

If <óñëîâèå> Then <îïåðàòîð>;

Порядок вûïîëíåíèя óñëîâíîãî îïåðàòîðà в краткой форме следующий:
  1. âû÷èñëяется çíà÷å­íèе ëîãè÷åñêîãî âûðàæåíèÿ, çàïèñàííîãî â óñëîâèè.
  2. Åñëè óñëîâèå èñ­òèííî (TRUE), òî âûïîëíÿåòñÿ <îïåðàòîð1> и осуществляется выход из команды.
  3. Åñëè óñëîâèå ложíî (FALSE), то сразу осуществляется выход из команды.

Решение задачи, записанное на языке Паскаль, будет следующим:

Program Ex24_1;

Var x: Integer;

Begin

Write ('ââåäèòå значение х:');

Readln(x); {ââîäèì ÷èñëо}

If x<0 Then x:=-x; {åñëè (If) x < 0, òî (Then) x присваиваем противоположное значение}

Readln; {этот оператор служит для задержки изображения}

End.

Вопросы и задания.
  1. Для чего предназначен условный оператор?
  2. Каковы две формы записи условного оператора?
  3. В каких случаях в программе используется полный условный оператор? Как он оформляется? Как он работает (что происходит при его выполнении)? Нарисуйте и объясните блок-схему полного условного оператора.
  4. В каких случаях в программе используется неполный условный оператор? Как он оформляется? Как он работает (что происходит при его выполнении)? Нарисуйте и объясните блок-схему неполного условного оператора.
  5. Может ли условный оператор содержать в себе другие условные операторы?
  6. В каких случаях в программе используется вложенный условный оператор? Как он оформляется?
  7. Написать программу выбора наибольшего из трёх чисел.
  8. Если целое число m делится нацело на целое число n, то вывести на экран частное от деления, в противном случае вывести сообщение «m на n нацело не делится».
  9. Определить, является ли число а делителем числа b.
  10. Дано целое число. Определить:
  1. является ли оно чётным;
  2. оканчивается ли оно цифрой 7.
  1. Известны год и номер месяца рождения человека, а так же год и номер месяца сегодняшнего дня (январь — 1 и т.д.). определить возраст человека (число полных лет). В случае совпадения указанных месяцев считать, что прошёл полный год.
  2. Дано двузначное число. Определить:
  1. какая из его цифр больше, первая или вторая;
  2. кратна ли трём сумма его цифр;
  3. является ли сумма его цифр двузначным числом.
  1. Дано трёхзначное число. Определить:
  1. какая из его цифр больше, первая или вторая;
  2. какая из его цифр больше, вторая или третья;
  3. какая из его цифр больше, первая или третья;
  4. кратна ли сумма его цифр числу а;
  5. является ли сумма его цифр двузначным числом.
  1. Дано вещественное число х. Вычислить значение F, если


  1. Составить программу для вычисления значения функции F:



где
  1. Даны три вещественных числа a, b, c. Проверить:
  1. выполняется ли неравенство a
  2. выполняется ли неравенство a>b>c.

Использовать составное условие.
  1. Даны три вещественных числа a, b, c. Определить имеется среди них хотя бы одна пара равных между собой чисел. Использовать составное условие.
  2. Êàêèìè áóäóò çíà÷åíèÿ ïåðåìåííûõ j, k ïîñëå âûïîëíåíèÿ óñ­ëîâíîãî îïåðàòîðà:

if j>k then j:=k-2 else dec(k,2);

— åñëè èñõîäíûå çíà÷åíèÿ ïåðåìåííûõ ðàâíû:

à) j=3, k=5;

á) j=3, k=3;

â) j=3, k=2.

 ðåçóëüòàòå âûïîëíåíèÿ îïåðàòîðà dec(k,2) çíà÷åíèå ïåðåìåííîé k óìåíüøàåòñÿ íà 2.
  1. Çàïèøèòå óñëîâíûé îïåðàòîð, â êîòîðîì çíà÷åíèå ïåðåìåííîé ñ âû÷èñëÿåòñÿ ïî ôîðìóëå a+b, åñëè à — íå÷åòíîå è a*b, åñëè à — ÷åò­íîå.
  2. Âû÷èñëèòü çíà÷åíèå ôóíêöèè:


  1. Âûâåñòè íà ýêðàí íîìåð ÷åòâåðòè, êîòîðîé ïðèíàäëåæèò òî÷êà ñ êîîðäèíàòàìè (x, y), ïðè óñëîâèè, ÷òî (x<>0) è (y<>0).
  2. Êàêèì áóäåò çíà÷åíèå ïåðåìåííîé a ïîñëå âûïîëíåíèÿ îïåðà­òîðîâ:

a:=3;

if a<4 then begin inc (a,2); inc (a,3); end.

 ðåçóëüòàòå âûïîëíåíèÿ îïåðàòîðà inc(a,3) çíà÷åíèå ïåðå­ìåííîé a óâåëè÷èâàåòñÿ íà 3.
  1. Составить программу, которая печатает сообщения о возрасте ребенка (например, «ребенку 1 год», «ребенку 2 года», «ребенку 9 лет») по введенному значению лет k (1


Для любознательных

На уроке математики Пете задали задачу: дан квадрат. Известно, что после того, как его высоту увеличили на M см, а ширину на N см, то его площадь стала S см.кв. Найти первоначальную длину стороны квадрата.

Но Петя не смог сам решить эту задачу и поэтому он просит у вас помощи.

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

Ввод: N, M, S (0<=N, M, S<=1012).

Вывод: длина стороны квадрата или ‘No solution’, если задача не имеет решения.

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

Пример:

input.txt output.txt

0 0 4 2.00