
Лекция 5 Основы теории алгоритмов.ppt
- Количество слайдов: 62
LOGO Лекция 5 Основы теории алгоритмов 5 1 Алгоритм и его свойства 5. 2 Свойства алгоритма 5. 3 Исполнитель алгоритма 5. 3. 1 Исполнитель, команды и среда исполнителя 5. 3. 2 Компьютер как исполнитель алгоритмов 5. 4 Способы записи алгоритмов 5. 4. 1 Текстовая (словесно-формульная) форма 5. 4. 2 Блок-схемы 5. 4. 3 Программы 5. 5 Виды алгоритмических структур 5. 5. 1 Линейные вычислительные алгоритмы (алгоритмы следования) 5. 5. 2 Ветвления 5. 5. 3 Циклы в вычислительных алгоритмах 5. 5. 4 Алгоритм выбора 5. 6 Технологии создания алгоритмов
Contents Человек ежедневно встречается с необходимостью следовать тем или иным правилам, выполнять различные инструкции и указания. любая инструкция - это алгоритм. Правила составления и оформления деловой бумаги - алгоритм. Правила написания художественного произведения, верстки текста, инструкция по пользованию фотоаппаратом или видеокамерой, монтажа фильмов, обработки фотографии в редакторе Photoshop - алгоритмы. Умение читать алгоритмы - необходимое условие для приспособления человека к условиям жизни в современном мире. 2
Contents В математике для решения типовых задач мы используем определенные правила, описывающие последовательности действий. Обычно любые инструкции и правила представляют собой последовательность действий, которые необходимо выполнить в определенном порядке. Для решения задачи надо знать, что дано, что следует получить и какие действия и в дано получить действия каком порядке следует для этого выполнить. порядке Предписание, определяющее порядок выполнения действий над данными с целью получения искомых результатов, есть алгоритм. АЛГОРИТМ — заранее заданное понятное и точное предписание возможному исполнителю совершить определенную ПОСЛЕДОВАТЕЛЬНОСТЬ действий для получения ПОСЛЕДОВАТЕЛЬНОСТЬ решения задачи за конечное число шагов. . Однако, кроме "умения" читать и исполнять чужие алгоритмы, для современного человека также важно умение составлять алгоритмы ("ПРЯМОЙ ИНЖИНИРИНГ") и восстанавливать алгоритмы и документацию по ИНЖИНИРИНГ написанной другим человеком программе ("ОБРАТНЫЙ ИНЖИНИРИНГ"). ИНЖИНИРИНГ 3
Contents АЛГОРИТМ — одно из фундаментальных понятий программирования, включающий совокупность правил и указаний, сформулированных на некотором языке и направленных на достижение определенной цели (пример — рецепт, программа). Понятие алгоритма, являющееся фундаментальным понятием математики и информатики, возникло задолго до появления вычислительных машин. Первоначально под словом алгоритм понимали способ выполнения арифметических действий над десятичными числами. В дальнейшем это понятие стали использовать для обозначения любой последовательности действий, приводящей к решению поставленной задачи. Слово алгоритм появилось в Средние века, когда европейцы познакомились со способами выполнения арифметических действий, описанными выдающимся узбекским математиком Мухаммедом бен Муса аль-Хорезми. Это слово происходит от Alhorithmi — латинского написания имени аль. Хорезми, который в своей книге "Об индийском счете" сформулировал правила записи натуральных чисел с помощью арабских цифр и правила действий над ними "столбиком", выполнения основных арифметических действий над многозначными числами. Именно эти правила в то время называли алгоритмами. 4
Contents Алгоритм это система формальных правил, четко и однозначно определяющая процесс решения поставленной задачи в виде конечной последовательности действий или операций направленных на достижение поставленной цели. В своем нынешнем смысле слово алгоритм часто ассоциировалось с алгоритмом Евклида, который алгоритмом Евклида представляет собой процесс нахождения наибольшего общего делителя (НОД) двух чисел. Стрелка “ ”, используемая при описании данного алгоритма, обозначает операцию замещения или присваивания. 5
Contents Выделяют три крупных класса алгоритмов: 1. вычислительные алгоритмы, вычислительные алгоритмы работающие со сравнительно простыми видами данных, такими как числа и матрицы, хотя сам процесс вычисления может быть долгим и сложным; 2. информационные алгоритмы, информационные алгоритмы представляющие собой набор сравнительно простых процедур, работающих с большими объемами информации (алгоритмы баз данных); 3. управляющие алгоритмы, управляющие алгоритмы генерирующие различные управляющие воздействия на основе данных, полученных от внешних процессов, которыми алгоритмы управляют. 6
Свойства алгоритма ПОНЯТНОСТЬ для исполнителя. Алгоритм не должен содержать для исполнителя предписаний, смысл которых может восприниматься исполнителем неоднозначно, т. е. запись алгоритма должна быть настолько четкой и полной, чтобы у исполнителя не возникало потребности в принятии каких-либо самостоятельных решений. Алгоритм всегда рассчитан на выполнение “не размышляющего” исполнителя. МОДУЛЬНОСТЬ, или ДИСКРЕТНОСТЬ (прерывность, раздельность). МОДУЛЬНОСТЬ Алгоритм можно представить в виде последовательности более элементарных алгоритмов (отдельных законченных команд). Только выполнив одно действие (команду), можно приступать к исполнению следующего. Это свойство алгоритма называется ДИСКРЕТНОСТЬЮ. Произвести каждое отдельное действие исполнителю предписывает специальное указание в записи алгоритма (команда). 7
Contents РЕЗУЛЬТАТИВНОСТЬ (или КОНЕЧНОСТЬ) — доступность результата решения РЕЗУЛЬТАТИВНОСТЬ КОНЕЧНОСТЬ задачи для пользователя, т. е. , алгоритм должен обеспечить выдачу результат решения задачи на печать, на экран монитора или в файл. Причем, исполнение алгоритма должно закончиться за конечное число шагов, и при этом должен за конечное число шагов быть получен результат решения задачи. В качестве одного из возможных результат решения задачи результатов может быть и установление того факта, что задача решений не имеет с выдачей соответствующего сообщения, либо неограниченно имеет продолжаться в течение времени, отведенного для исполнения алгоритма. продолжаться Свойство результативности содержит в себе свойство КОНЕЧНОСТИ — КОНЕЧНОСТИ завершение работы алгоритма за конечное число шагов. Последовательность правил, приведшая к бесконечному циклу, алгоритмом не является. ДЕТЕРМИНИРОВАННОСТЬ (ОПРЕДЕЛЕННОСТЬ и ОДНОЗНАЧНОСТЬ) — за ОДНОЗНАЧНОСТЬ конечное число шагов либо должен быть получен результат, либо доказано ег результат отсутствие. Каждая команда и правило алгоритма должны быть четкими, отсутствие четкими однозначными, не оставляющими места для произвола. Каждая команда однозначными алгоритма определяет однозначное действие исполнителя, и должно быть однозначное действие исполнителя однозначно определено, какая команда выполняется следующей. То есть если алгоритм многократно применяется к одному и тому же набору исходных данных, то на выходе он получает каждый раз один и тот же результат. 8
Contents МАССОВОСТЬ — алгоритм пригоден для решения любой задачи из МАССОВОСТЬ некоторого класса задач, т. е. алгоритм правильно работает на некотором множестве исходных данных, pазличающихся лишь исходными данными, которое называется ОБЛАСТЬЮ ПРИМЕНИМОСТИ АЛГОРИТМА. Это означает, если правильный результат по алгоритму получен для одних исходных данных, то правильный результат по этому же алгоритму должен быть получен и для других исходных данных, допустимых в данной задаче. Свойство массовости определяет скорее качество алгоритма, а не относится к обязательным свойствам (как дискретность, понятность и пр. ). Существуют алгоритмы, область применимости которых ограничивается единственным набором входных данных или даже отсутствием таковых (например, получение фиксированного числа верных цифр числа p). Правильнее говорить о том, что алгоритм должен быть применим к любым данным из своей области определения, и слово массовость не всегда подходит для описания такого свойства. ЭФФЕКТИВНОСТЬ - свойство, которое позволяет решить задачу за приемлемое для разработчика время. К параметру, характеризующему эффективность алгоритма, следует отнести также объем памяти компьютера, необходимый для решения задачи. Из перечисленных свойств лишь дискретность является обязательным 9 свойством алгоритма.
Contents Любой алгоритм существует не сам по себе, а предназначен для определенного исполнителя. Чтобы достичь цели, алгоритм должен быть кем-то или чем-то исполнен. ИСПОЛНИТЕЛЬ АЛГОРИТМА — это некоторая абстрактная или реальная система, способная выполнить действия, предписываемые алгоритмом. Это может быть человек, механическое устройство, робот, компьютер и другие, способные понимать и выполнять команды алгоритма. Когда программист составляет алгоритм, то при этом он является первым его исполнителем. Обычно исполнитель ничего не знает о цели алгоритма. Он выполняет все полученные команды, не задавая вопросов "почему" и "зачем". 10
Характеристики исполнителя СРЕДА — объекты, над которыми исполнитель может совершать действия. Данные и результаты, изображенные на рисунке - это объекты, относящиеся к среде исполнителя: 11
Contents КОМАНДЫ ИСПОЛНИТЕЛЯ — конечный перечень доступных пониманию указаний, который этот алгоритм будет выполнять Для каждой команды должны быть заданы условия применимости (в каких состояниях среды может быть выполнена команда) и описаны результаты выполнения команды. СИСТЕМА КОМАНД ИСПОЛНИТЕЛЯ (СКИ) - множество команд из некоторого строго заданного списка, которые может выполнять исполнитель; ЭЛЕМЕНТАРНЫЕ ДЕЙСТВИЯ – действия, выполняемые исполнителем после вызова команды; ОТКАЗЫ ИСПОЛНИТЕЛЯ. Возникают, если команда ИСПОЛНИТЕЛЯ вызывается при недопустимом для нее состоянии среды. 12
Contents Для каждого исполнителя набор допустимых действий (СКИ) всегда ограничен — не может существовать исполнителя, для которого любое действие является допустимым. Перефразированное рассуждение И. Канта обосновывает сформулированное утверждение следующим образом: “Если бы такой исполнитель существовал, то среди его допустимых действий было бы создание такого камня, который он не может поднять. Но это противоречит допустимости действия «Поднять любой камень» ”. Таким образом, алгоритм можно рассматривать как последовательность команд управления работой исполнителя (предписание исполнителю на выполнение последовательности действий). Свойства алгоритма (дискретность, понятность, определенность, дискретность понятность определенность конечность) обеспечивают возможность формальной работы конечность исполнителя. Отсюда следует, что исполнителем алгоритмов может быть автоматическое устройство. Класс задач, на решение которых быть автоматическое устройство. ориентирован исполнитель, определяется его системой команд. 13
Contents В методике обучения алгоритмизации принято выделять две категории исполнителей: • исполнители, работающие “в обстановке”, • исполнители, работающие с величинами. Для первой категории средой исполнителя может быть • лист (экран), на котором исполнитель формирует изображения (рисунки, чертежи и пр. ); • лабиринт, который исполнитель должен преодолеть; • предметы, которые исполнитель должен расставить в определенном порядке, • и т. п. Исполнители работы с величинами предназначены для обработки числовой или символьной информации. Исполнитель, в систему команд которого входят арифметические и логические операции, может решать вычислительные задачи. Входными данными и результатами для него являются числа. Универсальным исполнителем алгоритмов для работы с величинами является компьютер. 14
Компьютер как исполнитель алгоритмов В информатике универсальным исполнителем алгоритмов является компьютер Составление любой программы для компьютера начинается с построения алгоритма. Всякий алгоритм (программа) составляется для конкретного исполнителя, в рамках его системы команд. ЭВМ — исполнитель алгоритмов. Как известно, всякий алгоритм (программа) составляется для конкретного исполнителя в рамках его системы команд. Точнее говоря, исполнителем является комплекс ЭВМ + Система программирования (СП). ЭВМ + Система программирования Программист составляет программу на том языке, на который ориентирована СП. Иногда в литературе такой комплекс называют виртуальной ЭВМ 15
Contents Независимо от того, на каком языке программирования будет написана программа, алгоритм решения любой задачи на ЭВМ может быть составлен из команд присваивания Основным элементарным действием в вычислительных алгоритмах является присваивание значения переменной величине. Команда присваивание значения переменной величине присваивания используется для получения промежуточных и конечных промежуточных конечных величин. Если значение константы определено видом ее записи, то величин переменная величина получает конкретное значение только в результате присваивания. Три основных свойства команды присваивания: Три основных свойства • пока переменной не присвоено значение, она остается неопределенной; • значение, присвоенное переменной, сохраняется в ней вплоть до выполнения следующей команды присваивания этой переменной; • новое значение, присваиваемое переменной, заменяет ее предыдущее значение. Команда присваивания обозначает следующие действия, выполняемые компьютером: • вычисляется выражение. • полученное значение присваивается переменной. 16
Contents Присваивание может осуществляться с помощью команды. • ввода. С помощью команды ввода присваиваются значения исходных данных; • вывода. С помощью этой вывода команды результаты выводятся на экран или на устройство печати на бумагу; Для управления компьютером можно придумать формальный язык описания алгоритмов. Такие языки называются “ЯЗЫКИ ПРОГРАММИРОВАНИЯ”, а сам ПРОГРАММИРОВАНИЯ алгоритм, записанный на таком языке, — ПРОГРАММОЙ 17
Способы записи алгоритмов В зависимости от степени детализации, поставленных целей, методов и технических средств решения задачи используются различные формы представления алгоритмов. На практике наиболее распространены следующие способы: • словесный (запись на естественном языке) - содержание этапов словесный вычислений задается на естественном языке в произвольной форме с требуемой детализацией. При этом способе записи алгоритма отсутствует наглядность вычислительного процесса, так как нет достаточной формализации. • текстово-формульная запись — задание инструкций с использованием текстово-формульная запись математических символов и выражений в сочетании со словесными пояснениями. При использовании этого способа может быть достигнута любая степень детализации более наглядно, но не строго формализовано. • блок-схема (изображения из графических символов)— это графическое блок-схема изображение алгоритма, в котором каждый этап процесса обработки данных представляется в виде геометрических фигур (блоков), имеющих определенную конфигурацию в зависимости от характера выполняемых операций, 18
Contents • программа на алгоритмическом языке — набор символов и правил программа на алгоритмическом языке образования и истолкования конструкций из этих символов для записи алгоритмов используется для реализации алгоритмов на ПК. • псевдокод — система обозначений и правил, предназначенных для псевдокод единообразной записи алгоритмов • структурные диаграммы — могут использоваться в качестве структурных структурные диаграммы блок-схем, для показа межмодульных связей, для отображения структур данных и систем обработки данных. Существуют следующие структурные диаграммы: диаграммы Насси — Шнейдермана, Варнье, Джексона, и др. • нормальный алгоритм Маркова, нормальный алгоритм Маркова • машина Тьюринга, машина Тьюринга • машина Поста 19
Contents Многообразие форм записи алгоритмов обусловлено разными целями работы с алгоритмами: • математики, доказывая правильность алгоритма, естественно, будут работать с формальным представлением алгоритма, например, в виде нормального алгоритма Маркова. • учитель, объясняя сложный алгоритм в школе, может для наглядности использовать запись в виде блок-схемы. • опытные программисты запишут алгоритм в виде программы. Для составления алгоритма следует: • осмыслить условия задачи. Выяснить, что является исходными данными, данными какие из них допускаются в задаче, что является результатом; результатом • составить строгую формулировку задачи по следующей форме: задача, задача аргументы, ограничения, результаты; аргументы ограничения результаты • записать описательную часть алгоритма и наметить план решения, ; описательную план • переписать алгоритм, используя допустимые для предполагаемого переписать исполнителя команды, оставляя неясные места; • многократно переписывать алгоритм, каждый раз уделяя внимание многократно переписывать вопросам, оставшимся от предыдущего шага, более мелким деталям, пока не получится текст, по которому можно писать программу для исполнителя. 20
Текстовая (словесноформульная) форма Представляет собой описание последовательных этапов обработки данных. Обычно используется для алгоритмов, ориентированных на исполнителя-человека. Алгоритм задается в произвольном изложении на естественном языке, возможно, с использованием формул. Команды такого алгоритма выполняются в естественной последовательности, если не оговорено противного. Словесный способ записи алгоритмов допускает неоднозначность толкования отдельных предписаний, особенно если система команд исполнителя того или иного алгоритма (конкретного человека) четко не фиксирована. Словесный способ не имеет широкого распространения, так как такие описания: • строго не формализуемы; • страдают многословностью записей; • допускают неоднозначность толкования отдельных предписаний. 21
Такой способ широко распространен при описании решения математических, химических, физических и бытовых задач. В математических химических физических бытовых решении этих задач практически отсутствуют циклические алгоритмические конструкции Алгоритмическая конструкция ветвление записывается либо с ветвление помощью одного предложения: “Если дискриминант меньше нуля, то у уравнения нет решения, в противном случае …”, либо с помощью указания, какой из пунктов алгоритма нужно выполнять в том или ином случае: “Если при звонке по телефону гудки короткие, то п. 4, а если длинные, то п. 6”. 22
Блок-схемы Это графическое описание алгоритмов как последовательности действий. Графический способ представления Графический способ алгоритмов является более компактным и наглядным по сравнению со словесным. Блок- схема, или диаграмма, кодирует Блок- схема диаграмма алгоритм наглядными графическими средствами - алгоритм изображается в виде последовательности связанных между собой функциональных блоков, каждый из которых соответствует выполнению одного или нескольких действий. Порядок выполнения действий указывается стрелками Написание алгоритмов с помощью блоксхем регламентируется ГОСТом. 23
Contents В блок-схеме каждому типу действий (вводу исходных данных, вычислению значений выражений, проверке условий, управлению повторением действий, окончанию обработки и т. п. ) соответствует геометрическая фигура, представленная в виде блочного символа. Блочные символы соединяются линиями переходов, определяющими очередность выполнения действий (рис. ): • овалов (кружков), кодирующих начало и конец, вход и выход из алгоритма; • параллелограммов, описывающих ввод и параллелограммов вывод данных(носитель которых не определен); • прямоугольников, в которых описывается прямоугольников процесс обработки данных любого вида (действия с данными); • ромбов, решение или функция ромбов переключательного типа, например проверяемые алгоритмом условия. 24
Contents Блок-схемы, как и алгоритмы, имеют иерархическую структуру - фигуры соединяются линиями переходов, определяющими очередность выполнения действий. В блок-схемах всегда есть начало и конец, обозначаемые конец эллипсами, между ними — последовательность шагов алгоритма, шагов соединенных стрелками. Шаги бывают безусловными (изображаются прямоугольниками, безусловными параллелограммами) и условными (изображаются ромбами). условными Из ромба всегда выходят две стрелки — одна означает стрелки дальнейший путь, в случае выполнения условия (обозначается обычно словом “да” или “+”), другая — невыполнение (слово “нет” или “–”). Ввод с клавиатуры или вывод на экран значения выражения изображается параллелограммом. Команда, выполняющая обработку действий (обычно команда присваивания), изображается в прямоугольнике. 25
Contents При выполнении алгоритма по его схеме движется исполнитель, который находится в каждый момент в каком-то месте алгоритма, называемом активной точкой. Для проверки правильности простого алгоритма достаточно его протестировать, т. е. пройти алгоритм, моделируя исполнителя: протестировать • При тестировании алгоритма берут простые входные данные и по ним рассчитывают результат. • Затем вручную проходят алгоритм и получают его выходные данные. • Если полученные выходные данные совпали с рассчитанным результатом, то алгоритм, может быть, построен правильно. Простейшее тестирование производится путем использования контрольных точек. Контрольные точки ставятся во всех критических местах, везде, где вводятся или изменяются данные, т. е. после каждого ввода и каждого действия алгоритма (на блок-схеме контрольные точки ставятся после всех параллелограммов и прямоугольников, кроме вывода данных). Исполнитель начинает выполнять алгоритм с его начала. При движении по алгоритму его активная точка проходит сначала контрольную точку A, затем B, потом C и так далее. 26
Графический способ представления алгоритмов является более компактным и наглядным по сравнению со словесным. Однако сохраняет и некоторые недостатки. С помощью блок-схем можно записывать в том числе и неформальные (например, бытовые) алгоритмы, содержание функциональных блоков при этом остается относительно произвольным. Отсутствие явных ограничений на правила перехода в блок-схемах приводит к тому, что в них не всегда можно явно выделить базовые алгоритмические конструкции, т. е. алгоритм, записанный таким образом, может не соответствовать требованиям структурного программирования. Наконец, обозримыми являются блок-схемы только для небольших алгоритмов. При составлении блок-схем надо внимательно следить за структурностью алгоритма, т. е. блок-схема произвольного алгоритма должна быть композицией схем основных алгоритмических конструкций, в противном случае программирование подобного алгоритма будет затруднено. 27
Программы При записи алгоритма в словесной форме, в виде блок-схемы или на псевдокоде допускается определенный произвол при изображении команд. Вместе с тем такая запись точна настолько, что позволяет человеку понять суть дела и исполнить алгоритм. Однако на практике в качестве исполнителей алгоритмов используются специальные автоматы — компьютеры. Поэтому алгоритм, предназначенный для исполнения на компьютере, должен быть записан на понятном ему языке. И здесь на первый план выдвигается необходимость точной записи команд, не оставляющей места для произвольного толкования их исполнителем. Вместе с тем такая запись точна настолько, что позволяет человеку понять суть дела и исполнить алгоритм. Алгоритм, предназначенный для того или иного исполнителя, должен быть записан на “понятном” ему языке, c использованием только СКИ. И здесь на первый план выдвигается необходимость точной записи команд, не оставляющей места для произвольного толкования их исполнителем. 28
Contents Следовательно, язык для записи алгоритмов должен быть формализован. Такой язык принято называть ЯЗЫКОМ ПРОГРАММИРОВАНИЯ, а запись алгоритма на этом языке — ПРОГРАММОЙ для компьютера. Любую программу можно написать, используя комбинации трех базовых структур: • следования или последовательности операторов; • ветвления или условного оператора; • повторения или оператора цикла. Программа, составленная из канонических структур, называется РЕГУЛЯРНОЙ ПРОГРАММОЙ, т. е. имеющей один вход и один выход. ПРОГРАММОЙ Программами являются и запись нормальных алгоритмов Маркова, и машина Тьюринга для решения конкретной задачи. 29
Псевдокоды Псевдокод занимает промежуточное место между естественным и формальным языками. С одной стороны, он близок к обычному естественному языку, поэтому алгоритмы могут на нем записываться и читаться как обычный текст. С другой стороны, в псевдокоде используются некоторые формальные конструкции и математическая символика, что приближает запись алгоритма к общепринятой математической записи. Псевдокод - это полуформализованные описания алгоритмов на условном алгоритмическом языке, включающие в себя как элементы языка программирования, так и фразы естественного языка, общепринятые математические обозначения и др. В псевдокоде не приняты строгие синтаксические правила для записи команд, присущие формальным языкам, что облегчает запись алгоритма на стадии его проектирования и дает возможность использовать более широкий набор команд, рассчитанный на абстрактного исполнителя. Однако в псевдокоде обычно имеются некоторые конструкции, присущие формальным языкам, что облегчает переход от записи на псевдокоде к записи алгоритма на формальном языке. Единого или формального определения псевдокода не существует, поэтому возможны различные псевдокоды, отличающиеся набором служебных слов и основных (базовых) конструкций. 30
Виды алгоритмических структур В зависимости от цели, начальных условий задачи, путей ее решения, действий разработчика алгоритмов подразделяются : • механические, или детерминированные (жесткие). Задает определенные механические детерминированные действия, обозначая их в единственной последовательности, единственной последовательности обеспечивающей однозначный требуемый (искомый) результат в том случае, если выполняются условия процесса, для которых разработан алгоритм. К таким алгоритмам относятся алгоритмы работы машин, станков, двигателей и т. п. • гибкие, или стохастические (вероятностные и эвристические). гибкие стохастические • вероятностный (стохастический) алгоритм предлагает программу вероятностный решения задачи несколькими путями или способами, приводящими к несколькими путями достижению результата. • эвристический алгоритм (от греческого слова «эврика» ) — это такой эвристический алгоритм, в котором достижение конечного результата однозначно не определено, так же как не обозначена вся последовательность определено действий. В этих алгоритмах используются универсальные логические процедуры и способы принятия решений, основанные на аналогиях, процедуры способы принятия решений ассоциациях и прошлом опыте решения похожих задач. При реализации эвристических алгоритмов большую роль играет интуиция разработчика. 31
Contents Схемы основных алгоритмических структур: а — линейный алгоритм; б — разветвляющийся алгоритм; в, г — циклические алгоритмы с предусловием и постусловием 32
Contents В теории алгоритмов доказано, что любой, сколь угодно сложный алгоритм может быть составлен из трех отдельных базовых алгоритмических структур: линейной, ветвления и цикла. структур линейной ветвления цикла Характерной особенностью базовых структур является наличие в них одного входа и одного выхода. • последовательные — набор команд, выполняемых последовательно друг за другом, без их повторения или пропуска некоторых действий. Обычно стремятся к тому, чтобы алгоритм имел линейную структуру. • ветвящиеся — алгоритм, содержащий хотя бы одну проверку условия, в результате которой обеспечивается переход на один из возможных вариантов решения. • циклические — алгоритм, предусматривающий многократное повторение одного и того же действия над новыми исходными данными. К циклическим алгоритмам сводится большинство методов вычислений и перебора вариантов. , • вспомогательный (подчиненный)— алгоритм, ранее разработанный и целиком используемый при алгоритмизации конкретной задачи. . 33
Линейные вычислительные алгоритмы Алгоритм (или его часть) реализован через последовательную алгоритмическую конструкцию (следование), если каждый шаг алгоритма выполняется один раз, причем после каждого i-го шага выполняется (i + 1)-й шаг, если i-й шаг — не конец алгоритма. СЛЕДОВАНИЕ — последовательность функциональных блоков, соединенных стрелками. Не имеет специальной формы записи, а выражается в том, что входящие в него шаги записываются последовательно, а управление после выполнения очередного шага этой конструкции переходит к следующему. 34
Contents Самая общая блоксхема решения любой задачи • в текстовой форме записи — это в текстовой форме записи просто последовательная запись пунктов, соответствующих шагам алгоритма. • в блок-схемах — это в блок-схемах последовательная запись блоков действия, соединенных стрелкой, направленной от предыдущего блока к следующему. • на процедурном языке программирования данная программирования конструкция выражается просто последовательной записью инструкций (операторов языка программирования). Такой алгоритм или часть алгоритма еще называют ЛИНЕЙНЫМ. 35
Contents В простых задачах единственное действие «полный алгоритм решения задачи» всегда можно заменить последовательн остью трех действий. Типовая блок-схема алгоритма линейной структуры. Поскольку вместо прямоугольника, обозначающего действие, можно подставить снова эту же блок-схему, и т. д. , то последовательность прямоугольников может быть сколь угодно большой Линейный алгоритм не обладает важнейшим свойством, предъявляемым к качественным алгоритмам, — универсальностью по отношению к исходным данным. Какими бы ни были значения исходных данных, алгоритм должен данным приводить к определенному результату и завершать работу. Результатом может быть число, или сообщение о том, что при определенных данных задача решения не имеет. Данное свойство называют результативностью алгоритма (в любом случае должен быть получен какой-то результат). 36
Ветвления Повышение результативности обеспечивается использованием ветвящейся алгоритмической конструкции (ветвления), если на каком-либо ветвления шаге последовательное выполнение алгоритма прерывается, и выбор следующего шага определяется входными данными алгоритма. ВЕТВЛЕНИЕ — проверка логического условия. В текстовой форме записи обычно выглядит так: если выполнено такое-то условие, то сделать то-то (или перейти на такой-то пункт алгоритма), в противном случае сделать то-то (или перейти на такой-то пункт алгоритма). Обеспечивает в зависимости от результата проверки условия (да или нет) выбор одного из альтернативных путей работы алгоритма. Каждый из альтернативных путей ведет к общему выходу, так что работа алгоритма будет продолжаться независимо от того, какой путь будет выбран. Структура ветвление существует в четырех основных вариантах: • • если—то; если—то—иначе; выбор—иначе. 37
Contents В блок-схемах для реализации конструкции ветвление предназначен специальный блок условия, имеющий форму ромба. Данный блок имеет один вход и два выхода, соответствующих истинному или ложному значению логического выражения, записанного в этом блоке. В ЯП данная конструкция реализуется через УСЛОВНЫЙ ОПЕРАТОР. ВЕТВЛЕНИЕ задает выполнение либо одной, либо другой группы операторов в зависимости от выполнения какого-либо условия (в зависимости от истинности или ложности соответствующего логического выражения). Затем исполнение алгоритма выходит на общее продолжение. Для конкретных входных данных ветвящаяся алгоритмическая конструкция сводится к Типовая блок-схема алгоритма последовательной алгоритмической конструкции. разветвляющейся структуры 38
Contents В алгоритме разветвляющейся структуры действия записываются не подряд, а в зависимости от выполнения (невыполнения) некоторого условия. Вначале проверяется условие (вычисляется отношение, логическое выражение). Если условие истинно, то выполняется серия 1 — последовательность команд, на которую указывает стрелка с надписью «да» (положительная ветвь). В противном случае выполняется серия 2 (отрицательная ветвь). В АЯ условие записывается после служебного слова если, положительная ветвь — после слова то, отрицательная — после слова иначе. Если на ветвях одного ветвления содержатся другие ветвления, то такой алгоритм имеет структуру вложенных ветвлений 39
Contents Ветвление бывает полным и неполным. В случае неполного ветвления неполным отсутствует действие, выполняемое при ложном значении логического выражения. Полная форма представления блока ветвления Краткая форма представление блока ветвления 40
Циклы в вычислительных алгоритмах Алгоритм реализован с использованием циклической алгоритмической конструкции, если некая, подряд идущая группа шагов алгоритма, выполняется несколько раз. Обеспечивает многократное выполнение некоторой совокупности действий, которая называется телом цикла. Количество повторений либо фиксировано, либо зависит от входных данных алгоритма. Любая циклическая алгоритмическая конструкция содержит в себе элементы ветвящейся алгоритмической конструкции: после очередного выполнения группы шагов, входящих в цикл (которое называется шагом цикла, или итерацией), проверяется некоторое условие, формируемое в процессе вычислений. В зависимости от значения этого условия цикл либо завершается, либо начинается выполнение следующего шага цикла. 41
Contents Блок-схема элементарного алгоритма «выбор» : пока условие выполняется, действие исполняется Элементарный цикл — это повторение одного и того же действия, пока выполняется условие. Когда исполнитель доходит до ромба с условием, то решает, выполнить действие или пройти мимо и больше сюда не возвращаться. Если условие выполняется, исполнитель выполняет действие и возвращается обратно на ромб с условием. Естественно, что действие должно, помимо прочего, изменять условие. Когда условие перестает выполняться, исполнитель продолжает движение дальше по алгоритму. 42
Contents Различаются циклы • итерационные - с неизвестным числом повторений () • цикл с параметром - с известным числом повторений (). с параметром Повторение — многократное выполнение фрагментов алгоритма Повторение (программы). Итерационным называется цикл, число повторений которого не Итерационным задается, а определяется в ходе выполнения цикла. В этом случае одно повторение цикла называется итерацией Циклическая конструкция в явном виде во многих формах записи алгоритмов, к сожалению, отсутствует. На практике она реализуется с помощью проверки условия и управляющей конструкции проверки условия перехода. В текстовой форме записи переход осуществляется на перехода тот же самый пункт или пункт с меньшим номером. В блок-схемах переход с помощью стрелок осуществляется на часть схемы, по которой выполнение алгоритма уже ранее проходило. 43
Contents В ЯП циклическая конструкция реализуется через различные операторы цикла: • “с предусловием”, • “с постусловием”, • “с параметром”. На самом деле для реализации любой циклической конструкции хватило бы и одного вида оператора, например, с “предусловием”. Различные операторы циклов вводятся в тот или иной ЯП только для удобства программистов. 44
Цикл с предусловием В алгоритме с циклической структурой может использоваться структурная команда цикл-пока, или цикл с предусловием. цикл-пока цикл с предусловием Действия внутри этого цикла повторяются пока выполняется условие в блоке ветвления, причем сначала проверяется условие, а затем выполняется действие. Действие А будет повторяться до тех пор, пока значение предиката Р будет оставаться истинным. Поэтому в действии А должны изменяться значения переменных, от которых зависит Р, в противном случае произойдет зацикливание. Когда условие становится ложным, цикл заканчивает выполнение. 45
В цикле с постусловием проверка условия выхода из цикла выполняется после очередного действия. Цикл "для" является модификацией цикла "пока" для ситуации, когда заранее известно количество повторений некоторых действий. Запись в блоке заголовка цикла на рис. показывает пример описания заголовка цикла, в котором действия повторяются столько раз, сколько целых значений приобретает параметр цикла i от своего начального значения 1 до конечного N с шагом 1. Обычно шаг не указывается, если он равен 1. 46
Алгоритм выбора Блок-схема элементарного алгоритма «выбор» : если условие выполняется, то исполнитель выбирает действие 1, если нет — то 2 Элементарный алгоритм выбора — это выбор по условию одного действия из двух. Когда исполнитель доходит до ромба с условием, то он выбирает среди двух действий. Если условие выполняется, исполнитель осуществляет переход к прямоугольнику действия по стрелке с пометкой «да» , иначе — к действию «нет» . После выполнения действия, определенного условием, исполнитель продолжает движение дальше по алгоритму. Этот элементарный алгоритм изображается в виде блок-схемы из двух прямоугольников и одного ромба (рис. 25). Следует иметь в виду, что вместо прямоугольников можно подставлять любые элементарные алгоритмы. 47
Технологии создания алгоритмов (технология программирования) Для успешного создания программ требуется использовать технологию программирования. Технология состоит из набора правил, которые программирования необходимо строго соблюдать. Разработке алгоритма предшествуют такие этапы, как: • Формализация предполагает замену словесной формулировки решаемой задачи краткими символьными обозначениями, близкими к обозначениям в ЯП или к математическим. • Моделирование задачи является важнейшим этапом, целью которого Моделирование является поиск общей концепции решения. Обычно моделирование выполняется путем выдвижения гипотез решения задачи и их проверке любым рациональным способом (прикидочные расчеты, физическое моделирование и т. д. ). Результатом каждой проверки является либо принятие гипотезы, либо отказ от нее и разработка новой. Одним из правил является проектирование программы, заключающееся в проектирование предварительном построении ее алгоритма. Существуют алгоритмы работы с величинами — числовыми, символьными, логическими и алгоритмы работы «в обстановке» (например робот). 48
В зависимости от объекта структурирования различают: функционально-ориентированные методы. Это последовательное методы разложение задачи или целостной проблемы на отдельные, достаточно простые составляющие, обладающие функциональной определенностью. В первую очередь учитываются заданные функции обработки данных, в соответствии с которыми определяется состав и логика работы (алгоритмы) отдельных компонентов программного продукта. С изменением содержания функций обработки, их состава, соответствующего им информационного входа и выхода требуется перепроектирование программного продукта. методы структурирования данных. Для методов структурирования данных осуществляется анализ, структурирование и создание моделей данных, применительно к которым устанавливается необходимый состав функций и процедур обработки. Программные продукты тесно связаны со структурой обрабатываемых данных, изменение которой отражается на логике обработки (алгоритмах) и обязательно требует перепроектирования программного продукта. 49
Основные принципы разработки алгоритмов Принцип поэтапной детализации алгоритма (проектирование сверхувниз, нисходящее проектирование): • сложная задача разбивается на простые, функционально управляемые задачи, каждая задача имеет один вход и один выход; управляющий поток программы состоит из совокупности элементарных функциональных подзадач ( модули). Таким образом, алгоритм является деревом модулей: одни модули вызывают другие модули, начиная с самого верхнего первого модуля, называемого корневым модулем, или головной программой. ; • управляющие структуры просты, т. е. логическая задача должна состоять из минимальной, функционально полной совокупности достаточно простых управляющих структур; • программа разрабатывается поэтапно, на каждом этапе решается ограниченное число точно поставленных задач. В результате строится иерархическая схема, отражающая состав и взаимоподчиненность отдельных функций, в виде укрупненных блоков (разбиение задачи на подзадачи) и их постепенную детализацию, которая носит название ФУНКЦИОНАЛЬНАЯ СТРУКТУРА АЛГОРИТМА (ФСА) приложения. 50
Contents Принцип "от главного к второстепенному", предполагающий составление алгоритма, начиная с главной конструкции. При этом, часто, приходится "достраивать" алгоритм в обратную сторону, например, от середины к началу. Принцип черного ящика. При проектировании сколько-нибудь больших алгоритмов невозможно держать в памяти одновременно детали всех модулей алгоритма. Если модуль составлен правильно, то с ним можно обращаться как с черным ящиком. Принцип черного ящика означает, что не имеет значения, как модуль выполняет свою функцию, какие алгоритмы скрыты у него внутри. Это не важно для остальных модулей алгоритма. Для модулей, которые обращаются к этому модулю, имеет значение только следующее: • какова функция модуля, т. е. что он делает; • описание входных и выходных данных модуля. Правильное проектирование алгоритмов позволяет абстрагироваться от внутренней структуры модулей и рассматривать при сборке полного алгоритма только функции модулей. 51
Contents Принцип структурирования. Является технологией простого и прозрачного создания алгоритмов. Это единственный способ строить алгоритмы быстро и в последующем легко вносить в них изменения. Структурное программирование позволяет проектировать алгоритмы только из трех элементарных алгоритмов. т. е. использования только типовых алгоритмических структур при построении алгоритма. Нетиповой структурой считается, например, циклическая конструкция, содержащая в теле цикла дополнительные выходы из цикла. В программировании нетиповые структуры появляются в результате злоупотребления командой безусловного перехода (Go. To). При этом программа хуже читается и труднее отлаживается. В основе структурного проектирования лежит последовательная декомпозиция, целенаправленное структурирование на отдельные составляющие. Методы структурного проектирования представляют собой комплекс технических и организационных принципов системного проектирования. Типичными методами структурного проектирования являются: • нисходящее проектирование, кодирование и тестирование программ; • модульное программирование; • структурное проектирование (программирование) и др. 52
Contents Принцип объектного подхода при разработке алгоритмов и программ предполагает: • объектно-ориентированный анализ предметной области - анализ предметной области и выделение объектов, определение свойств и методов обработки объектов, установление их взаимосвязей. ; • объектно-ориентированное проектирование - соединяет процесс объектной декомпозиции и представления с использованием моделей данных проектируемой системы на логическом и физическом уровнях, в статике и динамике. . 53
Запись алгоритмов Алгоритмы должны быть записаны на алгоритмическом языке, т. е. представлены в виде • графического описания • словесного описания, • таблицы, • последовательности формул, • на алгоритмическом языке, • языке программирования. Иногда их записывают на псевдокодах (специальных языках). Алгоритмический язык — это система обозначений и правил для единообразной и точной записи алгоритмов и их исполнения. Язык записи алгоритма должен быть понятным для человека. 54
Наиболее распространен специальный графический язык описания алгоритмов — структурные схемы. Схема в схемы стандарте определена как «графическое представление определения, анализа или метода решения задачи, в котором используются символы для отображения операций, данных, потока, оборудования и т. д. » Схемы обеспечивают наглядность, читаемость, отображение последовательности выполняемых процессов. Существуют схемы: v данных, v программ, v работы системы, v взаимодействия программ, v ресурсов системы. 55
СХЕМА — это ориентированный граф, стрелками (или линиями) указывающий порядок исполнения команд алгоритма, а вершины (события) такого графа представлены геометрическими фигурами, которые называются символами. В графической форме вершины могут быть одного из трех типов: v функциональная (один вход и один выход); v предикатная (один вход и два выхода); v объединяющая (два выхода и один вход, передающий управление от первого из двух выходов). Стандарт на этот специальный графический язык для записи дан в ЕСПД (Единая система программной документации, стандарт — ГОСТ 19. 701 -90). 56
57
58
59
60
61
LOGO Клиент либо жив, либо мертв. Если клиент мертв, то его либо можно оживить, либо нельзя. А. Толстой. Золотой ключик. Когда программист ложится спать, то на тумбочку рядом с кроватью он ставит два стакана: один с водой, другой пустой. Стакан с водой на тот случай, если пить захочется, пустой — если не захочется. Анекдот.