Меню Рубрики

Как пишется функция в блок схеме

Оформление подпрограмм в блок-схемах алгоритмов

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

Вызов подпрограммы в основной программе изображается на блок-схеме в виде блока «Предопределенный процесс»:

1.3 Пример составления алгоритма и программы на языке Pascal для обработки одномерных массивов с использованием подпрограмм.

Задание: Даны два массива вещественных чисел A(20) и F(30). Найти средние арифметические значения положительных элементов в каждом массиве и вывести на экран отношение этих значений.

Для объявления массивов A и F опишем в разделе Type тип массива из 30 вещественных чисел. Для обозначения количества элементов массива A введем переменную Na, количества элементов массива F – переменную Nf, средних арифметических значений положительных элементов массивов – переменные SrA и SrF.

Для каждого массива необходимо повторить одни и те же операции:

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

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

Процедуру ввода элементов массива назовем EnterMassiv, в списке формальных параметров укажем следующие переменные: массив X и количество элементов в массиве Nx. При этом в списке формальных параметров массив должен быть указан со служебным словом var, поскольку значения элементов массива изменяются в процедуре и возвращаются в основную программу. Внутри процедуры формирование элементов массива выполним с помощью генератора случайных чисел random.

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

Функцию поиска среднего значения среди положительных элементов массива назовем MiddlePositive, и будем в нее также передавать массив X и количество элементов в массиве Nx. Поскольку среднее арифметическое является вещественным числом, тип функции должен быть real. Внутри функции будем использовать локальную переменную K для подсчета количества положительных элементов массива, переменную M для расчета суммы всех положительных элементов массива и их среднего значения.

1.3.1 Блок-схема алгоритма решения данной задачи выглядит следующим образом:

Блок схема подпрограммы EnterMassiv

Блок схема подпрограммы PrintMassiv

Блок схема подпрограммы MiddlePositive

Блок-схема основной программы

1.3.2 Текст программы на языке Pascal выглядит следующим образом:

Источник статьи: http://studopedia.ru/9_33212_oformlenie-podprogramm-v-blok-shemah-algoritmov.html

Теория программирования. Алгоритмизация. Блок-схемы.

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

Давайте сначала поймем, что такое блок схемы.

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

Ага, то есть блок схема, это способ представления нашего алгоритма в картинках. Но зачем? Дело в том, что человеку, как существу, имеющему зрение, проще и удобнее, зачастую, воспринимать информацию, если она продублирована в виде текста или имеет какие-то графические обозначения. Если не вдаваться в подробности, то это называется зрительным восприятием. Согласитесь, если вы видите объект беседы перед собой, вам проще его воспринимать, обсуждать и т.д.

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

Процесс — под процессом здесь понимается какое-то действие. Арифметическая или логическая операция. Что то, что приведет вас к финальному результату выполнив один пункт вашего алгоритма. Допустим “a+b” будет помещаться именно в такой блок.

Решение — немного странное название, но думаю, что вы уже догадались, что это условие. С ним мы уже сталкивались в прошлой статье по алгоритмам. Когда нам приходилось РЕШАТЬ, что делать дальше, на основе какого-то результата.

Модификация — забудьте про это слово. Это просто цикл. О циклах мы тоже говорили. Но конкретно этот цикл немного специфичный. Это обозначение цикла For, который является счетным циклом и немного отличатся от остальных. Иные циклы могут быть представлены без специального оператора, это мы с вами попробуем изобразить чуть ниже.

Предопределенный процесс — некая модификация первого блока. Что значит предопределенный? Значит определённый заранее. И тут вообще ступор, но тем не менее он именно так и называется. Говоря простым языком — это ПОДпрограмма, (метод или процедура/функция). Такого мы еще не видели.

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

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

Пуск-останов — это те же самые начало и конец, тут думаю пояснения не требуются.

Сейчас вы в ужасе, что я почти для каждого из пунктов подобрал синонимы, и порой более логичные, и понятные. Да, дело в том, что алгоритмизация, это забытый аспект программирования. И из-за этого появляются некоторые сложности. Если что-то не развивать, оно и не разовьется. Может быть многие со мной не согласятся, но я спрошу их, как часто они видят блок схемы в курсах по программированию? Бинго. Ни где их нет.
Зачем же я вам показал отличающиеся название, от тех, что я обычно использую? Что бы вы просто не впадали в ступор если вдруг увидите останов, вместо конца. Более подробно о том, как же все-таки правильно и где какие размеры и сколько градусов углы у каждого ромбика вы можете почитать в ГОСТ 19.701-90 «Схемы алгоритмов, программ, данных и систем. Условные обозначения и правила выполнения». Мы в такие подробности вдаваться не будем, по причине того, что мы любители и нам за это не платят, но уметь строить блок-схемы и самое главное читать их, мы должны уметь.

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

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

Быть или не быть? Вот в чем блок-схема. Если быть, то да, следовательно, быть. Если нет, значит нет, ну и вы поняли.

Если у кого то язык чуть не сломался когда читали что в ромбике, то вы заметили, что на самом деле там все должно быть однозначно. И по идеи стоит заменить на вопрос «Быть?» тогда все станет немного логичнее, если вы запнулись на этом месте, значит вы на верном пути в понимании процесса, если нет, то ничего страшного, все еще впереди, тем-более что об условиях я мало рассказал, пока что.

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

Источник статьи: http://zen.yandex.ru/media/id/5d5e1b384e057700ad5e6f31/teoriia-programmirovaniia-algoritmizaciia-blokshemy-5d60452203bdd400ae03a7f3

Блок-схемы алгоритмов. ГОСТ. Примеры

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

