В прошлый раз, мы написали программку для подсчёта корней уравнения. Вот её текст:
Program Decision_of_quadratic_equalation;
var
a, b, c, D : integer;
x1, x2 : real;
begin
writeLn ('Решение квадратного уравнения: 3*х^2 + 8*x + 5 = 0');
{ Инициализация начальных значений }
a := 3;
b := 8;
c := 5;
{ Вычисление дискриминанта }
D := sqr (b) - 4 * a * c;
{ Вычисление корней }
x1 := (- b - sqrt (D)) / (2 * a);
x2 := (- b + sqrt (D)) / (2 * a);
{ Вывод результата }
writeLn ('Корни уравнения:');
writeLn ('X1 = ', x1 : 1 : 5);
writeLn ('X2 = ', x2 : 1 : 5)
end.
Однако у тех, кто знает математику может возникнуть вопрос: А что если дискриминант отрицательный? Да для этого случая он положительный, но в общем ?
Вопрос вполне законен! Итак как же мы можем сравнить дискриминант с нулём?
В Паскале существует так называемый условный оператор. Вот как он выглядит:
if условие then
оператор1
else
оператор2
Давайте разберём его по полочкам или шкафам, у кого как :)
Итак при переводе на русский if - then - else означает если - то - ещё Можно сказать и так:
ЕСЛИ условие ТО
оператор1
В ДРУГОМ СЛУЧАЕ (ещё)
оператор2
Т.е. если условие истинно, то выполняется оператор1, а если ложно, то оператор2. Как же нам узнать истинно условие или нет? Для этого существуют операторы сравнения:
= Равно. Будем всё смотреть на примерах: А = В
Ложь, если А не равно В.
Истина, если А равно В. По этому поводу вспоминается анекдот:
- Чем программист отличается от обычного смертного?
- А тем, что в состоянии ответить на вопрос, в котором уже заключен ответ.
- Это как же?
- Ну, например, ответь на вопрос: сколько будет 2х2=4?
В самом деле, сколько будет 2*2=4, если взглянуть на это со стороны Паскаля ?
Итак '=' - это оператор равно. 2х2 равно четырём в математическом смысле. Программа сначала считает выражение слева 2*2 =4, потом справа - там просто 4. Потом сравнивает их. Так как 4 = 4 , то результат оператора РАВНО будет ИСТИНА! Поэтому нельзя путать := и = !!!!!! По ходу дела познакомимся с ещё одной функцией : ORD (X) - преобразует к целым числам логические выражения и символы. О символах мы поговорим позже. А пока рассмотрим такую програмку:
var
a : integer;
begin
a := ord (2*2 = 4);
wirteLn (a)
end.
Что же выведет на экран такая программа ? Ответ: 1, т.к. результат логического выражения 2*2=4 - это истина, а при переводе логического выражения в целое истина становится 1, а ложь нулём. Если бы мы написали так:
a := ord (2*2 = 5);
, то на экране увидили бы 0.
<> Не равно
А <> В
Ложь, если А равно В
Истина, если А не равно В
Этот оператор как бы обратное равно.
>,< - Больше / Меньше
A > B
Ложь если А меньше или равно В
Истина, если А больше В
A < B
Ложь если А больше или равно В
Истина, если А меньше В
>=, <= - больше или равно / меньше или равно
A >= B
Ложь если А меньше В
Истина, если А больше или равно В
A <= B
Ложь если А больше В
Истина, если А меньше или равно В
Замечательно теперь мы можем проверить дискриминант с 0:
if D>0 then
выводим сообщение об ошибке
else
считаем корни
Вторая часть (начиная с else) может отсутствовать. Например такой код:
a := 2; if a<3 then
a := a + 3; { Эта строчка никогда не выполняется!}
writeLn (a);
Но немного изменив текст:
a := 2;
if a<3 then
a := a + 3 { Эта строчка никогда не выполняется!}
else
a := 4; { Эта строчка всегда выполняется!}
writeLn (a);
Однако, что делать если нам нужно написать не одну строчку (a := a + 3), а сразу 5??? Тогда нам нужно выделить эти операции в блок, начало которого отмечается словом begin, а конец end. Т.е. например так:
if D >= 0 then
begin
{ Вычисление корней }
x1 := (- b - sqrt (D)) / (2 * a);
x2 := (- b + sqrt (D)) / (2 * a);
{ Вывод результата }
writeLn ('Корни уравнения:');
writeLn ('X1 = ', x1 : 1 : 5);
writeLn ('X2 = ', x2 : 1 : 5)
end
else
begin
{ Корней нет }
writeLn ('Данное уравнение не имеет корней!');
writeLn ('Попробуйте ещё!')
end;
Очень часто может потребоваться использовать вложенные операторы условия. Как например понимать такую запись:
if a<3 then
if b>3 then c := 4
else c := 5;
А теперь внимание вопрос: к какому if относится в данном случае else?? минута пошла :)) Правильный ответ: ко второму!
Или по-русски: else ассоциируется с ближайшим if, которое ещё не связанно со словом else, т.к. при такой конструкции:
if a<3 then
if b>3 then c := 4
else c := 5
else c := 6;
второй else относится к первому if :))) Теперь вновь о точках с запятой :((( Это тема довольно-таки запарная:
Оператор if then - else по идее должен заканчиваться ";" но т.к. после else идут операторы, то последняя строчка относящаяся к else должна кончаться ";"
Вот он пример: между if и else ";" быть не должно, ";" ставится
Читать далее...