К. Поляков, Программирование на алгоритмическом языке (7 класс) 1.ВведениеВведение 2.ВетвленияВетвления 3.Сложные условияСложные условия 4.ЦиклыЦиклы 5.ГрафикаГрафика 1.Вспомогательные алгоритмыВспомогательные алгоритмы 2.Алгоритмы-функцииАлгоритмы-функции 3.АнимацияАнимация 4.Случайные числаСлучайные числа
К. Поляков, Программирование на алгоритмическом языке Тема 1. Введение
Программирование на алгоритмическом языке К. Поляков, Алгоритм 3 Свойства алгоритма дискретность: состоит из отдельных шагов (команд) понятность: должен включать только команды, известные исполнителю конечность: позволяет получить решение задачи за конечное число шагов определенность: при одинаковых исходных данных всегда выдает один и тот же результат массовость: может применяться при различных исходных данных Алгоритм – это четко определенный план решения задачи для исполнителя.
Программирование на алгоритмическом языке К. Поляков, Программа – это алгоритм, записанный на каком-либо языке программирования набор команд для исполнителя Команда – это описание действий, которые должен выполнить исполнитель. откуда взять исходные данные? что нужно с ними сделать? Программа
Программирование на алгоритмическом языке К. Поляков, Простейшая программа 5 алг Первый нач | начало алгоритма кон | конец алгоритма алг Первый нач | начало алгоритма кон | конец алгоритма комментарии после | не обрабатываются Что делает эта программа? ? название алгоритма
Программирование на алгоритмическом языке К. Поляков, алг Вывод на экран нач вывод "2+" вывод "2=?", нс вывод "Ответ: 4" кон алг Вывод на экран нач вывод "2+" вывод "2=?", нс вывод "Ответ: 4" кон Вывод текста на экран 6 Протокол: 2+2=? Ответ: 4 новая строка
Программирование на алгоритмическом языке К. Поляков, Задания 7 «4»: Вывести на экран текст «лесенкой» Вася пошел гулять «5»: Вывести на экран рисунок из букв Ж ЖЖЖ ЖЖЖЖЖ ЖЖЖЖЖЖЖ HH HH ZZZZZ
Программирование на алгоритмическом языке К. Поляков, Переменные 8 Задача. Ввести с клавиатуры два числа и найти их сумму. Протокол: Введите два целых числа =55 компьютер пользователь компьютер считает сам! 1.Как ввести числа в память? 2.Где хранить введенные числа? 3.Как вычислить? 4.Как вывести результат? ?
Программирование на алгоритмическом языке К. Поляков, Программа 9 алг Сумма нач | ввести два числа | вычислить их сумму | вывести сумму на экран кон алг Сумма нач | ввести два числа | вычислить их сумму | вывести сумму на экран кон Псевдокод – алгоритм на русском языке с элементами языка программирования. Компьютер не может исполнить псевдокод! !
Программирование на алгоритмическом языке К. Поляков, Переменные 10 Переменная – это величина, имеющая имя, тип и значение. Значение переменной можно изменять во время работы программы. Значение Имя Поместится? ? Другой тип данных В переменной хранятся данные определенного типа! !
Программирование на алгоритмическом языке К. Поляков, Имена переменных 11 МОЖНО использовать латинские буквы (A-Z), русские буквы (А-Я) цифры знак подчеркивания _ заглавные и строчные буквы различаются имя не может начинаться с цифры Какие имена правильные? AXby R&B 4Wheel Вася PesBarbos TU154 [QuQu] _ABBA A+B
Программирование на алгоритмическом языке К. Поляков, Объявление переменных 12 Типы переменных: цел| целая вещ| вещественная и другие… Объявление переменных: цел a, b, c выделение места в памяти тип – целые список имен переменных
Программирование на алгоритмическом языке К. Поляков, Как записать значение в переменную? 13 a := 5 Оператор присваивани я При записи нового значения старое стирается! ! 5 5 Оператор – это команда языка программирова-ния (инструкция). Оператор присваивания – это команда для записи нового значения в переменную.
Программирование на алгоритмическом языке К. Поляков, Блок-схема линейного алгоритма 14 начало конец c := a + b ввод a, b блок «начало» блок «ввод» блок «процесс» блок «вывод» блок «конец» вывод c
Программирование на алгоритмическом языке К. Поляков, Как ввести значение с клавиатуры? 15 ввод a 1.Программа ждет, пока пользователь введет значение и нажмет Enter. 2.Введенное значение записывается в переменную a. ! Операто р ввода 5 5
Программирование на алгоритмическом языке К. Поляков, Ввод значений двух переменных 16 через пробел: через запятую: 25,30 ввод a, b Ввод значений двух переменных. a 25 b 30 a 25 b 30
Программирование на алгоритмическом языке К. Поляков, Изменение значения переменной 17 алг Тест нач цел a, b a := 5 b := a + 2 a := (a + 2)*(b – 3) b := b + 1 кон алг Тест нач цел a, b a := 5 b := a + 2 a := (a + 2)*(b – 3) b := b + 1 кон a ? 5 5 b ? a 5 7*4 28 Пример: b
Программирование на алгоритмическом языке К. Поляков, Арифметические операции 18 + сложение – вычитание * умножение / деление div деление нацело (остаток отбрасывается) mod остаток от деления цел a, b a := 7*3 - 4 | 17 a := a * 5 | 85 b := div(a,10) | 8 a := mod(a,10) | 5 цел a, b a := 7*3 - 4 | 17 a := a * 5 | 85 b := div(a,10) | 8 a := mod(a,10) | 5
Программирование на алгоритмическом языке К. Поляков, Вывод данных 19 |вывод значения |переменной a |вывод значения |переменной a и переход |на новую строчку |вывод текста |вывод текста и значения переменной c вывод a вывод a, нс вывод "Привет!" вывод "Ответ: ", c вывод a, "+", b, "=", c
Программирование на алгоритмическом языке К. Поляков, Задача: сложение чисел 20 Задача. Ввести два целых числа и вывести на экран их сумму. Простое решение: алг Сумма нач цел a, b, c ввод a, b c := a + b вывод c кон алг Сумма нач цел a, b, c ввод a, b c := a + b вывод c кон Что плохо? ?
Программирование на алгоритмическом языке К. Поляков, Полное решение 21 алг Сумма нач цел a, b, c вывод "Введите два целых числа" ввод a, b c := a + b вывод a, "+", b, "=", c кон алг Сумма нач цел a, b, c вывод "Введите два целых числа" ввод a, b c := a + b вывод a, "+", b, "=", c кон Протокол: Введите два целых числа =55 компьютер пользователь подсказка
Программирование на алгоритмическом языке К. Поляков, Задания 22 «3»: Ввести три числа, найти их сумму. Пример: Введите три числа: =16 «4»: Ввести три числа, найти их сумму и произведение. Пример: Введите три числа: =16 4*5*7=140
Программирование на алгоритмическом языке К. Поляков, Задания 23 «5»: Ввести три числа, найти их сумму, произведение и среднее арифметическое. Пример: Введите три числа: =16 4*5*7=140 (4+5+7)/3=
Программирование на алгоритмическом языке К. Поляков, Какие операторы неправильные? 24 алг Ошибки нач цел a, b вещ x, y a := 5 10 := x y := 7,8 b := 2.5 x := 2*(a + y) a := b + x кон алг Ошибки нач цел a, b вещ x, y a := 5 10 := x y := 7,8 b := 2.5 x := 2*(a + y) a := b + x кон имя переменной должно быть слева от знака := целая и дробная часть отделяются точкой нельзя записывать вещественное значение в целую переменную
Программирование на алгоритмическом языке К. Поляков, Порядок выполнения операций 25 1)вычисление выражений в скобках 2)умножение, деление, div, mod слева направо 3)сложение и вычитание слева направо z := (5*a+c)/a*(b-c)/ b x:=(5*c*c-d*(a+b))/((c+d)*(d-2*a))
Программирование на алгоритмическом языке К. Поляков, Ручная прокрутка программы 26 алг Тест нач цел 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) кон алг Тест нач цел 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) кон ab ??
Программирование на алгоритмическом языке К. Поляков, Команда «вывод» 27 цел a = 1, b = 3 вывод a, "+", b, "=", a+b цел a = 1, b = 3 вывод a, "+", b, "=", a+b список вывода элементы разделяются запятыми элементы в кавычках – выводятся без изменений выражения (элементы без кавычек) вычисляются и выводится их результат 1+3=4 Что будет выведено? ?
Программирование на алгоритмическом языке К. Поляков, Что будет выведено? 28 цел a = 1, b = 3 вывод "a+", b, "=a+b" цел a = 1, b = 3 вывод "a+", b, "=a+b" a+3=a+b цел a = 1, b = 3 вывод a, "=F(", b, ")" цел a = 1, b = 3 вывод a, "=F(", b, ")" 1=F(3) цел 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 вывод a+b, ">", b, "!" цел a = 1, b = 3 вывод "F(", b, ")=X(", a, ")" цел a = 1, b = 3 вывод "F(", b, ")=X(", a, ")" a=F(3) 4>3! F(3)=X(1)
Программирование на алгоритмическом языке К. Поляков, Как записать оператор «вывод»? 29 цел a = 1, b = 3 вывод "X(", b, "=", a цел a = 1, b = 3 вывод "X(", b, "=", a X(3)=1 4=1+3 f(1)>f(3) 3> 1+3=? цел a = 1, b = 3 вывод a+b, "=", a, "+", b цел a = 1, b = 3 вывод a+b, "=", a, "+", b цел a = 1, b = 3 вывод "f(", a, ")>f(", b, ")" цел a = 1, b = 3 вывод "f(", a, ")>f(", b, ")" цел a = 1, b = 3 вывод " ", b, ">" цел a = 1, b = 3 вывод " ", b, ">" цел a = 1, b = 3 вывод a, "+", b, "=?" цел a = 1, b = 3 вывод a, "+", b, "=?"
К. Поляков, Программирование на алгоритмическом языке Тема 2. Ветвления
Программирование на алгоритмическом языке К. Поляков, Разветвляющиеся алгоритмы 31 Задача. Ввести два целых числа и вывести на экран наибольшее из них. Идея решения: надо вывести на экран первое число, если оно больше второго, или второе, если оно больше первого. Особенность: действия исполнителя зависят от некоторых условий (если … иначе …). Алгоритмы, в которых последовательность шагов зависит от выполнения некоторых условий, называются разветвляющимися.
Программирование на алгоритмическом языке К. Поляков, Вариант 1. Блок-схема 32 начало M:= a ввод a,b a > b? M:= b конец да нет вывод M полная форма ветвления блок «решение» Если a = b? ?
Программирование на алгоритмическом языке К. Поляков, Вариант 1. Программа алг Максимум нач цел a, b, M вывод "Введите два целых числа", нс ввод a, b если a > b то иначе все вывод "Наибольшее число ", M кон M:=a M:=b полная форма условного оператора
Программирование на алгоритмическом языке К. Поляков, Условный оператор 34 если условие то | что делать, если условие верно иначе | что делать, если условие неверно все если условие то | что делать, если условие верно иначе | что делать, если условие неверно все Вторая часть (иначе) может отсутствовать! !
Программирование на алгоритмическом языке К. Поляков, Вариант 2. Блок-схема 35 неполная форма ветвления начало M:= a ввод a,b M:= b конец да нет b > a? вывод M
Программирование на алгоритмическом языке К. Поляков, Вариант 2. Программа 36 алг Максимум 2 нач цел a, b, M вывод "Введите два целых числа", нс ввод a, b M:= a если b > a то M:= b все вывод "Наибольшее число ", M кон неполная форма условного оператора
Программирование на алгоритмическом языке К. Поляков, Вариант 2б. Программа 37 алг Максимум 2б нач цел a, b, M вывод "Введите два целых числа", нс ввод a, b M:= b если ??? то ??? все вывод "Наибольшее число ", M кон M:= a a > b
Программирование на алгоритмическом языке К. Поляков, Задания 38 «3»: Ввести два числа и вывести их в порядке возрастания. Пример: Введите два числа: 15 9 Ответ: 9 15 «4»: Ввести три числа и найти наибольшее из них. Пример: Введите три числа: Наибольшее число 15
Программирование на алгоритмическом языке К. Поляков, Задания 39 «5»: Ввести пять чисел и найти наибольшее из них. Пример: Введите пять чисел: Наибольшее число 56
К. Поляков, Программирование на алгоритмическом языке Тема 3. Сложные условия
Программирование на алгоритмическом языке К. Поляков, Сложные условия Задача. Фирма набирает сотрудников от 25 до 40 лет включительно. Ввести возраст человека и определить, подходит ли он фирме (вывести ответ «подходит» или «не подходит»). Особенность: надо проверить, выполняются ли два условия одновременно. Можно ли решить известными методами? ?
Программирование на алгоритмическом языке К. Поляков, Вариант 1. Алгоритм 42 начало ввод x конец да нет x >= 25? да нет x < = 40? подходит не подходит
Программирование на алгоритмическом языке К. Поляков, Вариант 1. Программа 43 алг Сотрудник нач цел x вывод "Введите ваш возраст", нс ввод x если x >= 25 то если x
Программирование на алгоритмическом языке К. Поляков, Вариант 2. Алгоритм 44 начало ввод x да нет x >= 25 и x
Программирование на алгоритмическом языке К. Поляков, Вариант 2. Программа 45 сложное условие алг Сотрудник нач цел x вывод "Введите ваш возраст", нс ввод x если x >= 25 и x
Программирование на алгоритмическом языке К. Поляков, Сложные условия 46 Простые условия (отношения) >= = Сложное условие – это условие, состоящее из нескольких простых условий (отношений), связанных с помощью логических операций: И – одновременное выполнение условий x >= 25 И x 25) ??? равн о не равно x
Программирование на алгоритмическом языке К. Поляков, Сложные условия 47 Порядок выполнения (приоритет = старшинство) выражения в скобках НЕ, >=, =, И ИЛИ Пример если не (a > 2) или c 5 и b < a то... все если не (a > 2) или c 5 и b < a то... все
Программирование на алгоритмическом языке К. Поляков, Сложные условия 48 Истинно или ложно при a := 2; b := 3; c := 4; не (a > b) a < b и b < c a > c или b > c a c a > c и b > d не (a >= b) или c = d a >= b или не (c < b) a > c или b > c или b > a Да Нет Да Нет Да
Программирование на алгоритмическом языке К. Поляков, Сложные условия 49 Для каких значений x истинны условия: x < 6 и x < 10 x 10 x > 6 и x < 10 x > 6 и x > 10 x < 6 или x < 10 x 10 x > 6 или x < 10 x > 6 или x > 10 x < 6x < 6 x > 10 x < 10 x > 6x > 6 нет таких 6 < x < 10 все x
Программирование на алгоритмическом языке К. Поляков, Задания «3»: Ввести три числа и определить, верно ли, что они вводились в порядке возрастания. Пример: Введите три числа: да «4»: Ввести номер месяца и вывести название времени года. Пример: Введите номер месяца: 4 весна
Программирование на алгоритмическом языке К. Поляков, Задания «5»: Ввести возраст человека (от 1 до 150 лет) и вывести его вместе с последующим словом «год», «года» или «лет». Пример: Введите возраст: Вам 24 года Вам 57 лет
К. Поляков, Программирование на алгоритмическом языке Тема 4. Циклы
Программирование на алгоритмическом языке К. Поляков, Циклы 53 Цикл – это многократное выполнение одинаковых действий. цикл с известным числом шагов цикл с неизвестным числом шагов (цикл с условием) Задача. Вывести на экран 5 раз слово «Привет». Особенность: одинаковые действия выполняются 5 раз. Можно ли решить известными методами? ?
Программирование на алгоритмическом языке К. Поляков, Циклы 54 алг Привет нач вывод "Привет", нс кон алг Привет нач вывод "Привет", нс кон Что плохо? ?
Программирование на алгоритмическом языке К. Поляков, Циклы 55 алг Привет нач нц 5 раз вывод "Привет!", нс кц кон алг Привет нач нц 5 раз вывод "Привет!", нс кц кон Как выглядит блок-схема? ? конец цикла начало цикла вывод "Привет!", нс тело цикла
Программирование на алгоритмическом языке К. Поляков, Циклы 56 начало конец Блок-схема: да нет тело цикла сделали 5 раз? вывод "Привет!"
Программирование на алгоритмическом языке К. Поляков, Число шагов – переменная 57 алг Привет нач цел N вывод "Сколько раз?", нс ввод N нц N раз вывод "Привет!", нс кц кон алг Привет нач цел N вывод "Сколько раз?", нс ввод N нц N раз вывод "Привет!", нс кц кон Задача: ввести количество повторения с клавиатуры.
Программирование на алгоритмическом языке К. Поляков, Задания 58 «3»: Ввести натуральное число и вывести в строчку все числа от 1 до этого числа. Пример: Введите натуральное число: 4 Ответ: «4»: Ввести два целых числа, найти их произведение, не используя операцию умножения. Пример: Введите два числа: *15=60
Программирование на алгоритмическом языке К. Поляков, Задания 59 «5»: Ввести натуральное число N и найти сумму всех чисел от 1 до N (1+2+3+…+N). Пример: Введите число слагаемых: 100 Сумма чисел от 1 до 100 равна 5050
Программирование на алгоритмическом языке К. Поляков, Циклы 60 алг Привет нач нц 5 раз вывод "Привет!", нс кц кон алг Привет нач нц 5 раз вывод "Привет!", нс кц кон Как отсчитать ровно 5 раз? ? Как запоминать, сколько раз уже сделали? ? N := N + 1
Программирование на алгоритмическом языке К. Поляков, Блок-схема алгоритма 61 начало конец да нет N = 5?N = 5? N := 0 N := N + 1 еще не сделали ни одного раза проверить, все ли сделали считаем очередной шаг вывод "Привет!" цикл
Программирование на алгоритмическом языке К. Поляков, Цикл с условием 62 алг Привет 2 нач цел N N:= 0 нц пока N 5 вывод "Привет!", нс N:= N + 1 кц кон алг Привет 2 нач цел N N:= 0 нц пока N 5 вывод "Привет!", нс N:= N + 1 кц кон
Программирование на алгоритмическом языке К. Поляков, Цикл с условием 63 алг Привет 3 нач цел N N:= 5 нц пока N ??? вывод "Привет!", нс ??? кц кон алг Привет 3 нач цел N N:= 5 нц пока N ??? вывод "Привет!", нс ??? кц кон Вместо знаков вопроса добавьте числа и операторы так, чтобы цикл выполнился ровно 5 раз: 0 N:= N - 1
Программирование на алгоритмическом языке К. Поляков, Что получим? 64 алг Пример 1 нач цел N N:= 1 нц пока N
Программирование на алгоритмическом языке К. Поляков, Что получим? 65 алг Пример 2 нач цел N N:= 1 нц пока N
Программирование на алгоритмическом языке К. Поляков, Что получим? 66 алг Пример 3 нач цел N N:= 2 нц пока N 5 вывод N, нс N:= N + 2 кц кон алг Пример 3 нач цел N N:= 2 нц пока N 5 вывод N, нс N:= N + 2 кц кон Условие цикла никогда не стане ложным – это зацикливание! !
Программирование на алгоритмическом языке К. Поляков, Что получим? 67 алг Пример 4 нач цел N N:= 1 нц пока N
Программирование на алгоритмическом языке К. Поляков, Что получим? 68 алг Пример 5 нач цел N N:= 5 нц пока N >= 1 вывод N*N*N, нс N:= N - 1 кц кон алг Пример 5 нач цел N N:= 5 нц пока N >= 1 вывод N*N*N, нс N:= N - 1 кц кон
Программирование на алгоритмическом языке К. Поляков, Задания 69 «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
Программирование на алгоритмическом языке К. Поляков, Задания 70 «5»: Ввести два целых числа a и b ( a b ) и вывести сумму квадратов всех чисел от a до b. Пример: Введите два числа: 4 10 Сумма квадратов 371
Программирование на алгоритмическом языке К. Поляков, Циклы с условием 71 Пример: Отпилить полено от бревна. Сколько раз надо сделать движения пилой? Задача: Ввести целое число (
Программирование на алгоритмическом языке К. Поляков, Блок-схема алгоритма 72 начало конец нет да n 0? count := 0 count := count + 1 n := div(n, 10) обнулить счетчик цифр ввод n выполнять «пока n 0» вывод count
Программирование на алгоритмическом языке К. Поляков, Программа 73 алг Число цифр нач цел n, count вывод "Введите целое число", нс ввод n count:= 0 вывод "В числе ", n, " нашли ", count, " цифр" кон алг Число цифр нач цел n, count вывод "Введите целое число", нс ввод n count:= 0 вывод "В числе ", n, " нашли ", count, " цифр" кон нц пока n0 count:= count + 1 n:= div(n,10) кц нц пока n0 count:= count + 1 n:= div(n,10) кц, n1 ; n1:= n n1, Что плохо? ?
Программирование на алгоритмическом языке К. Поляков, Цикл с условием 74 Особенности: можно использовать сложные условия: можно записывать в одну строчку, разделяя команды точкой с запятой: нц пока a < b b:= b - 2 кц ; нц пока a 5 a:= a + 5; b:= b - 2 кц нц пока a 5 a:= a + 5; b:= b - 2 кц a 5
Программирование на алгоритмическом языке К. Поляков, Цикл с условием 75 Особенности: условие пересчитывается при каждом входе в цикл если условие на входе в цикл ложно, цикл не выполняется ни разу если условие никогда не станет ложным, программа зацикливается a := 4; b := 6 нц пока a > b; a:= a – b кц a := 4; b := 6 нц пока a > b; a:= a – b кц a:= 4; b:= 6 нц пока a < b; d:= a + b кц a:= 4; b:= 6 нц пока a < b; d:= a + b кц
Программирование на алгоритмическом языке К. Поляков, Сколько раз выполняется цикл? 76 a:= 4; b:= 6 нц пока a < b; a:= a + 1 кц a:= 4; b:= 6 нц пока a < b; a:= a + 1 кц 2 раза a = 6 2 раза a = 6 a:= 4; b:= 6 нц пока a < b; a:= a + b кц a:= 4; b:= 6 нц пока a < b; a:= a + b кц 1 раз a = 10 1 раз a = 10 a:= 4; b:= 6 нц пока a > b; a:= a + 1 кц a:= 4; b:= 6 нц пока a > b; a:= a + 1 кц 0 раз a = 4 0 раз a = 4 a:= 4; b:= 6 нц пока a < b; b:= a – b кц a:= 4; b:= 6 нц пока a < b; b:= a – b кц 1 раз b = -2 1 раз b = -2 a:= 4; b:= 6 нц пока a < b; a:= a – 1 кц a:= 4; b:= 6 нц пока a < b; a:= a – 1 кц зацикливание
Программирование на алгоритмическом языке К. Поляков, Задания 77 «3»: Ввести целое число и определить, верно ли, что в нём ровно 3 цифры. Пример:Введите число: Да.Нет. «4»: Ввести целое число и найти сумму его цифр. Пример: Введите целое число: 1234 Сумма цифр числа 1234 равна 10.
Программирование на алгоритмическом языке К. Поляков, Задания 78 «5»: Ввести целое число и определить, верно ли, что в его записи есть две одинаковые цифры, стоящие рядом. Пример: Введите целое число: Введите целое число: Нет. Да. «6»: Ввести целое число и определить, верно ли, что в его записи есть две одинаковые цифры, НЕ обязательно стоящие рядом. Пример: Введите целое число: Введите целое число: Нет. Да.
Программирование на алгоритмическом языке К. Поляков, Вычисление НОД 79 НОД = наибольший общий делитель двух натуральных чисел – это наибольшее число, на которое оба исходных числа делятся без остатка. Перебор: 1.Записать в переменную k минимальное из двух чисел. 2.Если a и b без остатка делятся на k, то стоп. 3.Уменьшить k на 1. 4.Перейти к шагу 2. 1.Записать в переменную k минимальное из двух чисел. 2.Если a и b без остатка делятся на k, то стоп. 3.Уменьшить k на 1. 4.Перейти к шагу 2. Где будет НОД? ? Почему алгоритм обязательно закончится? ? это цикл с условием!
Программирование на алгоритмическом языке К. Поляков, Алгоритм Евклида 80 Евклид ( до. н. э.) НОД(a,b)= НОД(a-b, b) = НОД(a, b-a) НОД(a,b)= НОД(a-b, b) = НОД(a, b-a) Заменяем большее из двух чисел разностью большего и меньшего до тех пор, пока они не станут равны. Это и есть НОД. НОД (14, 21) = НОД (14, 21-14) = НОД (14, 7) НОД (1998, 2) = НОД (1996, 2) = … = 2 Пример: много шагов при большой разнице чисел: = НОД (7, 7) = 7 Надо: вычислить наибольший общий делитель (НОД) чисел a и b.
Программирование на алгоритмическом языке К. Поляков, Блок-схема алгоритма 81 a = b? да нет a > b? да a:=a-b нет b:=b-a начало конец
Программирование на алгоритмическом языке К. Поляков, Алгоритм Евклида 82 нц пока a b если a > b то a:= a - b иначе b:= b - a все кц нц пока a b если a > b то a:= a - b иначе b:= b - a все кц Где будет НОД? Как его вывести? ? Как вывести НОД в формате НОД(14,21) = 7? ? А без дополнительных переменных? ?
Программирование на алгоритмическом языке К. Поляков, Модифицированный алгоритм Евклида 83 НОД(a,b)= НОД(mod(a,b), b) = НОД(a, mod(b,a)) НОД(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 НОД(2 · a,2 · b)= 2 · НОД(a, b) НОД(2 · a,b)= НОД(a, b) | при нечетном b
Программирование на алгоритмическом языке К. Поляков, Алгоритм Евклида 84 «3»: Составить программу для вычисления НОД с помощью алгоритма Евклида. «4»: Составить программу для вычисления НОД с помощью модифицированного алгоритма Евклида и заполнить таблицу: a b НОД(a,b)
Программирование на алгоритмическом языке К. Поляков, Алгоритм Евклида 85 «5»: Выполнить задание на «4» и подсчитать число шагов алгоритма для каждого случая. a b НОД(a,b) шагов
Программирование на алгоритмическом языке К. Поляков, Цикл с переменной 86 Задача: вывести кубы чисел от 1 до 8. Можно ли решить известными способами? ? 1.Нужны ли переменные? Сколько? 2.Как они должны изменяться? 3.Нужен ли цикл?
Программирование на алгоритмическом языке К. Поляков, Блок-схема алгоритма 87 начало конец нет да N
Программирование на алгоритмическом языке К. Поляков, Цикл с переменной 88 Задача: вывести кубы натуральных чисел от 1 до 8. алг Кубы нач цел N, кубN N:= 1 нц пока N
Программирование на алгоритмическом языке К. Поляков, Цикл с переменной 89 Задача: вывести кубы натуральных чисел от 1 до 8. алг Кубы нач цел N, кубN кон алг Кубы нач цел N, кубN кон нц для N от 1 до 8 кубN:= N*N*N вывод кубN, нс кц Как обойтись без переменной кубN ? ? для 1,2,3,…,8
Программирование на алгоритмическом языке К. Поляков, Цикл с переменной 90 Задача: вывести кубы чётных чисел от 2 до 8. алг Кубы нач цел N, кубN кон алг Кубы нач цел N, кубN кон нц для N от 2 до 8 шаг 2 кубN:= N*N*N вывод кубN, нс кц для 2,4,6,8 только целые !
Программирование на алгоритмическом языке К. Поляков, Сколько раз выполняется цикл? 91 a := 1 нц для i от 1 до 3; a:=a+1 кц a := 1 нц для i от 1 до 3; a:=a+1 кц a = 4a = 4 a = 4a = 4 a := 1 нц для i от 3 до 1; a:=a+1 кц a := 1 нц для i от 3 до 1; a:=a+1 кц a = 1a = 1 a = 1a = 1 a := 1 нц для i от 1 до 3 шаг -1; a:=a+1 кц a := 1 нц для i от 1 до 3 шаг -1; a:=a+1 кц a = 1a = 1 a = 1a = 1 a := 1 нц для i от 3 до 1 шаг -1; a:=a+1 кц a := 1 нц для i от 3 до 1 шаг -1; a:=a+1 кц a = 4a = 4 a = 4a = 4
Программирование на алгоритмическом языке К. Поляков, Цикл с переменной 92 Особенности: переменная цикла может быть только целой ( цел ) начальное и конечное значения и шаг – целые можно записывать в одну строчку, разделяя команды точкой с запятой: если шаг > 0 и конечное значение < начального, цикл не выполняется ни разу (проверка условия в начале цикла, цикл с предусловием) если шаг начального, цикл не выполняется ни разу нц для n от 1 до 4 вывод n кц ;
Программирование на алгоритмическом языке К. Поляков, Замена одного вида цикла на другой 93 нц для i от 1 до 10 | тело цикла кц нц для i от 1 до 10 | тело цикла кц i:= 1 нц пока i = b | тело цикла i:= i - 1 кц Замена пока на для возможна только тогда, когда можно заранее вычислить число шагов цикла. Замена цикла для на пока возможна всегда.
Программирование на алгоритмическом языке К. Поляков, Задания 94 «3»: Ввести натуральное число N и вывести числа от N до 1 (через одно) в порядке убывания. Пример: Введите натуральное число: 8 Ответ:
Программирование на алгоритмическом языке К. Поляков, Задания 95 «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. Пример: Введите последнее число: 3 Сумма …+ a 2
Программирование на алгоритмическом языке К. Поляков, Задания 96 «4»: Ввести a и b и вывести квадраты и кубы чисел от a до b. Пример: Введите границы интервала: 4 6 4: : : «5»: Вывести квадраты и кубы 10 чисел следующей последовательности: 1, 2, 4, 7, 11, 16, … Пример: 1: 1 1 2: 4 8 4: :
К. Поляков, Программирование на алгоритмическом языке Тема 5. Графика
Программирование на алгоритмическом языке К. Поляков, Система координат 98 (0,0) (x,y)(x,y) X Y x y
Программирование на алгоритмическом языке К. Поляков, Исполнитель Рисователь 99 использовать Рисователь алг нач | текст программы кон использовать Рисователь алг нач | текст программы кон
Программирование на алгоритмическом языке К. Поляков, Цвет и толщина линий: перо(2, "синий") Линии 100 толщина линии (10, 15) (90, 80) перо(1, "зеленый") линия(10, 15, 90, 80) черный белый серый фиолетовый синий черный белый серый фиолетовый синий голубой зеленый желтый оранжевый красный (5,5) (50,5) (70, 50) (30,80) (5,60 ) перо(1, "красный) в точку(5, 5) линия в точку(50, 5) линия в точку(70, 50) линия в точку(30, 80) линия в точку(5, 60) перо(1, "красный) в точку(5, 5) линия в точку(50, 5) линия в точку(70, 50) линия в точку(30, 80) линия в точку(5, 60)
Программирование на алгоритмическом языке К. Поляков, Фигуры с заливкой 101 (0,0) (80, 40) перо(1, "синий") кисть("желтый") прямоугольник(0, 0, 80, 40) перо(1, "синий") кисть("желтый") прямоугольник(0, 0, 80, 40) (0,0) (100, 50) перо(1, "красный") кисть("зеленый") эллипс(0, 0, 100, 50) перо(1, "красный") кисть("зеленый") эллипс(0, 0, 100, 50) кисть("фиолетовый") залить(70, 80) кисть("фиолетовый") залить(70, 80) (70, 80) кисть(""); | отменить заливку Как построить круг? ?
102 Пример использовать Рисователь алг Домик нач перо(2, "фиолетовый") кисть("синий") прямоугольник(100, 100, 300, 200) в точку(100, 100) линия в точку(200, 50) линия в точку(300, 100) кисть("желтый") залить(200, 75); перо(2, "белый"); кисть("зеленый"); эллипс(150, 100, 250, 200); кон использовать Рисователь алг Домик нач перо(2, "фиолетовый") кисть("синий") прямоугольник(100, 100, 300, 200) в точку(100, 100) линия в точку(200, 50) линия в точку(300, 100) кисть("желтый") залить(200, 75); перо(2, "белый"); кисть("зеленый"); эллипс(150, 100, 250, 200); кон (200, 50) (100, 100) (300, 200)
Программирование на алгоритмическом языке К. Поляков, «3»: «Домик» «4»: «Лягушка» Задания
Программирование на алгоритмическом языке К. Поляков, «5»: «Корона» Задания
Программирование на алгоритмическом языке К. Поляков, Штриховка 105 (x 1, y 1 ) (x 2, y 2 ) N линий (N=5) h прямоугольник (x1, y1, x2, y2) x:= x1 + h линия(x, y1, x, y2) x:= x + h линия(x, y1, x, y2) x:= x + h... прямоугольник (x1, y1, x2, y2) x:= x1 + h линия(x, y1, x, y2) x:= x + h линия(x, y1, x, y2) x:= x + h... x x y2y2 y1y1 цикл N раз
Программирование на алгоритмическом языке К. Поляков, Штриховка (программа) 106 использовать Рисователь алг Штриховка нач цел N = 5 | число линий цел x1 = 100, x2 = 300 цел y1 = 100, y2 = 200 вещ h, x h:=(x2 - x1)/(N + 1) прямоугольник(x1, y1, x2, y2) x:= x1 + h нц N раз линия(int(x), y1, int(x), y2) x:= x + h кц кон использовать Рисователь алг Штриховка нач цел N = 5 | число линий цел x1 = 100, x2 = 300 цел y1 = 100, y2 = 200 вещ h, x h:=(x2 - x1)/(N + 1) прямоугольник(x1, y1, x2, y2) x:= x1 + h нц N раз линия(int(x), y1, int(x), y2) x:= x + h кц кон (x 1, y 1 ) (x 2, y 2 ) h N целая часть Почему? ? вещ h, x
Программирование на алгоритмическом языке К. Поляков, Штриховка 107 (x 1, y 1 ) (x 2, y 2 ) hxhx hyhy 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... 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 раз x1x1 (x, y)
Программирование на алгоритмическом языке К. Поляков, Штриховка 108 (x 1, y 1 ) (x 2, y 2 ) hxhx hyhy вещ hx, hy, x, y hx:=(x2 - x1)/(N + 1) hy:=(y2 - y1)/(N + 1) в точку(x1, y1) линия в точку(x1, y2) линия в точку(x2, y2) линия в точку(x1, y1) x:= x1 + hx; y:= y1 + hy нц N раз линия(x1,int(y),int(x),int(y)) x:= x + hx y:= y + hy кц вещ hx, hy, x, y hx:=(x2 - x1)/(N + 1) hy:=(y2 - y1)/(N + 1) в точку(x1, y1) линия в точку(x1, y2) линия в точку(x2, y2) линия в точку(x1, y1) x:= x1 + hx; y:= y1 + hy нц N раз линия(x1,int(y),int(x),int(y)) x:= x + hx y:= y + hy кц
Программирование на алгоритмическом языке К. Поляков, Задания 109 «3»: Ввести с клавиатуры количество линий, построить фигуру и выполнить штриховку: «4»: Ввести с клавиатуры количество линий, построить фигуру и выполнить штриховку: или
Программирование на алгоритмическом языке К. Поляков, Задания 110 «5»: Ввести с клавиатуры количество линий и построить фигуру:
К. Поляков, Программирование на алгоритмическом языке Тема 6. Вспомогательные алгоритмы
Программирование на алгоритмическом языке К. Поляков, Задача 112 Особенность: три похожие фигуры. общее: размеры, угол поворота отличия: координаты, цвет Можно ли решить известными методами? ? Сколько координат надо задать? ?
Программирование на алгоритмическом языке К. Поляков, С чего начать? 113 найти похожие действия (три фигуры) найти общее (размеры, форма, угол поворота) и отличия (координаты, цвет) отличия = параметры алгоритма (доп. данные) (x, y) (x+100, y) (x, y-60) использовать Рисователь алг Тр (цел x, y, лит цвет) нач в точку(x, y) линия в точку(x, y-60) линия в точку(x+100, y) линия в точку(x, y) кисть(цвет) залить(x+20, y-20) кон использовать Рисователь алг Тр (цел x, y, лит цвет) нач в точку(x, y) линия в точку(x, y-60) линия в точку(x+100, y) линия в точку(x, y) кисть(цвет) залить(x+20, y-20) кон параметры цепочка символов
Программирование на алгоритмическом языке К. Поляков, Если запустить? 114 (50,100)
Программирование на алгоритмическом языке К. Поляков, Как использовать? 115 использовать Рисователь алг Треугольники нач перо(1, "черный") Тр(100, 100, "синий") Тр(200, 100, "зеленый") Тр(200, 160, "красный") кон использовать Рисователь алг Треугольники нач перо(1, "черный") Тр(100, 100, "синий") Тр(200, 100, "зеленый") Тр(200, 160, "красный") кон (100,100) вызовы алгоритма алг Тр(цел x, y, лит цвет) нач... кон алг Тр(цел x, y, лит цвет) нач... кон основно й алгорит м основно й алгорит м вспомогательны й алгоритм вспомогательны й алгоритм
Программирование на алгоритмическом языке К. Поляков, Вспомогательные алгоритмы 116 расположены ниже основного в заголовке перечисляются формальные параметры, они обозначаются именами для каждого параметра указывают тип однотипные параметры перечисляются через запятую при вызове в скобках указывают фактические параметры в том же порядке алг Тр(цел x, y, лит цвет) Тр(200, 100, "зеленый") x x y y цвет
Программирование на алгоритмическом языке К. Поляков, Задания 117 «3»: Используя одну процедуру, построить фигуру. «4»: Используя одну процедуру, построить фигуру.
Программирование на алгоритмическом языке К. Поляков, Задания 118 «5»: Используя одну процедуру, построить фигуру.
Программирование на алгоритмическом языке К. Поляков, Рекурсивные объекты 119 Рекурсивный объект – это объект, определяемый через один или несколько таких же объектов. У попа была собака, он ее любил. Она съела кусок мяса, он ее убил. В ямку закопал, надпись написал: У попа была собака, он ее любил. Она съела кусок мяса, он ее убил. В ямку закопал, надпись написал: Сказка о попé и собаке Примеры: Сказка о попé и собаке: Факториал: если Рисунок с рекурсией:
Программирование на алгоритмическом языке К. Поляков, Рекурсивная фигура уровня: Где рекурсия? ? Фигура из N уровней – это окружность и 4 фигуры из N-1 уровней N-1
Программирование на алгоритмическом языке К. Поляков, Рекурсивная фигура: алгоритм 121 алг РекОк(цел x, y, R, N) нач если N
Программирование на алгоритмическом языке К. Поляков, Рекурсивная фигура: программа 122 использовать Рисователь алг Рекурсия нач РекОк(200, 200, 100, 3) кон использовать Рисователь алг Рекурсия нач РекОк(200, 200, 100, 3) кон алг РекОк(цел x, y, R, N) нач... кон алг РекОк(цел x, y, R, N) нач... кон
Программирование на алгоритмическом языке К. Поляков, Рекурсивные алгоритмы 123 вызывают сами себя прямо … или через другой алгоритм: должно быть условие окончания рекурсии (иначе?) рекурсия может стать бесконечной все задачи могут быть решены без рекурсии, но… часто рекурсивные алгоритмы проще и понятнее как правило, алгоритмы без рекурсии работают быстрее и требуют меньше памяти A AB прямая рекурсия косвенная рекурсия
Программирование на алгоритмическом языке К. Поляков, «3 » : Нарисовать рекурсивную фигуру, число уровней вводить с клавиатуры: «4» : Нарисовать рекурсивную фигуру, число уровней вводить с клавиатуры: Задания 124
Программирование на алгоритмическом языке К. Поляков, «5» : Нарисовать рекурсивную фигуру, число уровней вводить с клавиатуры: Задания 125
К. Поляков, Программирование на алгоритмическом языке Тема 7. Алгоритмы-функции
Программирование на алгоритмическом языке К. Поляков, Максимум из трех 127 начало конец a > b? да x:= a нет x:= b c > x? да x:= c a a b b x x x x c c Где ответ? ? нет
Программирование на алгоритмическом языке К. Поляков, Максимум из трех 128 алг цел Макс3(цел a, b, c) нач цел x если a > b то x:= a иначе x:= b все если c > x то x:= c все знач := x кон знач цел x цел результат – целое число внутренняя (локальная) переменная результат (значение) функции
Программирование на алгоритмическом языке К. Поляков, Максимум из трех 129 алг Максимум нач цел 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) нач... кон вызов функции имена параметров могут быть любые!
Программирование на алгоритмическом языке К. Поляков, Максимум из пяти 130 Как с помощью этой функции найти максимум из пяти чисел? ? алг Максимум нач цел 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) нач... кон ???
Программирование на алгоритмическом языке К. Поляков, НОД трёх чисел 131 Задача: ввести три числа и найти наибольший общий делитель (НОД). Используйте формулу НОД(a,b,c) = НОД(НОД(a,b), c) Нужно два раза применить один и тот же алгоритм вычисления НОД двух чисел. ! Решение: построить вспомогательный алгоритм для вычисления НОД двух чисел и применить (вызвать) его два раза.
Программирование на алгоритмическом языке К. Поляков, Общий вид программы 132 алг НОД трёх чисел нач цел 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) кон основной алгоритм вспомогательны й алгоритм ???
Программирование на алгоритмическом языке К. Поляков, Блок-схема алгоритма Евклида 133 a = b? да нет a > b? да a:=a-b нет b:=b-a начало конец
Программирование на алгоритмическом языке К. Поляков, Алгоритм Евклида 134 алг цел НОД(цел 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 | результат функции кон
Программирование на алгоритмическом языке К. Поляков, Рекурсивные функции 135 Факториал: если алг цел Факт(цел 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 кц кон Алгоритм без рекурсии, как правило, работает быстрее и требует меньше памяти. !
Программирование на алгоритмическом языке К. Поляков, Задания «3 » : Составить функцию, которая определяет НАИМЕНЬШЕЕ из трёх чисел и привести пример ее использования. Пример: Введите три числа: Наименьшее число 10. «4» : Составить функцию, НАИМЕНЬШЕЕ из четырёх чисел и привести пример ее использования. Пример: Введите четыре числа: Наименьшее число 5.
Программирование на алгоритмическом языке К. Поляков, Задания «5» : Составить функцию, которая определяет сумму всех чисел от 1 до N и привести пример ее использования. Пример: Введите число: 100 Сумма чисел от 1 до 100 = 5050
Программирование на алгоритмическом языке К. Поляков, Логические функции 138 Задача: составить функцию, которая определяет, верно ли, что заданное число – четное. Особенности: ответ – логическое значение ( да или нет ) результат функции можно использовать как логическую величину в условиях ( если, пока ) Алгоритм: если число делится на 2, оно четное. если mod(N,2)= 0 то | число N четное иначе | число N нечетное все если mod(N,2)= 0 то | число N четное иначе | число N нечетное все
Программирование на алгоритмическом языке К. Поляков, Логические функции 139 алг лог Четное(цел N) нач если mod(N,2) = 0 то знач:= да иначе знач:= нет все кон алг лог Четное(цел N) нач если mod(N,2) = 0 то знач:= да иначе знач:= нет все кон логическое значение ( да или нет )
Программирование на алгоритмическом языке К. Поляков, Логические функции 140 алг Проверка четности нач цел x вывод "Введите целое число: " ввод x если Четное(x) то вывод "Число четное." иначе вывод "Число нечетное." все кон алг Проверка четности нач цел x вывод "Введите целое число: " ввод x если Четное(x) то вывод "Число четное." иначе вывод "Число нечетное." все кон алг лог Четное(цел N) нач... кон
Программирование на алгоритмическом языке К. Поляков, Задания 141 «3»: Составить функцию, которая определяет, верно ли, что число оканчивается на 0. Пример: Введите число:Введите число: Верно.Неверно. «4»: Составить функцию, которая определяет, верно ли, что в числе вторая цифра с конца больше 6. Пример: Введите число:Введите число: Верно.Неверно.
Программирование на алгоритмическом языке К. Поляков, Задания 142 «5»: Составить функцию, которая определяет, верно ли, что переданное ей число – простое (делится только на само себя и на единицу). Пример: Введите число:Введите число: 2928 Простое число.Составное число.
К. Поляков, Программирование на алгоритмическом языке Тема 8. Анимация
Программирование на алгоритмическом языке К. Поляков, Анимация 144 Анимация (англ. animation) – оживление изображения на экране. Задача: внутри синего квадрата 200 на 200 пикселей слева направо двигается желтый квадрат 20 на 20 пикселей. Программа останавливается, если нажата клавиша Esc или квадрат дошел до границы синей области. Проблема: как изобразить перемещение объекта на экране? Привязка: состояние объекта задается координатами (x,y) Принцип анимации: 1.рисуем объект в точке (x,y) 2.задержка на несколько миллисекунд 3.стираем объект 4.изменяем координаты (x,y) 5.переходим к шагу 1
Программирование на алгоритмическом языке К. Поляков, Процедура (рисование и стирание) 145 алг Фигура(цел x, y, лит цвет) нач кисть(цвет) прямоугольник(x,y,x+20,y+20) кон алг Фигура(цел x, y, лит цвет) нач кисть(цвет) прямоугольник(x,y,x+20,y+20) кон (x, y) (x+20, y+20) одна процедура рисует и стирает стереть = рисовать цветом фона границу квадрата отключить рисуем: цвет кисти – желтый стираем: цвет кисти – синий рисуем: цвет кисти – желтый стираем: цвет кисти – синий
Программирование на алгоритмическом языке К. Поляков, Полная программа 146 использовать Рисователь алг Анимация нач цел x, y | текущие координаты кисть("синий") перо(1, "") | отключить контур прямоугольник(0, 0, 200, 200) | синий фон x:= 0; y:= 100 | начальные координаты кон использовать Рисователь алг Анимация нач цел x, y | текущие координаты кисть("синий") перо(1, "") | отключить контур прямоугольник(0, 0, 200, 200) | синий фон x:= 0; y:= 100 | начальные координаты кон алг Фигура(цел x, y, лит цвет) нач... кон алг Фигура(цел x, y, лит цвет) нач... кон нц пока x < 180 Фигура(x, y, "желтый") delay(50) Фигура(x, y, "синий") x:= x + 5 кц пока не дошли до границы
Программирование на алгоритмическом языке К. Поляков, Задания 147 «3»: Квадрат двигается справа налево: «4»: Два квадрата двигаются в противоположных направлениях:
Программирование на алгоритмическом языке К. Поляков, Задания 148 «5»: Два квадрата двигаются в противоположных направлениях и отталкиваются от стенок синего квадрата:
Программирование на алгоритмическом языке К. Поляков, Управление клавишами 149 Задача: жёлтый квадрат внутри синего квадрата управляется клавишами-стрелками. Коды клавиш: влево – вверх – вправо – вниз – Проблема: как изменять направление движения? Решение: c:= клав выбор при c = : x:= x – 5 | влево при c = : y:= y – 5 | вверх при c = : x:= x + 5 | вправо при c = : y:= y + 5 | вниз все c:= клав выбор при c = : x:= x – 5 | влево при c = : y:= y – 5 | вверх при c = : x:= x + 5 | вправо при c = : y:= y + 5 | вниз все ждать нажатия на клавишу, записать ее код в переменную c Когда стирать фигуру? ?
Программирование на алгоритмическом языке К. Поляков, Программа 150 использовать Рисователь алг Управление клавишами нач цел x, y, c | нарисовать синий квадрат x:= 100; y:= 100 | начальная точка нц пока x < 180 Фигура(x, y,"желтый") | рисуем фигуру c:= клав | ждем нажатия клавиши Фигура(x, y,"синий") | стираем фигуру выбор при c = : x:= x - 5 при c = : y:= y - 5 при c = : x:= x + 5 при c = : y:= y + 5 все кц кон использовать Рисователь алг Управление клавишами нач цел x, y, c | нарисовать синий квадрат x:= 100; y:= 100 | начальная точка нц пока x < 180 Фигура(x, y,"желтый") | рисуем фигуру c:= клав | ждем нажатия клавиши Фигура(x, y,"синий") | стираем фигуру выбор при c = : x:= x - 5 при c = : y:= y - 5 при c = : x:= x + 5 при c = : y:= y + 5 все кц кон
Программирование на алгоритмическом языке К. Поляков, Задания 151 «3»: Квадрат в самом начале стоит в правом нижнем углу, и двигается при нажатии стрелок только вверх или влево: «4»: Квадрат двигается при нажатии стрелок, однако не может выйти за границы синего квадрата:
Программирование на алгоритмическом языке К. Поляков, Задания 152 «5»: Квадрат непрерывно двигается, при нажатии стрелок меняет направление и отталкивается от стенок синего квадрата:
К. Поляков, Программирование на алгоритмическом языке Тема 9. Случайные числа
Программирование на алгоритмическом языке К. Поляков, Случайно… 1)встретить друга на улице 2)разбить тарелку 3)найти 10 рублей 4)выиграть в лотерею Случайный выбор: 1)жеребьевка на соревнованиях 2)выигравшие номера в лотерее Как получить случайность? 154 Случайность и ее моделирование
Программирование на алгоритмическом языке К. Поляков, Электронный генератор нужно специальное устройство нельзя воспроизвести результаты малый период (последовательность повторяется через 10 6 чисел) Метод середины квадрата (Дж. фон Нейман) в квадрате Псевдослучайные числа – обладают свойствами случайных чисел, но каждое следующее число вычисляется по заданной формуле. 155 Случайные числа на компьютере
Программирование на алгоритмическом языке К. Поляков, Модель: снежинки падают на отрезок [a,b] a b a b распределение равномерное неравномерное Сколько может быть разных распределений? ? 156 Распределение случайных чисел
Программирование на алгоритмическом языке К. Поляков, Особенности: распределение – это характеристика всей последовательности, а не одного числа равномерное распределение одно, компьютерные датчики случайных чисел дают равномерное распределение неравномерных – много любое неравномерное можно получить с помощью равномерного a b a b 157 Распределение случайных чисел
Программирование на алгоритмическом языке К. Поляков, Вещественные числа в интервале [0,10): 158 Генератор случайных чисел вещ X, Y X:= rand(0, 10) | интервал от 0 до 10 (
Программирование на алгоритмическом языке К. Поляков, Случайные числа 159 Задача: заполнить прямоугольник 200 на 150 пикселей равномерно точками случайного цвета Как получить случайные координаты пикселя? Как добиться равномерности? автоматически при использовании irand цел X, Y X:= irand(0, 200) Y:= irand(0, 150) цел X, Y X:= irand(0, 200) Y:= irand(0, 150)
Программирование на алгоритмическом языке К. Поляков, Цвет пикселя на мониторе 160 red: R green: G blue: B Красный, зелёный и синий лучи создают почти такое же ощущение, как луч «смешанного» цвета! ! Вывод: цвет можно разложить на составляющие (каждая кодируется числом от 0 до 255). Модель RGB: RGB(0,0,0) R G B RGB(255,255,255) RGB(255,0,0) RGB(0,255,0) RGB(0,0,255) RGB(255,0,255) RGB(255,255,0) RGB(0,255,255) RGB(100,100,100)
Программирование на алгоритмическом языке К. Поляков, Случайный цвет пикселя 161 цел r, g, b r:= irand(0, 255) g:= irand(0, 255) b:= irand(0, 255) цел r, g, b r:= irand(0, 255) g:= irand(0, 255) b:= irand(0, 255) Случайные составляющие цвета: это разные числа! Управление цветом пикселя: пиксель(X, Y, RGB(r,g,b)) случайный цвет встроенные функции Рисователя
Программирование на алгоритмическом языке К. Поляков, Программа 162 использовать Рисователь алг Случайные точки нач цел 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)) кц кон использовать Рисователь алг Случайные точки нач цел 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)) кц кон это бесконечный цикл: нц пока да … кц это бесконечный цикл: нц пока да … кц
Программирование на алгоритмическом языке К. Поляков, Задания 163 «3»: Заполнить квадрат точками случайного цвета. размер квадрата ввести с клавиатуры: Пример: Введите размер квадрата: 150 «4»: Заполнить область точками случайного цвета:
Программирование на алгоритмическом языке К. Поляков, Задания 164 «5»: Заполнить область точками случайного цвета: или
Программирование на алгоритмическом языке К. Поляков, Конец фильма ПОЛЯКОВ Константин Юрьевич д.т.н., учитель информатики высшей категории, ГОУ СОШ 163, г. Санкт-Петербург