Методы проектирования алгоритмов 


Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

Методы проектирования алгоритмов



МЕТОДИЧЕСКИЕ УКАЗАНИЯ

на практическое занятие по учебной дисциплине

«Основы программирования»

Тема «Основы алгоритмизации»

 

Томск 2013

 

 

Содержание работы

1. Основные понятия. 2

2. Способы описания алгоритмов. 3

3. Методы проектирования алгоритмов. 9

4. Структурные схемы алгоритмов. 11

5. Этапы подготовки и решения задач на ЭВМ... 16

6. Тест по основам алгоритмизации. 19

7. Практические задания. 20

7.1. Примеры линейного и разветвленного алгоритмов. 20

7.2. Циклические алгоритмы.. 21

 

 


Основные понятия

 

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

Алгоритм обладает следующими свойствами (они следуют из определения):

1. определенность (детерминированность) – каждая команда (или предписание) понятна исполнителю (человеку или компьютеру) и исключает неоднозначность исполнения;

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

3. массовость – если алгоритм разработан для решения определенной задачи, он должен быть применим для решения задач этого типа при всех допустимых значениях исходных данных;

4. дискретность – пошаговый характер процесса получения результата, состоящий в последовательном выполнении конечного числа заданных алгоритмом действий.

 

Различают следующие простейшие виды алгоритмов:

1. линейный, когда предписания алгоритма выполняются в той последовательности, в которой они представлены в алгоритме;

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

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

 

 


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

 

К основным способам описания алгоритмов можно отнести следующие:

1. словесно-формульный;

2. структурный или блок-схемный;

3. с помощью граф-схем;

4. с помощью сетей Петри.

Перед составлением программ чаще всего используются словесно-формульный и блок-схемный способы. Иногда перед составлением программ на низкоуровневых языках программирования типа языка Ассемблера алгоритм программы записывают, пользуясь конструкциями некоторого высокоуровнего языка программирования. Удобно использовать программное описание алгоритмов функционирования сложных программных систем. Так, для описания принципов функционирования ОС использовался Алголоподобный высокоуровневый язык программирования.

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

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

у = 2а – (х+6).

Словесно-формульным способом алгоритм решения этой задачи может быть записан в следующем виде:

1. Ввести значения а и х.

2. Сложить х и 6.

3. Умножить a на 2.

4. Вычесть из 2а сумму (х+6).

5. Вывести у как результат вычисления выражения.

 

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

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

Оформление программ должно соответствовать определенным требованиям. В настоящее время действует единая система программной документации (ЕСПД), которая устанавливает правила разработки, оформления программ и программной документации. В ЕСПД определены и правила оформления блок-схем алгоритмов (ГОСТ 10.002-80 ЕСПД, ГОСТ 10.003-80 ЕСПД).

Операции обработки данных и носители информации изображаются на схеме соответствующими блоками. Большая часть блоков по построению условно вписана в прямоугольник со сторонами а и b. Минимальное значение а = 10 мм, увеличение а производится на число, кратное 5 мм. Размер b=1,5a. Для отдельных блоков допускается соотношение между а и b, равное 1:2. В пределах одной схемы рекомендуется изображать блоки одинаковых размеров. Все блоки нумеруются. Виды и назначение основных блоков приведены в табл. 1.

 

Таблица 1. Условные обозначения блоков схем алгоритмов

Наименование Обозначение Функции
Процесс Выполнение операции или группы операций, в результате которых изменяется значение, форма представления или расположение данных.
Ввод-вывод Преобразование данных в форму, пригодную для обработки (ввод) или отображения результатов обработки (вывод).
Решение Выбор направления выполнения алгоритма в зависимости от некоторых переменных условий.
Предопределенный процесс Использование ранее созданных и отдельно написанных программ (подпрограмм).
Документ Вывод данных на бумажный носитель.
Магнитный диск Ввод-вывод данных, носителем которых служит магнитный диск.
Пуск-останов Начало, конец, прерывание процесса обработки данных.
Соединитель Указание связи между прерванными линиями, соединяющими блоки.
Межстраничный соединитель Указание связи между прерванными линиями, соединяющими блоки, расположенные на разных листах.
Комментарий Связь между элементом схемы и пояснением.

 

