Информатика |
Глава 8. Введение в программирование | назад оглавление вперед |
8.2. Понятие алгоритма
Алгоритмом называется четкое описание последовательности действий, которые необходимо выполнить для решения задачи. Практически решение любой задачи требует получения результата по заданным исходным данным. Следовательно, можно сказать, что алгоритм описывает последовательный процесс преобразования исходных данных в результат.
Разработать алгоритм решения задачи означает разбить задачу на последовательно выполняемые шаги (этапы), причем результаты выполнения предыдущих этапов могут использоваться при выполнении последующих. При этом должны быть четко указаны как содержание каждого этапа, так и порядок выполнения этапов. Отдельный этап (шаг) алгоритма представляет собой либо другую, более простую задачу, алгоритм решения которой разработан ранее, либо должен быть достаточно простым и понятным без пояснений.
Четко сформулированная последовательность правил, описывающих этот процесс, и является алгоритмом.
Если алгоритм разработан, то его можно вручить для выполнения человеку (и вообще любому исполнителю, в том числе и ЭВМ), не знакомому с решаемой задачей, и, точно следуя правилам алгоритма, этот человек (или другой исполнитель) получит ее решение.
Например, вам предложено выполнить следующую последовательность действий при заданных значениях а = 1, b = 3, c = 2:
1. Вычислить D = b2 – 4ac
2. Сравнить D с нулем. Если D < 0, перейти к 3. В противном случае вычислить
3. Прекратить вычисления.
Оказывается, выполнив приведенную последовательность для указанных значений а, b и c, вы решили квадратное уравнение х2 + 3х + 2 = 0.
Свойства алгоритма. Алгоритм обладает следующими основными свойствами, раскрывающими его определение:
1. Дискретность. Это свойство состоит в том, что алгоритм должен представлять процесс решения задачи как последовательное выполнение простых (или ранее определенных) шагов (этапов). При этом для выполнения каждого шага (этапа) алгоритма требуется некоторый конечный отрезок времени. То есть преобразование исходных данных в результат осуществляется во времени дискретно.
2. Определенность (или детерминированность). Это свойство состоит в том, что каждое правило алгоритма должно быть четким, однозначным и не оставлять места для произвола. Благодаря этому свойству выполнение алгоритма носит механический характер и не требует никаких дополнительных указаний или сведений о решаемой задаче.
3. Результативность (или конечность). Это свойство состоит в том, что алгоритм должен приводить к решению задачи за конечное число шагов.
4. Массовость. Это свойство состоит в том, что алгоритм решения задачи разрабатывается в общем виде, т. е. он должен быть применим для некоторого класса задач, различающихся лишь исходными данными. При этом исходные данные могут выбираться из некоторой области, которая называется областью применимости алгоритма. В отдельных случаях исходные данные могут отсутствовать.
Например, приведенный выше алгоритм решения квадратичного уравнения применим для различных наборов коэффициентов а, b, c (а ¹ 0).
Чтобы разработать алгоритм, нужно хорошо представить себе ход решения задачи. При этом полезно решить задачу самому (на бумаге) для каких-либо наборов данных, не требующих громоздких вычислений, запоминая выполняемые действия, так, чтобы далее эти действия формализовать, т. е. записать в виде последовательности четких правил.
Понятия алгоритма и программы разграничены не очень четко. Обычно программой называют окончательный вариант алгоритма решения задачи, ориентированный на конкретного исполнителя.
Этап, результатом которого является разработка алгоритма решения задачи, часто называют алгоритмизацией, понимая под этим сведение задачи к последовательности этапов, выполняемых последовательно друг за другом. В широком смысле алгоритмизация включает и выбор метода решения задачи, а также формы представления исходной информации с учетом специфики ЭВМ.
Разработанный алгоритм можно зафиксировать несколькими способами, например:
Запись алгоритма на естественном языке. Хотя естественный язык не требует детальных разъяснений и полной формализации, сформулируем некоторые правила, которые облегчат в дальнейшем переход к .алгоритмическому языку.
Введем следующие обозначения типичных этапов алгоритма:
1. Этап обработки (вычисления)
v - выражение
(v — переменная, выражение задает правило вычисления значения, которое далее будет присвоено переменной v. Это может быть, например, знакомое нам алгебраическое (арифметическое) выражение).
2. Проверка условия
если условие идти к N.
Если условие удовлетворяется, выполняется переход к этапу N. Если условие не удовлетворяется, то условимся, что осуществляется переход к следующему по порядку этапу.
3. Конец вычислений;
закончить вычисления.
4. Переход к этапу с номером N
идти к N
Изображение алгоритма в виде схемы. Схемой называется наглядное графическое изображение алгоритма, когда отдельные действия (этапы) алгоритма изображаются при помощи различных геометрических фигур (блоков), а связи между этапами (последовательность выполнения этапов) указываются при помощи линий, соединяющих эти фигуры. Направления линий сверху вниз и слева направо принимаются за основные и могут (если не имеют изломов) не иметь стрелок
Существует Государственный стандарт (ГОСТ), определяющий правила выполнения схем и обозначения для отдельных операций процесса обработки данных. Далее приводятся обозначения некоторых, наиболее часто употребляемых операций.
Типичные действия алгоритма изображаются следующими геометрическими фигурами.
Этап обработки (вычисления) изображается прямоугольником (рис. 8.1а). Внутри прямоугольника записывается содержание этого этапа.
Проверка условия изображается ромбом. Условие записывается внутри ромба. В результате проверки условия осуществляется выбор одного из двух возможных путей вычислительного процесса (рис. 8.1б).
Если условие выполняется, т. е. имеет значение да - то следующим выполняется этап по стрелке да. Если условие не выполняется, то осуществляется переход по стрелке нет.
Рис. 8.1. Блоки, используемые в схемах алгоритма
Начало и конец вычислительного процесса изображаются фигурой, показанной на рис. 8.1в. Внутри нее записывается слово начало или конец.
Ранее созданные и отдельно описанные алгоритмы и программы (подпрограммы) изображаются фигурой на рис. 8.1г. Внутри нее указывается имя подпрограммы и параметры, при которых подпрограмма должна быть выполнена.
Ввод исходных данных и вывод результатов изображаются параллелограммом (рис. 8.1д). Внутри него пишется слово ввод или печать и перечисляются переменные, подлежащие вводу или выводу. Параллелограммом обозначается ввод/вывод вообще. Если ввод или вывод осуществляется с использованием конкретных устройств, то блоки ввода/вывода изображаются при помощи специальных фигур. Так, ввод/вывод с использованием дисплея, вывод на печатающее устройство изображаются соответственно фигурами, представленными на рис. 1.1е, 1.1ж.
Рис. 8.2. |
Комментарий используется в тех случаях, когда пояснение не помещается внутри блока (рис. 8.1з).
В качестве примера изобразим в виде схемы алгоритм вычисления произведения двух натуральных чисел n и m с использованием операции сложения, записанный ранее на естественном языке, добавив этапы ввода/вывода (рис. 8.2).Схема позволяет наглядно представить структуру алгоритма. В частности, на схеме хорошо видны циклы: это последовательности блоков, после последнего из которых осуществляется возврат к началу последовательности (на схеме это — замкнутые участки). Схемы обычно используются для изображения промежуточных вариантов алгоритма. Окончательный вариант, предназначенный для исполнителя–ЭВМ (программа), должен быть записан на алгоритмическом языке.
В настоящее время существует технология разработки программ без использования схем. Однако независимо от этого на начальном этапе изучения программирования использование схем при разработке алгоритмов целесообразно. Использование схем обеспечивает приобретение прочных навыков разработки алгоритмов, являющихся основой так называемого структурного подхода, особенно плодотворного при постановке и решении на ЭВМ сложны задач.
ГОСТом, помимо типов фигур, предписываются также определенные размеры их сторон, одинаковые размеры блоков. Этих требований необходимо придерживаться при оформлении окончательной документации. На промежуточных этапах разработки алгоритма придерживаться этих требований ГОСТа не обязательно.
Понятие об алгоритмических языках. Алгоритмические языки близки к естественному языку. Именно такая цель ставилась при их разработке. Однако правила построения конструкций в алгоритмической языке более “жесткие”. Это означает, что алгоритмически языки допускают меньшее разнообразие для описаний действий алгоритма, чем естественный язык и привычная математическая символика, и машина однозначно понимает любую конструкцию языка. Например, для умножение двух переменных a и b общепринятая математическая символика допускает несколько возможных форм записи: 1) ab 2) а x b 3) а × b и т. п. А на алгоритмическом языке во например на языке Basic, эту операцию можно записать только единственным образом как a*b. Небольшие, ошибки или описки, допускаемые в предложениях естественного языка и не искажающие, на наш взгляд, смысла, совершенно недопустимы в алгоритмическим языке, где каждый символ и его место в конструкции имеют строго фиксированное значение.
Так как программа на алгоритмическом языке предназначена для выполнения на ЭВМ, то в алгоритмическом языке, помимо средств, описывающих действия алгоритма, обязательно должны быть также определены средства, позволяющие вводить исходные данные в ЭВМ и выводить результаты выполнения программы.
Программа, составленная на алгоритмическом языке, не может быть непосредственно выполнена ЭВМ, так как ЭВМ умеет выполнять только последовательность элементарных операций, а в программе на алгоритмическом языке в одном выражении может, например, содержаться несколько операций, и форма записи такой программы понятна человеку, но недоступна ЭВМ. Поэтому необходимо какое-то промежуточное звено, которое выполняло бы работу по расчленению отдельных действий программы и записи их на машинном языке. Работа эта несложная, но требует скрупулезного внимания и педантичности. К такой работе больше всего и приспособлена ЭВМ. Перевод программы с алгоритмического языка на машинный осуществляется ЭВМ с помощью специальной программы, которая носит название транслятор. В программе-трансляторе “заложены” все правила алгоритмического языка и способы преобразования различных его конструкций на машинный язык. Именно поэтому при составлении программы на алгоритмическом языке нужно скрупулезно придерживаться правил этого языка, иначе ЭВМ вас не поймет или поймет неправильно. Наиболее распространенными алгоритмическими языками в настоящее время являются Basic, Pascal, C.