Программирование на алгоритмическом языке (7 класс)
Программирование на алгоритмическом языке
Алгоритм
Программа
Простейшая программа
Вывод текста на экран
Задания
Переменные
Программа
Переменные
Имена переменных
Объявление переменных
Как записать значение в переменную?
Блок-схема линейного алгоритма
Как ввести значение с клавиатуры?
Ввод значений двух переменных
Изменение значения переменной
Арифметические операции
Вывод данных
Задача: сложение чисел
Полное решение
Задания
Задания
Какие операторы неправильные?
Арифметические операции
Порядок выполнения операций
Ручная прокрутка программы
Команда «вывод»
Что будет выведено?
Как записать оператор «вывод»?
Программирование на алгоритмическом языке
Разветвляющиеся алгоритмы
Вариант 1. Блок-схема
Условный оператор
Вариант 2. Блок-схема
Вариант 2. Программа
Вариант 2б. Программа
Задания
Задания
Программирование на алгоритмическом языке
Вариант 1. Алгоритм
Вариант 1. Программа
Вариант 2. Алгоритм
Вариант 2. Программа
Сложные условия
Сложные условия
Сложные условия
Сложные условия
Программирование на алгоритмическом языке
Циклы
Циклы
Циклы
Циклы
Число шагов – переменная
Задания
Задания
Циклы
Блок-схема алгоритма
Цикл с условием
Цикл с условием
Что получим?
Что получим?
Что получим?
Что получим?
Что получим?
Задания
Задания
Циклы с условием
Блок-схема алгоритма
Программа
Цикл с условием
Цикл с условием
Сколько раз выполняется цикл?
Задания
Задания
Задания-2
Задания-2
Вычисление НОД
Алгоритм Евклида
Блок-схема алгоритма
Алгоритм Евклида
Модифицированный алгоритм Евклида
Алгоритм Евклида
Алгоритм Евклида
Программирование на алгоритмическом языке
Цикл с переменной
Блок-схема алгоритма
Цикл с переменной
Цикл с переменной
Цикл с переменной
Сколько раз выполняется цикл?
Цикл с переменной
Замена одного вида цикла на другой
Задания
Задания
Задания-2
Программирование на алгоритмическом языке
Система координат
Исполнитель Рисователь
Линии
Фигуры с заливкой
Задания
Задания
Штриховка
Штриховка (программа)
Штриховка
Штриховка
Задания
Задания
Программирование на алгоритмическом языке
Задача
С чего начать?
Если запустить?
Как использовать?
Вспомогательные алгоритмы
Задания
Задания
Рекурсивные объекты
Рекурсивная фигура
Рекурсивная фигура: алгоритм
Рекурсивная фигура: программа
Рекурсивные алгоритмы
Задания
Задания
Программирование на алгоритмическом языке
Анимация
Процедура (рисование и стирание)
Полная программа
Задания
Задания
Управление клавишами
Программа
Задания
Задания
Программирование на алгоритмическом языке
Случайность и ее моделирование
Случайные числа на компьютере
Распределение случайных чисел
Распределение случайных чисел
Генератор случайных чисел
Случайные числа
Цвет пикселя на мониторе
Случайный цвет пикселя
Программа
Задания
Задания
Конец фильма
3.92M
Категория: ПрограммированиеПрограммирование

Программирование на алгоритмическом языке

1. Программирование на алгоритмическом языке (7 класс)

1
Программирование
на алгоритмическом
языке
(7 класс)
1.
2.
3.
4.
5.
Введение
Ветвления
Сложные условия
Циклы
Циклы с переменной
К. Поляков, 2010-2011
6.
7.
8.
9.
Графика
Вспомогательные
алгоритмы
Анимация
Случайные числа
http://kpolyakov.narod.ru

2. Программирование на алгоритмическом языке

2
Программирование
на алгоритмическом
языке
Тема 1. Введение
К. Поляков, 2010-2011
http://kpolyakov.narod.ru

3. Алгоритм

Программирование на алгоритмическом языке
3
Алгоритм
Алгоритм – это четко определенный план
решения задачи для исполнителя.
Свойства алгоритма
• дискретность: состоит из отдельных шагов
(команд)
• понятность: должен включать только команды,
известные исполнителю
• конечность: позволяет получить решение
задачи за конечное число шагов
• определенность: при одинаковых исходных
данных всегда выдает один и тот же результат
• массовость: может применяться при различных
исходных данных
К. Поляков, 2010-2011
http://kpolyakov.narod.ru

4. Программа

Программирование на алгоритмическом языке
4
Программа
Программа – это
• алгоритм, записанный на каком-либо языке
программирования
• набор команд для исполнителя
Команда – это описание действий, которые
должен выполнить исполнитель.
• откуда взять исходные данные?
• что нужно с ними сделать?
К. Поляков, 2010-2011
http://kpolyakov.narod.ru

5. Простейшая программа

Программирование на алгоритмическом языке
5
Простейшая программа
название алгоритма
алг Первый
нач | начало алгоритма
кон | конец алгоритма
комментарии после |
не обрабатываются
?
К. Поляков, 2010-2011
Что делает эта программа?
http://kpolyakov.narod.ru

6. Вывод текста на экран

Программирование на алгоритмическом языке
6
Вывод текста на экран
алг Вывод на экран
нач
новая строка
вывод "2+"
вывод "2=?", нс
вывод "Ответ: 4"
кон
Протокол:
2+2=?
Ответ: 4
К. Поляков, 2010-2011
http://kpolyakov.narod.ru

7. Задания

Программирование на алгоритмическом языке
7
Задания
«4»: Вывести на экран текст «лесенкой»
Вася
пошел
гулять
«5»: Вывести на экран рисунок из букв
Ж
ЖЖЖ
ЖЖЖЖЖ
ЖЖЖЖЖЖЖ
HH HH
ZZZZZ
К. Поляков, 2010-2011
http://kpolyakov.narod.ru

8. Переменные

Программирование на алгоритмическом языке
8
Переменные
Задача. Ввести с клавиатуры два числа и найти их сумму.
Протокол:
Введите два целых числа
25 30
пользователь
25+30=55
компьютер
компьютер считает сам!
?
К. Поляков, 2010-2011
1.
2.
3.
4.
Как ввести числа в память?
Где хранить введенные числа?
Как вычислить?
Как вывести результат?
http://kpolyakov.narod.ru

9. Программа

Программирование на алгоритмическом языке
9
Программа
алг
нач
|
|
|
кон
Сумма
ввести два числа
вычислить их сумму
вывести сумму на экран
Псевдокод – алгоритм на
русском языке с элементами
языка программирования.
!
Компьютер не может исполнить псевдокод!
К. Поляков, 2010-2011
http://kpolyakov.narod.ru

10. Переменные

Программирование на алгоритмическом языке
10
Переменные
Переменная – это величина, имеющая имя, тип
и значение. Значение переменной можно
изменять во время работы программы.
Значение
Другой тип
данных
Имя
К. Поляков, 2010-2011
!
?
Поместится?
В переменной хранятся данные
определенного типа!
http://kpolyakov.narod.ru

11. Имена переменных

Программирование на алгоритмическом языке
11
Имена переменных
МОЖНО использовать
• латинские буквы (A-Z), русские буквы (А-Я)
заглавные и строчные буквы различаются
• цифры
имя не может начинаться с цифры
• знак подчеркивания _
НЕЛЬЗЯ использовать
• скобки
• знаки +, =, !, ? и др.
Какие имена правильные?
AXby R&B 4Wheel Вася “PesBarbos”
TU154 [QuQu] _ABBA A+B
К. Поляков, 2010-2011
http://kpolyakov.narod.ru

12. Объявление переменных

Программирование на алгоритмическом языке
12
Объявление переменных
Типы переменных:
• цел
| целая
• вещ
| вещественная
• и другие…
Объявление переменных:
тип – целые
выделение
места в памяти
список имен
переменных
цел a, b, c
К. Поляков, 2010-2011
http://kpolyakov.narod.ru

13. Как записать значение в переменную?

Программирование на алгоритмическом языке
13
Как записать значение в переменную?
Оператор
присваивания
a := 5
5
!
При записи нового
значения старое
стирается!
Оператор – это команда языка программирования (инструкция).
Оператор присваивания – это команда для
записи нового значения в переменную.
К. Поляков, 2010-2011
http://kpolyakov.narod.ru

14. Блок-схема линейного алгоритма

Программирование на алгоритмическом языке
14
Блок-схема линейного алгоритма
начало
блок «начало»
ввод a, b
блок «ввод»
c := a + b
блок «процесс»
вывод c
блок «вывод»
конец
К. Поляков, 2010-2011
блок «конец»
http://kpolyakov.narod.ru

15. Как ввести значение с клавиатуры?

Программирование на алгоритмическом языке
15
Как ввести значение с клавиатуры?
Оператор
ввода
5
ввод a
!
1. Программа ждет, пока пользователь введет
значение и нажмет Enter.
2. Введенное значение записывается в
переменную a.
К. Поляков, 2010-2011
http://kpolyakov.narod.ru

16. Ввод значений двух переменных

Программирование на алгоритмическом языке
16
Ввод значений двух переменных
ввод a, b
Ввод значений двух
переменных.
через пробел:
25 30
25 a
30 b
25,30
25 a
30 b
через запятую:
К. Поляков, 2010-2011
http://kpolyakov.narod.ru

17. Изменение значения переменной

Программирование на алгоритмическом языке
17
Изменение значения переменной
Пример:
алг Тест
a
5
?
5
нач
цел a, b
b
a := 5
5+2
?
7
b := a + 2
a
a := (a + 2)*(b – 3)
7*4
28
5
b := b + 1
кон
b
7
8
К. Поляков, 2010-2011
7+1
http://kpolyakov.narod.ru

18. Арифметические операции

Программирование на алгоритмическом языке
18
Арифметические операции
+ сложение
* умножение
– вычитание
/ деление
цел a, b
a := 7*3 – 4
a := a * 5
К. Поляков, 2010-2011
http://kpolyakov.narod.ru

19. Вывод данных

Программирование на алгоритмическом языке
19
Вывод данных
вывод a
|вывод значения
|переменной a
вывод a, нс
|вывод значения
|переменной a и переход
|на новую строчку
вывод 'Привет!'
|вывод текста
вывод 'Ответ: ', c
|вывод текста и значения переменной c
вывод a, '+', b, '=', c
К. Поляков, 2010-2011
http://kpolyakov.narod.ru

20. Задача: сложение чисел

Программирование на алгоритмическом языке
20
Задача: сложение чисел
Задача. Ввести два целых числа и вывести на
экран их сумму.
Простое решение:
алг Сумма
нач
цел a, b, c
ввод a, b
c := a + b
вывод c
кон
К. Поляков, 2010-2011
?
Что плохо?
http://kpolyakov.narod.ru

21. Полное решение

Программирование на алгоритмическом языке
21
Полное решение
алг Сумма
нач
подсказка
цел a, b, c
вывод "Введите два целых числа"
ввод a, b
c := a + b
вывод a, "+", b, "=", c
кон
Протокол:
компьютер
Введите два целых числа
25 30
пользователь
25+30=55
К. Поляков, 2010-2011
http://kpolyakov.narod.ru

22. Задания

Программирование на алгоритмическом языке
22
Задания
«3»: Ввести три числа, найти их сумму.
Пример:
Введите три числа:
4
5
7
4+5+7=16
«4»: Ввести три числа, найти их сумму и
произведение.
Пример:
Введите три числа:
4
5
7
4+5+7=16
4*5*7=140
К. Поляков, 2010-2011
http://kpolyakov.narod.ru

23. Задания

Программирование на алгоритмическом языке
23
Задания
«5»: Ввести три числа, найти их сумму, произведение
и среднее арифметическое.
Пример:
Введите три числа:
4
5
7
4+5+7=16
4*5*7=140
(4+5+7)/3=5.333333
К. Поляков, 2010-2011
http://kpolyakov.narod.ru

24. Какие операторы неправильные?

Программирование на алгоритмическом языке
24
Какие операторы неправильные?
алг Ошибки
нач
цел a, b
вещ x, y
имя переменной должно
быть слева от знака :=
a := 5
целая и дробная часть
10 := x
отделяются точкой
y := 7,8
нельзя записывать
b := 2.5
вещественное значение в
целую переменную
x := 2*(a + y)
a := b + x
кон
К. Поляков, 2010-2011
http://kpolyakov.narod.ru

25. Арифметические операции

Программирование на алгоритмическом языке
25
Арифметические операции
+ сложение
– вычитание
* умножение
/ деление
div деление нацело (остаток отбрасывается)
mod остаток от деления
цел a, b
a := 7*3 - 4
a := a * 5
b := div(a,10)
a := mod(a,10)
К. Поляков, 2010-2011
|
|
|
|
17
85
8
5
http://kpolyakov.narod.ru

26. Порядок выполнения операций

Программирование на алгоритмическом языке
26
Порядок выполнения операций
1) вычисление выражений в скобках
2) умножение, деление, div, mod слева направо
3) сложение и вычитание слева направо
1 2 4 5 3 6
z := (5*a+c)/a*(b-c)/ b
5c 2 d (a b)
x
(c d )(d 2a)
5a c
z
(b c)
ab
2 3 5 4 1 10
6 9 8 7
x:=(5*c*c-d*(a+b))/((c+d)*(d-2*a))
К. Поляков, 2010-2011
http://kpolyakov.narod.ru

27. Ручная прокрутка программы

Программирование на алгоритмическом языке
27
Ручная прокрутка программы
алг Тест
нач
цел a, b
a := 5
b := a + 2
a := (a + 2)*(b – 3)
b := div(a,5)
a := mod(a,b)
a := a + 1
b := mod(a+14,7)
кон
К. Поляков, 2010-2011
a
b
?
?
5
7
28
5
3
4
4
http://kpolyakov.narod.ru

28. Команда «вывод»

Программирование на алгоритмическом языке
28
Команда «вывод»
цел a = 1, b = 3
вывод a, "+", b, "=", a+b
список вывода
• элементы разделяются запятыми
• элементы в кавычках – выводятся без изменений
• выражения (элементы без кавычек) вычисляются
и выводится их результат
?
Что будет выведено?
1+3=4
К. Поляков, 2010-2011
http://kpolyakov.narod.ru

29. Что будет выведено?

Программирование на алгоритмическом языке
29
Что будет выведено?
цел a = 1, b = 3
вывод "a+", b, "=a+b"
цел a = 1, b = 3
вывод a, "=F(", b, ")"
цел a = 1, b = 3
вывод "a=F(", b, ");"
цел a = 1, b = 3
вывод a+b, ">", b, "!"
цел a = 1, b = 3
вывод "F(", b, ")=X(", a, ")"
К. Поляков, 2010-2011
a+3=a+b
1=F(3)
a=F(3);
4>3!
F(3)=X(1)
http://kpolyakov.narod.ru

30. Как записать оператор «вывод»?

Программирование на алгоритмическом языке
30
Как записать оператор «вывод»?
цел a = 1, b = 3
вывод "X(", b, ")=", a
цел a = 1, b = 3
вывод a+b, "=", a, "+", b
X(3)=1
4=1+3
цел a = 1, b = 3
вывод "f(", a, ")>f(", b, ")"
f(1)>f(3)
цел a = 1, b = 3
вывод "<", a, "<>", b, ">"
<1<>3>
цел a = 1, b = 3
вывод a, "+", b, "=?"
К. Поляков, 2010-2011
1+3=?
http://kpolyakov.narod.ru

31. Программирование на алгоритмическом языке

31
Программирование
на алгоритмическом
языке
Тема 2. Ветвления
К. Поляков, 2010-2011
http://kpolyakov.narod.ru

32. Разветвляющиеся алгоритмы

Программирование на алгоритмическом языке
32
Разветвляющиеся алгоритмы
Задача. Ввести два целых числа и вывести на экран
наибольшее из них.
Идея решения: надо вывести на экран первое число,
если оно больше второго, или второе, если оно больше
первого.
Особенность: действия исполнителя зависят от
некоторых условий (если … иначе …).
Алгоритмы, в которых последовательность шагов
зависит от выполнения некоторых условий, называются
разветвляющимися.
К. Поляков, 2010-2011
http://kpolyakov.narod.ru

33. Вариант 1. Блок-схема

