ИНФОРМАТИКА И ИКТ В ПОМОЩЬ УЧАЩЕМУСЯ Алгоритмизация. СПб СВУ МВД Понятие алгоритма является одним из основных понятий вычислительной математики, однако, оно возникло в связи с поисками общих методов решения однотипных задач задолго до появления вычислительных машин. Еще в III веке до н.э. греческий математик Евклид изложил правило вычисления наибольшего общего делителя двух натуральных чисел. Это правило историки математики считают первым алгоритмом, хотя само слово "алгоритм" появилось гораздо позднее. Более 1000 лет назад (в 825 году) ученый из города Хорезма Абдулла (или Абу Джафар) Мухаммед бен Муса аль-Хорезми создал книгу по математике, в которой описал способы выполнения арифметических действий над многозначными числами. Само слово алгоритм возникло в Европе после перевода на латынь книги этого математика. Алгоритм – организованная последовательность действий исполнителя, для достижения поставленной задачи за конечное число шагов. Пример: Вскипятить воду в чайнике. 1. 2. 3. 4. 5. 6. Положить в пустую чайную чашку пакетик чая. Залить чашку горячей водой. Подождать 1 минуту. Вытащить пакетик. Положить в чашку 2 чайных ложки сахара. Размешать сахар. Исполнитель алгоритма – это некая абстрактная или реальная(техническая, биологическая, биотехническая) система, способная выполнить действия, предписываемые алгоритмом. Исполнитель Техническая Биологическая Биотехническая Исполнителя характеризуют: среда; элементарные действия; система команд; отказы. Среда (или обстановка) — это "место обитания" исполнителя. Система команд. Каждый исполнитель может выполнять команды только из некоторого строго заданного списка — системы команд исполнителя. Элементарное действие - выполняются исполнителем после вызова команды. Отказы исполнителя возникают, если команда вызывается при недопустимом для нее состоянии среды. Свойства Алгоритмов • Понятность — т.е. исполнитель алгоритма должен знать, как его выполнять. • Дискретность (прерывность, раздельность) — т.е. алгоритм должен представлять процесс решения задачи как последовательное выполнение простых (или ранее определённых) шагов (этапов). • Определённость — т.е. каждое правило алгоритма должно быть четким, однозначным и не оставлять места для произвола. • Результативность (или конечность). – т.е. алгоритм должен приводить к решению задачи за конечное число шагов. • Массовость – т.е. алгоритм обеспечивает решение всего класса задач данного типа. Формы представления алгоритмов. • словесная (записи на естественном языке, словестное описание); Пример: Вскипятить воду в чайнике. • графическая (изображения из графических символов, блок схем); Описание алгоритма с помощью блок схем осуществляется рисованием последовательности геометрических фигур, каждая из которых подразумевает выполнение определенного действия алгоритма. Порядок выполнения действий указывается стрелками. Написание алгоритмов с помощью блок-схем регламентируется ГОСТом. • псевдокоды (полуформализованные описания алгоритмов на условном алгоритмическом языке, включающие в себя как элементы языка программирования, так и фразы естественного языка, общепринятые математические обозначения и др.); • программная (тексты на языках программирования). В зависимости от поставленной задачи и последовательности выполняемых шагов различают следующие виды алгоритмов: Линейный - шаги алгоритма следуют один за другим не повторяясь, действия происходят только в одной заранее намеченной последовательности. Блоки алгоритма 1, 2, 3 выполняются именно в такой последовательности, после чего алгоритм достигает цели и заканчивается. С ветвлением - в зависимости от выполнения или невыполнения условия, исполняется либо одна, либо другая ветвь алгоритма. В данном алгоритме проверяется условие, и если оно выполняется, то есть на вопрос можно ответить "Да", исполняется блок алгоритма 1 (одно ли несколько действий), а если не выполняется - ответ на вопрос отрицательный, то исполняется блок 2. Примечание: одного из блоков: 1 или 2 может не быть вовсе. Тогда в одном из случаев будут выполняться какие-либо действия, а в другом - ничего не будет выполняться. Циклический - блоки алгоритма выполняются до тех пор, пока не будет выполнено определенное условие. Блок алгоритма 1 будет выполняться один или несколько раз до тех пор, пока не выполнится условие. Алгоритм выполняется так: выполняется блок 1, проверяется условие, если оно не выполняется, то блок 1 выполняется снова и условие проверяется заново. При выполнении условия алгоритм заканчивается. Примечание: в общей схеме алгоритма "Да" и "Нет" можно поменять местами, тогда алгоритм будет выполняться, пока условие выполняется. Как только условие не выполнится - алгоритм завершится. Практическая часть. Задача 1: Составить алгоритм вычисления площади прямоугольника по заданной длине и ширине: 1. Запись алгоритма в графическом виде начинается с блок-схемы начало. Начало 2. Зададим длину(а) и ширину прямоугольника( b). Запишем блок-схему ввода информации. Ввод a,b 3. Вычислим площадь S по формуле a*b, для этого запишем формулу в блок-схеме вычисления. S=a*b 4. Вывести полученный результат на экран, с помощью блок-схемы вывода информации. Вывод S 5. Закончить выполнение алгоритма, запишем соответствующую блоксхему. Конец Задача 2. У исполнителя Калькулятор две команды, которым присвоены номера: 1. прибавь 1 2. умножь на 3 Выполняя первую из них, Калькулятор прибавляет к числу на экране 1, а выполняя вторую, утраивает его. Запишите порядок команд в программе получения из 2 числа 26, содержащей не более 6 команд, указывая лишь номера команд. Пояснение. Умножение на число обратимо не для любого числа, поэтому, если мы пойдём от числа 26 к числу 2, тогда однозначно восстановим программу. Полученные команды будут записываться справа налево. 1) Число 26 не делится на 3, значит, оно получено прибавлением единицы к числу 25: 26 = 25 + 1 (команда 1). Повторим рассуждение для числа 25: 25 = 24 + 1 (команда 1). 2) Т. к. мы хотим получить не более 6 команд, то для получения числа 24 выгодно использовать умножение: 24 = 8 * 3 (команда 2). Для числа 8 применяем первое рассуждение: 8 = 7 + 1(команда 1), повторяем его для 7: 7 = 6 + 1 (команда 1), а для числа 6 применем рассуждение 2): 6 = 2 * 3(команда 2). Тогда окончатльно получаем ответ: 211211 Задача 3. Последовательность чисел Фибоначчи задается рекуррентным соотношением: F(1) = 1 F(2) = 1 F(n) = F(n–2) + F(n–1), при n >2, где n – натуральное число. Чему равно девятое число в последовательности Фибоначчи? В ответе запишите только натуральное число. Пояснение. Последовательно находим: F(3) = F(1) + F(2) = 2, F(4) = F(2) + F(3) = 3, F(5) = F(3) + F(4) = 5, F(6) = F(4) + F(5) = 8, F(7) = F(5) + F(6) = 13, F(8) = F(6) + F(7) = 21, F(9) = F(7) + F(8) = 34. Девятое число в последовательности Фибоначчи равно 34. Задача 4. Рассмотрим пример составления разветвляющегося алгоритма. Вычислить значение функции y по формуле . Математическая постановка задачи. Из условия задачи ясно, что все величины имеют математические обозначения, известна формула для вычислений. Исходными данными задачи являются переменные а, х. (блок-схема 2) Результат задачи - переменная y. (блок-схема 6,7) Остается выяснить ограничения для исходных данных. Область определения переменных а, х - вся числовая ось. Но есть одно значение переменной х, при котором функция y не может быть вычислена (при х=1 знаменатель обращается в нуль, делить на нуль нельзя). (блок-схема 3) Выбор метода решения задачи. Прежде чем вычислять функцию y, выясним, не обращается ли в нуль знаменатель дроби. Разработка алгоритма. Схема алгоритма решения задачи приведена на рисунке В блоке 3 проверка: если знаменатель равен ну-лю, то на экран выдается сообщение, что при заданных исходных данных функция не существует (блок 4), и решение задачи заканчивается (это одна ветка алгоритма); если знаменатель не равен нулю, вычисляем и печатаем значение функции y (блоки 6, 7, 8 - это вторая ветка алгоритма). Рис. 6. Особенность отладки разветвляющихся алгоритмов состоит в следующем: для проверки правильности всех ветвей алгоритма тест должен включать несколько наборов исходных данных - по числу ветвей алгоритма. Задача 5. Рассмотрим пример составления циклического алгоритма. Система команд исполнителя РОБОТ, «живущего» в прямоугольном лабиринте на клетчатой плоскости: вверх вниз влево вправо При выполнении этих команд РОБОТ перемещается на одну клетку соответственно: вверх, вниз, влево, вправо. Четыре команды проверяют истинность условия отсутствия стены у той клетки, где находится РОБОТ: сверху свободно снизу свободно слева свободно справа свободно Цикл ПОКА < условие> команда выполняется, пока условие истинно, иначе происходит переход на следующую строку. Сколько клеток лабиринта соответствуют требованию, что, выполнив предложенную программу, РОБОТ остановится в той же клетке, с которой он начал движение? НАЧАЛО ПОКА < снизу свободно > вниз ПОКА < слева свободно > влево ПОКА < сверху свободно > вверх ПОКА < справа свободно > вправо КОНЕЦ Пояснение. Выясним, что необходимо, чтобы РОБОТ остановился в той же клетке, с которой он начал движение. Программа заканчивается командой "ПОКА < справа свободно > вправо", следовательно, для того, чтобы робот остановился в той же клетке, с которой он начал движение, необходимо, чтобы у этой клетки была стенка справа (условие 1). Этому условию удовлетворяют все клетки правой стенки лабиринта и еще пять клеток кроме нее. Предпоследняя команда: "ПОКА < сверху свободно > вверх", значит у клетки в которой он прекратит выполнение должно быть ограничение стенкой сверху. Кроме того, робот, прекратив выполнение этой команды, должен оказаться на одной строчке с клеткой, с которой он начал движение (условие 2). Клеток, удовлетворяющих условиям 1 и 2, всего две: Г3 и Д1, если нумеровать цифрами сверху вниз, а буквами слева направо. Представив себе движение робота в том случае когда он стартует из этих клеток, увидим, что в них он и вернется. Задача 6 Вычислить произведение чисел от 1 до 5 используя различные варианты цикла Математическая модель: Р= 1· 2· 3· 4· 5=120 Составим алгоритм в виде блок-схемы. Для проверки правильности алгоритма заполним трассировочную таблицу. Проверка условия происходит в несколько шагов: проверка условия и выполнение команд на одной из ветвей. Поэтому в трассировочной таблице записываются не команды алгоритма, а отдельные операции, выполняемые компьютером на каждом шаге. Шаг первый: Р присваивается значение один. Шаг второй: i присваивается значение один. Шаг третий: при i равном единице проверяем условие один меньше или равен пяти, да, условие истинно, значит Р присваивается значение один умноженное на один, будет два. Для i: один плюс один, будет два. Шаг четвертый: при i равном двум проверяем условие два меньше или равен пяти, да, условие истинно, значит Р присваивается значение 2 умноженное на один, будет 2. Для i: два плюс один, будет три. Шаг пятый: при i равном трем проверяем условие три меньше или равен пяти, да, условие истинно, значит Р присваивается значение два умноженное на три, будет шесть. Для i: три плюс один, будет четыре. Шаг шестой: при i равном четырем проверяем условие четыре меньше или равен пяти, да, условие истинно, значит Р присваивается значение шесть умноженное на четыре, будет двадцать четыре. Для i: четыре плюс один, будет пять. Шаг седьмой: при i равном пяти проверяем условие пять меньше или равен пяти, да ,условие истинно, значит Р присваивается значение двадцать четыре умноженное на пять, будет сто двадцать. Для i: пять плюс один, будет шесть. Шаг восьмой: при i равном шести проверяем условие шесть меньше или равен пяти, нет, условие ложно, тогда мы выходим из цикла, а в результате получаем последнее значение равное сто двадцати. Для самостоятельного решения: 1. Составьте алгоритм нахождения площади круга и запишите его графическим способом. 2. Составьте алгоритм нахождения площади трапеции и запишите его графическим способом. 3. Составьте алгоритм нахождения длинны окружности и запишите его графическим способом. 4. Составьте алгоритм нахождения площади круга и запишите его графическим способом. 5. Исполнитель КУЗНЕЧИК живёт на числовой оси. Начальное положение КУЗНЕЧИКА – точка 0. Система команд Кузнечика: Вперед 5 – Кузнечик прыгает вперёд на 5 единиц, Назад 3 – Кузнечик прыгает назад на 3 единицы. Какое наименьшее количество раз должна встретиться в программе команда «Назад 3», чтобы Кузнечик оказался в точке 21? 6. Исполнитель Робот ходит по клеткам бесконечной вертикальной клетчатой доски, переходя по одной из команд вверх, вниз, вправо, влево в соседнюю клетку в указанном направлении. Робот выполнил следующую программу: вправо вниз вправо вверх влево вверх вверх влево Укажите наименьшее возможное число команд, которое необходимо для того, чтобы Робот вернулся в ту же клетку, из которой начал движение. 7. Исполнитель Чертежник имеет перо, которое можно поднимать, опускать и перемещать. При перемещении опущенного пера за ним остается след в виде прямой линии. У исполнителя существуют следующие команды: Сместиться на вектор (а, Ь) – исполнитель перемещается в точку, в которую можно попасть из данной, пройдя а единиц по горизонтали и b – по вертикали. Запись: Повторить 5[ Команда 1 Команда 2] означает, что последовательность команд в квадратных скобках повторяется 5 раз. Чертежник находится в начале координат. Чертежнику дан для исполнения следующий алгоритм: Сместиться на вектор (5,2) Сместиться на вектор (-3, 3) Повторить 3[Сместиться на вектор (1,0)] Сместиться на вектор (3, 1) На каком расстоянии от начала координат будет находиться исполнитель Чертежник в результате выполнения данного алгоритма? 8. Алгоритм вычисления значения функции F(n), где n – натуральное число, задан следующими соотношениями: F(1) = 1 F(n) = F(n–1) * n, при n >1 Чему равно значение функции F(5)? В ответе запишите только натуральное число. 9. Алгоритм вычисления значения функции F(n) и G(n), где n – натуральное число, задан следующими соотношениями: F(1) = 0 F(n) = F(n–1) + n, при n >1 G(1) = 1 G(n) = G(n–1) * n, при n >1 Чему равно значение функции F(5) + G(5)? В ответе запишите только натуральное число. 10. Алгоритм вычисления значения функции F(n), где n задан следующими соотношениями: F(1) = 1; F(2)=2; F(n) = 3*F(n−1) − 2*F(n−2), при n >2. Чему равно значение функции F(7)? В ответе запишите только натуральное число. 11. Составьте алгоритм решения квадратного уравнения и запишите его с помощью блок схем. 12. Составьте алгоритм перехода улицы на регулируемом перекрестке и запишите его с помощью блок схем. 13. 14. Составьте алгоритм решения системы уравнений и запишите его с помощью блок схем. 15. Составьте алгоритм решения задачи по определению принадлежности точки к окружности заданного радиуса (координаты задаются с клавиатуры). Запишите алгоритм с помощью блок схем. 16. Ученик в первый день выучил 5 английских слов. В каждый следующий день он выучивал на 2 слова больше, чем в предыдущий. Сколько английских слов выучит ученик в 10-ый день занятий? Составьте словесный алгоритм и блок-схему (тремя способами). 17. Составить программу планирования закупки товара в магазине на сумму, не превышающую заданную величину. Решение: 1. Обозначим через: с – цену товара; k – количество товара; р – заданную предельную величину; s – начальное значение общей стоимости покупки; Начальное значение (s) = 0, значение предельной суммы (р) – вводится с клавиатуры. Необходимо повторять запрос цены и количества выбранного товара, вычислять его стоимость и выводить результат на экран до тех пор, пока она не превысит предельную сумму, в этом случае на экран нужно вывести сообщение о превышении. 1. Система команд исполнителя РОБОТ, «живущего» в прямоугольном лабиринте на клетчатой плоскости: вверх вниз влево вправо При выполнении этих команд РОБОТ перемещается на од-ну клетку соответственно: вверх, вниз, влево, вправо. Четыре команды проверяют истинность условия отсутствия стены у той клетки, где находится РОБОТ: сверху свободно снизу свободно слева свободно справа свободно Цикл ПОКА <условие> команда выполняется, пока условие истинно, иначе происходит переход на следующую строку. Сколько клеток лабиринта соответствуют требованию, что, выполнив предложенную программу, РОБОТ остановится в той же клетке, с которой он начал движение? НАЧАЛО ПОКА <слева свободно> влево ПОКА <сверху свободно> вверх ПОКА <справа свободно> вправо ПОКА <снизу свободно> вниз КОНЕЦ Исполнитель КОРАБЛИК «живет» в ограниченном прямоугольном водоеме-лабиринте, разделенном на клетки и изображенном на рисунке (вид сверху). Серые клетки — скалистые берега, светлые — свободное пространство, безопасное для передвижения КОРАБЛИКА. По краю водоема-лабиринта также находятся скалы с нанесенными на них номерами и буквами для удобства идентификации клеток. Система команд исполнителя КОРАБЛИК: вверх вниз влево вправо При выполнении любой из этих команд КОРАБЛИК перемещается на одну клетку соответственно (по отношению к наблюдателю): вверх ↑, вниз ↓, влево ←, вправо →. Четыре команды проверяют истинность условия отсутствия стены у каждой стороны той клетки, где находится КОРАБЛИК (также по отношению к наблюдателю): сверху свободно снизу свободно слева свободно справа свободно Цикл ПОКА < условие > команда выполняется, пока условие истинно, иначе происходит переход на следующую строку. При попытке передвижения на любую серую клетку КОРАБЛИК разбивается о скалы. Сколько клеток приведенного лабиринта соответствуют требованию, что, стартовав в ней и выполнив предложенную. ниже программу, КОРАБЛИК не разобьется? НАЧАЛО ПОКА <слева свободно> влево ПОКА <справа свободно> вправо вверх вправо КОНЕЦ 18. Напишите алгоритм, позволяющую осуществить подбор игроков в команду по баскетболу. Необходимый рост участника команды должен быть не менее 180 см. Контрольные вопросы: 1. Что такое алгоритм? Приведите пример. 2. Какими свойствами обладает алгоритм? 3. Какие способы используются для описания алгоритма? 4. Какие алгоритмы различают? Приведите примеры. 5. Что такое исполнитель алгоритма? Приведите примеры.