Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Информатика(1 группа) 16.09.DOC
Скачиваний:
3
Добавлен:
04.06.2015
Размер:
217.09 Кб
Скачать

Приложение 2 алгоритмы

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

П.2.1. Этапы решения задач

Решение задач в любой области человеческой деятельности, в том числе и в повседневной жизни, выполняется в определенной последовательности, и решение задач с помощью компьютера не является исключением. Выделим четыре основных этапа решения задач:

  1. Уяснение задачи.

  2. Выбор метода решения.

  3. Создание алгоритма.

  4. Выполнение алгоритма.

и рассмотрим особенности каждого из них.

Задача может быть предложена для решения либо сформулирована самостоятельно.

В первом случае существует условие задачи, где представлены исходные данные и необходимые результаты («Дано» и «Требуется»).

В корректно сформулированном условии задачи присутствуют однозначно понимаемые все и только все необходимые факты, представленные в виде чисел, условий, ситуаций, и требования. Для успешного решения такой задачи требуется выделить все составляющие исходных данных, в том числе и сформулированные по смыслу, например, сочетаниями слов «вверх по течению», что равносильно «против течения». Некоторые исходные данные и требования могут быть заданы неявно. Например, если требуется узнать, сколько землекопов выполнят задание, или сколько деталей изготовлено, ответ необходимо искать среди множества натуральных чисел, если требуется решить уравнение х=а/(х-1), значение х не может быть равно 1, а для уравнения х=значение х не может быть отрицательным.

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

Случаи самостоятельного формулирования задачи обычно сводятся к ситуациям некорректных условий, особенно если это касается повседневной жизни. Так, задача «Мучает жажда. Надо ее утолить» при попытке уточнения формулировки может привести к ситуациям «любой жидкостью» (уксусом?), «любой пригодной для этого жидкостью» (лед, снег, мятный леденец исключены?), «водой» (строго говоря, компот, молоко и многие другие напитки не попадают под это условие). В ситуациях такого рода следует чередовать попытки решения задачи с уточнением формулировки задания до достижения приемлемого или требуемого результата.

Выбор метода решения подразумевает поиск набора средств, позволяющих привести данную задачу к такой, для которой решение уже известно, то есть к стандартной задаче. Чем больше в активе человека, решающего задачу, стандартных задач, тем легче и быстрее будет найдено решение новой задачи. В качестве примера рассмотрим выбор метода решения уравнения х=. Найти значения х, обращающих данное равенство в тождество, можно, во-первых, подбором: очевидно, что искомые значения – 0 и 1. Во-вторых, искомые значения можно найти, построив графики функций, записанных в обеих частях равенства, и определив координаты точек пересечения графиков. В-третьих, возведя обе части уравнения в квадрат (поскольку правая часть неотрицательна, уравнение окажется равносильным исходному) и перенеся правую часть налево, получим квадратное уравнение, для решения которого имеются стандартные методы. Остается выбрать один из них: решение полного квадратного уравнения по известной формуле либо решение неполного квадратного уравнения разложением левой части на множители и приравниванием каждого из них нулю

Предыдущий этап в принципе можно считать первым шагом создания алгоритма – последовательности действий, приводящих к достижению требуемого результата. Однако такое определение алгоритма является неполным. Если рассмотренную выше задачу решает человек, знакомый с алгеброй в рамках школьного курса, ему окажется достаточным сказанного выше, и это и будет для него алгоритмом. Если эту задачу решает семиклассник, только метод подбора (и, возможно, метод разложения на множители) окажется для него алгоритмом, поскольку он еще не владеет (в рамках школьной программы) методами решения квадратного уравнения, и для него потребуется уточнить действия, на которых этот метод основан. Поэтому при создании алгоритма требуется обязательно учитывать, кто либо что будет выполнять предусмотренные алгоритмом действия, то есть алгоритм должен быть ориентирован на конкретного исполнителя. Каждый исполнитель способен выполнять конкретный набор действий (по-другому – набор команд), и никому не придет в голову заставить башенный подъемный кран, способный поворачивать стрелу в ту или другую сторону, поднимать и опускать крюк и перемещаться по рельсам туда и обратно, сложить два числа. Поэтому алгоритм – последовательность действий (команд), понятных исполнителю и приводящих к достижению требуемого результата. Эта последовательность фиксируется тем или иным способом и в этом случае называется программой.

При решении задач с помощью компьютера в состав алгоритма могут входить только те команды, которые компьютер может выполнить. А он способен выполнять только простые (машинные) команды, представленные в виде чисел (машинных кодов). Для удобства программиста созданы различные языки программирования, в каждом из которых предусмотрен определенный набор команд (операторов), зачастую содержащих большие группы машинных команд и записываемых в виде набора символов (текста). Для преобразования таких команд в машинные коды созданы программы-компиляторы и программы-интерпретаторы, которые выполняются самим компьютером. Надо только указать компьютеру, на каком языке представлена выполняемая программа. И, конечно, программист обязан знать набор доступных команд и правила их написания в данном языке. Следует учесть, что некоторые действия, такие как ввод, вывод, следование, ветвление, повтор, являются универсальными и в той или иной форме представлены во всех языках программирования.

Если выполнение алгоритма поручено человеку либо устройству, постоянно контролируемому человеком, именно человек обеспечивает строгое выполнение созданной программы и достижение заданного результата. Он способен исправить ошибки, вкравшиеся в алгоритм, в процессе выполнения программы, он способен оценить соответствие полученного и требуемого результатов.

Иная ситуация складывается, если выполнение программы поручается автомату, в частности, компьютеру. В этом случае после создания алгоритма и программы требуются еще два этапа до начала реального выполнения программы – отладка программы и ее тестирование.

Под отладкой программы понимают проверку, понимает ли автомат все имеющиеся в программе команды и выполняет ли их так, как это представлял себе программист. На этом этапе программисту помогает программа-компилятор, выявляющая те команды, которые она не может преобразовать в машинные коды. Ошибки такого рода называют синтаксическими.

Однако существуют и ошибки алгоритмические, связанные либо с неправильной последовательностью правильных команд, либо с неправильным пониманием программистом действий, выполняемых данной командой. В качестве первого примера рассмотрим ситуацию, когда для вычисления среднего арифметического значения переменных a и b в программе задано вычислить значение выражения a+b/2, Компьютер способен выполнить указанное действие, в котором всего-то не хватает скобок, но результат будет соответствовать требуемому значению далеко не при всех значениях a и b. В качестве второго примера рассмотрим ситуацию, когда хозяин на прогулке вместо команды «Апорт!» подает своей собаке команду «Фас!» с, возможно, весьма печальными последствиями для случайного прохожего и самого хозяина.

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

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

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

Следует отметить, что использование компьютера для решения задач не освобождает человека от необходимости иметь достаточные по объему твердые знания, прочные навыки и определенную долю таланта и ответственности.