Программирование на алгоритмическом языке
33
Вариант 1. Блок-схема
начало
блок
«решение»
ввод a,b
да
a > b?
M:= a
полная
форма
ветвления
нет
M:= b
вывод M
конец
К. Поляков, 2010-2011
?
Если a = b?
http://kpolyakov.narod.ru

34.

Программирование на алгоритмическом языке
34
Вариант 1. Программа
алг Максимум
нач
цел a, b, M
вывод "Введите два целых числа", нс
ввод a, b
если a > b то
полная форма
M:=a
условного
иначе
оператора
M:=b
все
вывод "Наибольшее число ", M
кон
К. Поляков, 2010-2011
http://kpolyakov.narod.ru

35. Условный оператор

Программирование на алгоритмическом языке
35
Условный оператор
если условие то
| что делать, если условие верно
иначе
| что делать, если условие неверно
все
!
Вторая часть (иначе) может отсутствовать!
К. Поляков, 2010-2011
http://kpolyakov.narod.ru

36. Вариант 2. Блок-схема

Программирование на алгоритмическом языке
36
Вариант 2. Блок-схема
начало
ввод a,b
M:= a
да
b > a?
нет
неполная
форма
ветвления
M:= b
вывод M
конец
К. Поляков, 2010-2011
http://kpolyakov.narod.ru

37. Вариант 2. Программа

Программирование на алгоритмическом языке
37
Вариант 2. Программа
алг Максимум 2
нач
цел a, b, M
вывод "Введите два целых числа", нс
ввод a, b
неполная
M:= a
форма
если b > a то
условного
M:= b
оператора
все
вывод "Наибольшее число ", M
кон
К. Поляков, 2010-2011
http://kpolyakov.narod.ru

38. Вариант 2б. Программа

Программирование на алгоритмическом языке
38
Вариант 2б. Программа
алг Максимум 2б
нач
цел a, b, M
вывод "Введите два целых числа", нс
ввод a, b
M:= b
если a???
> b то
???a
M:=
все
вывод "Наибольшее число ", M
кон
К. Поляков, 2010-2011
http://kpolyakov.narod.ru

39. Задания

Программирование на алгоритмическом языке
39
Задания
«3»: Ввести два числа и вывести их в порядке
возрастания.
Пример:
Введите два числа:
15
9
Ответ: 9 15
«4»: Ввести три числа и найти наибольшее из них.
Пример:
Введите три числа:
4
15
9
Наибольшее число 15
К. Поляков, 2010-2011
http://kpolyakov.narod.ru

40. Задания

Программирование на алгоритмическом языке
40
Задания
«5»: Ввести пять чисел и найти наибольшее из них.
Пример:
Введите пять чисел:
4
15
9
56
Наибольшее число 56
К. Поляков, 2010-2011
4
http://kpolyakov.narod.ru

41. Программирование на алгоритмическом языке

41
Программирование
на алгоритмическом
языке
Тема 3. Сложные условия
К. Поляков, 2010-2011
http://kpolyakov.narod.ru

42.

Программирование на алгоритмическом языке
42
Сложные условия
Задача. Фирма набирает сотрудников от 25 до 40 лет
включительно. Ввести возраст человека и определить,
подходит ли он фирме (вывести ответ «подходит» или
«не подходит»).
Особенность: надо проверить, выполняются ли два
условия одновременно.
?
Можно ли решить известными методами?
К. Поляков, 2010-2011
http://kpolyakov.narod.ru

43. Вариант 1. Алгоритм

Программирование на алгоритмическом языке
43
Вариант 1. Алгоритм
начало
ввод x
да
да
“подходит”
x <= 40?
x >= 25?
нет
нет
“не подходит”
“не подходит”
конец
К. Поляков, 2010-2011
http://kpolyakov.narod.ru

44. Вариант 1. Программа

Программирование на алгоритмическом языке
44
Вариант 1. Программа
алг Сотрудник
нач
цел x
вывод "Введите ваш возраст", нс
ввод x
если x >= 25 то
если x <= 40 то
вывод "Подходит!"
иначе
вывод "Не подходит."
все
иначе
вывод "Не подходит."
все
кон
К. Поляков, 2010-2011
http://kpolyakov.narod.ru

45. Вариант 2. Алгоритм

Программирование на алгоритмическом языке
45
Вариант 2. Алгоритм
начало
ввод x
да
x >= 25
и
x <= 40?
“подходит”
нет
“не подходит”
конец
К. Поляков, 2010-2011
http://kpolyakov.narod.ru

46. Вариант 2. Программа

Программирование на алгоритмическом языке
46
Вариант 2. Программа
алг Сотрудник
нач
цел x
вывод "Введите ваш возраст", нс
ввод x
если x >= 25 и x <= 40 то
вывод "Подходит!"
иначе
сложное
вывод "Не подходит."
условие
все
кон
К. Поляков, 2010-2011
http://kpolyakov.narod.ru

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

Программирование на алгоритмическом языке
47
Сложные условия
Простые условия (отношения)
<
<=
>
>=
=
равно
<>
не равно
Сложное условие – это условие, состоящее из
нескольких простых условий (отношений),
связанных с помощью логических операций:
• И – одновременное выполнение условий
x >= 25 И x <= 40
• ИЛИ – выполнение хотя бы одного из условий
x <= 25 ИЛИ x >= 40
• НЕ – отрицание, обратное условие
x <=
НЕ (x > 25)
???25
К. Поляков, 2010-2011
http://kpolyakov.narod.ru

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

Программирование на алгоритмическом языке
48
Сложные условия
Порядок выполнения (приоритет = старшинство)
• выражения в скобках
• НЕ
• <, <=, >, >=, =, <>
•И
• ИЛИ
Пример
2
1
6
3
5
4
если не (a > 2) или c <> 5 и b < a то
...
все
К. Поляков, 2010-2011
http://kpolyakov.narod.ru

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

Программирование на алгоритмическом языке
49
Сложные условия
Истинно или ложно при a := 2; b := 3; c := 4;
Да
не (a > b)
a < b и b < c
Да
Нет
a > c или b > c
a < b и b > c
Нет
a > c и b > d
Нет
Да
не (a >= b) или c = d
a >= b или не (c < b)
a > c или b > c или b > a
К. Поляков, 2010-2011
Да
Да
http://kpolyakov.narod.ru

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

Программирование на алгоритмическом языке
50
Сложные условия
Для каких значений x истинны условия:
x
x
x
x
x
x
x
x
<
<
>
>
<
<
>
>
6
6
6
6
6
6
6
6
и x
и x
и x
и x
или
или
или
или
К. Поляков, 2010-2011
<
>
<
>
x
x
x
x
x<6
10
нет таких
10
6 < x < 10
10
x > 10
10
x < 10
< 10
> 10
< 10
все x
x>6
> 10
http://kpolyakov.narod.ru

51.

Программирование на алгоритмическом языке
51
Задания
«3»: Ввести три числа и определить, верно ли, что
они вводились в порядке возрастания.
Пример:
Введите три числа:
4 5 17
да
«4»: Ввести номер месяца и вывести название
времени года.
Пример:
Введите номер месяца:
4
весна
К. Поляков, 2010-2011
http://kpolyakov.narod.ru

52.

Программирование на алгоритмическом языке
52
Задания
«5»: Ввести возраст человека (от 1 до 150 лет) и
вывести его вместе с последующим словом
«год», «года» или «лет».
Пример:
Введите возраст:
24
Вам 24 года
К. Поляков, 2010-2011
Введите возраст:
57
Вам 57 лет
http://kpolyakov.narod.ru

53. Программирование на алгоритмическом языке

53
Программирование
на алгоритмическом
языке
Тема 4. Циклы
К. Поляков, 2010-2011
http://kpolyakov.narod.ru

54. Циклы

Программирование на алгоритмическом языке
54
Циклы
Цикл – это многократное выполнение одинаковых
действий.
• цикл с известным числом шагов
• цикл с неизвестным числом шагов (цикл с
условием)
Задача. Вывести на экран 5 раз слово «Привет».
Особенность: одинаковые действия выполняются 5 раз.
?
Можно ли решить известными методами?
К. Поляков, 2010-2011
http://kpolyakov.narod.ru

55. Циклы

Программирование на алгоритмическом языке
55
Циклы
алг Привет
нач
вывод "Привет",
вывод "Привет",
вывод "Привет",
вывод "Привет",
вывод "Привет",
кон
?
К. Поляков, 2010-2011
нс
нс
нс
нс
нс
Что плохо?
http://kpolyakov.narod.ru

