Лекция

Тема: «Понятие алгоритма. Изображение алгоритма в виде блок-схемы»

 

План

1.      Понятие алгоритма

2.      Изображение алгоритма в виде блок-схемы

3.      Основные структуры алгоритмов

4.      Упражнения

 

1. Понятие алгоритма

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

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

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

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

Алгоритм обладает следующими основными свойствами, раскрывающими его определение:

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

2. Определенность (или    детерминированность). Это свойство состоит в том, что каждое правило алгоритма должно быть четким, однозначным и не оставлять места для произвола. Благодаря этому свойству выполне­ние алгоритма носит механический характер и не требует никаких дополнительных указаний или сведений о реша­емой задаче.

3. Результативность (или конечность). Это свойство состоит в том, что алгоритм должен   приводить к решению задачи за конечное число шагов.

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

5. Правильность. Способность алгоритма давать правиль­ные результаты при решении поставленных задач

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

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

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

Разработанный алгоритм можно зафиксировать несколь­кими способами:

·         ·  на естественном языке (предыдущий пример);

·         ·  в виде блок-схемы (см. ниже);

·         ·  на специальном языке для записи алгоритмов (алгоритмическом языке).

 

2. Изображение алгоритма в виде блок-схемы

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

Существует Государственный стандарт (ГОСТ), опреде­ляющий правила выполнения схем и обозначения для отдельных операций процесса обработки данных. Блок-схемы строятся по определенным правилам и вклю­чают в себя геометрические фигуры (блочные символы) соединенные между собой стрелками (линиями), указыва­ющими порядок выполнения операций. Блочные символы стандартизированы и различаются по типу выполняемых действий (ГОСТ 19.002-80 и 19.003-80, международные стандарты ISO 2636-73 или ISO 1028-73). ГОСТом, помимо типов фигур, предписываются также определенные размеры их сторон, одинаковые размеры блоков. Этих требований необходимо придерживаться при оформлении окончательной документации. На промежуточ­ных этапах разработки алгоритма придерживаться этих требований ГОСТа не обязательно. Приведем наиболее употребительные блоки блок-схем:

 

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

Обозначение

Функция

Процесс

Описание: \\server\w$\xampp\htdocs\program\lekcii\1\lekc01_1.gif

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

Решение

Описание: \\server\w$\xampp\htdocs\program\lekcii\1\lekc01_2.gif

Выбор направления выполнения алгоритма или программы в зависимости от некоторых переменных условий

Модификация

Описание: \\server\w$\xampp\htdocs\program\lekcii\1\lekc01_3.gif

Выполнение операций, меняющих команды, или группы команд, меняющих программу

Предопределенный
процесс

Описание: \\server\w$\xampp\htdocs\program\lekcii\1\lekc01_4.gif

Использование ранее созданных и отдельно описанных алгоритмов и программ

Ввод-вывод

Описание: \\server\w$\xampp\htdocs\program\lekcii\1\lekc01_5.gif

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

Линия потока

Описание: \\server\w$\xampp\htdocs\program\lekcii\1\lekc01_6.gif

Указание последовательности обработки символов

Соединитель

Описание: \\server\w$\xampp\htdocs\program\lekcii\1\lekc01_7.gif

Указание на наличие связи между прерванными линиями потока, связывающими символы

Пуск-останов

Описание: \\server\w$\xampp\htdocs\program\lekcii\1\lekc01_8.gif

Начало и конец выполнения программы

Межстраничный
соединитель

Описание: \\server\w$\xampp\htdocs\program\lekcii\1\lekc01_9.gif

Указание на наличие связи между разъединенными частями схемы, расположенных на разных листах

Рассмотрим более подробно применение основных графических элементов блок-схемы.         

 

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

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

Описание: \\server\w$\xampp\htdocs\program\lekcii\1\lekc01_10.jpg

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

Описание: Описание: E:\Мои документы\1 Ленкова\02 Основы программирования\program\lekcii\lekc01_11.jpg

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

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

