Автор Анна Евкова
Преподаватель который помогает студентам и школьникам в учёбе.

Алгоритмизация как обязательный этап разработки программы ( Алгоритмизация )

Содержание:

Введение

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

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

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

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

1. Алгоритмизация

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

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

2. ПОНЯТИЕ АЛГОРИТМА. СВОЙСТВА И ВИДЫ АЛГОРИТМОВ

Главным, и одним из наиболее сложных этапов решения задачи с использованием ЭВМ, является разработка алгоритма. Алгоритм — конечное предписание исполнителю, описанное на некотором языке, которое определяет вычислительный процесс, направленный на решение поставленной задачи за определенное время[[1]].

Понятие «Алгоритм» происходит от латинского слова algorithmi — от имени узбекского ученого Мухаммеда аль-Хорезми[[2]]. В своей книге, примерно в 825 году, он дал описание десятичной позиционной системы счисления, придуманной в Индии. Позже, в XII веке, книга попала в Европу под названием «Индийское искусство счета, сочинение Аль-Хорезми» (Algoritmi de numero Indorum). На протяжении нескольких следующих столетий множество других трудов, посвященных счёту с помощью цифр, содержали в своём названии слова algoritmi и algorismi.

Из Алгебры и теории чисел у нас появились, упоминаемый во введении, Алгоритм Евклида, а также алгоритмы Гаусса, Штурма и прочие. В дальнейшем, алгоритмом стали называть точное предписание, определяющее последовательность элементарных операций, обеспечивающие получение определяемого из исходных данных результата. Но, несмотря на множество различных вариантов, такое определение алгоритма не является исчерпывающим[[3]], наиболее удачными являются определения алгоритма данные российскими ученными А.А. Марковым и А.Н. Колмогоровым.

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

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

Чтобы отличать алгоритмы от других инструкций, обычно формулируют ряд их требований (свойств)[[4]]:

  1. Определенность (детерминированность) – алгоритм должен быть точным и понятным исполнителю, не допускающий двусмысленной трактовки. Исполнитель, выполняя инструкции, должен чётко понимать, что нужно сделать на данном шаге, и какой шаг должен быть следующим. Благодаря этому свойству выполнение алгоритма носит механический характер и не требует никаких дополнительных инструкций или сведений о выполняемой задаче.
  2. Массовость – алгоритм пригоден для решения всех задач одного типа при различающихся исходных данных. При этом исходные данные могут выбираться из некоторой области, которая называется областью применимости алгоритма.
  3. Дискретность – означает раздельность определяемого алгоритмом вычислительного процесса на отдельные этапы, возможность выполнения которых исполнителем не вызывает сомнений. Каждое действие, предусмотренное алгоритмом, выполняется только после того, как закончилось выполнение предыдущего[[5]].
  4. Результативность – целью выполнения алгоритма является получение конкретного результата, имеющего определенное отношение к исходным данным. Алгоритм должен останавливаться после определенного числа шагов, зависящего от данных, с указанием того, что считать результатом. Если же решение не может быть найдено, то должно быть указано, что в этом случае считать за результат.

Основными критериями качества алгоритма являются:

  1. Связность – определяется количеством промежуточных результатов, которые должны одновременно храниться в памяти. Следовательно, чем меньше связность алгоритма, тем он лучше.
  2. Объём алгоритма – количество простейших операций, которые необходимо выполнить для решения задачи.
  3. Логическая сложность алгоритма – количество ветвлений и циклов. Определяет разнообразие путей процесса вычисления и повторяющихся многократно операций соответственно.
  4. Длительность выполнения алгоритма – зависит от количества и сложности шагов алгоритма. Что в свою очередь, конечно же, зависит от быстродействия исполнителя, но если принять за константу время выполнения некоторой операции, то чем быстрее выполняется алгоритм, тем он лучше[[6]].
  5. Эффективность – алгоритм должен состоять из минимального количества шагов и требовать минимальных затрат ресурсов. При этом решение должно удовлетворять критерии точности.

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

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

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