56. Циклы

Программирование на алгоритмическом языке
56
Циклы
начало цикла
конец цикла
?
К. Поляков, 2010-2011
алг Привет
тело цикла
нач
нц 5 раз
вывод "Привет!", нс
кц
кон
Как выглядит блок-схема?
http://kpolyakov.narod.ru

57. Циклы

Программирование на алгоритмическом языке
57
Циклы
Блок-схема:
начало
сделали 5 раз?
да
конец
нет
вывод "Привет!"
тело цикла
К. Поляков, 2010-2011
http://kpolyakov.narod.ru

58. Число шагов – переменная

Программирование на алгоритмическом языке
58
Число шагов – переменная
Задача: ввести количество повторения с клавиатуры.
алг Привет
нач
цел N
вывод "Сколько раз?", нс
ввод N
нц N раз
вывод "Привет!", нс
кц
кон
К. Поляков, 2010-2011
http://kpolyakov.narod.ru

59. Задания

Программирование на алгоритмическом языке
59
Задания
«3»: Ввести натуральное число и вывести в строчку
все числа от 1 до этого числа.
Пример:
Введите натуральное число:
4
Ответ: 1 2 3 4
«4»: Ввести два целых числа, найти их произведение,
не используя операцию умножения.
Пример:
Введите два числа:
4
15
4*15=60
К. Поляков, 2010-2011
http://kpolyakov.narod.ru

60. Задания

Программирование на алгоритмическом языке
60
Задания
«5»: Ввести натуральное число N и найти сумму всех
чисел от 1 до N (1+2+3+…+N).
Пример:
Введите число слагаемых:
100
Сумма чисел от 1 до 100 равна 5050
К. Поляков, 2010-2011
http://kpolyakov.narod.ru

61. Циклы

Программирование на алгоритмическом языке
61
Циклы
алг Привет
? Как отсчитать ровно 5 раз?
нач
нц 5 раз
вывод "Привет!", нс
кц
кон
?
Как запоминать, сколько раз
уже сделали?
N := N + 1
К. Поляков, 2010-2011
http://kpolyakov.narod.ru

62. Блок-схема алгоритма

Программирование на алгоритмическом языке
62
Блок-схема алгоритма
начало
еще не сделали ни
одного раза
N := 0
проверить, все ли сделали
N = 5?
цикл
да
конец
нет
printf("Привет!\n");
N := N + 1
К. Поляков, 2010-2011
считаем
очередной шаг
http://kpolyakov.narod.ru

63. Цикл с условием

Программирование на алгоритмическом языке
63
Цикл с условием
алг Привет 2
нач
цел N
N:= 0
нц пока N <> 5
вывод "Привет!", нс
N:= N + 1
кц
кон
К. Поляков, 2010-2011
http://kpolyakov.narod.ru

64. Цикл с условием

Программирование на алгоритмическом языке
64
Цикл с условием
Вместо знаков вопроса добавьте числа и операторы так,
чтобы цикл выполнился ровно 5 раз:
алг Привет 3
нач
цел N
N:= 5
0
нц пока N <> ???
вывод "Привет!", нс
??? N - 1
N:=
кц
кон
К. Поляков, 2010-2011
http://kpolyakov.narod.ru

65. Что получим?

Программирование на алгоритмическом языке
65
Что получим?
алг Пример 1
нач
цел N
N:= 1
нц пока N <= 5
вывод N, нс
N:= N + 1
кц
кон
К. Поляков, 2010-2011
1
2
3
4
5
http://kpolyakov.narod.ru

66. Что получим?

Программирование на алгоритмическом языке
66
Что получим?
алг Пример 2
нач
цел N
N:= 1
нц пока N <= 5
вывод N, нс
N:= N + 2
кц
кон
К. Поляков, 2010-2011
1
3
5
http://kpolyakov.narod.ru

67. Что получим?

Программирование на алгоритмическом языке
67
Что получим?
алг Пример 3
нач
цел N
N:= 2
нц пока N <> 5
вывод N, нс
N:= N + 2
кц
кон
!
2
4
6
8
10
12
14
16
...
Условие цикла никогда не станет ложным – это
зацикливание!
К. Поляков, 2010-2011
http://kpolyakov.narod.ru

68. Что получим?

Программирование на алгоритмическом языке
68
Что получим?
алг Пример 4
нач
цел N
N:= 1
нц пока N <= 5
вывод N*N*N, нс
N:= N + 1
кц
кон
К. Поляков, 2010-2011
1
8
27
64
125
http://kpolyakov.narod.ru

69. Что получим?

Программирование на алгоритмическом языке
69
Что получим?
алг Пример 5
нач
цел N
N:= 5
нц пока N >= 1
вывод N*N*N, нс
N:= N - 1
кц
кон
К. Поляков, 2010-2011
125
64
27
8
1
http://kpolyakov.narod.ru

70. Задания

Программирование на алгоритмическом языке
70
Задания
«3»: Ввести натуральное число вывести квадраты и
кубы всех чисел от 1 до этого числа.
Пример:
Введите натуральное число:
3
1: 1 1
2: 4 8
3: 9 27
«4»: Ввести два целых числа a и b (a ≤ b) и вывести
квадраты все чисел от a до b.
Пример:
Введите два числа:
4 5
4*4=16
5*5=25
К. Поляков, 2010-2011
http://kpolyakov.narod.ru

71. Задания

Программирование на алгоритмическом языке
71
Задания
«5»: Ввести два целых числа a и b (a ≤ b) и вывести
сумму квадратов всех чисел от a до b.
Пример:
Введите два числа:
4 10
Сумма квадратов 371
К. Поляков, 2010-2011
http://kpolyakov.narod.ru

72. Циклы с условием

Программирование на алгоритмическом языке
72
Циклы с условием
Пример: Отпилить полено от бревна. Сколько раз надо
сделать движения пилой?
Задача: Ввести целое число (<2000000) и определить число
цифр в нем.
Идея решения: Отсекаем последовательно последнюю
цифру, увеличиваем счетчик.
n
count
123
0
12
1
1
2
0
3
Проблема: Неизвестно, сколько шагов надо сделать.
Решение: Надо остановиться, когда n = 0, т.е. надо делать
«пока n <> 0».
К. Поляков, 2010-2011
http://kpolyakov.narod.ru

73. Блок-схема алгоритма

Программирование на алгоритмическом языке
73
Блок-схема алгоритма
начало
обнулить
счетчик цифр
ввод n
count := 0
выполнять «пока
n <> 0»
n <> 0?
нет
да
count := count + 1
n := div(n, 10)
вывод count
конец
К. Поляков, 2010-2011
http://kpolyakov.narod.ru

74. Программа

Программирование на алгоритмическом языке
74
Программа
алг Число цифр
нач
цел n, count , n1
вывод "Введите целое число", нс
ввод n ; n1:= n
count:= 0
нц пока n<>0
count:= count + 1
n:= div(n,10)
кц
вывод "В числе ", n1,
n, " нашли ", count, " цифр"
кон
Что плохо?
?
К. Поляков, 2010-2011
http://kpolyakov.narod.ru

75. Цикл с условием

Программирование на алгоритмическом языке
75
Цикл с условием
Особенности:
• можно использовать сложные условия:
нц пока aa << 10
10 ии bb >> 55
a:= a + 5; b:= b - 2
кц
• можно записывать в одну строчку, разделяя команды
точкой с запятой:
нц пока a < b ; b:= b - 2 кц
К. Поляков, 2010-2011
http://kpolyakov.narod.ru

76. Цикл с условием

Программирование на алгоритмическом языке
76
Цикл с условием
Особенности:
• условие пересчитывается при каждом входе в цикл
• если условие на входе в цикл ложно, цикл не
выполняется ни разу
a := 4; b := 6
нц пока a > b; a:= a – b кц
• если условие никогда не станет ложным, программа
зацикливается
a:= 4; b:= 6
нц пока a < b; d:= a + b кц
К. Поляков, 2010-2011
http://kpolyakov.narod.ru

77. Сколько раз выполняется цикл?

