К. Поляков, Программирование на алгоритмическом языке Тема 7. Алгоритмы-функции
Программирование на алгоритмическом языке. Часть II К. Поляков, Максимум из трех 2 начало конец a > b? да x:= a нет x:= b c > x? да x:= c a a b b x x x x c c Где ответ? ? нет
Программирование на алгоритмическом языке. Часть II К. Поляков, Максимум из трех 3 алг цел Макс3(цел a, b, c) нач цел x если a > b то x:= a иначе x:= b все если c > x то x:= c все знач := x кон знач цел x цел результат – целое число внутренняя (локальная) переменная результат (значение) функции
Программирование на алгоритмическом языке. Часть II К. Поляков, Максимум из трех 4 алг Максимум нач цел Z, X, C, M вывод "Введите три числа " ввод Z, X, C M:= Макс3(Z, X, C) вывод "Максимум: ", M кон алг Максимум нач цел Z, X, C, M вывод "Введите три числа " ввод Z, X, C M:= Макс3(Z, X, C) вывод "Максимум: ", M кон алг цел Макс3(цел a, b, c) нач... кон вызов функции имена параметров могут быть любые!
Программирование на алгоритмическом языке. Часть II К. Поляков, Максимум из пяти 5 Как с помощью этой функции найти максимум из пяти чисел? ? алг Максимум нач цел Z, X, C, V, B, M ввод Z, X, C, V, B M:= Макс3( Макс3(Z,X,C), V, B) вывод "Максимум: ", M кон алг Максимум нач цел Z, X, C, V, B, M ввод Z, X, C, V, B M:= Макс3( Макс3(Z,X,C), V, B) вывод "Максимум: ", M кон алг цел Макс3(цел a, b, c) нач... кон ???
Программирование на алгоритмическом языке. Часть II К. Поляков, НОД трёх чисел 6 Задача: ввести три числа и найти наибольший общий делитель (НОД). Используйте формулу НОД(a,b,c) = НОД(НОД(a,b), c) Нужно два раза применить один и тот же алгоритм вычисления НОД двух чисел. ! Решение: построить вспомогательный алгоритм для вычисления НОД двух чисел и применить (вызвать) его два раза.
Программирование на алгоритмическом языке. Часть II К. Поляков, Общий вид программы 7 алг НОД трёх чисел нач цел a, b, c, N вывод "Введите три числа", нс ввод a, b, c N:= НОД(НОД(a,b), c) вывод N кон алг НОД трёх чисел нач цел a, b, c, N вывод "Введите три числа", нс ввод a, b, c N:= НОД(НОД(a,b), c) вывод N кон алг цел НОД(цел x, y) нач | здесь нужно вычислить НОД(x,y) кон алг цел НОД(цел x, y) нач | здесь нужно вычислить НОД(x,y) кон основной алгоритм вспомогательный алгоритм ???
Программирование на алгоритмическом языке. Часть II К. Поляков, Блок-схема алгоритма Евклида 8 a = b? да нет a > b? да a:=a-b нет b:=b-a начало конец
Программирование на алгоритмическом языке. Часть II К. Поляков, Алгоритм Евклида 9 алг цел НОД(цел x, y) нач цел a, b a:= x; b:= y | копии параметров нц пока a b если a > b то a:= a - b иначе b:= b - a все кц знач:= a | результат функции кон алг цел НОД(цел x, y) нач цел a, b a:= x; b:= y | копии параметров нц пока a b если a > b то a:= a - b иначе b:= b - a все кц знач:= a | результат функции кон
Программирование на алгоритмическом языке. Часть II К. Поляков, Рекурсивные функции 10 Факториал: если алг цел Факт(цел N) нач если N < 2 то знач:= 1 иначе знач:= N*Факт(N-1) все кон алг цел Факт(цел N) нач если N < 2 то знач:= 1 иначе знач:= N*Факт(N-1) все кон алг цел Факт(цел N) нач цел i знач:= 1 нц для i от 2 до N знач:= знач*i кц кон алг цел Факт(цел N) нач цел i знач:= 1 нц для i от 2 до N знач:= знач*i кц кон Алгоритм без рекурсии, как правило, работает быстрее и требует меньше памяти. !
Программирование на алгоритмическом языке. Часть II К. Поляков, Задания «3 » : Составить функцию, которая определяет НАИМЕНЬШЕЕ из трёх чисел и привести пример ее использования. Пример: Введите три числа: Наименьшее число 10. «4» : Составить функцию, которая вычисляет НАИМЕНЬШЕЕ из четырёх чисел и привести пример ее использования. Пример: Введите четыре числа: Наименьшее число 5.
Программирование на алгоритмическом языке. Часть II К. Поляков, Задания «5» : Составить функцию, которая определяет сумму всех чисел от 1 до N и привести пример ее использования. Пример: Введите число: 100 Сумма чисел от 1 до 100 = 5050
Программирование на алгоритмическом языке. Часть II К. Поляков, Логические функции 13 Задача: составить функцию, которая определяет, верно ли, что заданное число – четное. Особенности: ответ – логическое значение ( да или нет ) результат функции можно использовать как логическую величину в условиях ( если, пока ) Алгоритм: если число делится на 2, оно четное. если mod(N,2)= 0 то | число N четное иначе | число N нечетное все если mod(N,2)= 0 то | число N четное иначе | число N нечетное все
Программирование на алгоритмическом языке. Часть II К. Поляков, Логические функции 14 алг лог Четное(цел N) нач если mod(N,2) = 0 то знач:= да иначе знач:= нет все кон алг лог Четное(цел N) нач если mod(N,2) = 0 то знач:= да иначе знач:= нет все кон логическое значение ( да или нет )
Программирование на алгоритмическом языке. Часть II К. Поляков, Логические функции 15 алг Проверка четности нач цел x вывод "Введите целое число: " ввод x если Четное(x) то вывод "Число четное." иначе вывод "Число нечетное." все кон алг Проверка четности нач цел x вывод "Введите целое число: " ввод x если Четное(x) то вывод "Число четное." иначе вывод "Число нечетное." все кон алг лог Четное(цел N) нач... кон
Программирование на алгоритмическом языке. Часть II К. Поляков, Задания 16 «3»: Составить функцию, которая определяет, верно ли, что число оканчивается на 0. Пример: Введите число:Введите число: Верно.Неверно. «4»: Составить функцию, которая определяет, верно ли, что в числе вторая цифра с конца больше 6. Пример: Введите число:Введите число: Верно.Неверно.
Программирование на алгоритмическом языке. Часть II К. Поляков, Задания 17 «5»: Составить функцию, которая определяет, верно ли, что переданное ей число – простое (делится только на само себя и на единицу). Пример: Введите число:Введите число: 2928 Простое число.Составное число.
К. Поляков, Программирование на алгоритмическом языке. Часть II Тема 8. Построение графиков функций
Программирование на алгоритмическом языке. Часть II К. Поляков, Построение графиков функций 19 Задача: построить график функции y = x 2 на интервале от -2 до 2. Анализ: максимальное значение y max = 4 при x = ±2 минимальное значение y min = 0 при x = 0 Проблема: функция задана в математической системе координат, строить надо на экране, указывая координаты в пикселях. X Y
Программирование на алгоритмическом языке. Часть II К. Поляков, Преобразование координат 20 (x,y)(x,y) x y Математическая система координат Экранная система координат (пиксели) (xэ,yэ)(xэ,yэ) xэxэ yэyэ (0,0)(0,0) (0,0)(0,0) x0x0 y0y0 k – масштаб (длина изображения единичного отрезка на экране) x э = x 0 + kx y э = y 0 - ky x э = x 0 + kx y э = y 0 - ky X Y
Программирование на алгоритмическом языке. Часть II К. Поляков, Программа 21 на экране оси координат цикл построения графика использовать Рисователь алг График нач цел x0=150, y0=250, k=50, xe, ye вещ xmin=-2, xmax=2, x, y, h в точку(0,y0) линия в точку(x0+150,y0) в точку(x0,0) линия в точку(x0,y0+20) x:=xmin; h:=0.02 нц пока x
Программирование на алгоритмическом языке. Часть II К. Поляков, Как соединить точки? 22 Алгоритм: Если первая точка перейти в точку (x э,y э ) иначе линия в точку (x э,y э ) Если первая точка перейти в точку (x э,y э ) иначе линия в точку (x э,y э ) Программа: начальное значение выбор варианта действий логическая переменная лог первая... первая:= да нц пока x
Программирование на алгоритмическом языке. Часть II К. Поляков, Задания 23 «3»: Построить график функции на интервале [-2,2]. «4»: Построить графики функций и на интервале [-2,2].
Программирование на алгоритмическом языке. Часть II К. Поляков, Задания 24 «5»: Построить графики функций и на интервале [-2,2]. Соединить точки линиями.