Алгоритмы, в зависимости от цели, начальных условий задачи, путей её решения и определения действий исполнителя, подразделяются на три основных вида[[7]]:

  1. Линейный алгоритм – набор инструкций, выполняемых последовательно одна за другой.
  2. Разветвляющийся алгоритм – содержащий одно или более условий, в результате обработки которого ЭВМ выполняет одно из двух указанных действий.
  3. Циклический алгоритм – выполняющий многократное повторение одного и того же действия, либо одних и тех же операций, над новыми исходными данными. К циклическим алгоритмам сводится большинство методов вычислений, перебора вариантов. Циклом программы, в таком случае, называют последовательность команд (тело цикла), которое выполняется неоднократно (для новых исходных данных) до выполнения некоторого условия.

Но также существуют и другие виды алгоритмов:

  1. Механический алгоритм (детерминированный), к примеру, алгоритм работы механизма и т.п.
  2. Эвристический алгоритм (от греческого слова «эврика») – алгоритм, в котором достижение конечного результата программы действий однозначно не предопределено, так же как не обозначена вся последовательность действий, не выявлены все действия исполнителя. К примеру, к эвристическим алгоритмам можно отнести различные предписания и инструкции. В этих алгоритмах используются универсальные логические процедуры и способы принятия решений.
  3. Вероятностный алгоритм (гибкий или стохастический) – дает программу решения задачи несколькими путями или способами, приводящими к вероятному достижению результата.
  4. Вспомогательный (подчиненный) алгоритм – ранее разработанный и целиком используемый при алгоритмизации конкретной задачи. В некоторых случаях, при наличии однотипных последовательностей, указаний или команд для различных данных, с целью сокращения записи, также можно создать вспомогательный алгоритм[[8]].

3. СПОСОБЫ ОПИСАНИЯ АЛГОРИТМОВ

Алгоритм можно описать такими способами: словесной записью, псевдокодом и блок-схемой.

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

Не существует единых правил составления словесного описания. Запись словесного алгоритма осуществляется в произвольной форме на естественном языке, к примеру, на русском или английском языке. Такой способ не имеет широкого распространения, так как строго не формализуем (под «формальным» понимается то, что описание абсолютно полное и учитывает все возможные ситуации, которые могут возникнуть в ходе решения); может допускать многозначность толкования некоторых действий; страдает многословностью.

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

Блок-схема – способ выполнения задачи, представленный графически с помощью набора определенных геометрических фигур, связанных линиями[[11]]. Благодаря наглядности, такой способ описания алгоритма считается наиболее распространенным, и обладает рядом преимуществ. Визуализация повышает «читаемость» алгоритма и точно отображает порядок выполнения отдельных инструкций. Такой способ записи позволяет быстро и наглядно оценить весь алгоритм в целом, оценить всю картину, не вдаваясь в подробности его реализации. В блок-схеме, каждому типу действия, соответствует определенная геометрическая фигура, связанная линиями, которые определяют очередность выполнения.

Вид символов и правила составления таких блок-схем установлены ГОСТ 19.701-90[[12]]. Рассмотрим некоторые часто применяемые символы, которые используются для построения блок-схем алгоритмов программ:

Терминатор — блок обозначающий начало/конец программы, а также вход/выход для подпрограммы

Процесс — блок обозначающий выполнение действия или группы действий

Предопределенный процесс — блок обозначающий вычисления по подпрограмме (обращение к вспомогательным алгоритмам)

Данные — блок обозначающий ввод/вывод данных, носитель которых не определен

Решение — блок обозначающий проверку условия

Границы цикла — блок обозначающий начало и конец циклического процесса

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

Комментарий – блок используется для добавления пояснительных записей и комментариев.

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

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

Согласно ГОСТ 19781–90 программа – это данные, предназначенные для управления конкретными компонентами обработки информации в целях реализации определенного алгоритма[[13]].

4. ОСНОВНЫЕ СТРУКТУРНЫЕ АЛГОРИТМИЧЕСКИЕ КОНСТРУКЦИИ

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

Линейная алгоритмическая конструкция представлена в виде последовательности действий (шагов), в которой каждое действие алгоритма выполняется последовательно одно за другим, причем после каждого n-го действия выполняется (n+1)-е действие, если n-е действие — не конец алгоритма. Исходные данные могут быть любыми[[14]].

