Файл: АЛГОРИТМИЗАЦИЯ КАК ОБЯЗАТЕЛЬНЫЙ ЭТАП РАЗРАБОТКИ ПРОГРАММЫ (Понятие алгоритма. История возникновения).pdf
Добавлен: 27.06.2023
Просмотров: 54
Скачиваний: 3
Раздел 3. Представление алгоритмов.
Алгоритм должен быть формализован по некоторым правилам посредством конкретных символьно-изобразительных средств. К ним относятся следующие способы представления алгоритмов: словесный, словесно-формульный, графический, псевдокоды, программный.
Словесный способ – способ представления алгоритма в виде слов.
Графический способ – наиболее популярный способ представления алгоритма. Благодаря своей наглядности логически понятен читателю или исполнителю. Графический способ представляет собой различные блоки, каждый из которых описывает отдельный этап алгоритма (Рис. 2.1). Совокупность этих блоков называется блок-схемой. Далее я остановлюсь на этом методе чуть подробнее.
Рис.2.1
Псевдокоды. Псевдокод – неформальная запись алгоритма на естественном языке. Псевдокод обычно опускает детали, несущественные для понимания алгоритма человеком.
Программный – способ представления алгоритма в виде программного кода, который в дальнейшем будет обработан исполнителем алгоритма.
В очередной раз вспомним пример с фруктами в корзине. Изначально он полностью был описан словесным способом. Теперь попробуем изобразить его в виде графического (Рис. 2.2).
Рис. 2.2
При словесно-формульной записи алгоритмы записываются в виде текста с формулами по пунктам, определяющими последовательность действий. Для записи алгоритмов используются средства обычного языка, но с тщательно отрабатывают наборы слов и фраз, не допускающие повторений, синонимов, лишних слов. Принимаются определенные соглашения о форме записи, порядке выполнения действий, допускается использование математических символов.
Пример:
Даны два целых положительных числа, найти их наибольший общий делитель (НОД).
Решение этой задачи может быть получено последовательным делением вначале большего числа на меньшее, затем меньшего числа на полученный остаток, первого остатка на второй остаток и т.д. до тех пор, пока в остатке не получится нуль. Последний по счету делитель и будет искомым результатом.
Обозначим через M и N исходные целые числа, приняв в качестве их начальных значений заданные константы. Сведем деление к повторному вычитанию. Тогда алгоритм может быть сформулирован следующим образом:
1. задать два числа;
2. если числа равны, то взять любое из них в качестве ответа и остановиться, в противном случае продолжить выполнение алгоритма;
3. определить большее из чисел;
4. заменить большее из чисел разностью большего и меньшего из чисел;
5. повторить алгоритм с шага 2;
2. Ввести (М, N);
3. Если MN, то перейти к п.4, иначе перейти к п. 7;
4. Если M>N, то прейти к п. 5, иначе перейти к п. 6;
5. М: = М-N; перейти к п. 3;
6. N: = N-М; перейти к п. 3;
7. НОД: =М;
8. Печатать (НОД).
Словесно-формульный способ не имеет широкого распространения по следующим причинам:
- такие описания строго не формализуемы;
- страдают многословностью записей;
- допускают неоднозначность толкования отдельных предписаний.
Псевдокод представляет собой систему обозначений и правил, предназначенную для единообразной записи алгоритмов. Он занимает промежуточное место между естественным и формальным языками [7].
С одной стороны, он близок к обычному естественному языку, поэтому алгоритмы могут на нем записываться и читаться как обычный текст. С другой стороны, в псевдокоде используются некоторые формальные конструкции и математическая символика, что приближает запись алгоритма к общепринятой математической записи.
В псевдокоде не приняты строгие синтаксические правила для записи команд, присущие формальным языкам, что облегчает запись алгоритма на стадии его проектирования и дает возможность использовать более широкий набор команд, рассчитанный на абстрактного исполнителя. В псевдокоде обычно имеются некоторые конструкции, присущие формальным языкам, что облегчает переход от записи на псевдокоде к записи алгоритма на формальном языке. В псевдокоде как и в формальных языках, есть служебные слова, смысл которых определен раз и навсегда. Они выделяются в печатном тексте жирным шрифтом, а в рукописном тексте подчеркиваются. Единого определения псевдокода не существует, поэтому возможны различные псевдокоды, отличающиеся набором служебных слов и основных конструкций.
Пример:
Вычислить а+b.
Алг Нахождение суммы;
дано а и b;
надо с=а+b;
ввод а,b;
с:=а+b;
вывод с;
кон .
При записи алгоритма в словесной форме, в виде блок-схемы или на псевдокоде допускается определенный произвол при изображении команд. Вместе с тем такая запись точна настолько, что позволяет человеку понять суть дела и исполнить алгоритм.
На практике в качестве исполнителей алгоритмов используются специальные автоматы - компьютеры. Алгоритм, предназначенный для исполнения на компьютере, должен быть записан на «понятном» ему языке. На первый план выдвигается необходимость точной записи команд, не оставляющей места для произвольного толкования их исполнителем. Следовательно, язык для записи алгоритмов должен быть формализован. Такой язык принято называть языком программирования, а запись алгоритма на этом языке - программой для компьютера.
Раздел 4. Структурное программирование
На всех этапах подготовки к алгоритмизации задачи широко используется структурное представление алгоритма. В информатике процесс решения задачи распределяется между двумя субъектами: программистом и компьютером. Программист составляет алгоритм (программу), компьютер его исполняет. В традиционной математике такого разделения нет, задачу решает один человек, который составляет алгоритм решения задачи и сам выполняет его. Сущность алгоритмизации не в том, что решение задачи представляется в виде набора элементарных операций, а в том, что процесс решения задачи разбивается на два этапа: творческий (программирование) и не творческий (выполнение программы). И выполняют эти этапы разные субъекты – программист и исполнитель.
При составлении алгоритма программист никому ничего не объясняет, а исполнитель не пытается ничего понять. Алгоритм размещается в памяти компьютера, который извлекает команды по одной и исполняет их. Человек действует по-другому. Чтобы решить задачу, человеку требуется держать в памяти метод решения задачи в целом, а воплощает этот метод каждый по-своему.
Практика программирования показала необходимость научно обоснованной методологии разработки и документирования алгоритмов и программ. Эта методология должна касаться анализа исходной задачи, разделения ее на достаточно самостоятельные части и программирования этих частей по возможности независимо друг от друга. Такой методологией, зародившейся в начале 70-х годов и получившей в последнее время широкое распространение, является структурное программирование. По своей сути оно воплощает принципы системного подхода в процессе создания и эксплуатации программного обеспечения ЭВМ. В основу структурного программирования положены следующие достаточно простые положения [8]:
1. алгоритм и программа должны составляться поэтапно (по шагам);
2. сложная задача должна разбиваться на достаточно простые, легко воспринимаемые части, каждая из которых имеет один вход и один выход;
3. логика алгоритма и программы должна опираться на минимальное число достаточно простых базовых управляющих структур.
Использование этих положений позволяет внести определенную систему в труд программиста и составлять удобочитаемые алгоритмы (и программы), которые легко изучать и проверять. Фундаментом структурного программирования является теорема о структурировании. Эта теорема устанавливает, что, как бы сложна ни была задача, схема соответствующей программы всегда может быть представлена с использованием весьма ограниченного числа элементарных управляющих структур. Элементарные структуры могут соединяться между собой, образуя более сложные структуры, по тем же самым элементарным схемам.
Базовыми элементарными структурами являются структуры: следование, ветвление и повторение (цикл), изображенные на рис.2.3. Они обладают функциональной полнотой, т.е. любой алгоритм может быть реализован в виде композиции этих трех конструкций.
Рис. 2.3
Первая (а) структура - тип последовательность (или просто последовательность), вторая (б) – структура выбора (ветвление), третья (в) – структура цикла с предусловием.
При словесной записи алгоритма указанные структуры имеют соответственно следующий смысл:
«выполнить S1; выполнить S2 »,
если P, то выполнить S1 , иначе выполнить S2 »,
«до тех пор, пока P, выполнять S »,
где P - условие; S, S1, S2 - действия.
Рассматривая схему программы, можно выделить в ней части, достаточно простые и понятные по структуре. Представление этих фрагментов укрупненными блоками существенно облегчает восприятие алгоритма в целом.
Достаточно часто структурное программирование подразумевает использование более трех базисных структур. Применительно к языку Паскаль, в котором наиболее полно нашли свое отражение идеи структурного программирования, целесообразно при проектировании алгоритмов дополнительно использовать еще четыре элементарные структуры: сокращенную запись разветвления; структуру варианта структуру повторения или цикла с параметром; структуру цикла с постусловием (рис. 2.4 ). Каждая из этих структур имеет один вход и один выход. В языке Паскаль имеются средства, позволяющие непосредственно реализовывать в программе любую из этих структур, поэтому правильное использование типовых структур в процессе разработки алгоритма обеспечивает упрощение этапов решения задачи на ЭВМ.
Рис 2.4
Ветвящимся (разветвляющимся) называется вычислительный процесс, вкотором происходит выбор одного из возможных вариантов вычислений в зависимости от проверки заданных условий.
В зависимости от типа и числа проверяемых условий различают:
- ветвление с простым условием (условие - выражение отношения);
- ветвление с составным условием (условие - логическое выражение);
- сложное ветвление (несколько условий).
Вариант вычислений, определяемый в результате проверки условия, называется ветвью.
При необходимости одновременного выполнения нескольких операций отношения они объединяются в составное условие в виде логического выражения. Для этой цели используют логические операции:
- - логическое сложение (ИЛИ), дизъюнкция;
-- логическое умножение (И), конъюнкция;
- | - отрицание (не).
Циклическим называется процесс многократного повторения некоторого участка вычислений при изменении хотя бы одной из входящих в него величин.
Повторяющийся участок вычисления называется циклом. Операции, осуществляемые в цикле, составляют тело цикла.
Величина, изменяющая своё значение от цикла к циклу, называется параметром цикла.
Зависимость, связывающая текущее и предыдущее значения параметра цикла, определяет закон изменения параметра цикла.
Зависимость, предписывающая повторение цикла, либо выход из него, называется условием повторения цикла.
Все циклические процессы по признаку определения количества повторений (М) разделяются на два класса.
Арифметическим называется циклический процесс, число повторений в котором может быть определено заранее, т.е. не зависит от результатов счёта в челе цикла.
Итерационным является циклический процесс, число повторений в котором зависит от результатов вычислений в теле цикла и не может быть определено заранее.
Независимо от того, к какому классу относится вычислительный процесс, каждый из них содержит обязательные элементы:
- вход в цикл (формирование начального значения параметра цикла);
- вычисления в теле цикла (расчёт текущего значения функций, формирования нового значения параметра цикла, а также вспомогательные операции);
- выход из цикла (проверка условия, определяющего повторение вычислений, либо их прекращение).
По своему содержанию эти элементы зависят от класса и особенностей цикла, в котором используются.
В соответствии с видом задания (изменения) параметра цикла арифметические циклы подразделяются на:
- циклы с аналитическим изменением параметра;
- циклы с табличным заданием параметра.
Выполнение арифметических циклов, т.е. многократное вычисление значений функции при изменяющихся значениях аргумента, называется табуляцией функции.
Раздел 5. Предпрограммная подготовка задачи
На ЭВМ могут решаться задачи различного характера, например: научно-инженерные; разработки системного программного обеспечения; обучения; управления производственными процессами и т. д. В процессе подготовки и решения на ЭВМ научно-инженерных задач можно выделить следующие этапы: