217.08K
Category: programmingprogramming

Ветвления. Сложные условия. Программирование (Паскаль). 8 класс

1.

Ветвления. Сложные
условия

2.

Программирование (Паскаль), 8 класс
2
Выбор наибольшего из двух чисел
полная
форма
ветвления
начало
ввод a,b
да
a > b?
M:= a
нет
M:= b
if a > b then
M:= a
else
M:= b;
вывод M
конец
К.Ю. Поляков, Е.А. Ерёмин, 2018
? Если a = b?
http://kpolyakov.spb.ru

3.

Программирование (Паскаль), 8 класс
3
Вариант 1. Программа
program Maximum;
var a, b, M: integer;
begin
writeln('Введите два целых числа');
полная форма
read(a, b);
условного
if a > b then
оператора
M:= a
else
! Перед else не ставится
точка с запятой!
M:= b;
writeln('Наибольшее число ', M);
end.
К.Ю. Поляков, Е.А. Ерёмин, 2018
http://kpolyakov.spb.ru

4.

Программирование (Паскаль), 8 класс
4
Выбор наибольшего из двух чисел-2
начало
ввод a,b
M:= a
да
b > a?
нет
неполная
форма
ветвления
M:= b
вывод M
конец
К.Ю. Поляков, Е.А. Ерёмин, 2018
http://kpolyakov.spb.ru

5.

Программирование (Паскаль), 8 класс
5
Вариант 2. Программа
program Maximum2;
var a, b, M: integer;
begin
writeln('Введите два целых числа');
read(a, b);
неполная
форма
M:= a;
условного
if b > a then
оператора
M:= b;
writeln('Наибольшее число ', M);
end.
К.Ю. Поляков, Е.А. Ерёмин, 2018
http://kpolyakov.spb.ru

6.

Программирование (Паскаль), 8 класс
6
Примеры
Поиск минимального:
if a < b then
M:= a;
if b < a then
M:= b;
? Что плохо?
? Когда работает неверно?
if a < b then
begin
c:=
c:=a;
a;
a:=
a:=b;
b;
b:=
b:=cc
end;
? Что делает эта программа?
составной
оператор
! Перед end можно не ставить
точку с запятой!
К.Ю. Поляков, Е.А. Ерёмин, 2018
http://kpolyakov.spb.ru

7.

Программирование (Паскаль), 8 класс
7
В других языках программирования
Python:
С:
if a < b:
c = a
a = b
b = c
if (a < b) {
c = a;
a = b;
b = c;
}
К.Ю. Поляков, Е.А. Ерёмин, 2018
http://kpolyakov.spb.ru

8.