Ветвящейся алгоритмическая конструкция представляет собой процесс, который прерывается для выбора следующего действия в зависимости от результата проверки какого-либо условия. Условие, в данном случае, это логическое выражение, которое может принимать одно из двух значений – «Да» (истина, англ. true) или «Нет» (ложь, англ. false). Если условие истинно, действие выполняется, иначе действие не выполняется. Ветвление, также позволяет выполнять либо одну, либо другую группу операторов. В дальнейшем, для конкретных данных, такая конструкция сводится к последовательной алгоритмической конструкции. Ветвление может быть полным (если – то – иначе) или неполным (если – то). Полное ветвление в алгоритме позволяет организовать две ветви (то или иначе), каждая из которых ведет к общей точке их слияния, так что выполнение алгоритма продолжается независимо от того, какой путь был выбран (рис. 1). В неполном ветвлении (рис. 2), при невыполнении условия никакие действия не выполняются, управление сразу переходит к точке слияния[[15]].

Рис. 1. Полное ветвление

Рис. 2. Неполное ветвление

Циклическая алгоритмическая конструкция представляет собой алгоритм, в котором предусмотрено многократное повторение группы действий (шагов), при различных входных данных. Повторяющихся участки действий называют телом цикла, а одно повторение такого циклического процесса – шагом цикла или итерацией. Любая циклическая конструкция включает в себя элементы ветвящейся алгоритмической конструкции[[16]].

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

Циклы классифицируются по месту расположения условий проверки, для повторения или окончания цикла. Можно выделить циклы с предусловием и постусловием.

Цикл с предусловием. В цикле с предусловием проверка значения условного выражения (условие) стоит перед телом цикла. Тело цикла выполняется, если значение условия принимает значение ИСТИНА. После чего управление вновь переходит к проверке условия. Эти действия повторяются до того времени, пока условное выражение не примет значение ЛОЖЬ. При первом же несоблюдении условия цикл завершается. Если же на входе в цикл условие принимает значение ЛОЖЬ, происходит выход из цикла, тело цикла, в таком случае, не выполнится ни разу.

а) условный блок

б) блок границы цикла

Рис. 2. Блок-схема цикла с предусловием

Цикл с постусловием. В отличие от цикла с предусловием, тело цикла с постусловием всегда выполнится хотя бы один раз, поскольку проверка выхода из цикла стоит после тела цикла. В такой конструкции тело цикла будет выполняться до тех пор, пока не станет возможным условие выхода из цикла. Как только оно принимает значение ИСТИНА, выполнение цикла прекращается, но возможно построение цикла и с обратным условием, т.е. выполнение цикла завершается, когда условие принимает значение ЛОЖЬ[[17]]. Блок-схема данной структуры представлена на рис. 3.

а) условный блок

б) блок границы цикла

Рис. 3. Блок-схема цикла с постусловием

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

Арифметический цикл. Разновидность цикла с предусловием, в котором заранее определено число итераций. В таком цикле, число его повторений однозначно задано правилом изменения параметра, которое задается с помощью начального (N) и конечного (К) значений параметра и шагом (h) его изменения. Другими словами, на первом шаге цикла значение параметра равно N, на втором – N+h, на третьем – N+2h. На последнем шаге цикла значение параметра не превышает конечное значение К, но такое, что дальнейшее его изменение приведет к значению большему, чем К. На рис.1. представлена блок-схема, которая выведет 10 раз слово «Пример», в которой используется блок начала арифметического цикла, с указанием, что переменная i в нем будет изменяться от 1 до 10 с шагом 1[[18]].

Рис. 1 Блок-схема арифметического цикла

5. понятие программирования и компьютерной программы

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

Как известно, структура ЭВМ по фон Нейману состоит из 5 основных устройств: устройства управления (УУ), арифметико-логического устройства (АЛУ), запоминающего устройства (ЗУ), а также устройства ввода и вывода[[19]]. Память имеет вид нумерованной последовательности ячеек, которые функционально схожи с электромеханическим переключателем, и информация в них хранится в виде двух значений - нулей и единиц. Автоматическая работа ЭВМ, управляемая программой, состоит из последовательности тактов. На каждом такте происходит считывание команд из запоминающего устройства и их выполнение. Адрес следующей ячейки памяти, из которой будет извлечена следующая команда программы, указывается специальным устройством – счетчиком команд в устройстве управления. Его наличие также является одним из характерных признаков архитектуры фон Неймана. Действия, совершаемые ЭВМ весьма примитивны – это арифметические и логические операции, операции сравнения, переписывания части информации и прочее. Другими словами составить программу для ЭВМ – это значит представить способ решения задачи в виде совокупности машинных команд (программы), чтобы они, будучи размещенными в памяти, последовательно выполняясь и вызывая одна другую, реализовали нужные вычисления.