Описание: \\server\w$\xampp\htdocs\program\lekcii\1\lekc01_12.jpg

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

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

Из блока проверки условия может выходить два или три информационных потока, что отличает его от других блочных символов, имеющих не более одного выхода. Вы­ходящие из блока линии должны снабжаться условиями, порождающими то или иное направление исполнения ал­горитма (например, «да» или «нет», <0, =0 или >0, + или т. д.).

Описание: \\server\w$\xampp\htdocs\program\lekcii\1\lekc01_13.jpg

Блочный символ модификации символизирует начало циклических вычислений (заголовок цикла), для управле­ния которыми он используется.

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

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

Описание: \\server\w$\xampp\htdocs\program\lekcii\1\lekc01_14.jpg

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

В блочный символ вписывают номера блоков, в которые вычислительный процесс передается или из которых он по­ступил. Так, верхний соединитель указывает, что вычисли­тельный процесс передается на вход блока 15, а нижний – что вычислительный процесс поступил с выхода блока 10.

Описание: \\server\w$\xampp\htdocs\program\lekcii\1\lekc01_15.jpg

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

Изображенный межстраничный соединитель означает, что вычислительный процесс передается на вход блока 23, расположенного на странице 10. Нижний меж­страничный соединитель означает, что информация переда­на с выхода блока 12, расположенного на странице 6 (то есть сначала указывается номер страницы, а под ним номер бло­ка, на который передается или с которого принимается уп­равление).

Описание: \\server\w$\xampp\htdocs\program\lekcii\1\lekc01_16.jpg

Для обращения к вычислению по подпрограмме (стан­дартной или разработанной пользователем) в схеме исполь­зуют блочный символ предопределенного процесса.

Описание: \\server\w$\xampp\htdocs\program\lekcii\1\lekc01_17.jpg

 

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

 

При создании блок-схем используют следующие правила:

·         ·        линии потока проводят параллельно внешним краям рамки листа. Допускается пересечение их или изгиб под углом 90°. Направление линий потока сверху вниз и сле­ва направо принимают за основное: если линии потока ос­новного направления не имеют изломов, то это направление стрелками можно не обозначать. В остальных случа­ях направление линий потока обозначать стрелкой обяза­тельно;

·         ·        схема является самым наглядным и простым способом представления алгоритма. В ней четко прослеживаются по­рядок выполнения действий, потоки информации и пути их следования. Линии по отношению к блокам могут быть вхо­дящими и выходящими. Количество входящих линий для всех блоков не ограничено – их может быть одна, две, три и более. Выходящая же линия для большинства блоков может быть только одна (исключение – блоки проверки условия);

·         ·        в схеме блоки, за исключением соединителей, могут нуме­роваться – для простоты дальнейшего описания их работы, организации комментариев и использования соединителей. Номера проставляют в верхней части графического симво­ла в разрыве его рамки, как это показано на предыдущих ри­сунках. Блок пуска и останова не нумеруется, но обязатель­но учитывается при нумерации остальных блоков;

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

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

·         ·        в схеме должны четко прослеживаться потоки инфор­мации;

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

·         ·        не допускается передача управления «в никуда». Источ­ник и получатель должны быть четко обозначены.

 

3. Основные структуры алгоритмов

Основные структуры алгоритмов – это ограниченный набор блоков и стандартных способов их соединения для выполнения типичных последовательностей действий.

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

К основным структурам относятся:

               1. Следование (линейный). Последовательное размещение блоков и групп блоков. В программе реализуется последова­тельным размещением операторов.

Описание: \\server\w$\xampp\htdocs\program\lekcii\1\lekc02_3.gif

2. Разветвление. Применяется, ког­да в зависимости от условия нужно выполнить либо одно, либо другое действие. Действие 1 или действие 2 может в свою очередь содержать несколько этапов

Описание: \\server\w$\xampp\htdocs\program\lekcii\1\lekc02_5.jpg