На территории Российской Федерации действует единая система программной документации (ЕСПД), частью которой является Государственный стандарт — ГОСТ 19.701-90 «Схемы алгоритмов программ, данных и систем» [1]. Не смотря на то, что описанные в стандарте обозначения могут использоваться для изображения схем ресурсов системы, схем взаимодействия программ и т.п., в настоящей статье описана лишь разработка схем алгоритмов программ.

Рассматриваемый ГОСТ практически полностью соответствует международному стандарту ISO 5807:1985.

Содержание:

Элементы блок-схем алгоритмов

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

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

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

Операции ввода и вывода данных В ГОСТ определено множество символов ввода/вывода, например вывод на магнитные ленты, дисплеи и т.п. Если источник данных не принципиален, обычно используется символ параллелограмма. Подробности ввода/вывода могут быть указаны в комментариях.

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

Блок, иллюстрирующий ветвление алгоритма Блок в виде ромба имеет один вход и несколько подписанных выходов. В случае, если блок имеет 2 выхода (соответствует оператору ветвления), на них подписывается результат сравнения — «да/нет». Если из блока выходит большее число линий (оператор выбора), внутри него записывается имя переменной, а на выходящих дугах — значения этой переменной.

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

Начало и конец цикла Символы начала и конца цикла содержат имя и условие. Условие может отсутствовать в одном из символов пары. Расположение условия, определяет тип оператора, соответствующего символам на языке высокого уровня — оператор с предусловием (while) или постусловием (do … while).

Подготовка данных Символ «подготовка данных» в произвольной форме (в ГОСТ нет ни пояснений, ни примеров), задает входные значения. Используется обычно для задания циклов со счетчиком.

Соединитель В случае, если блок-схема не умещается на лист, используется символ соединителя, отражающий переход потока управления между листами. Символ может использоваться и на одном листе, если по каким-либо причинам тянуть линию не удобно.

Комментарий Комментарий может быть соединен как с одним блоком, так и группой. Группа блоков выделяется на схеме пунктирной линией.

Примеры блок-схем

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

Сортировка вставками

Массив в алгоритме сортировки вставками разделяется на отсортированную и еще не обработанную части. Изначально отсортированная часть состоит из одного элемента, и постепенно увеличивается.

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

Блок-схема алгоритма сортировки вставками

В приведенной блок-схеме для организации цикла используется символ ветвления. В главном цикле (i Блок-схема алгоритма сортировки пузырьком

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

Сортировка выбором

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

Блок-схема сортировки выбором

На блок-схеме приведен пример использования блока «подготовка», а также показано, что в ряде случаев можно описывать алгоритм более «укрупнённо» (не вдаваясь в детали). К сортировке выбором не имеют отношения детали реализации поиска индекса минимального элемента массива, поэтому они могут быть описаны символом вызова внешней процедуры. Если блок-схема алгоритма внешней процедуры отсутствует, не помешает написать к символу вызова комментарий, исключением могут быть функции с говорящими названиями типа swap, sort, … .

На блоге можно найти другие примеры блок-схем:

Часть студентов традиционно пытается рисовать блок-схемы в Microsoft Word, но это оказывается сложно и не удобно. Например, в MS Word нет стандартного блока для терминатора начала и конца алгоритма (прямоугольник со скругленными краями, а не овал). Наиболее удобными, на мой взгляд, являются утилиты MS Visio и yEd [5], обе они позволяют гораздо больше, чем строить блок-схемы (например рисовать диаграммы UML), но первая является платной и работает только под Windows, вторая бесплатная и кроссплатфомренная. Все блок-схемы в этой статье выполнены с использованием yEd.

Нужны ли блок-схемы? Альтернативы

Частные конторы никакие блок-схемы не используют, в книжках по алгоритмам [6] вместо них применяют словесное описание (псевдокод) как более краткую форму. Возможно блок-схемы применяют на государственных предприятиях, которые должны оформлять документацию согласно требованиям ЕСПД, но есть сомнения — даже для регистрации программы в Государственном реестре программ для ЭВМ никаких блок-схем не требуется.

Тем не менее, рисовать блок-схемы заставляют школьников (примеры из учебников ГОСТ не соответствуют) — выносят вопросы на государственные экзамены (ГИА и ЕГЭ), студентов — перед защитой диплом сдается на нормоконтроль, где проверяется соответствие схем стандартам.

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

Появляются подозрения, что система образования прогнила и отстала лет на 20, однако аналогичная проблема наблюдается и за рубежом. Международный стандарт ISO 5807:1985 мало чем отличается от ГОСТ 19.701-90, более нового стандарта за рубежом нет. Там же производится множество программ для выполнения этих самых схем — Dia, MS Visio, yEd, …, а значит списывать их не собираются. Вместо блок-схем иногда применяют диаграммы деятельности UML [6], однако удобнее они оказываются, разве что при изображении параллельных алгоритмов.

Периодически поднимается вопрос о том, что ни блок-схемы, ни UML не нужны, да и документация тоже не нужна. Об этом твердят программисты, придерживающиеся методологии экстремального программирования (XP) [7], ходя даже в их кругу нет единого мнения.

В ряде случаев, программирование невозможно без рисования блок-схем, т.к. это один процесс — существуют визуальные языки программирования, такие как ДРАКОН [8], кроме того, блок-схемы используются для верификации алгоритмов (формального доказательства их корректности) методом индуктивных утверждений Флойда [9].

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

Источник статьи: http://pro-prof.com/archives/1462


0 0 голоса
Article Rating
Подписаться
Уведомить о
guest

0 Комментарий
Старые
Новые Популярные
Межтекстовые Отзывы
Посмотреть все комментарии