Тексты, которые записываются в блоки, не регламентируются: они должны отражать выполняемые действия и не быть ориентированными на тот или иной язык программирования. Если текст не помещается в блок, справа или слева к блоку приписывается комментарий, куда и помещается дополнительный текст.

Блоки: процесс, решение, модификация, предопределенный процесс, ввод-вывод, останов имеют единый вход (т.е. входящую линию потока), который располагается вверху блока. Например, для блока «процесс»:

 

 

Блоки: процесс, предопределенный процесс, ввод-вывод, пуск имеют единый выход (т.е. выходящую линию потока), который располагается внизу блока. Например, для блока «процесс»:

 

Блок решение имеет как минимум два выхода, которые подписываются словами ДА и НЕТ, например,

 

Блок модификация имеет выходы и входы (кроме входа в блок) со следующими значениями:

 

 

связь 1 – возврат к началу цикла. Имеет место, когда параметр цикла не превысил своего максимального значения;

связь 2 – вход в тело цикла;

связь 3 – выход из цикла, когда параметр цикла превысил свое максимальное значение.

Вход и выход в блок внутристраничного соединителя допускается в любом месте, например:

 

Вход в блок межстраничного соединителя допускается только сверху, а выход - только снизу, например:

 

Сами линии потока должны отвечать следующим требованиям:

1. должны быть параллельны внешним краям рамки листа;

2. допускается пересечение линий потока или изгиб под углом 90°, например:

3.

4. для обозначения слияния место слияния обозначается точкой, например:

5.

 

6. направление линий потока сверху вниз и слева направо считается основным. В противном случае, направление указывается стрелкой;

7. расстояние между параллельными линиями потока не менее 3 мм, между остальными символами схемы не менее 5 мм.

 

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

Схему алгоритма следует выполнять как единое целое, однако в случае необходимости допускается обрывать линии, соединяющие блоки.

Если при обрыве линии продолжение схемы находится на этом же листе, то на одном и другом конце линии изображается специальный символ соединитель — окружность диаметром 0,5 а. Внутри парных окружностей указывается один и тот же идентификатор. В качестве идентификатора, как правило, используется порядковый номер блока, к которому направлена соединительная линия.

Если схема занимает более одного листа, то в случае разрыва линии вместо окружности используется межстраничный соединитель. Внутри каждого, соединителя указывается адрес — откуда и куда направлена соединительная линия. Адрес записывается в две строки: в первой указывается номер листа, во второй — порядковый номер блока.

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

 


Примеры линейного и разветвленного алгоритмов

Пример 1 Составить блок-схему вычисления переменной

y = a3 / (a2 + x2)

при а и x, введенных с клавиатуры.

Решение

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

1. ввод значений а и х

2. вычисление значения y по заданной формуле

3. вывод полученного значения y

Изобразим данные шаги в виде блок-схемы:

Пример 2 Вычислить значение переменной y, в зависимости от значения переменных a и x, введенных с клавиатуры по правилу:

Решение

Данный алгоритм относится к типу разветвленных, так как значение переменной y вычисляется по разным формулам в зависимости от значений а и х. Алгоритм предполагает следующие шаги:

4. ввод значений а и х

5. определение соотношения переменных а и х

6. если a < x, то вычисление значения y по первой формуле и переход к шагу 8

7. если а ≥ х, то вычисление значения y по второй формуле

8. вывод полученного значения y

Изобразим данные шаги в виде блок-схемы:

 

 

 

Циклические алгоритмы

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

Структура цикл существует в трех основных вариантах:

Цикл с параметром.

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

Обозначение цикла с параметром в блок-схемах алгоритмов.

 

Цикл с предусловием.

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

Обозначение цикла с предусловием в блок-схемах алгоритмов.

 

Цикл с постусловием.

Предписывает выполнять тело цикла до тех пор, пока не выполнится проверочное условие (условие – ложно). Условие проверяется после выполнения тела цикла. Тело цикла выполнится как минимум один раз, даже если условие окончания цикла изначально верно.

Обозначение цикла с постусловием в блок-схемах алгоритмов.

 

Пример 1.

Составить блок-схему алгоритма вычисления функции в точках изменения аргумента:

Решение

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

 

Пример 2.

Составить блок-схему вычисления функции

с параметром  и при x, изменяющимся от 0 до 3 с шагом Dx = 0,1.

Решение

В данном случае цикл можно организовать по значениям x. Но шаг изменения x есть величина дробная, следовательно, цикл с параметром использовать нельзя. Применим цикл с постусловием.