С идеей программирования каждый сталкивается еще в школе, при составлении «плана решения» арифметической задачи в виде серии вопросов. Но заметное отличие программирования для ЭВМ от школьного опыта заключается в том, что программа для ЭВМ, чаще всего, производит не одно, а несколько последовательностей действий (разветвлений). Выбор между этими действиями зависит от промежуточных условий и значения результатов решения задачи; некоторые группы команд могут выполняться многократно (циклы), автоматически определяя нужное число повторений; может определённым образом менять, или частично формировать свою структуру в процессе выполнения.

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

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

Компьютерная программа – комбинация последовательность инструкций и данных, предназначенная для исполнения устройством управления (УУ) вычислительной машины[[20]]. Обычно образ программы хранится в виде скомпилированного исполняемого модуля (отдельного файла или группы файлов). Из этого образа, исполняемая программа в оперативной памяти может быть построена программным загрузчиком. Такое же поведение применимо и к исходным текстам программы на интерпретируемом языке программирования.

Сам процесс создания компьютерных программ носит название «программирование»[[21]], а специалистов занимающихся этим видом деятельности – программистами. Поскольку человеку свойственно ошибаться, во время написания программ, в них часто допускаются ошибки. Считается, что программа содержит ошибку, если для некоторых входящих данных она даёт сбой или некорректный результат. Ошибка может быть допущена программистом как случайно (опечатка; использование некорректного синтаксиса), так и появиться вследствие некорректного взаимодействия между различными участками программы. Процесс поиска и исправления ошибок в программах именуется отладкой. Продолжительность отладки программ заранее неизвестна, поскольку неизвестно, сколько ошибок допущено в коде. Программа не содержит ошибок, если она даёт корректные результаты для всех допустимых входящих данных.

Исходные тексты компьютерных программ в большинстве языков программирования состоят из списка инструкций, наиболее точно описывающих изначальный алгоритм. Такая парадигма программирования называется императивным программированием, и описывает «как» добиться желаемого результата. Однако применяются и другие методологии и подходы. К примеру, в декларативном программировании выбор подходящего алгоритма решения задачи предоставлен программе-интерпретатору, и описывает «какой результат» нужно получить[[22]].

Большинство пользователей компьютеров используют программы, предназначенные для выполнения конкретных задач, таких как: редактирование документов и презентаций, математические вычисления, обработка звука и видео и т.п. Такие программные средства называют прикладными программами или прикладным ПО. Управление компонентами вычислительной системы и формирование окружения для нормального функционирования прикладных программ берёт на себя системное программное обеспечение (СПО)[[23]], наиболее важной составляющей, которого является операционная система. В системном программировании назначение программы несколько иное. В отличие от прикладных программ, которые используются для решения конкретных практических задач, системные программы обеспечивают взаимодействие компонентов компьютерных систем, т.е. управляют процессором, оперативной памятью, устройствами ввода и вывода и т.п.

6. Алгоритмизация как обязательный этап разработки программы

Разработка программ состоит из таких этапов:

  1. Постановка задачи: анализ и уточнение требований, предъявляемых к программе;
  2. Алгоритмизация: проектирование алгоритма и выбор структур данных;
  3. Написание программы и отладка;
  4. Тестирование программы;
  5. Документирование: подготовка инструкции для пользователя.

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

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

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

Общеприняты следующие формы представления алгоритмов[[24]]:

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

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

Словесная форма представления алгоритмов менее формализована, поскольку использует естественный язык, поэтому является наиболее понятной[[25]]. Однако такая запись обладает существенными недостатками, такими как многословность и неоднозначность толкования, поэтому словесная запись не получила широкого распространения[[26]].

