Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Информатика 1 курс лекции 7-8

.doc
Скачиваний:
18
Добавлен:
16.11.2019
Размер:
1.36 Mб
Скачать

Лекция 7.

Тема: Понятие и её свойства алгоритма. Способы записи алгоритмов.

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

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

Само слово «Алгори́тм» произошло от имени известного средневекового математика Мухаммеда ибн Муссы аль-Хорезми (в латинизированной форме – Alhorithmi), жившего в 783-850 гг. В своей книге «Об индийском счёте» он изложил точные правила записи натуральных чисел с помощью арабских цифр и арифметических действий над ними «в столбик», знакомые теперь каждому школьнику. В XII в. Эта книга была переведена на латынь и получила широкое распространение в Европе.

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

После того, как алгоритм разработан, решение задачи можно поручить любому исполнителю (в том числе и тому, кто не понимает, почему нужно выполнять предписанные алгоритмом действия); точно следуя инструкциям, он добьётся желаемого результата. В этом заключается главная цель алгоритмизации.

Таким образом, «Алгоритм— это последовательность действий, направленных на получение определённого результата за конечное число шагов».

Свойства алгоритмов

Различные определения алгоритма в явной или неявной форме содержат следующий ряд общих требований:

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

  2. Детерминированность — определённость. В каждый момент времени следующий шаг работы однозначно определяется состоянием системы. Таким образом, алгоритм выдаёт один и тот же результат (ответ) для одних и тех же исходных данных.

  3. Понятность — алгоритм для исполнителя должен включать только те команды, которые ему (исполнителю) доступны, которые входят в его систему команд.

  4. Завершаемость (конечность) — при корректно заданных исходных данных алгоритм должен завершать работу и выдавать результат за конечное число шагов. С другой стороны, вероятностный алгоритм может и никогда не выдать результат, но вероятность этого равна 0.

  5. Массовость — универсальность. Алгоритм должен быть применим к разным наборам исходных данных.

  6. Результативность — завершение алгоритма определёнными результатами.

Способы записи алгоритмов

Оформить (записать) алгоритмы можно несколькими способами:

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

  2. Формульно-словесный способ основан на задании инструкций о выполнении конкретных действий с использованием математических символов и выражений в сочетании со словесными пояснениями.

Алгоритми́ческий язык — формальный язык, используемый для записи, реализации и изучения алгоритмов.

Примеры

Алгоритм на алгоритмическом языке в общем виде записывается в форме:

алг название алгоритм (аргументы и результаты)

дано условия применимости алгоритма

надо цель выполнения алгоритма

нач описание промежуточных величин

| последовательность команд (тело алгоритма)

кон

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

Пример вычисления суммы квадратов:

алг Сумма квадратов (арг цел 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

кон

  1. Графический способ представления алгоритма использует элементы блок-схем.

Схема — графическое представление определения, анализа или метода решения задачи, в котором используются символы для отображения операций, данных, потока, оборудования и т. д. (ГОСТ 19.701-90).

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

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

Основные элементы схем алгоритма

Наименование

Обозначение

Функция

Терминатор (пуск-останов)

Элемент отображает вход из внешней среды или выход из нее (наиболее частое применение − начало и конец программы). Внутри фигуры записывается соответствующее действие.

Процесс

Выполнение одной или нескольких операций, обработка данных любого вида (изменение значения данных, формы представления, расположения). Внутри фигуры записывают непосредственно сами операции, например, операцию присваивания: a = 10*b + c.

Решение

Отображает решение или функцию переключательного типа с одним входом и двумя или более альтернативными выходами, из которых только один может быть выбран после вычисления условий, определенных внутри этого элемента. Вход в элемент обозначается линией, входящей обычно в верхнюю вершину элемента. Если выходов два или три то обычно каждый выход обозначается линией, выходящей из оставшихся вершин (боковых и нижней). Если выходов больше трех, то их следует показывать одной линией, выходящей из вершины (чаще нижней) элемента, которая затем разветвляется. Соответствующие результаты вычислений могут записываться рядом с линиями, отображающими эти пути. Примеры решения: в общем случае − сравнение (три выхода: ><=); в программировании − условные операторы if (два выхода: truefalse) и 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

тело цикла (последовательность действий)

конец цикла

Применены обозначения:

  • ИПЦ – имя параметра цикла (переменная любого числового типа);

  • НЗПЦ – начальное значение параметра цикла (выражение любого числового типа), которое параметр цикла будет иметь при первом выполнении тела цикла;

  • КЗПЦ – конечное значение параметра цикла (выражение любого числового типа), с которым сравнивается текущее значение параметра цикла;

  • ШИПЦ – шаг изменения параметра цикла (выражение любого числового типа) – необязательная часть инструкции цикла.

цикл пока условие

тело цикла (последовательность действий)

конец цикла

цикл делать

тело цикла (последовательность действий)

пока условие

конец цикла

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

Вложенные циклы.

Возможны случаи, когда внутри тела цикла необходимо повторять некоторую последовательность операторов, т. е. организовать внутренний цикл. Такая структура получила название цикла в цикле или вложенных циклов. Глубина вложения циклов (то есть количество вложенных друг в друга циклов) может быть различной.

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