3. Обход. Частный случай разветвления, когда одна ветвь не содержит никаких действий.

Описание: Описание: E:\Мои документы\1 Ленкова\02 Основы программирования\program\lekcii\lekc02_6.jpg

            4. Множественный выбор. Явля­ется обобщением разветвления,  когда  в  зависимости  от значения переменной (I) вы­полняется одно из нескольких действий. При I=1 выполня­ется действие S1, при I=2 – действие S2 и т. д.

Описание: \\server\w$\xampp\htdocs\program\lekcii\1\lekc02_7.gif

 

            5. Цикл с известным количеством повторений. Применяется, если нужно повторить некоторую часть программы (тело цикла) заранее известное количество раз.

Описание: Описание: E:\Мои документы\1 Ленкова\02 Основы программирования\program\lekcii\lekc02_8.gif

Счетчик цикла (i) принимает начальное значение (а). Значение счетчика цикла сравнивается с конечным значением (b). Если счетчик меньше либо равен конечному значению, то выполняется тело цикла, счетчик увеличивается на шаг (с) и снова происходит сравнение счетчика с конечным значением. Такие операции повторяются до тех пор, пока значение счетчика не превысит конечное значение. (В таких циклах допускается и уменьшение счетчика. В этом случае начальное значение должно быть больше либо равно конечному, а шаг отрицательным. Выполнение цикла выполняется до тех пор, пока значение счетчика не станет меньше конечного значения).

6.   Цикл с предусловием. Применяется при необходимости  выполнить  какие-либо вычисления  несколько раз при неизвестном заранее количестве повторов. В этом случае цикл повторяется до выполнения некоторого условия. В таких циклах вначале задаются некоторые начальные параметры, затем проверяется некоторое условие. Если оно выполняется, то выполняется тело цикла, и условие проверяется снова. Цикл повторяется до тех пор, пока выполняется условие

Описание: \\server\w$\xampp\htdocs\program\lekcii\1\lekc02_9.gif

            7. Цикл с постусловием. Особенность  этого цикла в том, что он всегда выполняется хотя бы один раз, так как первая проверка условия выхода из цикла проис­ходит после того, как тело цикла выполнено.

Описание: \\server\w$\xampp\htdocs\program\lekcii\1\lekc02_10.gif

 

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

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

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

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

 

4. Упражнения

 

1. Разделить число n на число m

 

 

Описание: \\server\w$\xampp\htdocs\program\lekcii\1\lekc02_25.gif

 

2. Составить блок-схему нахождения площади трапеции

 

Описание: \\server\w$\xampp\htdocs\program\lekcii\1\lekc02_26.gif

 

3. Выбрать максимальное из двух чисел

 

Описание: \\server\w$\xampp\htdocs\program\lekcii\1\lekc02_27.gif

 

4. Найти максимальное из трех чисел

 

Описание: \\server\w$\xampp\htdocs\program\lekcii\1\lekc02_30.gif

 

5. Задано число x. Найти значение функции у.

Описание: \\server\w$\xampp\htdocs\program\lekcii\1\lekc02_11.gif

Описание: \\server\w$\xampp\htdocs\program\lekcii\1\lekc02_28.gif

 

 

6. Заданы 3 числа: х, y, p. Если р < 0, тогда вычислить переменную t как разность x и у, в противном случае как сумму.

 

 

Описание: \\server\w$\xampp\htdocs\program\lekcii\1\lekc02_29.gif

 

7. Заданы 3 числа: x, y, z. Если х < 0, тогда переменную р посчитать как мах из y и z, если х ≥ 0, то р как min из y и z.

 

 

Описание: \\server\w$\xampp\htdocs\program\lekcii\1\lekc02_30.gif

 

8. Вычислить значение функции: Описание: \\server\w$\xampp\htdocs\program\lekcii\1\lekc02_12.gif

Описание: \\server\w$\xampp\htdocs\program\lekcii\1\lekc02_32.gif

 

 

 

 