Псевдокод – это частично формализованный язык описания алгоритмов программ. В нём используются слова естественного языка, синтаксические конструкции характерные для языков программирования, математические знаки и операторы[[27]]. Использование псевдокода позволяет в большей степени формализовать процесс создания алгоритма, чем блок-схема или словесная форма. Описание алгоритма на псевдокоде наиболее приближено к языкам программирования высокого уровня, хотя и не является программой, исполняемой на ЭВМ.

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

Алгоритм <название>

Входные данные:

<объявления>

Выходные данные:

<объявления>

Промежуточные данные:

<объявления>

Начало

<последовательность действий>

Конец

Блок-схема (графическое изображение) – является очень удобным средством изображения алгоритма, такое представление однозначно отображает ход вычислительного процесса. При составлении блок-схемы необходимо соблюдать обозначения и придерживаться определенных правил. ГОСТ предусматривает стандартные формы символов (блоков) для обозначения типичных действий[[28]].

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

Таблица 1.

Обозначение

Символ

Назначение

Примеры

Процесс

Вычислительное действие или последовательность действий

Решение

Проверка условия

Модификация

Начало цикла

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

Начало или конец алгоритма, вход или выход из подпрограммы

Ввод-вывод

Ввод-вывод в общем виде

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

Блок вычислений по стандартной или отдельно разработанной подпрограмме

Комментарий

Пояснения к операциям

Соединитель

Разрыв линии потока управления, перенос части блок-схемы на другую страницу

Однако, как и другие формы представления алгоритмов, графическое представление также имеет недостаток, который выражается в отсутствии строгих правил задания структур данных, над которыми производятся действия. Такая неоднозначность в описании процесса вычислений, потенциально может стать источником ошибок при написании программы по блок-схеме[[29]].

Правила описания данных

Данные, обрабатываемые алгоритмами, характеризуются назначением, типом и структурой.

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

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

Переменная – это именованные данные, которые в процессе выполнения алгоритма (программы) могут изменять свое значение[[30]].

Константа – это именованные данные, которые при выполнении алгоритма (программы) всегда определены и не изменяют своего значения.

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

Скаляр – это именованная структура данных, содержащая неделимую единицу данных. В описании алгоритма на псевдокоде скалярные данные объявляются с помощью ключевого слова СКАЛЯР и представлены в виде простых переменных и констант.

Массив – это упорядоченный набор однотипных значений (называемых элементами массива), объединенных общим именем и отличающихся номерами (индексами)[[31]]. Другими словами, массив – это область памяти, в которой размещаются данные одного типа. На псевдокоде массивы объявляются с помощью ключевого слова МАССИВ. Для обращения к элементам массива используется имя массива с индексом (прим. arrayName[index]), определяющим место расположение элемента в массиве. В программировании, понятие массива аналогично понятиям вектора и матрицы в математике.

Запись – это именованная совокупность элементов различных типов. На псевдокоде записи объявляются с помощью ключевого слова ЗАПИСЬ. Доступ к элементам записи осуществляется по составному имени, включающему имя записи и имя элемента (прим. objectName.element)[[32]].

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

Операция присваивания значения переменной:

<переменная> := <выражение>,

где <выражение> – другая переменная, константа, либо выражение, значение которого должно быть вычислено и присвоено переменной, указанной слева от знака := (присвоить).

Например,

A:=5;

B:= C/sin(alfa);

D:=D+1;

Операция ввода/вывода:

ввод(<список ввода>)

где <список ввода> – список переменных, значения которых вводит пользователь;

вывод(<список выражений>)

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

Например,

ввод(A,B,C);

вывод(A+C);

Основные структуры алгоритмов образуются из простых операций и других базовых структур используя строго определенные правила структурирования алгоритмов[[33]].

Выбор структур данных и обоснование метода решения

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

Заключение

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

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

Постановка задачи и её алгоритмизация обычно требует 20-30% общего времени на разработку программы. Особенностью реализации этого этапа является сложность и ответственность, которая объясняется тем, что для решения одной и той же задачи, может существовать несколько различных алгоритмов, из чего можно сделать вывод – «алгоритмизация является обязательным этапом разработки программы».

Список использованных источников

  1. Алгоритмы и структуры данных (CDIO): учебник / Р.Ю. Царев, А.В. Прокопенко. – Красноярск: СФУ, 2016. – 9 с., 11-12 с., 95 с.

