Знак логической операции AND, поставленный между двумя условиями, говорит о том, что должны выполняться сразу оба эти условия
Begin Begin
a:=98; a:=’Привет всем’;
Writeln(a) writeln(a)
End. End.
Внимание! Текст в программе отмечен апострофами(одинарными кавычками).В противном случае компьютер откажется ее выполнять.
Напишем программу, которая осуществляла бы следующий диалог человека с компьютером.
Компьютер выводит на экран:
Здравствуй, я компьютер, а тебя как зовут?
Человек вводит с клавиатуры:
Коля
Компьютер выводит на экран:
Очень приятно, Коля. Сколько тебе лет?
Человек вводит с клавиатуры:
Компьютер выводит на экран:
Ого! Целых 17 лет! Ты уже взрослый!
Программа выглядит так:
Var imya:string;
vozrast:integer;
Begin
Writeln(‘Здравствуй, я компьютер, а тебя как зовут?’);
Readln(imya);
Writeln(‘Очень приятно,’, imya’. Сколько тебе лет?’);
Readln(vozrast);
Writeln(‘Ого! Целых’ ,vozrast,’ лет! Ты уже взрослый!’
End.
Мы с вами составляли простейшие программы для линейных вычислений. Теперь поговорим о разветвляющихся алгоритмах.
В большинстве случаев в программе необходимо делать выбор: например, игра в шахматы. В таких программах используется оператор, который имеет определенный шаблон записи. В русском языке существует такое понятие как «синтаксис». Это часть грамматики, состоящая из определенных правил для выстраивания предложения. В языках программирования тоже есть предложения, которыми являются операторы. Таким оператором является
Условный оператор IF:
IF условие THEN оператор ELSE оператор
Пример:
IF a:=28 THEN Writeln(f) ELSE k:=44
Переводится так: если а=28 то печатай f иначе присвой переменной k значение 44.
Другими словами мы предлагаем компьютеру сначала подумать, правда ли, что а=28. Если правда выполняется оператор writeln(f), в противном случае выполняется оператор k:=44. Мы видим, что оператор if включает в себя другие операторы, которые выполняются или не выполняются в зависимости от какого-то условия.
Рассмотрим задачу: Компьютер должен перемножить два числа 167 и 121. Если их произведение превышает 2000, компьютер должен напечатать текст «ПРОИЗВЕДЕНИЕ БОЛЬШОЕ», иначе – текст «ПРОИЗВЕДЕНИЕ МАЛЕНЬКОЕ». После этого компьютер в любом случае должен напечатать само произведение.
Программа:
Var a,b,y:integer;
Begin
a:=167;
b:=121;
y:=a*b;
if y>2000 then Writeln (‘ПРОИЗВЕДЕНИЕ БОЛЬШОЕ’)
else Writeln (‘ПРОИЗВЕДЕНИЕ МАЛЕНЬКОЕ’);
Writeln(y)
End.
Рассмотрим еще одну задачу и ее решение в трех вариантах.
В компьютер вводятся два произвольных положительных числа – длины сторон двух кубиков. Компьютер должен подсчитать объем одного кубика – большего по размеру.
1 вариант:
var a1, a2:real;
Begin
Readln(a1,a2);
If a1>a2 then writeln (a1*a1*a1:15:5)
Else writeln (a2*a2*a2:15:5)
End.
2 вариант:
var a1,a2,v:real;
Begin
Readln(a1,a2);
If a1>a2 then v:=a1*a1*a1
else v:=a2*a2*a2;
Writeln(v:15:5)
End.
3 вариант:
var a1,a2,bol,v:real;
Begin
Readln(a1,a2);
If a1>a2 then bol:=a1
else bol:=a2;
v:=bol*bol*bol;
Writeln(v:15:5)
END.
Таким образом, мы видим, что оператор if избавил человека от труда выбирать какое из двух чисел больше другого. Оператор if можно записывать и без слова else. Например: if s<t then w:=a+1. Это означает, что если s<t, выполняется оператор w:=a+1, в противном случае ничего не делается.
В синтаксической записи оператора IF используются знаки сравнения. Их шесть:
> больше;
< меньше;
>= больше или равно;
<= меньше или равно;
= равно;
<> не равно.
Полезное замечание:
Вычисляя выражения, стоящие в условиях оператора IF, Паскаль не записывает их значения в память. Например, после выполнения фрагмента b:=6; if b+1>0 then S:=20 в ячейке b будет храниться 6, а не7. То же относится и к выражениям из оператора Writeln. Например:
b:=6; Writeln(b+1). И здесь в ячейке b останется храниться 6, а не 7.
ВЫВОД: информация в ячейках памяти не меняется при вычислении выражений.
Составной оператор
Рассмотрим два фрагмента программы:
Writeln(‘Введите два числа’);
Readln(a,b);
Writeln(‘Сумма равна=’ ,a+b)
Writeln(‘Введите число’);
Readln(a);
Writeln(‘Квадрат числа равен=’ ,a*a)
Допустим нам нужно сделать программу, которая по желанию пользователя или складывала два числа, или возводила в квадрат. В этом случае мы можем воспользоваться конструкцией, которая называется составным оператором.
Наша программа будет выглядеть следующим образом:
Var a,b:integer;
Otvet:string;
Begin
Writeln(‘Чем займемся – сложением или возведением в квадрат?’);
Readln(Otvet);
If Otvet=’сложением’
Then
Begin Writeln(‘Введите два числа’);
Readln(a,b);
Writeln(‘Сумма равна=’ ,a+b)
End
Else
Begin Writeln(‘Введите число’);
Readln(a);
Writeln(‘Квадрат числа равен=’ ,a*a)
End;
Writeln(‘Счет завершен’)
End.
Вложенные операторы
Мы с вами рассмотрели самый простой выбор, т.е. один вариант из двух возможных. А если возникает необходимость выбора, к примеру: один из трех. В таком случае в синтаксическую схему оператора IF добавляется вложенный оператор. К примеру: В компьютер вводится число(пусть для конкретности это будет дальность выстрела). Если число находится в интервале от 28 до 30, нужно напечатать текст «ПОПАЛ», иначе – «НЕ ПОПАЛ». Задача осложняется тем, что здесь указан интервал. Как это отразить в программе? Попробуем написать программу.
Var a:real;
Begin
Readln(a);
If a>28 then if a<30 then writeln (‘ПОПАЛ’)
Else writeln(‘НЕ ПОПАЛ’)
Else Writeln(‘НЕ ПОПАЛ’)
End.
Такая программа кажется довольно трудной для восприятия. В среде Паскаль есть возможность применения логических операций, которые упрощают запись программы. Попробуем написать ту же самую программу, но с использованием знаков логических операций.
Var a:real;
Begin
Readln(a);
If (a>28) and (a<30) then writeln (‘ПОПАЛ’)
Else writeln(‘НЕ ПОПАЛ’)
End.
Знак логической операции AND, поставленный между двумя условиями, говорит о том, что должны выполняться сразу оба эти условия.
Рассмотрим другую задачу, где применяется другой знак логической операции.