9. Составить блок-схему решения квадратного уравнения: ax2 + bx + с = 0; 

 

D = b2 - 4ac                                                                     

          Описание: \\server\w$\xampp\htdocs\program\lekcii\1\lekc02_13.gif

 

Описание: \\server\w$\xampp\htdocs\program\lekcii\1\lekc02_33.gif

 

 

 

10. Вычислить

Описание: \\server\w$\xampp\htdocs\program\lekcii\1\lekc02_14.gif

 

Описание: Описание: E:\Мои документы\1 Ленкова\02 Основы программирования\program\lekcii\lekc02_34.gif

 

11. Найти значение функции: 

 

Описание: \\server\w$\xampp\htdocs\program\lekcii\1\lekc02_15.gif

 

Описание: Описание: E:\Мои документы\1 Ленкова\02 Основы программирования\program\lekcii\lekc02_35.gif

 

12. Найти значение функции:

Описание: \\server\w$\xampp\htdocs\program\lekcii\1\lekc02_16.gif

Описание: Описание: E:\Мои документы\1 Ленкова\02 Основы программирования\program\lekcii\lekc02_36.gif

 

 

 

13. Определить, чему равна функция Y = x + z, где 

 

Описание: \\server\w$\xampp\htdocs\program\lekcii\1\lekc02_17.gif    Описание: \\server\w$\xampp\htdocs\program\lekcii\1\lekc02_18.gif

 

Описание: \\server\w$\xampp\htdocs\program\lekcii\1\lekc02_37.gif

 

14. Найти значение функции 

Описание: \\server\w$\xampp\htdocs\program\lekcii\1\lekc02_19.gif

Описание: Описание: E:\Мои документы\1 Ленкова\02 Основы программирования\program\lekcii\lekc02_38.gif

 

 

15. Найти значение функции вида: 

Описание: \\server\w$\xampp\htdocs\program\lekcii\1\lekc02_20.gif

 

Описание: \\server\w$\xampp\htdocs\program\lekcii\1\lekc02_21.gif   Описание: \\server\w$\xampp\htdocs\program\lekcii\1\lekc02_22.gif

 

Описание: \\server\w$\xampp\htdocs\program\lekcii\1\lekc02_39.gif

 

 

 

 

16. Найти сумму ряда с заданной точностью E:

Описание: \\server\w$\xampp\htdocs\program\lekcii\1\lekc02_23.gif

Решить задачу с предусловием и постусловием

 

Описание: \\server\w$\xampp\htdocs\program\lekcii\1\lekc02_43.gif       Описание: \\server\w$\xampp\htdocs\program\lekcii\1\lekc02_44.gif

 

17. Составить алгоритм нахождения факториала числа: Y = n!

 

 

Описание: \\server\w$\xampp\htdocs\program\lekcii\1\lekc02_46.gif

 

18. Затабулировать значение функции Y = sin(x) на отрезке [0, 6.28]  с шагом ∆x = 0.3

 

Описание: \\server\w$\xampp\htdocs\program\lekcii\1\lekc02_47.gif

 

 

19. На основе этой задачи просуммировать те элементы функции, значение которых < 0,5.

 

Описание: \\server\w$\xampp\htdocs\program\lekcii\1\lekc02_48.gif

 

Вопросы для самоконтроля

1. Что такое алгоритм? Назовите его свойства.

2. Что такое алгоритмизация?

3. Способы составления алгоритмов (три)?

4. Что такое схема?

5. Назовите основные блоки блок-схем и их назначение.

6. Назовите основные правила, которыми пользуются при создании блок-схем.

7. Какие основные структуры алгоритмов вы знаете?

8.  Дайте характеристику алгоритма следования.

9. Дайте характеристику алгоритма разветвления.

10. Расскажите об алгоритме множественного выбора.

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

12. Дайте характеристику алгоритма циклов с неизвестным количеством повторений.