Алгоритмические основы программирования.pptx
- Количество слайдов: 23
АЛГОРИТМИЧЕСКИЕ ОСНОВЫ ПРОГРАММИРОВАНИЯ АЛГОРИТМ
АЛГОРИТМ Алгоритм – понятный и точный набор предписаний (инструкций), описывающий порядок (последовательность) действий исполнителя, направленных на достижение указанной цели(решения задачи) за конечное время. Алгоритм в ПК – набор операций и правил их чередования Само же слово алгоритм появилось в Средние века, когда европейцы познакомились со способами выполнения арифметических действий, описанными узбекским (персидским) математиком Мухаммедом бен Муса аль. Хорезми. Около 825 года он написал сочинение, в котором впервые дал описание придуманной в Индии позиционной десятичной системы счисления сформулировал правила вычислений в новой системе и, вероятно, впервые использовал цифру 0 для обозначения пропущенной позиции в записи числа.
ИСПОЛНИТЕЛЬ АЛГОРИТМА Любой алгоритм существует не сам по себе, а предназначен для определенного исполнителя. Алгоритм описывается в командах исполнителя, который этот алгоритм будет выполнять. Объекты, над которыми исполнитель может совершать действия, образуют так называемую среду исполнителя, а множество команд, которые исполнитель может выполнять, — систему команд исполнителя (СКИ) Исполнитель алгоритма — это некоторая абстрактная или реальная (техническая, биологическая или биотехническая) система, способная выполнить действия, предписываемые алгоритмом. Исполнителя характеризуют: среда; элементарные действия; система команд; отказы. Среда (или обстановка) — это "место обитания" исполнителя. Система команд. Каждый исполнитель может выполнять команды только из некоторого строго заданного списка — системы команд исполнителя. Для каждой команды должны быть заданы условия применимости (в каких состояниях среды может быть выполнена команда) и описаны результаты выполнения команды. После вызова команды исполнитель совершает соответствующее элементарное действие. Отказы исполнителя возникают, если команда вызывается пpи недопустимом для нее состоянии среды. В информатике универсальным исполнителем алгоритмов является компьютер.
СВОЙСТВА АЛГОРИТМА 1. Дискретность (прерывность, раздельность) - выполнение команд алгоритма последовательно, с точной фиксацией моментов окончания выполнения одной команды и начала выполнения следующей, т. е. алгоритм должен содержать последовательность указаний (команд), каждое из которых приводит к выполнению в исполнителе одного шага (действия) 2. Понятность (для исполнителя)— алгоритм не должен содержать предписаний, смысл которых может восприниматься исполнителем неоднозначно, т. е. запись алгоритма должна быть настолько четкой и полной, чтобы у исполнителя не возникало потребности в принятии каких-либо самостоятельных решений. Алгоритм всегда рассчитан на выполнение “не размышляющего” исполнителя.
3. Детерминированность (определенность и однозначность). Каждая команда алгоритма определяет однозначное действие исполнителя, и должно быть однозначно определено, какая команда выполняется следующей. То есть если алгоритм многократно применяется к одному и тому же набору исходных данных, то на выходе он получает каждый раз один и тот же результат. 4. Результативность — исполнение алгоритма должно закончиться за конечное число шагов, и при этом должен быть получен результат решения задачи. В качестве одного из возможных результатов может быть и установление того факта, что задача решений не имеет. 5. Массовость — алгоритм пригоден для решения любой задачи из некоторого класса задач, т. е. алгоритм правильно работает на некотором множестве исходных данных, которое называется областью применимости алгоритма.
ОСНОВНЫЕ ХАРАКТЕРИСТИКИ АЛГОРИТМОВ Временные характеристики – определяют длительность решения или временнýю сложность, которая выражается не в единицах времени, а в количестве операций; Объемные характеристики алгоритма определяют его информационную сложность, которая связана со сложностью описания, накопления и хранения исходных, промежуточных и результирующих данных при решении определенной задачи
ФОРМА ЗАПИСИ АЛГОРИТМА На практике наиболее распространены следующие формы представления алгоритмов: словесная (запись на естественном языке); Словесный способ не имеет широкого распространения, так как такие описания: • строго не формализуемы; • страдают многословностью записей; • допускают неоднозначность толкования отдельных предписаний. графическая (изображения из графических символов); программная (тексты на языках программирования).
АЛГОРИТМ РЕШЕНИЯ ЗАДАЧИ Например. Записать алгоритм нахождения наибольшего общего делителя (НОД) двух натуральных чисел (алгоритм Эвклида). Алгоритм может быть следующим: 1. задать два числа; 2. если числа равны, то взять любое из них в качестве ответа и остановиться, в противном случае продолжить выполнение алгоритма; 3. определить большее из чисел; 4. заменить большее из чисел разностью большего и меньшего из чисел; 5. повторить алгоритм с шага 2. Задание: определить с помощью этого алгоритма наибольший общий делитель чисел 125 и 75. Д. З. Пример. Составить словесный алгоритм, описывающий задачу “Звонок другу по телефону” назад
ЭЛЕМЕНТЫ БЛОК- СХЕМ
ГРАФИЧЕСКИЙ СПОСОБ ЗАПИСИ АЛГОРИТМОВ При графическом представлении алгоритм изображается в виде последовательности связанных между собой блоков, каждый из которых соответствует выполнению одного или нескольких действий. Такое графическое представление называется схемой алгоритма или блок-схемой. Название символа Обозначение и пример заполнения Пояснение Процесс Вычислительное действие или последовательность действий Решение Проверка условий Модификация Начало цикла Предопределенный процесс Вычисления по подпрограмме, стандартной подпрограмме Ввод-вывод в общем виде Пуск-останов Начало, конец алгоритма, вход и выход в подпрограмму Документ Вывод результатов на печать
БЛОК СХЕМА АЛГОРИТМА ПРОГРАММЫ назад
ЛИНЕЙНЫЕ АЛГОРИТМЫ Линейный алгоритм – это алгоритм, в котором блоки выполняются последовательно сверху вниз от начала до конца
РАЗВЕТВЛЯЮЩИЕСЯ АЛГОРИТМЫ В блок-схемах ветвление начинается на выходах элемента "Решение", с помощью которого в алгоритме выполняется проверка какого-либо условия. Количество ветвей тем больше, чем больше проверяемых условий.
ЦИКЛИЧЕСКИЕ АЛГОРИТМЫ Часто при решении задач приходится повторять выполнение операций по одним и тем же зависимостям при различных значениях входящих в них переменных и производить многократный проход по одним и тем же участкам алгоритма. Такие участки называются циклами. Алгоритмы, содержащие циклы, называется циклическими. Использование циклов существенно сокращает объем алгоритма. Различают циклы с наперед известным и наперед неизвестным количеством проходов. Пример 1. Рассмотрим пример алгоритма с циклом, имеющим наперед неизвестное количество проходов. Для этого решим следующую задачу. Указать наименьшее количество членов ряда натуральных чисел 1, 2, 3, . . . , сумма которых больше числа К.
Пример 2. Теперь приведем пример алгоритма, содержащего цикл с наперед известным количеством проходов (повторений). Алгоритм решает задачу накопления суммы положительных элементов одномерного массива Z длины N ( под длиной массива понимается количество его элементов ). Блоксхема алгоритма дана на рис
ПРОГРАММНЫЙ СПОСОБ ЗАПИСИ АЛГОРИТМОВ Чем отличается от других? Поэтому алгоритм, предназначенный для исполнения на компьютере, должен быть записан на понятном ему языке. И здесь на первый план выдвигается необходимость точной записи команд, не оставляющей места для произвольного толкования их исполнителем. Такой язык принято называть языком программирования, а запись алгоритма на этом языке —программой.
УРОВЕНЬ ЯЗЫКА ПРОГРАММИРОВАНИЯ В зависимости от степени детализации предписаний обычно определяется уровень языка программирования — чем меньше детализация, тем выше уровень языка. По этому критерию можно выделить следующие уровни языков программирования: Машинные языки и машинно-ориентированные языки — это языки низкого уровня, требующие указания мелких деталей процесса обработки данных.
Машинные (совокупность машинных команд, которая отличается количеством адресов в команде, назначением информации, задаваемой в адресах, набором операций, которые может выполнить машина и др); Машинно-оpиентиpованные (Язык ассемблера — это машинно-зависимый язык низкого уровня, в котором короткие мнемонические имена соответствуют отдельным машинным командам. Используется для представления в удобочитаемой форме программ, записанных в машинном коде);
Машинно-независимые (языки высокого уровня) имитируют естественные языки, используя некоторые слова разговорного языка и общепринятые математические символы. Эти языки более удобны для человека и делятся на: 1. процедурные (алгоритмические) (Basic, Pascal, C и др. ), которые предназначены для однозначного описания алгоритмов; для решения задачи процедурные языки требуют в той или иной форме явно записать процедуру ее решения;
2. логические (Prolog, Lisp и др. ), которые ориентированы не на разработку алгоритма решения задачи, а на систематическое и формализованное описание задачи с тем, чтобы решение следовало из составленного описания; 3. объектно-ориентированные (Object Pascal, C++, Java и др. ), в основе которых лежит понятие объекта, сочетающего в себе данные и действия над нами. Программа на объектно-ориентированном языке, решая некоторую задачу, по сути описывает часть мира, относящуюся к этой задаче. Описание действительности в форме системы взаимодействующих объектов естественнее, чем в форме взаимодействующих процедур.
ПРЕИМУЩЕСТВА АЛГОРИТМИЧЕСКИХ ЯЗЫКОВ ПЕРЕД МАШИННЫМИ Основные преимущества таковы: алфавит алгоритмического языка значительно шире алфавита машинного языка, что существенно повышает наглядность текста программы; набор операций, допустимых для использования, не зависит от набора машинных операций, а выбирается из соображений удобства формулирования алгоритмов решения задач определенного класса; формат предложений достаточно гибок и удобен для использования, что позволяет с помощью одного предложения задать достаточно содержательный этап обработки данных;
требуемые операции задаются с помощью общепринятых математических обозначений; данным в алгоритмических языках присваиваются индивидуальные имена, выбираемые программистом; в языке может быть предусмотрен значительно более широкий набор типов данных по сравнению с набором машинных типов данных. Таким образом, алгоритмические языки в значительной мере являются машинно-независимыми. Они облегчают работу программиста и повышают надежность создаваемых программ.
АЛГОРИТМ РЕШЕНИЯ ЗАДАЧИ Д. З. Пример. Задача “Звонок другу по телефону” подразделяется на следующие этапы (шаги): 1. Поднять телефонную трубку. 2. Если услышал гудок, то набрать номер друга, иначе конец решения задачи с отрицательным результатом (телефон неисправен). 3. Определить тип гудков: “вызов” или “занято”. Если “вызов”, перейти к шагу 4, если “занято”, перейти к шагу 6. 4. Дождаться 6 вызывающих гудков (конкретное число гудков в алгоритме для разных людей может быть различным). 5. Если за это время абонент не поднял трубку, то конец решения задачи с отрицательным результатом (абонент не отвечает). Иначе начать разговор (задача решена успешно). 6. Положить телефонную трубку; конец решения задачи с отрицательным результатом (абонент занят). Последовательность шагов, приведенная в примере 1, является алгоритмом решения задачи “Звонок другу по телефону”. Исполнитель этого алгоритма — человек. Объекты алгоритма — телефон и телефонные сигналы.