Задание 1(общее): переделать данный алгоритм так, чтобы использовать цикл с параметром.

 

Пример 3.

Составить алгоритм вычисления суммы ряда

с заданной точностью ε (для данного знакочередующегося степенного ряда требуемая точность будет достигнута, когда очередное слагаемое станет по абсолютной величине меньше ε).

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

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

Решая эту задачу "в лоб" путем вычисления на каждом i-ом шаге частичной суммы

мы получим очень неэффективный алгоритм, требующий выполнения большого числа операций. Гораздо лучше организовать вычисления следующим образом: если обозначить числитель какого-либо слагаемого буквой р, то у следующего слагаемого числитель будет равен -р*х (знак минус обеспечивает чередование знаков слагаемых), а само слагаемое m будет равно p/i, где i - номер слагаемого.

 

Задание 2 (общее): переделать алгоритм так, чтобы использовался цикл с постусловием.

 

Задание 3 (индивидуальное):

Практическое задание по вариантам взять из методички «Информатика», тема 7: Программирование разветвляющихся и циклических алгоритмов, задание 2: нахождение суммы бесконечного ряда.

Задание 4 (индивидуальное). Составьте блок-схему алгоритма, позволяющего вычислить значение функции при значениях переменной х в интервале от -p до p с шагом 0,2. значение р вводится с клавиатуры.

Вариант Функция
1
2
3
4
5
6
7
8
9

Блок-схему нарисуйте в Word, используя Автофигуры => раздел Блок-схемы и раздел Соединительные линии.

Полученную блок-схему алгоритма сгруппируйте.

 

МЕТОДИЧЕСКИЕ УКАЗАНИЯ

на практическое занятие по учебной дисциплине

«Основы программирования»

Тема «Основы алгоритмизации»

 

Томск 2013

 

 

Содержание работы

1. Основные понятия. 2

2. Способы описания алгоритмов. 3

3. Методы проектирования алгоритмов. 9

4. Структурные схемы алгоритмов. 11

5. Этапы подготовки и решения задач на ЭВМ... 16

6. Тест по основам алгоритмизации. 19

7. Практические задания. 20

7.1. Примеры линейного и разветвленного алгоритмов. 20

7.2. Циклические алгоритмы.. 21

 

 


Основные понятия

 

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

Алгоритм обладает следующими свойствами (они следуют из определения):

1. определенность (детерминированность) – каждая команда (или предписание) понятна исполнителю (человеку или компьютеру) и исключает неоднозначность исполнения;

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

3. массовость – если алгоритм разработан для решения определенной задачи, он должен быть применим для решения задач этого типа при всех допустимых значениях исходных данных;

4. дискретность – пошаговый характер процесса получения результата, состоящий в последовательном выполнении конечного числа заданных алгоритмом действий.

 

Различают следующие простейшие виды алгоритмов:

1. линейный, когда предписания алгоритма выполняются в той последовательности, в которой они представлены в алгоритме;

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

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

 

 


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

 

К основным способам описания алгоритмов можно отнести следующие:

1. словесно-формульный;

2. структурный или блок-схемный;

3. с помощью граф-схем;

4. с помощью сетей Петри.

Перед составлением программ чаще всего используются словесно-формульный и блок-схемный способы. Иногда перед составлением программ на низкоуровневых языках программирования типа языка Ассемблера алгоритм программы записывают, пользуясь конструкциями некоторого высокоуровнего языка программирования. Удобно использовать программное описание алгоритмов функционирования сложных программных систем. Так, для описания принципов функционирования ОС использовался Алголоподобный высокоуровневый язык программирования.

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

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

у = 2а – (х+6).

Словесно-формульным способом алгоритм решения этой задачи может быть записан в следующем виде:

1. Ввести значения а и х.

2. Сложить х и 6.

3. Умножить a на 2.

4. Вычесть из 2а сумму (х+6).

5. Вывести у как результат вычисления выражения.

 

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

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

Оформление программ должно соответствовать определенным требованиям. В настоящее время действует единая система программной документации (ЕСПД), которая устанавливает правила разработки, оформления программ и программной документации. В ЕСПД определены и правила оформления блок-схем алгоритмов (ГОСТ 10.002-80 ЕСПД, ГОСТ 10.003-80 ЕСПД).

