Язык программирования Паскаль (версия PascalABC.NET)
Операторы ветвления в языке Pascal
Операторы ветвления Полное ветвление
условие
да
нет
действия_1
действия_2
Полная форма ветвления (условного оператора):
If Then Else ;
Если условие – истина, то выполняется оператор_1 , иначе – выполняется оператор_2 .
Перед Else знак « ; » НЕ ставится!
Операторы ветвления Неполное ветвление
условие
да
нет
действия
Неполная форма ветвления (условного оператора):
If Then ;
Если условие – истина, то выполняется оператор . В противном случае – переход к следующему оператору программы.
x- 1 then begin if yx- 1 then begin y:=y-x; x:=x-y end y:=y-x; else begin x:=x-y x:=x-y; y:=y-x end ; end else begin x:=x-y; y:=y-x end ; " width="640"
Составной оператор
В условном операторе после Then и после Else можно использовать только один оператор .
Если нужно выполнить несколько операторов, то используют составной оператор , где слова Begin и End – операторные скобки:
begin end ;
Разделение на строки может быть произвольным. Например:
или
if yx- 1 then begin
if yx- 1 then
begin
y:=y-x; x:=x-y end
y:=y-x;
else begin
x:=x-y
x:=x-y; y:=y-x end ;
end
else
begin
x:=x-y;
y:=y-x
end ;
y*y then y:=x+y; if yx- 1 then begin y:=y-x; x:=x-y end else begin x:=x-y; y:=y-x end ; writeln ( 'x=' , x, ' y=' , y) End . ввод x, y x := x ∙ y x y 2 да нет y := x + y y x - 1 да нет x := x - y y := y - x y := y - x x := x - y вывод x, y конец " width="640"
Трассировка программы с ветвлениями
Для данного алгоритма составьте таблицу значений переменных при указанных значениях x и y . Что появится на экране?
начало
Program Vetvlenie;
Var x, y: integer ;
Begin
write ( 'Введите x, y: ' );
readln (x, y);
x:=x*y;
if xy*y then y:=x+y;
if yx- 1 then
begin y:=y-x; x:=x-y end
else
begin x:=x-y; y:=y-x end ;
writeln ( 'x=' , x, ' y=' , y)
End .
ввод x, y
x := x ∙ y
x y 2
да
нет
y := x + y
y x - 1
да
нет
x := x - y
y := y - x
y := y - x
x := x - y
вывод x, y
конец
y*y then y:=x+y; if yx- 1 then begin y:=y-x; x:=x-y end else begin x:=x-y; y:=y-x end ; writeln ( 'x=' , x, ' y=' , y) End . Переменные x y Проверка условий xy 2 yx-1 2 3 - - 6 69 (нет) 35 (нет) 3 0 Щелчок – шаг программы " width="640"
Трассировка программы с ветвлениями
Для данного алгоритма составьте таблицу значений переменных при указанных значениях x и y . Что появится на экране?
1) При x=2, y=3
Program vetvlenie;
Var x, y: integer ;
Begin
write ( 'Введите x, y: ' );
readln (x, y);
x:=x*y;
if xy*y then
y:=x+y;
if yx- 1 then
begin y:=y-x; x:=x-y end
else
begin x:=x-y; y:=y-x end ;
writeln ( 'x=' , x, ' y=' , y)
End .
Переменные
x
y
Проверка условий
xy 2
yx-1
2
3
-
-
6
69 (нет)
35 (нет)
3
0
Щелчок – шаг программы
y*y then y:=x+y; if yx- 1 then begin y:=y-x; x:=x-y end else begin x:=x-y; y:=y-x end ; writeln ( 'x=' , x, ' y=' , y) End . Переменные x y Проверка условий xy 2 yx-1 3 2 - - 6 64 (да) 8 85 (да) 2 4 Щелчок – шаг программы " width="640"
Трассировка программы с ветвлениями
Для данного алгоритма составьте таблицу значений переменных при указанных значениях x и y . Что появится на экране?
2) При x=3, y=2
Program vetvlenie;
Var x, y: integer ;
Begin
write ( 'Введите x, y: ' );
readln (x, y);
x:=x*y;
if xy*y then
y:=x+y;
if yx- 1 then
begin y:=y-x; x:=x-y end
else
begin x:=x-y; y:=y-x end ;
writeln ( 'x=' , x, ' y=' , y)
End .
Переменные
x
y
Проверка условий
xy 2
yx-1
3
2
-
-
6
64 (да)
8
85 (да)
2
4
Щелчок – шаг программы
Задача 1
Найти корни данного квадратного уравнения ax 2 +bx+c=0 .
начало
ввод a, b, c
(d
(d≥0)
нет
да
d
«Корней нет»
вывод x1, x2
конец
=0 begin x1:=(-b+sqrt(d))/( 2 *a); x2:=(-b-sqrt(d))/( 2 *a); writeln ( 'x1=' , x1: 5 : 1 , ' x2=' , x2: 5 : 1 ) end ; End . " width="640"
Задача 1
Найти корни данного квадратного уравнения ax 2 +bx+c=0 .
Program KVUR;
Var a, b, c, d, x1, x2: real ;
Begin
writeln ( 'Решение квадратного уравнения' );
write ( 'Введите коэффициенты a, b, c: ' );
readln (a, b, c);
d := b*b- 4 *a*c; //дискриминант
if dthen //если d
writeln ( 'Корней нет!' )
else //иначе d=0
begin
x1:=(-b+sqrt(d))/( 2 *a);
x2:=(-b-sqrt(d))/( 2 *a);
writeln ( 'x1=' , x1: 5 : 1 , ' x2=' , x2: 5 : 1 )
end ;
End .
b max := a да нет a max := a max := b max := b вывод max вывод max конец конец " width="640"
Задача 2
Определить большее из двух значений переменных.
1 способ
2 способ
начало
начало
ввод a, b
ввод a, b
нет
да
ab
max := a
да
нет
a
max := a
max := b
max := b
вывод max
вывод max
конец
конец
b then max:=a else max:=b; writeln ( 'Большее число: ' , max); End . 2 способ Program BID2; Var a, b, max: integer ; Begin writeln ( 'Введите два числа: ' ); read (a, b); max:=a; if athen max:=b; writeln ( 'Большее число: ' , max); End . " width="640"
Задача 2
Определить большее из двух значений переменных.
1 способ
Program BID1;
Var a, b, max: integer ;
Begin
writeln ( 'Введите два числа: ' );
read (a, b);
if ab then max:=a else max:=b;
writeln ( 'Большее число: ' , max);
End .
2 способ
Program BID2;
Var a, b, max: integer ;
Begin
writeln ( 'Введите два числа: ' );
read (a, b);
max:=a;
if athen max:=b;
writeln ( 'Большее число: ' , max);
End .
0) (d=0) да нет d=0 «Корней нет» вывод x вывод x1, x2 конец " width="640"
Задача 3
Найти корни данного квадратного уравнения ax 2 +bx+c=0, учитывая случай, когда уравнение имеет один корень.
начало
ввод a, b, c
вложенное ветвление
(d≥0)
(d
нет
да
d
(d0)
(d=0)
да
нет
d=0
«Корней нет»
вывод x
вывод x1, x2
конец
Задача 3
Найти корни данного квадратного уравнения ax 2 +bx+c=0, учитывая случай, когда уравнение имеет один корень.
Program KVUR2;
Var a, b, c, d, x, x1, x2: real ;
Begin
writeln ( 'Решение квадратного уравнения' );
write ( 'Введите коэффициенты a, b, c: ' );
readln (a, b, c); d := b*b- 4 *a*c;
if dthen
writeln ( 'Корней нет!' )
else
if d= 0 then
begin
writeln ( 'Один корень:' );
x:=-b/( 2 *a); writeln ( 'x=' , x: 5 : 1 );
end
else
begin
writeln ( 'Два корня:' );
x1:=(-b+sqrt(d))/( 2 *a); x2:=(-b-sqrt(d))/( 2 *a);
writeln ( 'x1=' , x1: 5 : 1 , ' x2=' , x2: 5 : 1 )
end ;
End .
1) (-1≤x≤1) нет да y := x+2 x ≤ 1 y := 2-x y := 1 вывод x конец " width="640"
Задача 4
Найти значение функции для любого значения аргумента.
y
2
1
x
начало
0
2
-2
1
-1
-1
ввод x
(x≥-1)
(x
да
нет
x
(x1)
(-1≤x≤1)
нет
да
y := x+2
x ≤ 1
y := 2-x
y := 1
вывод x
конец
Задача 4
Найти значение функции для любого значения аргумента.
Program funk1;
Var x, y: real ;
Begin
write ( 'Введите x: ' );
readln (x);
if xthen
y:=x+ 2
else
if xthen
y:= 1
else
y:= 2 -x;
writeln ( 'y=' , y);
End .
3) and (2*2=4) {истинно} (53) and (2*2=5) {ложно} Логическое сложение Or («ИЛИ») . Составное условие истинно, если истинно хотя бы одно простое условие, входящее в него. (5 or (2*2=4) {истинно} (5 or (2*2=5) {ложно} Логическое отрицание Not («НЕ») . Если условие истинно, то его отрицание ложно, и наоборот. (2*2=4) {истинно} not (2*2=4) {ложно} Приоритет операций: Операции в скобках not and or , =, =, " width="640"
Составные условия
- Логическое умножение And («И») . Составное условие истинно, если истинны все простые условия, входящие в него.
(53) and (2*2=4) {истинно}
(53) and (2*2=5) {ложно}
- Логическое сложение Or («ИЛИ») . Составное условие истинно, если истинно хотя бы одно простое условие, входящее в него.
(5 or (2*2=4) {истинно}
(5 or (2*2=5) {ложно}
- Логическое отрицание Not («НЕ») . Если условие истинно, то его отрицание ложно, и наоборот.
(2*2=4) {истинно}
not (2*2=4) {ложно}
Приоритет операций:
- Операции в скобках
- not
- and
- or
- , =, =,
=- 1 ) and (xthen y:= 1 ; if x 1 then y:= 2 -x; writeln ( 'y=' , y); End . да нет -1 ≤x≤1 y := 1 нет да x1 y := 2-x вывод x,y конец " width="640"
Задача 4 (2 способ)
Найти значение функции для любого значения аргумента.
начало
ввод x
да
нет
2 способ (с использованием составного условия)
x
y := x+2
Program funk2;
Var x, y: real ;
Begin
write ( 'Введите x: ' );
readln (x);
if xthen y:=x+ 2 ;
if (x=- 1 ) and (xthen y:= 1 ;
if x 1 then y:= 2 -x;
writeln ( 'y=' , y);
End .
да
нет
-1 ≤x≤1
y := 1
нет
да
x1
y := 2-x
вывод x,y
конец
Оператор выбора
Для выбора одного из нескольких вариантов используется оператор:
Case Of
: ;
...
: ;
Else
end ;
Переключатель – выражение целого или символьного типа.
Список выбора – одна константа, диапазон значений вида a..b либо несколько констант или диапазонов через запятую.
Если найдено текущее значение переключателя, то выполняется оператор, соответствующий данному списку.
Если значение переключателя не найдено ни в одном списке, то выполняется оператор после Else (может отсутствовать).
Задача 5
Вывести на экран название времени года по номеру месяца.
Program Vremena_goda;
Var m: integer ;
Begin
write ( 'Введите номер месяца: ' ); readln (m);
case m of
1 , 2 , 12 : writeln ( 'Это зима' );
3..5 : writeln ( 'Это весна' );
6..8 : writeln ( 'Это лето' );
9..11 : writeln ( 'Это осень' );
else writeln ( 'Неверный номер месяца!' )
end ;
End .