Предисловие дорогие друзья !
Вид материала | Документы |
Содержание§15. Условный оператор IF. Program Ex24; Var Program Ex24_1; Var Для любознательных Пример: input.txt output.txt |
- К. Бальмонт Дорогие друзья, сегодня мы в гостях у замечательного русского поэта Константина, 164.76kb.
- Медникова Надежда Александровна учитель начальных классов моу «Уинская сош» Пермский, 91.48kb.
- И в шутку и всерьез Ведущий Добрый день, дорогие друзья! Вот и пришла весна, вот, 339.91kb.
- Играют 2 команды. Вопросы викторины, 53.15kb.
- Летние каникулы в праге, 322.16kb.
- Мои дорогие литературные друзья, 136.81kb.
- Ведущий: Дорогие, друзья! Разрешите поздравить вас с большим и дорогим для всех праздником, 124.29kb.
- Отчет о конференции 17-18 апреля дорогие друзья!, 182.44kb.
- Дорогие друзья и единомышленники, 134.05kb.
- Сценарий для 7-8 классов «Старая сказка на новый лад», 52.44kb.
§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 (иначе) — служебные слова.
Âûïîëíяется óñëîâíый îïåðàòîð в полной форме следующим образом:
- âû÷èñëяется çíà÷åíèе ëîãè÷åñêîãî âûðàæåíèÿ, çàïèñàííîãî â óñëîâèè.
- Åñëè óñëîâèå èñòèííî (TRUE), òî âûïîëíÿåòñÿ <îïåðàòîð1> и происходит выход из команды.
- Åñëè óñëîâèå ложíî (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 <îïåðàòîð>;
П

- âû÷èñëяется çíà÷åíèе ëîãè÷åñêîãî âûðàæåíèÿ, çàïèñàííîãî â óñëîâèè.
- Åñëè óñëîâèå èñòèííî (TRUE), òî âûïîëíÿåòñÿ <îïåðàòîð1> и осуществляется выход из команды.
- Åñëè óñëîâèå ложíî (FALSE), то сразу осуществляется выход из команды.
Решение задачи, записанное на языке Паскаль, будет следующим:
Program Ex24_1;
Var x: Integer;
Begin
Write ('ââåäèòå значение х:');
Readln(x); {ââîäèì ÷èñëо}
If x<0 Then x:=-x; {åñëè (If) x < 0, òî (Then) x присваиваем противоположное значение}
Readln; {этот оператор служит для задержки изображения}
End.
Вопросы и задания.
- Для чего предназначен условный оператор?
- Каковы две формы записи условного оператора?
- В каких случаях в программе используется полный условный оператор? Как он оформляется? Как он работает (что происходит при его выполнении)? Нарисуйте и объясните блок-схему полного условного оператора.
- В каких случаях в программе используется неполный условный оператор? Как он оформляется? Как он работает (что происходит при его выполнении)? Нарисуйте и объясните блок-схему неполного условного оператора.
- Может ли условный оператор содержать в себе другие условные операторы?
- В каких случаях в программе используется вложенный условный оператор? Как он оформляется?
- Написать программу выбора наибольшего из трёх чисел.
- Если целое число m делится нацело на целое число n, то вывести на экран частное от деления, в противном случае вывести сообщение «m на n нацело не делится».
- Определить, является ли число а делителем числа b.
- Дано целое число. Определить:
- является ли оно чётным;
- оканчивается ли оно цифрой 7.
- Известны год и номер месяца рождения человека, а так же год и номер месяца сегодняшнего дня (январь — 1 и т.д.). определить возраст человека (число полных лет). В случае совпадения указанных месяцев считать, что прошёл полный год.
- Дано двузначное число. Определить:
- какая из его цифр больше, первая или вторая;
- кратна ли трём сумма его цифр;
- является ли сумма его цифр двузначным числом.
- Дано трёхзначное число. Определить:
- какая из его цифр больше, первая или вторая;
- какая из его цифр больше, вторая или третья;
- какая из его цифр больше, первая или третья;
- кратна ли сумма его цифр числу а;
- является ли сумма его цифр двузначным числом.
- Дано вещественное число х. Вычислить значение F, если

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

где

- Даны три вещественных числа a, b, c. Проверить:
- выполняется ли неравенство a
- выполняется ли неравенство a>b>c.
Использовать составное условие.
- Даны три вещественных числа a, b, c. Определить имеется среди них хотя бы одна пара равных между собой чисел. Использовать составное условие.
- Êàêèìè áóäóò çíà÷åíèÿ ïåðåìåííûõ 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.
- Çàïèøèòå óñëîâíûé îïåðàòîð, â êîòîðîì çíà÷åíèå ïåðåìåííîé ñ âû÷èñëÿåòñÿ ïî ôîðìóëå a+b, åñëè à — íå÷åòíîå è a*b, åñëè à — ÷åòíîå.
- Âû÷èñëèòü çíà÷åíèå ôóíêöèè:

- Âûâåñòè íà ýêðàí íîìåð ÷åòâåðòè, êîòîðîé ïðèíàäëåæèò òî÷êà ñ êîîðäèíàòàìè (x, y), ïðè óñëîâèè, ÷òî (x<>0) è (y<>0).
- Êàêèì áóäåò çíà÷åíèå ïåðåìåííîé a ïîñëå âûïîëíåíèÿ îïåðàòîðîâ:
a:=3;
if a<4 then begin inc (a,2); inc (a,3); end.
 ðåçóëüòàòå âûïîëíåíèÿ îïåðàòîðà inc(a,3) çíà÷åíèå ïåðåìåííîé a óâåëè÷èâàåòñÿ íà 3.
- Составить программу, которая печатает сообщения о возрасте ребенка (например, «ребенку 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
4>0>