Программирование на алгоритмическом языке
77
Сколько раз выполняется цикл?
a:= 4; b:= 6
нц пока a < b; a:= a + 1 кц
2 раза
a=6
a:= 4; b:= 6
нц пока a < b; a:= a + b кц
1 раз
a = 10
a:= 4; b:= 6
нц пока a > b; a:= a + 1 кц
0 раз
a=4
a:= 4; b:= 6
нц пока a < b; b:= a – b кц
1 раз
b = -2
a:= 4; b:= 6
нц пока a < b; a:= a – 1 кц
К. Поляков, 2010-2011
зацикливание
http://kpolyakov.narod.ru

78. Задания

Программирование на алгоритмическом языке
78
Задания
«3»: Ввести целое число и определить, верно ли, что в
нём ровно 3 цифры.
Пример:
Введите число:
123
Да.
Введите число:
1234
Нет.
«4»: Ввести целое число и найти сумму его цифр.
Пример:
Введите целое число:
1234
Сумма цифр числа 1234 равна 10.
К. Поляков, 2010-2011
http://kpolyakov.narod.ru

79. Задания

Программирование на алгоритмическом языке
79
Задания
«5»: Ввести целое число и определить, верно ли, что в его записи есть
две одинаковые цифры, стоящие рядом.
Пример:
Введите целое число:
1232
Нет.
Введите целое число:
1224
Да.
«6»: Ввести целое число и определить, верно ли, что в его записи есть
две одинаковые цифры, НЕ обязательно стоящие рядом.
Пример:
Введите целое число:
1234
Нет.
К. Поляков, 2010-2011
Введите целое число:
1242
Да.
http://kpolyakov.narod.ru

80. Задания-2

Программирование на алгоритмическом языке
80
Задания-2
«3»: Ввести целое число и определить, верно ли, что в
нём ровно 1 цифра «9».
Пример:
Введите число:
193
Да.
Введите число:
1994
Нет.
«4»: Ввести целое число и определить, верно ли, что
все его цифры четные.
Пример:
Введите число:
2684
Да.
К. Поляков, 2010-2011
Введите число:
2994
Нет.
http://kpolyakov.narod.ru

81. Задания-2

Программирование на алгоритмическом языке
81
Задания-2
«5»: Ввести целое число и определить, верно ли, что все его цифры
расположены в порядке возрастания.
Пример:
Введите целое число:
1238
Да.
Введите целое число:
1274
Нет.
«6»: Ввести целое число и «перевернуть» его, так чтобы первая цифра
стала последней и т.д.
Пример:
Введите целое число:
1234
4321
К. Поляков, 2010-2011
Введите целое число:
782
287
http://kpolyakov.narod.ru

82. Вычисление НОД

Программирование на алгоритмическом языке
82
Вычисление НОД
НОД = наибольший общий делитель двух
натуральных чисел – это наибольшее
число, на которое оба исходных числа
делятся без остатка.
Перебор:
1. Записать в переменную k минимальное из
двух чисел.
2. Если a и b без остатка делятся на k, то стоп.
3. Уменьшить k на 1.
4. Перейти к шагу 2.
?
?
Где будет НОД?
это цикл с
условием!
Почему алгоритм обязательно закончится?
К. Поляков, 2010-2011
http://kpolyakov.narod.ru

83. Алгоритм Евклида

Программирование на алгоритмическом языке
83
Алгоритм Евклида
Надо: вычислить наибольший общий делитель (НОД)
чисел a и b.
Заменяем большее из двух чисел разностью
большего и меньшего до тех пор, пока они не
станут равны. Это и есть НОД.
НОД(a,b)= НОД(a-b, b)
= НОД(a, b-a)
Евклид
(365-300 до. н. э.)
Пример:
НОД (14, 21) = НОД (14, 21-14) = НОД (14, 7)
= НОД (7, 7) = 7
много шагов при большой разнице чисел:
НОД (1998, 2) = НОД (1996, 2) = … = 2
К. Поляков, 2010-2011
http://kpolyakov.narod.ru

84. Блок-схема алгоритма

Программирование на алгоритмическом языке
84
Блок-схема алгоритма
начало
a = b?
да
нет
нет
b:=b-a
К. Поляков, 2010-2011
a > b?
конец
да
a:=a-b
http://kpolyakov.narod.ru

85. Алгоритм Евклида

Программирование на алгоритмическом языке
85
Алгоритм Евклида
нц пока a <> b
если a > b
то a:= a - b
иначе b:= b - a
все
кц
?
?
?
Где будет НОД? Как его вывести?
Как вывести НОД в формате НОД(14,21) = 7?
А без дополнительных переменных?
К. Поляков, 2010-2011
http://kpolyakov.narod.ru

86. Модифицированный алгоритм Евклида

Программирование на алгоритмическом языке
86
Модифицированный алгоритм Евклида
Заменяем большее из двух чисел остатком от деления
большего на меньшее до тех пор, пока меньшее не
станет равно нулю. Тогда большее — это НОД.
НОД(a,b)= НОД(mod(a,b), b)
= НОД(a, mod(b,a))
Пример:
НОД (14, 21) = НОД (14, 7) = НОД (0, 7) = 7
Еще один вариант:
НОД(2·a,2·b)= 2·НОД(a, b)
НОД(2·a,b)= НОД(a, b) | при нечетном b
К. Поляков, 2010-2011
http://kpolyakov.narod.ru

87. Алгоритм Евклида

Программирование на алгоритмическом языке
87
Алгоритм Евклида
«3»: Составить программу для вычисления НОД с
помощью алгоритма Евклида.
«4»: Составить программу для вычисления НОД с
помощью модифицированного алгоритма
Евклида и заполнить таблицу:
a
64168
358853
6365133
17905514
549868978
b
82678
691042
11494962
23108855
298294835
НОД(a,b)
К. Поляков, 2010-2011
http://kpolyakov.narod.ru

88. Алгоритм Евклида

Программирование на алгоритмическом языке
88
Алгоритм Евклида
«5»: Выполнить задание на «4» и подсчитать число
шагов алгоритма для каждого случая.
a
64168
358853
6365133
17905514
549868978
b
82678
691042
11494962
23108855
298294835
НОД(a,b)
шагов
К. Поляков, 2010-2011
http://kpolyakov.narod.ru

89. Программирование на алгоритмическом языке

89
Программирование
на алгоритмическом
языке
Тема 5. Циклы с переменной
К. Поляков, 2010-2011
http://kpolyakov.narod.ru

90. Цикл с переменной

Программирование на алгоритмическом языке
90
Цикл с переменной
Задача: вывести кубы чисел от 1 до 8.
?
Можно ли решить известными способами?
1. Нужны ли переменные? Сколько?
2. Как они должны изменяться?
3. Нужен ли цикл?
К. Поляков, 2010-2011
http://kpolyakov.narod.ru

91. Блок-схема алгоритма

Программирование на алгоритмическом языке
91
Блок-схема алгоритма
начало
N := 1
N <= 8?
нет
конец
да
кубN := N*N*N
вывод кубN
N := N + 1
К. Поляков, 2010-2011
http://kpolyakov.narod.ru

92. Цикл с переменной

Программирование на алгоритмическом языке
92
Цикл с переменной
Задача: вывести кубы натуральных чисел от 1 до 8.
алг Кубы
нач
цел N, кубN
3 действия с N
N:= 1
нц пока N <= 8
кубN:= N*N*N
вывод кубN, нс
N:= N + 1
кц
кон
К. Поляков, 2010-2011
http://kpolyakov.narod.ru

93. Цикл с переменной

Программирование на алгоритмическом языке
93
Цикл с переменной
Задача: вывести кубы натуральных чисел от 1 до 8.
алг Кубы
нач
цел N, кубN
для 1,2,3,…,8
нц для N от 1 до 8
кубN:= N*N*N
вывод кубN, нс
кц
кон
?
К. Поляков, 2010-2011
Как обойтись без переменной кубN?
http://kpolyakov.narod.ru

94. Цикл с переменной

Программирование на алгоритмическом языке
94
Цикл с переменной
Задача: вывести кубы чётных чисел от 2 до 8.
алг Кубы
нач
цел N, кубN
для 2,4,6,8
нц для N от 2 до 8 шаг 2
кубN:= N*N*N
вывод кубN, нс
только целые!
кц
кон
К. Поляков, 2010-2011
http://kpolyakov.narod.ru

95. Сколько раз выполняется цикл?

