logo search
Lektsii_Informatika_Ekonom

Алгоритмизация и программирование. Алгоритмизация

Понятие алгоритма: свойства, исполнители, ски. Способы записей алгоритмов. Основные алгоритмические конструкции. Вспомогательные алгоритмы. Процесс создания и отладки алгоритма. Примеры типовых алгоритмов.

  1. Запись программы на метаязыке. Метаязык — это любой способ описания последовательности дей­ствий, понятный людям. Когда человеку, заблудившемуся в незнако­мом городе, объясняют, как куда-то пройти, фактически ему дают про­грамму действий на метаязыке.

Алгоритм — это формальное описание способа решения задачи путем разбиения ее на последовательность элементарных опе­раций. Слово «формальное» означает, что описание должно быть абсо­лютно полным и учитывать все возможные ситуации, которые могут возникнуть по ходу решения. Понятие алгоритма - одно из фундаментальных понятий информатики. Алго­ритмизация наряду с моделированием выступает в качестве общего метода инфор­матики. К реализации определенных алгоритмов сводятся процессы управления в различных системах, что делает понятие алгоритма близким и кибернетике.Алгоритмы являются объектом систематического исследования пограничной между математикой и информатикой научной дисциплины, примыкающей к математической логике - теории алгоритмов.Особенность положения состоит в том, что при решении практических задач, предполагающих разработку алгоритмов для реализации на эвм, и тем более при использовании на практике информационных технологий, можно, как правило, не опираться на высокую формализацию данного понятия. Поэтому представляется целесообразным познакомиться с алгоритмами и алгоритмизацией на основе содержательного толкования сущности понятия алгоритма и рассмотрения основ­ных его свойств. При таком подходе алгоритмизация выступает как набор определенных практических приемов, особых специфических навыков рациональ­ного мышления в рамках заданных языковых средств. Само слово «алгоритм» происходит от algorithm - латинской формы написания имени великого математика ix века мухаммеда аль-хорезми, который сформулировал правила выполнения арифметических действий. Первоначально под алгоритмами и понима­ли только правила выполнения четырех арифметических действий над многознач­ными числами. Понятие исполнителя невозможно определить с помощью какой-либо формали­зации. Исполнителем может быть человек, группа людей, робот, станок, компью­тер, язык программирования и т.д. Важнейшим свойством, характеризующим любого из этих исполнителей, является то, что исполнитель умеет выполнять некоторые команды. Вся совокуп­ность команд, которые данный исполнитель умеет выполнять, называется системой команд исполнителя (ски).Одно из принципиальных обстоятельств состоит в том, что исполнитель не вникает в смысл того, что он делает, но получает необходимый результат. В таком случае говорят, что исполнитель действует формально, т.е. Отвлекается от содержания поставленной задачи и только строго выполняет некоторые правила, инструкции.Это важная особенность алгоритмов. Наличие алгоритма формализует процесс решения задачи, исключает рассуждение исполнителя. Использование алгоритма дает возможность решать задачу формально, механически исполняя команды алгоритма в указанной последовательности. Целесообразность предусматриваемых алгоритмом действий обеспечивается точным анализом со стороны того, кто составляет этот алгоритм.Введение в рассмотрение понятия «исполнитель» позволяет определить алго­ритм как понятное и точное предписание исполнителю совершить последователь­ность действий, направленных па достижение поставленной цели. Наиболее распространенными и привычными являются алгоритмы работы с величинами - числовыми, символь­ными, логическими и т.д.Алгоритм, составленный для некоторого исполнителя, можно представить раз­личными способами: с помощью графического или словесного описания, в виде таблицы, последовательностью формул, записанным на алгоритмическом языке (языке программирования). Остановимся на графическом описании алгоритма, называемом блок-схемой. Этот способ имеет ряд преимуществ благодаря наглядно­сти, обеспечивающей, в частности, высокую «читаемость» алгоритма и явное отображение управления в нем.Прежде всего, определим понятие блок-схемы. Блок-схема - это ориентирован­ный граф, указывающий порядок исполнения команд алгоритма; вершины такого графа могут быть одного из трех типов (рис. 1).

рис. 1.Три типа вершин графа

на рис. 1 изображены «функциональная» (а) вершина (имеющая один вход и один выход); «предикатная» (б) вершина, имеющая один вход и два выхода (в этом случае функция р передает управление по одной из ветвей в зависимости от значе­ния р (т, т.е. True, означает «истина», f, т.е. False - «ложь»); «объединяющая» (в) вершина (вершина «слияния»), обеспечивающая передачу управления от одного из двух входов к выходу. Иногда вместо т пишут «да» (либо знак +), вместо f - «нет» (либо знак -).

Из данных элементарных блок-схем можно построить четыре блок-схемы (рис. 2), имеющих особое значение для практики алгоритмизации.

Рис. 2. Основные алгоритмические структуры

На рис. 2 изображены следующие блок-схемы: а - композиция, или следова­ние; б - альтернатива, или развилка, в и г - блок-схемы, каждую из которых назы­вают итерацией, или циклом (с предусловием (в), с постусловием (г)). S1 и s2 представляют собой в общем случае некоторые серии команд для соответствующего исполнителя, б — это условие, в зависимости от истинности (т) или ложности (f) которого управление передаётся по одной из двух ветвей. Можно доказать, что для составления любого алгоритма достаточно представленных выше четырех блок-схем, если пользоваться их последовательностями и/или суперпозициями.Блок-схема «альтернатива» может иметь и сокращенную форму, в которой от­сутствует ветвь s2 (рис.3, а). Развитием блок-схемы типа альтернатива является блок-схема «выбор» (рис.3, б).

Рис. 3. Развитие структуры типа «альтернатива»: а) - неполная развилка; б) ~ структура «выбор»