Программирование (Паскаль), 8 класс
8
Вложенные условные операторы
Задача. В переменной a записан возраст Антона, а в
переменной b – возраст Бориса. Определить, кто из
них старше.
? Сколько вариантов ответа?
if a = b then
вложенный
writeln('Одного возраста') условный
оператор
else
if a
> b
then
a=b
then
writeln('Андрей
)
writeln('Одного старше'
возраста')
else
writeln('Борис старше'
);
старше');
else относится к
ближайшему if
К.Ю. Поляков, Е.А. Ерёмин, 2018
http://kpolyakov.spb.ru

9.

Программирование (Паскаль), 8 класс
9
Задачи
«A»: Ввести два целых числа, найти наибольшее и
наименьшее из них.
Пример:
Введите два целых числа:
1 5
Наибольшее число 5
Наименьшее число 1
«B»: Ввести четыре целых числа, найти наибольшее из них.
Пример:
Введите четыре целых числа:
1 5 4 3
Наибольшее число 5
К.Ю. Поляков, Е.А. Ерёмин, 2018
http://kpolyakov.spb.ru

10.

Программирование (Паскаль), 8 класс
10
Задачи
«C»: Ввести последовательно возраст Антона, Бориса и
Виктора. Определить, кто из них старше.
Пример:
Возраст Антона: 15
Возраст Бориса: 17
Возраст Виктора: 16
Ответ: Борис старше всех.
Пример:
Возраст Антона: 17
Возраст Бориса: 17
Возраст Виктора: 16
Ответ: Антон и Борис старше Виктора.
К.Ю. Поляков, Е.А. Ерёмин, 2018
http://kpolyakov.spb.ru

11.

Программирование (Паскаль), 8 класс
11
Сложные условия
Задача. Фирма набирает сотрудников от 25 до 40 лет
включительно. Ввести возраст человека и определить,
подходит ли он фирме (вывести ответ 'подходит' или 'не
подходит').
Особенность: надо проверить, выполняются ли два
условия одновременно:
возраст 25
возраст 40
? Можно ли решить известными методами?
К.Ю. Поляков, Е.А. Ерёмин, 2018
http://kpolyakov.spb.ru

12.

Программирование (Паскаль), 8 класс
12
Плохое решение
program Work;
var v: integer;
begin
writeln('Введите ваш возраст');
read(v);
вложенный
if v >= 25 then
условный
оператор
if v <= 40 then
write('Подходит!')
else
write('Не подходит.')
else
write('Не подходит.');
end.
К.Ю. Поляков, Е.А. Ерёмин, 2018
http://kpolyakov.spb.ru

13.

Программирование (Паскаль), 8 класс
13
Хорошее решение (операция «И»)
program Work;
var v: integer;
begin
writeln('Введите ваш возраст');
read(v);
if (v >= 25) and (v <= 40) then
write('Подходит!')
сложное
else
условие
write('Не подходит.');
end.
! Каждое условие – в скобки!
К.Ю. Поляков, Е.А. Ерёмин, 2018
http://kpolyakov.spb.ru

14.

Программирование (Паскаль), 8 класс
14
Примеры
Задача. Вывести 'Да', если число в переменной a –
двузначное.
if (10 <= a) and (a <= 99) then
write('Да');
Задача. Вывести 'Да', если число в переменной a –
двузначное и делится на 7.
if (10 <= a) and (a <= 99)
and (a mod 7 = 0) then
write('Да');
К.Ю. Поляков, Е.А. Ерёмин, 2018
http://kpolyakov.spb.ru

15.

Программирование (Паскаль), 8 класс
15
Сложные условия
Задача. Самолёт летает по понедельникам и четвергам.
Ввести номер дня недели и определить, летает ли в
этот день самолёт.
Особенность: надо проверить, выполняется ли одно из
двух условий:
день = 1
день = 4
if (d = 1) or (d = 4) then
write('Летает')
сложное
else
условие
write('Не летает');
К.Ю. Поляков, Е.А. Ерёмин, 2018
http://kpolyakov.spb.ru

16.

Программирование (Паскаль), 8 класс
16
Ещё пример
Задача. Фирма набирает сотрудников от 25 до 40 лет
включительно. Ввести возраст человека и определить,
подходит ли он фирме (вывести ответ 'подходит' или 'не
подходит'). Использовать «ИЛИ».
if (v < 25)
???or (v > 40)
write('Не подходит!')
else
write('Подходит.');
К.Ю. Поляков, Е.А. Ерёмин, 2018
then
http://kpolyakov.spb.ru

17.

Программирование (Паскаль), 8 класс
17
Простые и сложные условия
Простые условия (отношения)
<
<=
>
>=
=
равно
<>
не равно
Сложное условие – это условие, состоящее из
нескольких простых условий (отношений),
связанных с помощью логических операций:
• И – одновременное выполнение условий
v >= 25 and v <= 40
• ИЛИ – выполнение хотя бы одного из условий
v <= 25 or v >= 40
• НЕ – отрицание, обратное условие
v <=
not (v > 25)
???25
К.Ю. Поляков, Е.А. Ерёмин, 2018
http://kpolyakov.spb.ru

18.

Программирование (Паскаль), 8 класс
18
Порядок выполнения операций
• выражения в скобках
• НЕ (not)
• И (and)
• ИЛИ (or), исключающее ИЛИ (xor)
4
1
6
2
5
3
if not(a > 2) or (c <> 5) and (b < a) then
...
К.Ю. Поляков, Е.А. Ерёмин, 2018
http://kpolyakov.spb.ru

19.

Программирование (Паскаль), 8 класс
19
Сложные условия
Истинно или ложно
not (a > b)
Да
Да
(a < b) and (b < c)
(a > c) or (b > c)
Нет
(a < b) and (b > c)
Нет
(a > c) and (b > d)
Нет
2
b
3
c
4
Да
not(a >= b) or (c = d)
(a >= b) or not (c < b)
Да
(a > c) or (b > c) or (b > a)
К.Ю. Поляков, Е.А. Ерёмин, 2018
a
http://kpolyakov.spb.ru
Да

20.

Программирование (Паскаль), 8 класс
20
Задачи
«A»: Напишите программу, которая получает три числа - рост
трёх спортсменов, и выводит сообщение «По росту.»,
если они стоят по возрастанию роста, или сообщение «Не
по росту!», если они стоят не по росту.
Пример:
Введите рост трёх спортсменов:
165 170 172
По росту.
Пример:
Введите рост трёх спортсменов:
175 170 172
Не по росту!
К.Ю. Поляков, Е.А. Ерёмин, 2018
http://kpolyakov.spb.ru

21.

Программирование (Паскаль), 8 класс
21
Задачи
«B»: Напишите программу, которая получает номер месяца и
выводит соответствующее ему время года или сообщение
об ошибке.
Пример:
Введите номер месяца:
5
Весна.
Пример:
Введите номер месяца:
15
Неверный номер месяца.
К.Ю. Поляков, Е.А. Ерёмин, 2018
http://kpolyakov.spb.ru

22.

Программирование (Паскаль), 8 класс
22
Задачи
«C»: Напишите программу, которая получает возраст человека
(целое число, не превышающее 120) и выводит этот
возраст со словом «год», «года» или «лет». Например,
«21 год», «22 года», «25 лет».
Пример:
Введите возраст: 18
Вам 18 лет.
Пример:
Введите возраст: 21
Вам 21 год.
Пример:
Введите возраст: 22
Вам 22 года.
К.Ю. Поляков, Е.А. Ерёмин, 2018
http://kpolyakov.spb.ru

23.

Программирование (Паскаль), 8 класс
23
Логические переменные
var b: boolean;
...
b:= True; { 1 }
b:= False; { 0 }
только два
возможных
значения
Пример:
var vyh: boolean;
...
vyh:= (d=6) or (d=7);
...
if not vyh then
write('Рабочий день.')
else
write('Выходной!');
К.Ю. Поляков, Е.А. Ерёмин, 2018
http://kpolyakov.spb.ru

24.

Программирование (Паскаль), 8 класс
24
Задачи
«A»: Напишите программу, которая получает с клавиатуры
целое число и записывает в логическую переменную
значение «да» (True), если это число трёхзначное. После
этого на экран выводится ответ на вопрос: «Верно ли, что
было получено трёхзначное число?».
Пример:
Введите число: 165
Ответ: да.
Пример:
Введите число: 1651
Ответ: нет.
К.Ю. Поляков, Е.А. Ерёмин, 2018
http://kpolyakov.spb.ru

25.

Программирование (Паскаль), 8 класс
25
Задачи
«B»: Напишите программу, которая получает с клавиатуры
трёхзначное число и записывает в логическую
переменную значение «да» (True), если это число –
палиндром, то есть читается одинаково слева направо и
справа налево. После этого на экран выводится ответ на
вопрос: «Верно ли, что введённое число – палиндром?».
Пример:
Введите число: 165
Ответ: нет.
Пример:
Введите число: 656
Ответ: да.
К.Ю. Поляков, Е.А. Ерёмин, 2018
http://kpolyakov.spb.ru

26.

Программирование (Паскаль), 8 класс
26
Задачи
«С»: Напишите программу, которая получает с клавиатуры
трёхзначное число и записывает в логическую
переменную значение «да» (True), если это все его цифры
одинаковы. После этого на экран выводится ответ на
вопрос: «Верно ли, что все цифры введённого числа
одинаковы?»
Пример:
Введите число: 161
Ответ: нет.
Пример:
Введите число: 555
Ответ: да.
К.Ю. Поляков, Е.А. Ерёмин, 2018
http://kpolyakov.spb.ru

27.

Программирование (Паскаль), 8 класс
27
Экспертная система
Экспертная система — это компьютерная программа,
задача которой — заменить человека-эксперта при
принятии решений в сложной ситуации.
База знаний = факты + правила writeа:
• если у животного есть перья, то это птица;
• если животное кормит детенышей молоком, то это —
млекопитающее;
• если животное — млекопитающее и ест мясо, то
это — хищник.
Диалог:
Это животное кормит детей молоком? Нет
Это животное имеет перья? Да
Это птица.
К.Ю. Поляков, Е.А. Ерёмин, 2018
http://kpolyakov.spb.ru

28.

Программирование (Паскаль), 8 класс
28
Дерево решений
Кормит детей молоком?
да
нет
Имеет перья?
млекопитающее
Ест мясо?
нет
да
нет
да
?
птица
?
хищник
К.Ю. Поляков, Е.А. Ерёмин, 2018
http://kpolyakov.spb.ru

29.

Программирование (Паскаль), 8 класс
29
Программирование экспертной системы
Ответы пользователя: да и нет – символьные строки.
var otvet: string;
...
write('Кормит детей молоком? ');
read(otvet);
if otvet = 'да' then
... { вариант 1 }
else
{ вариант
... { вариант
2 }1 }
writeln('Млекопитающее.');
write('Ест мясо? ');
read(otvet);
if otvet = 'да' then
writeln('Хищник.')
else
writeln('Не знаю.');
К.Ю. Поляков, Е.А. Ерёмин, 2018
http://kpolyakov.spb.ru

30.

Программирование (Паскаль), 8 класс
30
Заглавные и строчные буквы
var otvet: string;
...
if otvet = 'да' then
...
не сработает
на 'Да'
? Как исправить?
if (otvet = 'да') or (otvet = 'Да') then
...
Ещё лучше:
if LowerCase(ответ) = 'да' then
...
преобразовать все
заглавные в строчные
if UpperCase(ответ) = 'ДА' then
...
К.Ю. Поляков, Е.А. Ерёмин, 2018
http://kpolyakov.spb.ru
English     Русский Rules