Операции обработки данных и носители информации изображаются на схеме соответствующими блоками. Большая часть блоков по построению условно вписана в прямоугольник со сторонами а и b. Минимальное значение а = 10 мм, увеличение а производится на число, кратное 5 мм. Размер b=1,5a. Для отдельных блоков допускается соотношение между а и b, равное 1:2. В пределах одной схемы рекомендуется изображать блоки одинаковых размеров. Все блоки нумеруются. Виды и назначение основных блоков приведены в табл. 1.

 

Таблица 1. Условные обозначения блоков схем алгоритмов

Наименование Обозначение Функции
Процесс Выполнение операции или группы операций, в результате которых изменяется значение, форма представления или расположение данных.
Ввод-вывод Преобразование данных в форму, пригодную для обработки (ввод) или отображения результатов обработки (вывод).
Решение Выбор направления выполнения алгоритма в зависимости от некоторых переменных условий.
Предопределенный процесс Использование ранее созданных и отдельно написанных программ (подпрограмм).
Документ Вывод данных на бумажный носитель.
Магнитный диск Ввод-вывод данных, носителем которых служит магнитный диск.
Пуск-останов Начало, конец, прерывание процесса обработки данных.
Соединитель Указание связи между прерванными линиями, соединяющими блоки.
Межстраничный соединитель Указание связи между прерванными линиями, соединяющими блоки, расположенные на разных листах.
Комментарий Связь между элементом схемы и пояснением.

 

Тексты, которые записываются в блоки, не регламентируются: они должны отражать выполняемые действия и не быть ориентированными на тот или иной язык программирования. Если текст не помещается в блок, справа или слева к блоку приписывается комментарий, куда и помещается дополнительный текст.

Блоки: процесс, решение, модификация, предопределенный процесс, ввод-вывод, останов имеют единый вход (т.е. входящую линию потока), который располагается вверху блока. Например, для блока «процесс»:

 

 

Блоки: процесс, предопределенный процесс, ввод-вывод, пуск имеют единый выход (т.е. выходящую линию потока), который располагается внизу блока. Например, для блока «процесс»:

 

Блок решение имеет как минимум два выхода, которые подписываются словами ДА и НЕТ, например,

 

Блок модификация имеет выходы и входы (кроме входа в блок) со следующими значениями:

 

 

связь 1 – возврат к началу цикла. Имеет место, когда параметр цикла не превысил своего максимального значения;

связь 2 – вход в тело цикла;

связь 3 – выход из цикла, когда параметр цикла превысил свое максимальное значение.

Вход и выход в блок внутристраничного соединителя допускается в любом месте, например:

 

Вход в блок межстраничного соединителя допускается только сверху, а выход - только снизу, например:

 

Сами линии потока должны отвечать следующим требованиям:

1. должны быть параллельны внешним краям рамки листа;

2. допускается пересечение линий потока или изгиб под углом 90°, например:

3.

4. для обозначения слияния место слияния обозначается точкой, например:

5.

 

6. направление линий потока сверху вниз и слева направо считается основным. В противном случае, направление указывается стрелкой;

7. расстояние между параллельными линиями потока не менее 3 мм, между остальными символами схемы не менее 5 мм.

 

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

Схему алгоритма следует выполнять как единое целое, однако в случае необходимости допускается обрывать линии, соединяющие блоки.

Если при обрыве линии продолжение схемы находится на этом же листе, то на одном и другом конце линии изображается специальный символ соединитель — окружность диаметром 0,5 а. Внутри парных окружностей указывается один и тот же идентификатор. В качестве идентификатора, как правило, используется порядковый номер блока, к которому направлена соединительная линия.

Если схема занимает более одного листа, то в случае разрыва линии вместо окружности используется межстраничный соединитель. Внутри каждого, соединителя указывается адрес — откуда и куда направлена соединительная линия. Адрес записывается в две строки: в первой указывается номер листа, во второй — порядковый номер блока.

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

 


Методы проектирования алгоритмов

 

Методы проектирования алгоритмов включают: нисходящее проектирование, модульность, структурное программирование.

 

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

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

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

 

циклический. Используется для представления циклических алгоритмов. Описывается языком графических символов одним из двух способов:

 

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

 или

 



Поделиться:


Последнее изменение этой страницы: 2020-12-09; просмотров: 449; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 3.14.15.94 (0.169 с.)