Математическая логика и теория алгоритмов: Учеб. пособие / А.Н. Макоха, А.В. Шапошников, В.В. Бережной. – Ставрополь, 2017. – 300-302 с.

Основы алгоритмизации и программирования: Учеб. пособие / Т.В. Лубашева, Б.А. Железко. – Минск: РИПО, 2016. – 17 с., 31 с.

  1. Основы алгоритмизации: Учеб. пособие / В.И. Логинов, Л.Н. Шемагина. – Нижний Новгород, 2010. – 9-14 с.
  2. Структуры и алгоритмы обработки данных: Учеб. пособие / С.Н. Дроздов. – Таганрог, 2016. – 9 с., 21 с.
  3. Теория алгоритмов: Учеб. пособие / А.А. Брыкалова. – Ставрополь, 2016. – 5 с.
  4. Головчинер М.Н. Введение в архитектуру ЭВМ: Курс лекций. – Томск: Томский государственный университет, 2013. – 27-28 c. URL: http://tic.tsu.ru/apache22/data/www/uploads/Архитектура ЭВМ.pdf (дата обращения: 11.01.20)

Горностаева Т.Н. Алгоритмы: Учеб. пособие. – М.: Мир науки, 2019. – Сетевое издание. Режим доступа: https://izd-mn.com/PDF/33MNNPU19.pdf – Загл. с экрана. (дата обращения: 13.01.20)

Лекции по информатике. – М.: Финансовый университет при Правительстве РФ, 2014. URL: https://studfile.net/preview/1494786/page:2/ (дата обращения: 10.01.20)

Лекции по информатике. – М.: Финансовый университет при Правительстве РФ, 2014. URL: https://studfile.net/preview/1494786/page:3/ (дата обращения: 10.01.20)

  1. Межгосударственный стандарт. Обеспечение систем обработки информации программное. Термины и определения. – М., 2010. – 160-161 с. URL: http://www.gostrf.com/normadata/1/4294833/4294833633.pdf (дата обращения: 15.01.20)
  2. Межгосударственный стандарт. Схемы алгоритмов, программ, данных и систем. Обозначения условные и правила выполнения. Издание официальное – М.: Стандартинформ, 2010. – 139-145 с. URL: http://www.gostrf.com/normadata/1/4294848/4294848992.pdf (дата обращения: 15.01.20)