Программирование на алгоритмическом языке
95
Сколько раз выполняется цикл?
a := 1
нц для i от 1 до 3; a:=a+1 кц
a= 4
a := 1
нц для i от 3 до 1; a:=a+1 кц
a= 1
a= 1
a := 1
нц для i от 1 до 3 шаг -1; a:=a+1 кц
a= 4
a := 1
нц для i от 3 до 1 шаг -1; a:=a+1 кц
К. Поляков, 2010-2011
http://kpolyakov.narod.ru

96. Цикл с переменной

Программирование на алгоритмическом языке
96
Цикл с переменной
Особенности:
• переменная цикла может быть только целой (цел)
• начальное и конечное значения и шаг – целые
• можно записывать в одну строчку, разделяя
команды точкой с запятой:
нц для n от 1 до 4; вывод n кц
• если шаг > 0 и конечное значение < начального,
цикл не выполняется ни разу (проверка условия в
начале цикла, цикл с предусловием)
• если шаг < 0 и конечное значение > начального,
цикл не выполняется ни разу
К. Поляков, 2010-2011
http://kpolyakov.narod.ru

97. Замена одного вида цикла на другой

Программирование на алгоритмическом языке
97
Замена одного вида цикла на другой
нц для i от 1 до 10
| тело цикла
кц
нц для i от a до b шаг -1
| тело цикла
кц
i:= 1
нц пока i <= 10
| тело цикла
i:= i + 1
кц
i:= a
нц пока i >= b
| тело цикла
i:= i - 1
кц
Замена цикла для на пока возможна всегда.
Замена пока на для возможна только тогда, когда можно
заранее вычислить число шагов цикла.
К. Поляков, 2010-2011
http://kpolyakov.narod.ru

98. Задания

Программирование на алгоритмическом языке
98
Задания
«3»: Ввести натуральное число N и вывести числа от
N до 1 (через одно) в порядке убывания.
Пример:
Введите натуральное число:
8
Ответ: 8 6 4 2
К. Поляков, 2010-2011
http://kpolyakov.narod.ru

99. Задания

Программирование на алгоритмическом языке
99
Задания
«4»: Ввести два целых числа a и b (a ≤ b) и вывести
кубы всех чисел от a до b.
Пример:
Введите два числа:
4 6
4*4*4=64
5*5*5=125
6*6*6=216
«5»: Ввести целое число a и вывести сумму квадратов
всех чисел от 1 до a с шагом 0.1.
Пример:
12 + 1.12 + 1.22 +…+ a2
Введите последнее число:
3
Сумма 91.7
К. Поляков, 2010-2011
http://kpolyakov.narod.ru

100. Задания-2

Программирование на алгоритмическом языке
100
Задания-2
«4»: Ввести a и b и вывести квадраты и кубы чисел от a до b.
Пример:
Введите границы интервала:
4 6
4: 16 64
5: 25 125
6: 36 216
«5»: Вывести квадраты и кубы 10 чисел следующей
последовательности: 1, 2, 4, 7, 11, 16, …
Пример:
1: 1 1
2: 4 8
4: 16 64
...
46: 2116 97336
К. Поляков, 2010-2011
http://kpolyakov.narod.ru

101. Программирование на алгоритмическом языке

101
Программирование
на алгоритмическом
языке
Тема 6. Графика
К. Поляков, 2010-2011
http://kpolyakov.narod.ru

102. Система координат

Программирование на алгоритмическом языке
102
Система координат
X
(0,0)
y
x
(x,y)
Y
К. Поляков, 2010-2011
http://kpolyakov.narod.ru

103. Исполнитель Рисователь

Программирование на алгоритмическом языке
103
Исполнитель Рисователь
использовать Рисователь
алг
нач
| текст программы
кон
К. Поляков, 2010-2011
http://kpolyakov.narod.ru

104. Линии

