|
||||||||||||||||||||||||||||||||||||||||||
Разделы.
|
||||||||||||||||||||||||||||||||||||||||||
Условный оператор IF
|
||||||||||||||||||||||||||||||||||||||||||
Определение. Разветвляющимся называется такой алгоритм, в котором выбирается один из нескольких возможных вариантов вычислительного процесса. Каждый подобный путь называется ветвью алгоритма.
Признаком разветвляющегося алгоритма является наличие операций проверки условия. Различают два вида условий - простые и составные.
Простым условием (отношением) называется выражение, составленное из двух арифметических выражений или двух текстовых величин (иначе их еще называют операндами), связанных одним из знаков:
< - меньше, чем... > - больше, чем... <= - меньше, чем... или равно >= - больше, чем... или равно <> - не равно = - равно В общем случае полная форма конструкции условного оператора имеет вид: if <логическое выражение> then <оператор 1> else <оператор 2>
Условный оператор работает по следующему алгоритму.
Сначала вычисляется значение логического выражения, расположенного за служебным словом IF. Если его результат истина, выполняется <оператор 1>, расположенный после слова THEN, а действия после ELSE пропускаются; если результат ложь, то, наоборот, действия после слова THEN пропускаются, а после ELSE выполняется <оператор 2>.
Рассмотрим пример.
Задача.
Вывести на экран большее из двух данных чисел. Var x, y : integer; {вводимые числа} Begin
writeln('Введите 2 числа '); {вводим два целых числа через пробел} readln(x,y); if x>y
then writeln (x) {если х больше y, то выводим х} else
writeln (y) {иначе выводим y} End. Можно также использовать и сокращенную (неполную) форму записи условного оператора.
Эта форма используется тогда, когда в случае невыполнения условия ничего делать не надо. Неполная форма условного оператора имеет следующий вид.
if <логическое выражение>
then <оператор>
Тогда если выражение, расположенное за служебным словом IF. в результате дает истину, выполняются действия после слова THEN, в противном случае эти действия пропускаются.
Управляющая структура if может показаться негибкой, так как выполняемые действия могут быть описаны только одним оператором. Иногда может потребоваться выполнение последовательности операторов. В этом случае хотелось бы заключить всю последовательность в воображаемые скобки. В Паскале предусмотрен этот случай.
Если в качестве оператора должна выполниться серия операторов, то они заключаются в операторные скобки begin-end. Конструкция Begin ... End называется составным оператором.
if <логическое выражение>
then begin
оператор 1;
оператор 2; ... end else begin оператор 1;
оператор 2; ... end; Определение. Составной оператор - объединение нескольких операторов в одну группу. Группа операторов внутри составного оператора заключается в операторные скобки (begin-end).
begin
оператор 1;
оператор 2; end;
Перед служебным словом Else разделитель (точка с запятой) не ставится.
|
||||||||||||||||||||||||||||||||||||||||||
Примеры программ с IF
|
||||||||||||||||||||||||||||||||||||||||||
Составить программу, которая предлагает Ивану-Царевичу выбрать правильное направление пути.
У Ивана-Царевича есть три варианта дальнейшего пути: направо, - «Коня потеряешь» налево, - «Голову сложишь» вперед. - «Невесту найдешь» Var p :string; Begin WriteLn (‘Куда путь держишь?’); ReadLn (p); If p=‘направо’ then writeLn (‘Коня потеряешь’); If p=‘налево’ then writeLn (‘Голову сложишь’); If p=‘прямо’ then writeLn (‘Невесту найдешь’); ReadLn; End. пример выполнения программы Куда путь держишь?
прямо Невесту найдешь Куда путь держишь? направо Коня потеряешь |
||||||||||||||||||||||||||||||||||||||||||
Заданы длины сторон треугольника, определить, является ли этот треугольник прямоугольным.
Program sum3;
Var a, b, c: real; Begin Readln ( a, b,с ); If a*a + b*b = c*c then writeln (‘треугольник прямоугольный’) else writeln (‘не прямоугольный’); Readln; End. пример выполнения программы
Длина первой стороны 3 Длина второй стороны 4 Длина третьей стороны 5 треугольник прямоугольный |
||||||||||||||||||||||||||||||||||||||||||
Вложенные операторы if.
|
||||||||||||||||||||||||||||||||||||||||||
При решении задач часто приходится рассматривать не два, а большее количество вариантов. Это можно реализовать, используя несколько условных операторов. В этом случае после служебных слов Then и Else записывается новый условный оператор.
Итак, когда оператор if появляется внутри другого оператора if, они считаются вложенными. Такое вложение используется для уменьшения числа необходимых проверок. Этот метод часто обеспечивает большую эффективность, однако одновременно он уменьшает наглядность программы. Не рекомендуется использовать более одного-двух уровней вложения if. За вторым уровнем вложения становится трудно восстановить последовательность проверки условий каждым условным оператором. Пример
Снаряд должен попасть в промежуток между 30 и 40 км.
Если он попадает в данный промежуток то появляется надпись «Попал», иначе если не долетел «Недолет» или «Перелет» if x >= 30 then
if x <= 40 then writeln (‘Попал') - вложенный условный оператор else writeln (‘Перелет')
else
writeln ('Недолет'); |
||||||||||||||||||||||||||||||||||||||||||
Примеры программ
|
||||||||||||||||||||||||||||||||||||||||||
var a,b :integer;
imya : string; d :char; begin Writeln ('Как тебя звать?'); Readln (imya); Writeln ('Чем займемся ',imya,' сложением или умножением?'); Readln (d); If d='+' then begin Writeln ('Введите первое число'); Read(a); Writeln ('Введите второе число'); Read(b); Writeln ('Сумма чисел = ',a+b); end else begin Writeln ('Введите первое число'); Read(a); Writeln ('Введите второе число'); Read(b); Writeln ('Произведение чисел = ',a*b); end; end. |
||||||||||||||||||||||||||||||||||||||||||
Диалог с компьютером
Компьютер : «Как тебя звать?» Пользователь: «Вася» Компьютер: Чем займемся Вася сложением или умножением?» Пользователь вводит знак «+» или «*» Если «+»: Компьютер: «Введите первое число» а Компьютер: «Введите второе число» b Компьютер: Сумма чисел = ……» Если «*»: Компьютер: «Введите первое число» а Компьютер: «Введите второе число» b Компьютер: Произведение чисел = ……» |
||||||||||||||||||||||||||||||||||||||||||
program qq;
var x: integer; begin writeln('Введите возраст'); read ( x ); if x >= 25 then if x <= 40 then writeln ('Подходит') else writeln ('Не подходит') else writeln ('Не подходит'); end. |
||||||||||||||||||||||||||||||||||||||||||
Фирма набирает сотрудников от 25 до 40 лет включительно. Ввести возраст человека и определить, подходит ли он фирме (вывести ответ «подходит» или «не подходит»).
|
||||||||||||||||||||||||||||||||||||||||||
Сложные условия
Логические операции not, and, or. |
||||||||||||||||||||||||||||||||||||||||||
Сложное условие – это условие, состоящее из нескольких простых условий (отношений), связанных с помощью логических операций:
not – НЕ (отрицание, инверсия)
and – И (одновременное выполнение условий)
or – ИЛИ (выполнение хотя бы одного из условий)
Порядок выполнения (приоритет = старшинство) выражения в скобках not
and or <, <=, >, >=, =, <> Особенность – каждое из простых условий обязательно заключать в скобки.
Пример
if not (a > b) or (c <> d) and (b <> a)
then begin ... end |
||||||||||||||||||||||||||||||||||||||||||
Сравните программы:
|
||||||||||||||||||||||||||||||||||||||||||
вложенное условие
var x: integer; begin writeln('Введите возраст'); read ( x ); if x >= 25 then if x <= 40 then writeln ('Подходит') else writeln ('Не подходит') else
writeln ('Не подходит'); end. |
||||||||||||||||||||||||||||||||||||||||||
составное условие
var x: integer;
begin writeln('Введите возраст'); read ( x ); if (x >= 25)and ( x <= 40 ) then
writeln ('Подходит') else writeln ('Не подходит') end. |
||||||||||||||||||||||||||||||||||||||||||
Примеры программ с сложными условиями.
|
||||||||||||||||||||||||||||||||||||||||||
Человек вводит с клавиатуры строку, смысл которой - приветствие при встрече. Компьютер тоже должен ответить приветствием.
Отвечать нужно в соответствии со следующей таблицей: |
||||||||||||||||||||||||||||||||||||||||||
VAR a,b :String; {a-ПРИВЕТСТВИЕ ЧЕЛОВЕКА, b-ОТВЕТ КОМПЬЮТЕРА}
BEGIN
ReadLn (a);
if a=‘Привет' then Writeln (‘Привет ‘); if (a='Здорово‘) OR (a='Здравствуйте') then Writeln ('Здравствуйте‘);
if(a='Добрыйдень')OR(a='Приветик')OR(a='Салют') then Writeln ('Салют‘); END.
|
||||||||||||||||||||||||||||||||||||||||||
Оператор варианта case
|
||||||||||||||||||||||||||||||||||||||||||
В Паскале есть специальный оператор, который позволяет делать выбор одной из нескольких возможностей. Рассмотрим программу, спрашивающую у ученика его отметку по чистописанию и реагирующую на нее подходящим текстом:
VAR Otmetka: Integer; begin
WriteLn ('Какую отметку ты получил по чистописанию?');
ReadLn (Otmetka); CASE otmetka OF {Перевод: В СЛУЧАЕ ЕСЛИ отметка РАВНА...} 1,2 :WriteLn('Кошмар!'); 3 :WriteLn('Неважно'); 4 :WriteLn('Неплохо'); 5 :WriteLn('Молодец!'); ELSE WriteLn('Таких отметок не бывает') END {Конец оператора CASE} end.
Основой программы является оператор варианта CASE (читается "кэйс", переводится "случай"). Предлог OF читается "эв". Весь оператор CASE нужно понимать так:
В СЛУЧАЕ ЕСЛИ отметка РАВНА
1 или 2 печатай 'Кошмар!' 3 печатай 'Неважно' 4 печатай 'Неплохо' 5 печатай 'Молодец!' ИНАЧЕ печатай 'Таких отметок не бывает' КОНЕЦ оператора case В процессе исполнения оператора case компьютер сравнивает значение переменной Otmetka по очереди со всеми значениями, перечисленными перед двоеточиями. Наткнувшись на совпадающее значение, он выполняет оператор, стоящий после двоеточия. На этом исполнение оператора case завершается. Если же совпадающего значения так и не нашлось, то выполняется оператор, стоящий после слова else (в нашей программе он полезен на тот случай, если ученик болен манией величия и вводит число 6). После else может стоять и цепочка операторов, записанных через точку с запятой. У оператора case есть существенное ограничение - переменная, стоящая после слова case, должна быть так называемого порядкового типа. в качестве переменной-селектора можно использовать переменную целого (integer) или символьного (char) типа.
|
||||||||||||||||||||||||||||||||||||||||||
Var
a : integer; Begin writeln('Введите цифру '); readln(a); case a of 0 : write ('ноль'); 1 : writeln ('один'); 2 : writeln ('два'); 3 : writeln ('три'); 4 : writeln ('четыре'); 5 : writeln ('пять'); 6 : writeln ('шесть'); 7 : writeln ('семь'); 8 : writeln ('восемь'); 9 : writeln ('девять') else writeln ('Это число не является цифрой'); end; End. |
||||||||||||||||||||||||||||||||||||||||||
Написать программу преобразования цифр в слова.
Пример вывода программы
Введите цифру
ф Это число не является цифрой Введите цифру 5 -пять 6 -шесть 1 -один |
||||||||||||||||||||||||||||||||||||||||||
Самостоятельная работа
|
||||||||||||||||||||||||||||||||||||||||||
1.Написать программу вычисления стоимости покупки с учетом скидки. Скидка в 10% предоставляется, если сумма покупки больше 1000 руб. Ниже представлен рекомендуемый вид экрана во время работы программы
Введите сумму покупки 1200
Вам предоставляется скидка 10% Сумма покупки с учетом скидки: 1080.00 руб 2. Написать программу, которая сравнивает два числа, введенных с клавиатуры. Программа должна указать, какое число больше, или, если числа равны, вывести соответствующее сообщение.
Введите два целых числа
34 67 34 меньше 67. |
3. Фирма набирает сотрудников от 25 до 40 лет включительно. Ввести возраст человека и определить, подходит ли он фирме (вывести ответ до 25 лет – «Еще молод», старше 40 – «Пора на покой», 25 – 40 – «Вы нас устраиваете». )
4. Написать алгоритм, который по номеру дня недели - целому числу от 1 до 7 выдавать в качестве результата название уроков в классе в соответствующий день. |
|||||||||||||||||||||||||||||||||||||||||
Флеш - презентация "Условные опрераторы Pascal.
|
||||||||||||||||||||||||||||||||||||||||||