Информатика 1 курс лекции 7-8
.docЛекция 7.
Тема: Понятие и её свойства алгоритма. Способы записи алгоритмов.
Решение любого рода задач на ЭВМ основано на применении алгоритмов. Так называют набор предписаний, однозначно определяющий содержание и порядок действий, которые необходимо выполнить над исходными и промежуточными данными для получения конечного результата.
При разработке любого алгоритма процесс решения задачи формализуется, то есть сводится к применению конечной последовательности достаточно простых правил и действий.
Само слово «Алгори́тм» произошло от имени известного средневекового математика Мухаммеда ибн Муссы аль-Хорезми (в латинизированной форме – Alhorithmi), жившего в 783-850 гг. В своей книге «Об индийском счёте» он изложил точные правила записи натуральных чисел с помощью арабских цифр и арифметических действий над ними «в столбик», знакомые теперь каждому школьнику. В XII в. Эта книга была переведена на латынь и получила широкое распространение в Европе.
В математике для решения типовых задач всегда использовались правила, описывающие определённую последовательность действий. Для решения любой задачи надо знать, что дано, что следует получить, какие действия и в каком порядке следует выполнить. Например, известны правила сложения дробных чисел, решения квадратных уравнений и т.д. В повседневной жизни тоже часто используются различные инструкции и правила, указывающие на последовательность действий, необходимых для получения желаемого результата.
После того, как алгоритм разработан, решение задачи можно поручить любому исполнителю (в том числе и тому, кто не понимает, почему нужно выполнять предписанные алгоритмом действия); точно следуя инструкциям, он добьётся желаемого результата. В этом заключается главная цель алгоритмизации.
Таким образом, «Алгоритм— это последовательность действий, направленных на получение определённого результата за конечное число шагов».
Свойства алгоритмов
Различные определения алгоритма в явной или неявной форме содержат следующий ряд общих требований:
Дискретность — алгоритм должен представлять процесс решения задачи как последовательное выполнение некоторых простых шагов. При этом для выполнения каждого шага алгоритма требуется конечный отрезок времени, то есть преобразование исходных данных в результат осуществляется во времени дискретно.
Детерминированность — определённость. В каждый момент времени следующий шаг работы однозначно определяется состоянием системы. Таким образом, алгоритм выдаёт один и тот же результат (ответ) для одних и тех же исходных данных.
Понятность — алгоритм для исполнителя должен включать только те команды, которые ему (исполнителю) доступны, которые входят в его систему команд.
Завершаемость (конечность) — при корректно заданных исходных данных алгоритм должен завершать работу и выдавать результат за конечное число шагов. С другой стороны, вероятностный алгоритм может и никогда не выдать результат, но вероятность этого равна 0.
Массовость — универсальность. Алгоритм должен быть применим к разным наборам исходных данных.
Результативность — завершение алгоритма определёнными результатами.
Способы записи алгоритмов
Оформить (записать) алгоритмы можно несколькими способами:
Словесный способ записи алгоритмов основан на использовании средств обычного языка, но с жестко ограниченным набором слов и фраз, не допускающим повторений, синонимов, двусмысленности, лишних слов. К недостаткам такого подхода относится отсутствие строгой формализации и наглядности представления вычислительного процесса. Вместе с тем с помощью данного способа можно описывать алгоритмы с произвольной степенью детализации.
Формульно-словесный способ основан на задании инструкций о выполнении конкретных действий с использованием математических символов и выражений в сочетании со словесными пояснениями.
Алгоритми́ческий язык — формальный язык, используемый для записи, реализации и изучения алгоритмов.
Примеры
Алгоритм на алгоритмическом языке в общем виде записывается в форме:
алг название алгоритм (аргументы и результаты)
дано условия применимости алгоритма
надо цель выполнения алгоритма
нач описание промежуточных величин
| последовательность команд (тело алгоритма)
кон
В записи алгоритма ключевые слова обычно подчёркивались либо выделялись полужирным шрифтом. Для выделения логических блоков применялись отступы, а парные слова начала и конца блока соединялись вертикальной чертой.
Пример вычисления суммы квадратов:
алг Сумма квадратов (арг цел n, рез цел S)
дано | n > 0
надо | S = 1*1 + 2*2 + 3*3 + … + n*n
нач цел i
| ввод n; S:=0
| нц для i от 1 до n
| | S := S + i * i
| кц
| вывод "S = ", S
кон
Графический способ представления алгоритма использует элементы блок-схем.
Схема — графическое представление определения, анализа или метода решения задачи, в котором используются символы для отображения операций, данных, потока, оборудования и т. д. (ГОСТ 19.701-90).
Блок-схема — распространенный тип схем, описывающий алгоритмы или процессы, изображая шаги в виде блоков различной формы, соединенных между собой стрелками.
При описании устройств и механизмов блок-схема отражает взаимосвязи главных блоков устройства без их детализации, дает общее понимание того, как работает любая система.
Основные элементы схем алгоритма
Наименование |
Обозначение |
Функция |
Терминатор (пуск-останов) |
|
Элемент отображает вход из внешней среды или выход из нее (наиболее частое применение − начало и конец программы). Внутри фигуры записывается соответствующее действие. |
Процесс |
|
Выполнение одной или нескольких операций, обработка данных любого вида (изменение значения данных, формы представления, расположения). Внутри фигуры записывают непосредственно сами операции, например, операцию присваивания: a = 10*b + c. |
Решение |
|
Отображает решение или функцию переключательного типа с одним входом и двумя или более альтернативными выходами, из которых только один может быть выбран после вычисления условий, определенных внутри этого элемента. Вход в элемент обозначается линией, входящей обычно в верхнюю вершину элемента. Если выходов два или три то обычно каждый выход обозначается линией, выходящей из оставшихся вершин (боковых и нижней). Если выходов больше трех, то их следует показывать одной линией, выходящей из вершины (чаще нижней) элемента, которая затем разветвляется. Соответствующие результаты вычислений могут записываться рядом с линиями, отображающими эти пути. Примеры решения: в общем случае − сравнение (три выхода: >, <, =); в программировании − условные операторы if (два выхода: true, false) и case (множество выходов). |
Предопределенный процесс |
|
Символ отображает выполнение процесса, состоящего из одной или нескольких операций, который определен в другом месте программы (в подпрограмме, модуле). Внутри символа записывается название процесса и передаваемые в него данные. Например, в программировании − вызов процедуры или функции. |
Данные (ввод-вывод) |
|
Преобразование данных в форму, пригодную для обработки (ввод) или отображения результатов обработки (вывод). Данный символ не определяет носителя данных (для указания типа носителя данных используются специфические символы). |
Граница цикла |
|
Символ состоит из двух частей − соответственно, начало и конец цикла − операции, выполняемые внутри цикла, размещаются между ними. Условия цикла и приращения записываются внутри символа начала или конца цикла − в зависимости от типа организации цикла. Часто для изображения на блок-схеме цикла вместо данного символа используют символ решения, указывая в нем условие, а одну из линий выхода замыкают выше в блок-схеме (перед операциями цикла). Для указания операций в цикле может использоваться также блок-подготовка. |
Соединитель |
|
Символ отображает выход в часть схемы и вход из другой части этой схемы. Используется для обрыва линии и продолжения ее в другом месте (пример: разделение блок-схемы, не помещающейся на листе). Соответствующие соединительные символы должны иметь одно (при том уникальное) обозначение. |
Комментарий |
|
Используется для более подробного описания шага, процесса или группы процессов. Описание помещается со стороны квадратной скобки и охватывается ей по всей высоте. Пунктирная линия идет к описываемому элементу, либо группе элементов (при этом группа выделяется замкнутой пунктирной линией). Также символ комментария следует использовать в тех случаях, когда объем текста в каком-либо другом символе (например, символ процесса, символ данных и др.) превышает его объем. |
Линия связи |
|
Передача управления. Последовательность выполнения действий. |
Лекция 8.
Тема: Базовые структуры алгоритмов.
Алгоритмы можно представлять как некоторые структуры, состоящие из отдельных базовых (т.е. основных) элементов. Естественно, что при таком подходе к алгоритмам изучение основных принципов их конструирования должно начинаться с изучения этих базовых элементов
Логическая структура любого алгоритма может быть представлена комбинацией трех базовых структур: следование, ветвление, цикл.
Характерной особенностью базовых структур является наличие в них одного входа и одного выхода.
1 . Базовая структура следование. (Линейный вычислительный процесс). Этапы вычислений выполняются в линейной последовательности и каждый этап выполняется только один раз (см. рис.1). На схеме блоки размещаются сверху вниз в порядке их выполнения. Для таких процессов характерно, что направление вычислений не зависит от исходных данных или промежуточных результатов.
2. Базовая структура ветвление. (Разветвляющийся вычислительный процесс). Обеспечивает в зависимости от результата проверки условия (да или нет) выбор одного из альтернативных путей работы алгоритма. Каждый из путей, называется ветвью, ведет к общему выходу, так что работа алгоритма будет продолжаться независимо от того, какой путь будет выбран. В любом конкретном случае процесс реализуется только по одной ветви, выполнение остальных исключается.
Структура ветвление существует в четырех основных вариантах:
1) если-то если условие то действия конец если
|
|
2) если-то-иначе если условие то действия 1 иначе действия 2 конец если |
|
3) выбор выбор при условие 1: действия 1 при условие 2: действия 2 . . . . . . . . . . . . при условие N: действия N конец выбора
|
|
4) выбор-иначе выбор при условие 1: действия 1 при условие 2: действия 2 . . . . . . . . . . . . при условие N: действия N иначе действия N+1 конец выбора
|
|
3. Базовая структура цикл. Обеспечивает многократное выполнение некоторой совокупности действий, которая называется телом цикла.
Структура цикл существует в трех основных вариантах:
Цикл типа для.
Предписывает выполнять тело цикла для всех значений некоторой переменной (параметра цикла) в заданном диапазоне.
Цикл типа пока.
Предписывает выполнять тело цикла до тех пор, пока выполняется условие, записанное после слова пока.
Цикл типа делать - пока.
Предписывает выполнять тело цикла до тех пор, пока выполняется условие, записанное после слова пока. Условие проверяется после выполнения тела цикла.
Заметим, что циклы для и пока называют также циклами с предпроверкой условия а циклы делать - пока - циклами с постпроверкой условия. Иными словами, тела циклов для и пока могут не выполниться ни разу, если условие окончания цикла изначально не верно. Тело цикла делать - пока выполнится как минимум один раз, даже если условие окончания цикла изначально не верно.
цикл для i от i1 до i2 шаг i3 тело цикла (последовательность действий) конец цикла Применены обозначения:
|
|
цикл пока условие тело цикла (последовательность действий) конец цикла
|
|
цикл делать тело цикла (последовательность действий) пока условие конец цикла
|
|
Итерационные циклы. Особенностью итерационного цикла является то, что число повторений операторов тела цикла заранее неизвестно. Для его организации используется цикл типа пока. Выход из итерационного цикла осуществляется в случае выполнения заданного условия. На каждом шаге вычислений происходит последовательное приближение и проверка условия достижения искомого результата. Алгоритм, в состав которого входит итерационный цикл, называется итерационным алгоритмом. Итерационные алгоритмы используются при реализации итерационных численных методов. В итерационных алгоритмах необходимо обеспечить обязательное достижение условия выхода из цикла (сходимость итерационного процесса). В противном случае произойдет зацикливание алгоритма, т.е. не будет выполняться основное свойство алгоритма - результативность.
Вложенные циклы.
Возможны случаи, когда внутри тела цикла необходимо повторять некоторую последовательность операторов, т. е. организовать внутренний цикл. Такая структура получила название цикла в цикле или вложенных циклов. Глубина вложения циклов (то есть количество вложенных друг в друга циклов) может быть различной.
При использовании такой структуры для экономии машинного времени необходимо выносить из внутреннего цикла во внешний все операторы, которые не зависят от параметра внутреннего цикла.