На практике при составлении блок-схем оказывается удобным использовать и другие графические знаки (некоторые из них приведены на рис.4).

Рис. 4. Некоторые дополнительные конструкции для изображения блок-схем алгоритмов

алгоритм должен быть составлен таким образом, чтобы исполнитель мог однозначно и точно следовать командам алгоритма и эффективно получать определенный результат. Это накладывает на записи алго­ритмов ряд обязательных требований, суть которых вытекает из неформального толкования понятия алгоритма. Сформулируем эти требования в виде перечнясвойств, которым должны удовлетворять алгоритмы, адресуемые заданному исполнителю.

1.одно из первых требований, которое предъявляется к алгоритму, состоит в том, что описываемый процесс должен быть разбит на последовательность отдель­ных шагов. Возникающая в результате такого разбиения запись представляет собой упорядоченную совокупность четко разделенных друг от друга предписаний (директив, команд, операторов), образующих прерывную (или, как говорят, дис­кретную) структуру алгоритма. Только выполнив требования одного предписания, можно приступить к выполнению следующего. Дискретная структура алгоритмиче­ской записи может, например, подчеркиваться сквозной нумерацией отдельных команд алгоритма, хотя это требование не является обязательным. Рассмотренное свойство алгоритмов называют дискретностью.

  1. Используемые на практике алгоритмы составляются с ориентацией на опреде­ленного исполнителя. Чтобы составить для него алгоритм, нужно знать, какие команды этот исполнитель может понять и исполнить, а какие - не может. Состав­ляя запись алгоритма для определенного исполнителя, можно использовать лишь те команды, которые имеются в его ски. Это свойство алгоритмов будем называть понятностью.

  2. Будучи понятным, алгоритм не должен содержать предписаний, смысл кото­рых может восприниматься неоднозначно, т.е. Одна и та же команда, будучи понятна разным исполнителям, после исполнения каждым из них должна давать одинаковый результат. Запись алгоритма должна быть настолько четкой, полной и продуманной в де­талях, чтобы у исполнителя не могло возникнуть потребности в принятии решений, не предусмотренных составителем алгоритма. Говоря иначе, алгоритм не должен оставлять места для произвола исполнителя. Кроме того, в алгоритмах недопустимы также ситуации, когда после выполнения очередной команды алгоритма исполнителю неясно, какая из команд алгоритма должна выполняться на следующем шаге. Отмеченное свойство алгоритмов называют определенностью или детерминиро­ванностью.

  1. Обязательное требование к алгоритмам - результативность. Смысл этого требо­вания состоит в том, что при точном исполнении всех предписаний алгоритма процесс должен прекратиться за конечное число шагов и при этом должен получиться определенный результат. Вывод о том, что решения не существует – тоже результат.

  2. Наиболее распространены алгоритмы, обеспечивающие решение не одной конкретной задачи, а некоторого класса задач данного типа. Это свойство алго­ритма называют массовостью. В простейшем случае массовость обеспечивает возможность использования различных исходных данных.

Достаточно распространенным способом представления алгоритма является его запись на алгоритмическом языке, представляющем в общем случае систему обозна­чений и правил для единообразной и точной записи алгоритмов и исполнения их. Отметим, что между понятиями «алгоритмический язык» и «языки программирова­ния» есть различие; прежде всего, под исполнителем в алгоритмическом языке может подразумеваться не только компьютер, но и устройство для работы «в обстановке». Программа, записанная на алгоритмическом языке, не обязательно предназначена компьютеру. Практическая же реализация алгоритмического языка - отдельный вопрос в каждом конкретном случае. Как и каждый язык, алгоритмический язык имеет свой словарь. Основу этого словаря составляют слова, употребляемые для записи команд, входящих в систему команд исполнителя того или иного алгоритма. Такие команды называют просты­ми командами. В алгоритмическом языке используют слова, смысл и способ упот­ребления которых задан раз и навсегда. Эти слова называют служебными. Исполь­зование служебных слов делает запись алгоритма более наглядной, а форму пред­ставления различных алгоритмов - единообразной. Алгоритм, записанный на алгоритмическом языке, должен иметь название. На­звание желательно выбирать так, чтобы было ясно, решение какой задачи описыва­ет данный алгоритм. Для выделения названия алгоритма перед ним записывают служебное слово алг (алгоритм). За названием алгоритма (обычно с новой строки) записывают его команды. Для указания начала и конца алгоритма его команды заключают в пару служебных слов нач (начало) и кон (консц). Команды записывают последовательно.

Последовательность записи алгоритма:

Алг название алгоритма

Нач

Серия команд алгоритма

Кон

При построении новых алгоритмов могут использоваться алгоритмы, состав­ленные ранее. Алгоритмы, целиком используемые в составе других алгоритмов, называют вспомогательными алгоритмами. Вспомогательным может оказаться любой алгоритм из числа ранее составленных. Не исключается также, что вспомо­гательным в определенной ситуации может оказаться алгоритм, сам содержащий ссылку на вспомогательные алгоритмы.Очень часто при составлении алгоритмов возникает необходимость использо­вания в качестве вспомогательного одного и того же алгоритма, который к тому же может быть весьма сложным и громоздким. Было бы нерационально, начиная работу, каждый раз заново составлять и запоминать такой алгоритм для его последующего использования. Поэтому в практике широко используют, так называемые, встроенные (или стандартные) вспомогательные алгоритмы, т.е. Такие алгоритмы, которые постоянно имеются в распоряжении исполнителя. Обращение к таким алгоритмам осуществляется так же, как и к «обычным» вспомогательным алгоритмам. Алгоритм может содержать обращение к самому себе как вспомогательному и в этом случае его называют рекурсивным. Если команда обращения алгоритма к самому себе находится в самом алгоритме, то такую рекурсию называют прямой. Возможны случаи, когда рекурсивный вызов данного алгоритма происходит из вспомогательного алгоритма, к которому в данном алгоритме имеется обращение. Такая рекурсия называется косвенной. Пример прямой рекурсии:

Алг движение

Нач

Вперед

Вперед

Вправо

Движение

Кон

Алгоритмы, при исполнении которых порядок следования команд определяется в зависимости от результатов проверки некоторых условий, называют разветвляю­щимися. Для их описания в алгоритмическом языке используют специальную составную команду - команда ветвления. Она соответствует блок-схеме «альтернатива» и также может иметь полную или сокращенную форму.

Если условие если условие если край

То серия1 то серия то вправо

Иначе серия2 все иначе вперед

Все все

Ниже приводится запись на алгоритмическом языке команды выбора (см. Рис.3, б), являющейся развитием команды ветвления:

Выбор

При условие 1: серия 1

При условие 2: серия 2

. . . . . . . . . .

При условие n: серия n

Иначе серия n+1

Все

Алгоритмы, при исполнении которых отдельные команды или серии команд выполняются неоднократно, называют циклическими. Для организации цикличе­ских алгоритмов в алгоритмическом языке используют специальную составную команду цикла. Она соответствует блок-схемам типа «итерация» и может прини­мать следующий вид:

Пока условие нц

Нц серия

серия до условие

Кц кц

В случае составления алгоритмов работы с величинами можно рассмотреть и другие возможные алгоритмические конструкции, например, цикл с параметром или выбор. Подробно эти конструкции будут рассматриваться при знакомстве с реальными языками программирования. Понятие алгоритма, рассмотренное выше, можно назвать поняти­ем алгоритма в интуитивном смысле. Оно имеет нечеткий, неформальный характер, ссылается на некоторые точно не определенные, но интуитивно понятные вещи. Например, при определении и обсуждении свойств алгоритма мы исходили из возможностей некоторого исполнителя алгоритма. Его наличие предполагалось, но ничего определенного о нем не было известно. Говоря языком математики, ни аксиоматического, ни исчерпывающего конструктивного определения исполнителя мы так и не дали.Установленные свойства алгоритмов следует называть эмпирическими. Они выявлены на основе обобщения свойств алгоритмов различ­ной природы и имеют прикладной характер. Этих свойств достаточно для практи­ческого программирования, для создания обширного круга программ для компью­теров, промышленных роботов и т.д. Однако, как фундаментальное научное понятие алгоритм требует более обстоятельного изучения. Оно невозмож­но без уточнения понятия «алгоритм», более строгого его описания или, как еще говорят, без его формализации.

Известно несколько подходов к формализации понятия «алгоритм»:

Все эти возникшие исторически независимо друг от друга подходы оказались впоследствии эквивалентными. Главная цель формализации понятия алгоритма такова: подойти к решению проблемы алгоритмической разрешимости различных математических задач, т.е. Ответить на вопрос, может ли быть построен алгоритм, приводящий к решению задачи. Формализацию понятия алгоритма можно рассмотреть в теории автоматов на примере машин поста, тьюринга, а также нормальных алгоритмов маркова. Идеи λ-исчислений черча реализованы в языке программирования lisp.Вместе с тем, формально определенный любым из известных способов алгоритм не может в практическом программировании заменить то, что мы называли алго­ритмами. Основная причина состоит в том, что формальное определение резко сужает круг рассматриваемых задач, делая многие практически важные задачи недоступными для рассмотрения.