Программирование на алгоритмическом языке
104
Линии
Цвет и толщина линий:
толщина линии
перо(2, "синий")
(10, 15)
(90, 80)
(5,5)
(50,5)
(70, 50)
(5,60 )
(30,80)
К. Поляков, 2010-2011
черный
белый
серый
фиолетовый
синий
голубой
зеленый
желтый
оранжевый
красный
перо(1, "зеленый")
линия(10, 15, 90, 80)
перо(1, "красный“)
в точку(5, 5)
линия в точку(50, 5)
линия в точку(70, 50)
линия в точку(30, 80)
линия в точку(5, 60)
http://kpolyakov.narod.ru

105. Фигуры с заливкой

Программирование на алгоритмическом языке
105
Фигуры с заливкой
(0,0)
(80, 40)
перо(1, "синий")
кисть("желтый")
прямоугольник(0, 0, 80, 40)
(0,0)
перо(1, "красный")
кисть("зеленый")
эллипс(0, 0, 100, 50)
(100, 50)
(70, 80)
К. Поляков, 2010-2011
кисть("");
| отменить
Как построить
круг?
?
заливку
кисть("фиолетовый")
залить(70, 80)
http://kpolyakov.narod.ru

106.

106
Пример
(200, 50)
(100, 100)
(300, 200)
использовать Рисователь
алг Домик
нач
перо(2, "фиолетовый")
кисть("синий")
прямоугольник(100, 100, 300, 200)
в точку(100, 100)
линия в точку(200, 50)
линия в точку(300, 100)
кисть("желтый")
залить(200, 75);
перо(2, "белый");
кисть("зеленый");
эллипс(150, 100, 250, 200);
кон

107. Задания

Программирование на алгоритмическом языке
Задания
«3»: «Домик»
«4»: «Лягушка»
К. Поляков, 2010-2011
http://kpolyakov.narod.ru

108. Задания

Программирование на алгоритмическом языке
Задания
«5»: «Корона»
К. Поляков, 2010-2011
http://kpolyakov.narod.ru

109. Штриховка

Программирование на алгоритмическом языке
109
Штриховка
N линий (N=5)
(x1, y1)
x
y1
h
h
x2 x1
N 1
y2
(x2, y2)
прямоугольник (x1, y1, x2, y2)
x:= x1 + h
линия(x, y1, x, y2)
цикл N раз
x:= x + h
линия(x, y1, x, y2)
x:= x + h
...
К. Поляков, 2010-2011
http://kpolyakov.narod.ru

110. Штриховка (программа)

Программирование на алгоритмическом языке
110
Штриховка (программа)
(x1, y1)
?
N
использовать Рисователь
алг Штриховка
нач
цел N = 5 | число линий
цел x1 = 100, x2 = 300
цел y1 = 100, y2 = 200
вещ h, x
h (x2, y2)
h:=(x2 - x1)/(N + 1)
прямоугольник(x1, y1, x2, y2)
x:= x1 + h
нц N раз
линия(int(x), y1, int(x), y2)
Почему?
x:= x + h
кц
целая часть
кон
К. Поляков, 2010-2011
http://kpolyakov.narod.ru

111. Штриховка

Программирование на алгоритмическом языке
111
Штриховка
(x1, y1)
x1
x2 x1
hx
N 1
hx
hy
(x2, y2)
К. Поляков, 2010-2011
y2 y1
hy
N 1
(x, y)
x:= x1 + hx; y:= y1 + hy
линия(x1, int(y), int(x), int(y))
x:= x + hx; y:= y + hy
линия(x1, int(y), int(x), int(y))
x:= x + hx; y:= y + hy
цикл N раз
...
http://kpolyakov.narod.ru

112. Штриховка

Программирование на алгоритмическом языке
112
Штриховка
(x1, y1)
hx
вещ hx, hy, x, y
hx:=(x2 - x1)/(N + 1)
hy:=(y2 - y1)/(N + 1)
в точку(x1, y1)
линия в точку(x1, y2)
hy линия в точку(x2, y2)
линия в точку(x1, y1)
x:= x1 + hx; y:= y1 + hy
нц N раз
линия(x1,int(y),int(x),int(y))
(x2, y2)
x:= x + hx
y:= y + hy
кц
К. Поляков, 2010-2011
http://kpolyakov.narod.ru

113. Задания

Программирование на алгоритмическом языке
113
Задания
«3»: Ввести с клавиатуры количество линий,
построить фигуру и выполнить штриховку:
«4»: Ввести с клавиатуры количество линий,
построить фигуру и выполнить штриховку:
или
К. Поляков, 2010-2011
http://kpolyakov.narod.ru

114. Задания

Программирование на алгоритмическом языке
114
Задания
«5»: Ввести с клавиатуры количество линий и
построить фигуру:
К. Поляков, 2010-2011
http://kpolyakov.narod.ru

115. Программирование на алгоритмическом языке

115
Программирование
на алгоритмическом
языке
Тема 7. Вспомогательные
алгоритмы
К. Поляков, 2010-2011
http://kpolyakov.narod.ru

116. Задача

Программирование на алгоритмическом языке
116
Задача
?
Можно ли решить известными методами?
Особенность: три похожие фигуры.
общее: размеры, угол поворота
отличия: координаты, цвет
?
К. Поляков, 2010-2011
Сколько координат надо задать?
http://kpolyakov.narod.ru

117. С чего начать?

Программирование на алгоритмическом языке
117
С чего начать?
• найти похожие действия (три фигуры)
• найти общее (размеры, форма, угол поворота) и
отличия (координаты, цвет)
цепочка символов
• отличия = параметры алгоритма (доп. данные)
(x, y-60)
60
(x, y)
100 (x+100, y)
К. Поляков, 2010-2011
использовать Рисователь
алг Тр (цел x, y, лит цвет)
нач
параметры
в точку(x, y)
линия в точку(x, y-60)
линия в точку(x+100, y)
линия в точку(x, y)
кисть(цвет)
залить(x+20, y-20)
кон
http://kpolyakov.narod.ru

118. Если запустить?

Программирование на алгоритмическом языке
118
Если запустить?
(50,100)
К. Поляков, 2010-2011
http://kpolyakov.narod.ru

119. Как использовать?

Программирование на алгоритмическом языке
119
Как использовать?
60
(100,100)
100
вызовы
алгоритма
использовать Рисователь
алг Треугольники
нач
перо(1, "черный")
Тр(100, 100, "синий")
Тр(200, 100, "зеленый")
Тр(200, 160, "красный")
кон
основной
алгоритм
алг Тр(цел x, y, лит цвет)
нач
...
кон
вспомогательный
алгоритм
К. Поляков, 2010-2011
http://kpolyakov.narod.ru

120. Вспомогательные алгоритмы

Программирование на алгоритмическом языке
120
Вспомогательные алгоритмы
• расположены ниже основного
• в заголовке перечисляются формальные
параметры, они обозначаются именами
алг Тр(цел x, y, лит цвет)
• для каждого параметра указывают тип
• однотипные параметры перечисляются через запятую
• при вызове в скобках указывают фактические
параметры в том же порядке
Тр(200, 100, "зеленый")
x
К. Поляков, 2010-2011
y
цвет
http://kpolyakov.narod.ru

121. Задания

Программирование на алгоритмическом языке
121
Задания
«3»: Используя одну процедуру, построить фигуру.
«4»: Используя одну процедуру, построить фигуру.
К. Поляков, 2010-2011
http://kpolyakov.narod.ru

122. Задания

Программирование на алгоритмическом языке
122
Задания
«5»: Используя одну процедуру, построить фигуру.
К. Поляков, 2010-2011
http://kpolyakov.narod.ru

123. Рекурсивные объекты

Программирование на алгоритмическом языке
123
Рекурсивные объекты
Сказка о попé и собаке:
Примеры:
У попа была собака, он ее любил.
Она съела кусок мяса, он ее убил.
В ямку закопал, надпись написал:
Сказка о попé и собаке
Рисунок с рекурсией:
Факториал:
1,
если N 1,
N!
если N 1.
N ( N 1)!,
1! 1, 2! 2 1! 2 1, 3! 3 2! 3 2 1
4! 4 3! 4 3 2 1
N ! N ( N 1) 2 1
Рекурсивный объект – это объект, определяемый через
один или несколько таких же объектов.
К. Поляков, 2010-2011
http://kpolyakov.narod.ru

124. Рекурсивная фигура

Программирование на алгоритмическом языке
124
Рекурсивная фигура
3 уровня:
?
Где рекурсия?
Фигура из N уровней – это
•окружность и
•4 фигуры из N-1 уровней
N-1
N-1
N-1
N-1
К. Поляков, 2010-2011
http://kpolyakov.narod.ru

125. Рекурсивная фигура: алгоритм

Программирование на алгоритмическом языке
125
Рекурсивная фигура: алгоритм
(x,y-R)
центр
радиус
уровней
алг РекОк(цел x, y, R, N)
(x,y) (x+R,y)
нач
окончание рекурсии
если N <= 0 то выход все
(x-R,y)
окружность(x, y, R)
(x,y+R)
РекОк(x, y-R, div(R,2), N-1)
РекОк(x+R, y, div(R,2), N-1)
рекурсивные
РекОк(x, y+R, div(R,2), N-1)
вызовы
РекОк(x-R, y, div(R,2), N-1)
кон
Рекурсивный алгоритм – это алгоритм, который
вызывает сам себя (с другими параметрами!).
К. Поляков, 2010-2011
http://kpolyakov.narod.ru

126. Рекурсивная фигура: программа

Программирование на алгоритмическом языке
126
Рекурсивная фигура: программа
использовать Рисователь
алг Рекурсия
нач
РекОк(200, 200, 100, 3)
кон
алг РекОк(цел x, y, R, N)
нач
...
кон
К. Поляков, 2010-2011
http://kpolyakov.narod.ru

127. Рекурсивные алгоритмы

Программирование на алгоритмическом языке
127
Рекурсивные алгоритмы
• вызывают сами себя прямо
A
прямая рекурсия
• … или через другой алгоритм:
A
B
косвенная рекурсия
должно быть условие окончания рекурсии (иначе?)
рекурсия может стать бесконечной
все задачи могут быть решены без рекурсии, но…
часто рекурсивные алгоритмы проще и понятнее
как правило, алгоритмы без рекурсии работают
быстрее и требуют меньше памяти
К. Поляков, 2010-2011
http://kpolyakov.narod.ru

128. Задания

Программирование на алгоритмическом языке
128
Задания
«3»: Нарисовать рекурсивную
фигуру, число уровней вводить с
клавиатуры:
«4»: Нарисовать рекурсивную фигуру,
число уровней вводить с
клавиатуры:
К. Поляков, 2010-2011
http://kpolyakov.narod.ru

129. Задания

Программирование на алгоритмическом языке
129
Задания
«5»: Нарисовать рекурсивную фигуру,
число уровней вводить с
клавиатуры:
К. Поляков, 2010-2011
http://kpolyakov.narod.ru

130. Программирование на алгоритмическом языке

130
Программирование
на алгоритмическом
языке
Тема 8. Анимация
К. Поляков, 2010-2011
http://kpolyakov.narod.ru

131. Анимация

Программирование на алгоритмическом языке
131
Анимация
Анимация (англ. animation) – оживление
изображения на экране.
Задача: внутри синего квадрата 200 на 200
пикселей слева направо двигается желтый
квадрат 20 на 20 пикселей. Программа
останавливается, если нажата клавиша Esc
или квадрат дошел до границы синей
области.
Проблема: как изобразить перемещение объекта на экране?
Привязка: состояние объекта задается координатами (x,y)
Принцип анимации:
1. рисуем объект в точке (x,y)
2. задержка на несколько миллисекунд
3. стираем объект
4. изменяем координаты (x,y)
5. переходим к шагу 1
К. Поляков, 2010-2011
http://kpolyakov.narod.ru

132. Процедура (рисование и стирание)

Программирование на алгоритмическом языке
132
Процедура (рисование и стирание)
• одна процедура рисует и стирает
• стереть = рисовать цветом фона
• границу квадрата отключить
(x, y)
(x+20, y+20)
рисуем: цвет кисти – желтый
стираем: цвет кисти – синий
алг Фигура(цел x, y, лит цвет)
нач
кисть(цвет)
прямоугольник(x,y,x+20,y+20)
кон
К. Поляков, 2010-2011
http://kpolyakov.narod.ru

133. Полная программа

Программирование на алгоритмическом языке
133
Полная программа
использовать Рисователь
алг Анимация
нач
цел x, y
| текущие координаты
кисть("синий")
перо(1, "")
| отключить контур
прямоугольник(0, 0, 200, 200) | синий фон
x:= 0; y:= 100
| начальные координаты
нц пока x < 180
пока не дошли до границы
Фигура(x, y, "желтый")
delay(50)
Фигура(x, y, "синий")
x:= x + 5
кц
кон
алг Фигура(цел x, y, лит цвет)
нач
...
кон
К. Поляков, 2010-2011
http://kpolyakov.narod.ru

134. Задания

Программирование на алгоритмическом языке
134
Задания
«3»: Квадрат двигается справа
налево:
«4»: Два квадрата двигаются в
противоположных направлениях:
К. Поляков, 2010-2011
http://kpolyakov.narod.ru

135. Задания

Программирование на алгоритмическом языке
135
Задания
«5»: Два квадрата двигаются в
противоположных направлениях
и отталкиваются от стенок синего
квадрата:
К. Поляков, 2010-2011
http://kpolyakov.narod.ru

136. Управление клавишами

Программирование на алгоритмическом языке
136
Управление клавишами
Задача: жёлтый квадрат внутри синего квадрата управляется
клавишами-стрелками. Коды клавиш:
влево – 16777234
вверх – 16777235
вправо – 16777236
вниз – 16777237
Проблема: как изменять направление движения?
Решение:
ждать нажатия на клавишу, записать
ее код в переменную c
c:= клав
выбор
при c = 16777234:
при c = 16777235:
при c = 16777236:
при c = 16777237:
все
К. Поляков, 2010-2011
x:= x – 5
y:= y – 5
x:= x + 5
y:= y + 5
?
|
|
|
|
влево
вверх
вправо
вниз
Когда стирать фигуру?
http://kpolyakov.narod.ru

137. Программа

Программирование на алгоритмическом языке
137
Программа
использовать Рисователь
алг Управление клавишами
нач
цел x, y, c
| нарисовать синий квадрат
x:= 100; y:= 100
| начальная точка
нц пока x < 180
Фигура(x, y,"желтый")
| рисуем фигуру
c:= клав
| ждем нажатия клавиши
Фигура(x, y,"синий")
| стираем фигуру
выбор
при c = 16777234: x:= x - 5
при c = 16777235: y:= y - 5
при c = 16777236: x:= x + 5
при c = 16777237: y:= y + 5
все
кц
кон
К. Поляков, 2010-2011
http://kpolyakov.narod.ru

138. Задания

Программирование на алгоритмическом языке
138
Задания
«3»: Квадрат в самом начале
стоит в правом нижнем углу, и
двигается при нажатии
стрелок только вверх или
влево:
«4»: Квадрат двигается при
нажатии стрелок, однако не
может выйти за границы
синего квадрата:
К. Поляков, 2010-2011
http://kpolyakov.narod.ru

139. Задания

Программирование на алгоритмическом языке
139
Задания
«5»: Два квадрата, один управляется
стрелками, второй – любыми
другими клавишами. Оба не могут
выйти за границы синего поля.
К. Поляков, 2010-2011
http://kpolyakov.narod.ru

140. Программирование на алгоритмическом языке

140
Программирование
на алгоритмическом
языке
Тема 9. Случайные числа
К. Поляков, 2010-2011
http://kpolyakov.narod.ru

141. Случайность и ее моделирование

Программирование на алгоритмическом языке
141
Случайность и ее моделирование
Случайно…
• встретить друга на улице
• разбить тарелку
• найти 10 рублей
• выиграть в лотерею
Случайный выбор:
• жеребьевка на
соревнованиях
• выигравшие номера
в лотерее
Как получить случайность?
К. Поляков, 2010-2011
http://kpolyakov.narod.ru

142. Случайные числа на компьютере

Программирование на алгоритмическом языке
142
Случайные числа на компьютере
Электронный генератор
• нужно специальное устройство
• нельзя воспроизвести результаты
Псевдослучайные числа – обладают свойствами
случайных чисел, но каждое следующее число
вычисляется по заданной формуле.
Метод середины квадрата (Дж. фон Нейман)
564321
318458191041
458191
в квадрате• малый период
(последовательность
повторяется через 106 чисел)
209938992481
938992
К. Поляков, 2010-2011
http://kpolyakov.narod.ru

143. Распределение случайных чисел

Программирование на алгоритмическом языке
143
Распределение случайных чисел
Модель: снежинки падают на отрезок [a,b]
распределение
равномерное
a
?
b
неравномерное
a
b
Сколько может быть разных распределений?
К. Поляков, 2010-2011
http://kpolyakov.narod.ru

144. Распределение случайных чисел

Программирование на алгоритмическом языке
144
Распределение случайных чисел
Особенности:
• распределение – это характеристика всей
последовательности, а не одного числа
• равномерное распределение одно, компьютерные датчики
случайных чисел дают равномерное распределение
• неравномерных – много
• любое неравномерное можно получить с помощью
равномерного
a
b
x1 x2
x
2
К. Поляков, 2010-2011
a
b
x1 x2 x12
x
12
http://kpolyakov.narod.ru

145. Генератор случайных чисел

Программирование на алгоритмическом языке
145
Генератор случайных чисел
Вещественные числа в интервале [0,10):
вещ X, Y
X:= rand(0, 10) | интервал от 0 до 10 (<10)
Y:= rand(0, 10) | это уже другое число!
англ. random – случайный
Целые числа в интервале [0,10]:
цел K, L
K:= irand(0, 10) | интервал от 0 до 10 (<=10)
L:= irand(0, 10) | это уже другое число!
англ. integer – целый
К. Поляков, 2010-2011
http://kpolyakov.narod.ru

146. Случайные числа

Программирование на алгоритмическом языке
146
Случайные числа
Задача: заполнить прямоугольник
200 на 150 пикселей равномерно
точками случайного цвета
Как получить случайные координаты пикселя?
цел X, Y
X:= irand(0, 200)
Y:= irand(0, 150)
Как добиться равномерности?
автоматически при использовании
К. Поляков, 2010-2011
irand
http://kpolyakov.narod.ru

147. Цвет пикселя на мониторе

Программирование на алгоритмическом языке
147
Цвет пикселя на мониторе
red: R
green: G
blue: B
!
Красный, зелёный и синий лучи
создают почти такое же ощущение,
как луч «смешанного» цвета!
Вывод: цвет можно разложить на составляющие
(каждая кодируется числом от 0 до 255).
Модель RGB:
RGB
RGB(0,0,0)
RGB(255,255,255)
RGB(255,0,0)
RGB(255,0,255)
RGB(255,255,0)
RGB(0,255,255)
RGB(0,255,0)
RGB(0,0,255)
RGB(100,100,100)
К. Поляков, 2010-2011
http://kpolyakov.narod.ru

148. Случайный цвет пикселя

Программирование на алгоритмическом языке
148
Случайный цвет пикселя
Случайные составляющие цвета:
цел r, g, b
r:= irand(0, 255)
g:= irand(0, 255)
b:= irand(0, 255)
это разные числа!
Управление цветом пикселя:
случайный цвет
пиксель(X, Y, RGB(r,g,b))
встроенные функции
Рисователя
К. Поляков, 2010-2011
http://kpolyakov.narod.ru

149. Программа

Программирование на алгоритмическом языке
149
Программа
использовать Рисователь
алг Случайные точки
нач
цел x, y, r, g, b
это бесконечный цикл:
нц пока да
нц пока да
x:=irand(0,200)

y:=irand(0,100)
кц
r:=irand(0,255)
g:=irand(0,255)
b:=irand(0,255)
пиксель(x,y,RGB(r,g,b))
кц
кон
К. Поляков, 2010-2011
http://kpolyakov.narod.ru

150. Задания

Программирование на алгоритмическом языке
150
Задания
«3»: Заполнить квадрат точками случайного цвета.
размер квадрата ввести с клавиатуры:
Пример:
Введите размер квадрата:
150
«4»: Заполнить область точками случайного цвета:
К. Поляков, 2010-2011
http://kpolyakov.narod.ru

151. Задания

Программирование на алгоритмическом языке
151
Задания
«5»: Заполнить область точками случайного цвета:
или
К. Поляков, 2010-2011
http://kpolyakov.narod.ru

152. Конец фильма

Программирование на алгоритмическом языке
152
Конец фильма
ПОЛЯКОВ Константин Юрьевич
д.т.н., учитель информатики высшей
категории,
ГОУ СОШ № 163, г. Санкт-Петербург
[email protected]
К. Поляков, 2010-2011
http://kpolyakov.narod.ru
English     Русский Правила