Национальный стандарт РФ. Роботы и робототехнические устройства. Методы программирования и взаимодействия с оператором. – М.: Стандартинформ, 2016. URL: https://files.stroyinf.ru/Data/639/63916.pdf (дата обращения: 8.01.20). – 4 с.

  1. Макоха А.Н., Шапошников А.В., Бережной В.В. Математическая логика и теория алгоритмов. - Ставрополь, 2017. - C. 300

  2. Брыкалова А.А. Теория алгоритмов: учебное пособие. - Ставрополь, 2016. - С. 5

  3. Царев Р.Ю., Прокопенко А. В. Алгоритмы и структуры данных. - Красноярск: СФУ 2016. - С. 9

  4. Царев Р.Ю., Прокопенко А. В. Алгоритмы и структуры данных. Красноярск: СФУ, 2016. - С. 11-12

  5. Макоха А.Н., Шапошников А.В., Бережной В.В. Математическая логика и теория алгоритмов. - Ставрополь, 2017. - C. 302

  6. Макоха А.Н., Шапошников А.В., Бережной В.В. Математическая логика и теория алгоритмов. - Ставрополь, 2017. - C. 301

  7. Горностаева Т.Н. Алгоритмы. Учебное пособие. - М.: Мир науки, 2019. URL: https://izd-mn.com/PDF/33MNNPU19.pdf (дата обращения: 13.01.20)

  8. Горностаева Т.Н. Алгоритмы. Учебное пособие. - М.: Мир науки, 2019. URL: https://izd-mn.com/PDF/33MNNPU19.pdf (дата обращения: 13.01.20)

  9. Логинов В.И., Шемагина Л.Н. Основы алгоритмизации. - Нижний Новгород, 2010. - С. 9

  10. Логинов В.И., Шемагина Л.Н. Основы алгоритмизации. - Нижний Новгород, 2010. - С. 10

  11. Лекции по информатике. Финансовый университет при Правительстве РФ, 2014. URL: https://studfile.net/preview/1494786/page:2/ (дата обращения: 10.01.20)

  12. Схемы алгоритмов, программ, данных и систем. Обозначения условные и правила выполнения. -М., 2010. - С. 139-145. URL: http://www.gostrf.com/normadata/1/4294848/4294848992.pdf (дата обращения: 15.01.20)

  13. Обеспечение систем обработки информации программное. Термины и определения. -М., 2010. - С. 160. URL: http://www.gostrf.com/normadata/1/4294833/4294833633.pdf (дата обращения: 15.01.20)

  14. Горностаева Т.Н. Алгоритмы. Учебное пособие. - М., 2019. - С.16. URL: https://izd-mn.com/PDF/33MNNPU19.pdf (дата обращения: 13.01.20)

  15. Лекции по информатике. Финансовый университет при Правительстве РФ, 2014. URL: https://studfile.net/preview/1494786/page:2/ (дата обращения: 10.01.20)

  16. Лекции по информатике. Финансовый университет при Правительстве РФ, 2014. URL: https://studfile.net/preview/1494786/page:3/ (дата обращения: 10.01.20)

  17. Лекции по информатике. Финансовый университет при Правительстве РФ, 2014. URL: https://studfile.net/preview/1494786/page:3/ (дата обращения: 10.01.20)

  18. Лекции по информатике. Финансовый университет при Правительстве РФ, 2014. URL: https://studfile.net/preview/1494786/page:3/ (дата обращения: 10.01.20)

  19. Головчинер М.Н. Введение в архитектуру ЭВМ. Курс лекций. - Томск: Томский государственный университет, 2013. - С. 27-28 URL: http://tic.tsu.ru/apache22/data/www/uploads/Архитектура ЭВМ.pdf (дата обращения: 11.01.20)

  20. Обеспечение систем обработки информации программное. Термины и определения. - М., 2010. - С. 160. URL: http://www.gostrf.com/normadata/1/4294833/4294833633.pdf (дата обращения: 15.01.20)

  21. Обеспечение систем обработки информации программное. Термины и определения. - М., 2010. - С. 160. URL: http://www.gostrf.com/normadata/1/4294833/4294833633.pdf (дата обращения: 15.01.20)

  22. Роботы и робототехнические устройства. Методы программирования и взаимодействия с оператором. - М., 2016. - С. 4. URL: https://files.stroyinf.ru/Data/639/63916.pdf (дата обращения: 8.01.20)

  23. Обеспечение систем обработки информации программное. Термины и определения. - М., 2010. - С. 161. URL: http://www.gostrf.com/normadata/1/4294833/4294833633.pdf (дата обращения: 15.01.20)

  24. Логинов В.И., Шемагина Л.Н. Основы алгоритмизации. - Нижний Новгород, 2010. - С. 9

  25. Лубашева Т.В., Железко Б.А. Основы алгоритмизации и программирования. - Минск, 2016. - С. 17

  26. Лекции по информатике. Финансовый университет при Правительстве РФ, 2014. URL: https://studfile.net/preview/1494786/page:2/ (дата обращения: 10.01.20)

  27. Логинов В.И., Шемагина Л.Н. Основы алгоритмизации. - Нижний Новгород, 2010. - С. 10

  28. Логинов В.И., Шемагина Л.Н. Основы алгоритмизации. - Нижний Новгород, 2010. - С. 11-13

  29. Логинов В.И., Шемагина Л.Н. Основы алгоритмизации. - Нижний Новгород, 2010. - С. 14

  30. Лубашева Т.В., Железко Б.А. Основы алгоритмизации и программирования. - Минск, 2016. - С. 31

  31. Царев Р.Ю., Прокопенко А. В. Алгоритмы и структуры данных. - Красноярск: СФУ, 2016. - С. 95

  32. Дроздов С.Н. Структуры и алгоритмы обработки данных. Учебное пособие. Таганрог, 2016. С. 21

  33. Дроздов С.Н. Структуры и алгоритмы обработки данных. Учебное пособие. Таганрог, 2016. - С. 9