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

Основные структуры алгоритмов сравнительный анализ и примеры их использования (Понятие алгоритма)

Содержание:

ВВЕДЕНИЕ

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

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

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

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

Объект исследования – теория алгоритмов и структур данных.

Предмет исследования – структуры алгоритмов.

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

В соответствии с поставленной целью выделены такие задания:

– рассмотреть основные понятия об алгоритмах, их свойства;

– описать методы подачи алгоритмов;

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

– провести рассмотрение операторов для реализации основных структур алгоритмов на языке С++;

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

В работе используется язык С++, так как он на данное время является одним из самых используемых.

Проблему использования базовых структур алгоритмов изучали разные ученые: Б. Страуструп, Дж.Прата, Г Шилдт. Как результат исследования ими были выпущены учебники по изучению языка программирования С++.

1.Основные понятия теории алгоритмов

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

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

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

Термин «алгоритм» происходит от фамилии индийского математика Мугаммада аль-Хорезми (рис.1). [4]

Результат пошуку зображень за запитом "аль хорезми"

Рис.1. Мугаммад аль-Хорезми

Это – один из крупнейших ученых Средневековья. Его родина – Хорезм. Свои знания аль-Хорезми совершенствовал в «Доме мудрости» в Багдаде. Это учреждение было своего рода Академией наук, в которой работали многие ученые арабского Востока. «Дом мудрости» славился своей богатой библиотекой старинных рукописей и астрономической обсерваторией.[3]

Исследователи установили, что аль-Хорезми был автором 9 сочинений:

  1. Книга об индийской арифметике;
  2. Краткая книга об исчислении алгебры и алмукабалы;
  3. Астрономические таблицы (зидж);
  4. Книга картины Земли;
  5. Книга о построении астролябии;
  6. Книга о действиях с помощью астролябии;
  7. Книга о солнечных часах;
  8. Трактат об определении эры евреев и их праздниках;
  9. Книга истории.[11]

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

Алгебраическая книга аль-Хорезми (Китаб мухтасаб ал-джабр и ва-л-мукабала) состоит из двух частей – теоретической (теория решения линейных и квадратных уравнений, некоторые вопросы геометрии) и практической (применение алгебраических методов в решении хозяйственно-бытовых, торговых и юридических задач – дележ наследства, составление завещаний, раздел имущества, различные сделки, измерение земель, строительство каналов). Благодаря арабскому слову «ал-джабр» возник такой научный термин как «алгебра». Унаследованное от восточных математиков учение о линейных и квадратных уравнениях стало основой развития алгебры в Европе. Латинизированное имя ученого вошло в науку под термином «алгоритм».[13]

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

Огромен вклад ученого и в астрономию, которая была необходима для орошаемого земледелия, морской и сухопутной торговли. Зидж (сборник астрономических и тригонометрических таблиц) аль-Хорезми посвящен хронологии и календарю (важное научное направление, так как разные народы пользовались различными системами временного счета). Большую важность для астрономии того времени представляла его книга об астролябии.[14]

Algorithmi – латинское транскрипция его фамилии, это слово применялось для обозначения правил по таким арифметическим действиям: [1]

– сложение;

– вычитание;

– умножение;

– деление.

Совокупность таких правил в Европе начали называть «алгоризм». В следующих периодах это слово переродилось в термин «алгоритм» и стало при этом собирательным названием некоторых правил определенного вида, а не лишь правил арифметических действий.

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

Алгоритм – точное правило, которое определяет процесс преобразования начальных данных для получения результатных при решении определенного вида задач. [1]

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

Алгоритм – фундаментальное понятие программирования. Ученые выделяют 3 основных класса алгоритмов:

– информационные;

– вычислительные;

– управляющие [3].

Вычислительные алгоритмы – алгоритмы, что работают со сравнительно простыми форматами данных.

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

Эффективность работы таких алгоритмов прямо зависит от организации информации в программе.

Управляющие алгоритмы характеризуются тем, что информация для них поступает от внешних источников, которыми они и управляют. Результатами выполнения этих алгоритмов является создание своевременной управляющей реакции на изменение начальных данных.[2]

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

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

Любые алгоритмы обладают такими свойствами:[6]

1. Массовость – возможность применить алгоритм к любым задачам четко определенного класса.

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

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

2. Детерминированность или определенность – набор указаний должен не зависеть от исполнителя алгоритма и быть точен. Такая характеристика обеспечивает однозначность и определенность результата процесса, который описан при заданных начальных данных. [14]

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

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

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

4. Ясность – это понимание исполнителя алгоритма о том, что нужно сделать для выполнения поставленного алгоритма. [15]

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

5. Формальность– это когда результат выполнения алгоритмов не должен зависеть от любого рода факторов, что не являются частью рассматриваемого алгоритма. [2]

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

6. Результативность – завершение процесса преобразования начальной информации в конечную. Это свойство указывает применение алгоритма к всем допустимым наборам исходных данных за некоторое число шагов обеспечивает получение результата. [1]

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

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

2.Базовые структуры алгоритмов

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

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

Методы, которые используются для этого, определяют квалификацию исполнителя, в значительной степени. К базовым методам для записи алгоритма относятся: [7]

– блок-схемы;

– формульно-словесный метод;

– языки программирования алгоритмов.

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

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

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

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

Рассмотрим базовые фигуры, применимые в создании блок-схем:[19]

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

Рис.2. Блок «Процесс»

2.Решение. Выбор направления алгоритма или программы в зависимости от условий. [6]

http://manuilov.narod.ru/images/structura/2_3_2.2.gif

Рис.3. Блок «Решение»

3.Предопределенный процесс. Использование созданных ранее и описанных отдельно алгоритмов или же программ (функций, программных модулей, процедур). Символ служит для выполнения обращения к программным модулям. [5]

http://manuilov.narod.ru/images/structura/2_3_2.4.gif

Рис.4. Блок «Предопределенный процесс»

4.Ручной ввод. Ввод оператором в процессе обработки данных при помощи устройства, непосредственно подключенного с компьютера (клавиатура).

http://manuilov.narod.ru/images/structura/2_3_2.5.gif

Рис.5. Блок «Ручной ввод»

5.Дисплей. Ввод или вывод данных, если непосредственно подключенное устройство воспроизводит их и позволяет пользователю вносить изменения.[9]

http://manuilov.narod.ru/images/structura/2_3_2.6.gif

Рис.6. Блок «Дисплей»

6.Документ. Ввод или вывод данных на бумажный носитель.[18]

http://manuilov.narod.ru/images/structura/2_3_2.7.gif

Рис.7. Блок «Документ»

7.Линия перехода. Указание последовательности перехода.

http://manuilov.narod.ru/images/structura/2_3_2.13.gif

Рис.8. Линии перехода

8.Соединитель. Указание связей между прерванными линиями перехода, связывающими блоки. Если блок-схема состоит из частей, расположенных на одной странице, то тогда линия перехода одной части заканчивается блоком соединитель, а линия перехода на продолжении блок-схемы будет начинаться с этого символа. [17]

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

http://manuilov.narod.ru/images/structura/2_3_2.8.gif

Рис.9. Блок «Соединитель»

9. Межстраничный соединитель. Указание связей между частями схем алгоритмов и программ, что являются расположенными на разных листах. [16]

Этот блок служит для аналогичных целей, что и блок соединитель, но при расположении составных блок-схемы на других страницах.[14]

http://manuilov.narod.ru/images/structura/2_3_2.9.gif

Рис.10. Блок «Междустраничный соединитель»

10.Пуск - остановка. Начало или конец процесса обработки данных.

http://manuilov.narod.ru/images/structura/2_3_2.10.gif

Рис.11. Блок «Пуск-остановка»

11.Комментарий. Связь между блоками схемы и пояснениями к ним. Позволяет включать пояснения в блок-схему, формулы и другую полезную информацию.[12]

http://manuilov.narod.ru/images/structura/2_3_2.12.gif

Рис.12. Блок «Комментарий»

Самым популярным методом изображения алгоритмов являются языки программирования.

Языком программирования называется система условных обозначений, которая помогает более точно описать алгоритмы или инструкции программ. [13]

Отметим, что языки программирования – искусственные языки. Они отличаются от человеческих языков ограниченной численностью служебных слов, строгими правилами записи команд. При их применении не допускается свободное толкование используемых выражений (что как раз характерно для естественного языка).[11]

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

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

Машинный вид команды для программы, состоящий из обозначений «0» и «1», указывает на то, именно какое действие должен выполнить центральный процессор в своей работе.

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

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

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

Намного проще писать программу на языке программирования, который более близок к естественному языку, а работу по «переводу» данной программы в машинный код поручить компьютеру. [15]

Рассмотрим классификацию языков программирования по парадигме программирования. Вся языки делятся на следующие категории:

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

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

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

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

Наиболее распространенными языками высокого уровня являются C++, Java, C#, Pascal.

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

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

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

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

По характеру управления часто различают 3 основных типа алгоритмов:

– разветвляющиеся;

– линейные;

– цикличные.

В простейшем случае алгоритмы осуществляют одновременное выполнение всех заданных действий вне зависимости от значений входных данных задания. [3]

Для нахождения объема, например, призмы нужно сначала найти ее площадь основания, далее определить высоту призмы и найти их произведение. Все эти действия надо выполнять для расчета объема каждой призмы.[9]

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

Результат пошуку зображень за запитом "линейный алгоритм"

Рис.13. Структура линейных алгоритмов

Примером линейного алгоритма может быть алгоритм посадки саженца:[7]

Результат пошуку зображень за запитом "линейный алгоритм"

Рис.14. Блок-схема линейного алгоритма

Алгоритмы, которые предусматривают 2 возможных варианта действий – более сложные, чем линейные. [8]

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

Алгоритмы, которые осуществляют выполнение действий в зависимости от проверки условия, называется алгоритмом с разветвлением:[6]

Результат пошуку зображень за запитом "разветвляющийся алгоритм"

Рис.15. Структура разветвляющегося алгоритма

Примером такого алгоритма может быть следующий алгоритм:[7]

Результат пошуку зображень за запитом "разветвляющийся алгоритм"

Рис.16. Пример разветвляющегося алгоритма

Третий вид алгоритмов применяют в случае повторного выполнения последовательности действий.[4]

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

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

Различают 2 основные вида циклов: [6]

– циклы с предусловием (рис. 17);

– циклы с постусловием (рис. 18).

В цикле с предусловием условия цикла формулируются таким образом, чтобы следующее повторное выполнение операции выполнялось, пока проверка условий дает результат «да». Такие циклы еще называют циклами «пока».[5]

Рис.17. Циклическая структура с предусловием

Рис.18. Циклическая структура с постусловием

Циклы с предусловием читают следующим образом:[1]

пока проверка условий дает результат «истина», нужно выполнять действия.

Если в очередной проверке условия получится результат «нет», то повторное выполнение действия прекратится и произойдет выход из рассматриваемого цикла.[3]

Для подсчета остатка деления некоторого целого числа t на целое n с помощью операции вычитания можно применить цикл:

пока t> n, уменьшить параметр t на n.

В цикле с постусловием условие цикла выполняется противоположным образом, а именно: если повторная проверка условия дает результат "истина", происходит выход из имеющегося цикла. Цикл с постусловием можно прочитать следующим образом:[11]

повторять действие пока не будет получен результат «да» при проверке условия цикла.

Стоит также обратить внимание на те особенности, которые являются общими для обоих циклов:[3]

– все базовые структуры являются замкнутыми;

– число повторений цикла всегда определяется его условием;

– окончание цикла происходит лишь через проверку условий цикла.[4]

Самая существенная разница между видами циклов заключается в том факте, что тело цикла с послеусловием обязательно выполняется один раз – до самой первой проверки условия, цикл с предусловием может даже не выполнятся вообще, если при первой проверке условия получим результат «нет». [13]

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

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

3.Практическая реализация базовых структур алгоритмов

3.1.Операторы языка С++ для реализации базовых структур алгоритмов

Для выполнения линейных алгоритмов на языке С++ используется операция присваивания.[13]

Общий вид оператора присваивания следующий:[14]

имя_переменной = выражение;

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

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

Стандартная форма оператора if следующая:

if (выражение) оператор;

else оператор;

где оператор может быть или простым, или составным. [2]

Оператор else не обязателен. Стандартная форма оператора if с составными операторами следующая:

if (выражение) {

последовательность операторов

}

else {

последовательность операторов

}

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

Оператор принятия решений switch, выполняющий действия, основываясь на сравнении значения со списком констант символов или целых чисел. При обнаружении совпадения выполняется оператор или операторы, ассоциированные с данным значением. Оператор switch имеет следующий вид:[4]

switch (выражение) {

case константа1:

последовательность операторов

break;

case константа2:

последовательность операторов

break;

case константа3:

последовательность операторов break;

...

default:

последовательность операторов

}

Оператор default выполняется, если не найдено соответствий, default необязателен и, если его нет, то в случае отсутствия совпадений ничего не происходит. Когда обнаруживается совпадение, операторы, ассоциированные с соответствующим case, выполняются до тех пор, пока не встретится оператор break. В случае default (или последнего case, если отсутствует default), оператор switch заканчивает работу при обнаружении конца.[5]

Следует знать о трех важных моментах оператора switch:[11]

1.switch отличается от if тем, что он может выполнять только операции проверки строгого равенства, в то время как if может вычислять логические выражения и отношения.

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

3. если в операторе switch используются символьные константы, они автоматически преобразуются к целочисленным значениям.

Рассмотрим реализацию алгоритмов цикла на языке С++, где существуют три разновидности цикла:[19]

– цикл for;

– оператор цикла while;

– оператор цикла do ... while.

Все эти операторы цикла содержат непременно следующие составные части:

– условие продолжения цикла;

– присваивания исходных значений;

– тело цикла;

– изменение счетчика цикла.

Оператор for используется, когда есть известное заранее количество повторений.

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

Синтаксис оператора:

for (инициализация счетчика; условие выполнения; модификация)

{

тело цикла;

}

Простой пример вычисления суммы иллюстрирует использования данного оператора for:[5]

int summa = 0;

for (i = 1; i <= 15; i ++)

s = s + i;

Операторы с предусловием и постусловием используются для организации циклов и являются альтернативными к оператору for. Обычно цикл с предусловием используется, если количество повторений заранее неизвестно, а для многократного повторения тела цикла известно условие, при истинности которого цикл продолжает выполнение. Это условие следует проверять каждый раз перед очередной итерацией. Например, при считывании данных из файла условием цикла является наличие данных непосредственно в файле, то есть повторять чтение данных следует до тех пор, пока указатель не будет указывать на конец файла.[15]

Синтаксис цикла с предусловием:

while (условие выполнения)

{

тело цикла

};

Последовательность операторов выполняется пока условие истинно, а выход из цикла выполняется, когда условие будет ложным. Если условие ошибочное при вхождении в цикл – операторы ни разу не выполнятся, а управление передастся к следующему оператору.[1]

Цикл с постусловием выполняется, если есть надобность проверять истинность условий каждый раз после итерации. Как отмечали выше, отличие циклов с предусловием и с постусловием заключается в самой первой итерации.[6]

Синтаксис цикла do … while:

do

{

тело цикла

}

while (условие выполнения);

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

Если тело цикла состоит из одного оператора, то операторные скобки {} не является обязательны.[4]

Операторы цикла while и do ... while преждевременного могут завершиться при выполнении операторов break или же return внутри тела циклов.

3.2.Примеры использования основных структур алгоритмов на языке программирования С++

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

Для демонстрации линейного алгоритма рассмотрим следующий пример.[7]

С начала сутки прошло n секунд. Определите сколько часов, минут и секунд прошло с начала сутки.

Код программы на языке С++ следующий:

//подключаем заголовочные файлы

#include <iostream>

#include <conio.h>

#include <clocale>

#include <math.h>

using namespace std; // объявляем пространство имен

int main()

{

float n,h,m,s; // объявляем переменные

setlocale (LC_CTYPE,"rus"); //подключаем кириллицу

cout << "Введите количество секунд n: ";

cin >> n;

//находим целые значения часов, минут, секунд

h=floor(n/3600);

m=floor((n-h*3600)/60);

s=n-h*3600-m*60;

//вывод данных

cout <<"С начала сутки прошло "<<h<<" часов "<<m<<" минут "<<s<< " секунд";

getch();

return 0;

}

В результате получим:[1]

Рис.19. Результат выполнения линейного алгоритма

Для рассмотрения разветвляющего алгоритма решим следующее задание.[8]

Ввести з клавиатуры 3 целые числа и проверить создают ли они убывающую последовательность. Если да – то вывести числа, обратного знака к исходным, в противоположном случае вывести сумму квадратов чисел.[11]

#include <iostream>

#include <conio.h>

#include <clocale>

#include <math.h>

using namespace std;

int main()

{

float d1,d2,d3; // объявление переменных

setlocale (LC_CTYPE,"rus");

cout << "введите числа: ";

cin >> d1>>d2>>d3; //инициализация переменных d1, d2, d3

if ((d1>d2)&&(d2>d3)) //проверка условия убывающей последовательности[11]

{ //переопределение переменных

d1=(-1)*d1;

d2=(-1)*d2;

d3=(-1)*d3;

cout<<"Последовательность убывающая! "<<endl;

}

else

{ // переопределение переменных

d1=pow(d1,2);

d2=pow(d2,2);

d3=pow(d3,2);

cout<<"Последовательность не убывающаяя! "<<endl;

}

cout<<d1<<" , "<<d2<<" , "<<d3;

getch();

return 0;

}

В результате получим:[4]

Рис.20. Результат выполнения разветвляющего алгоритма

Для рассмотрения циклического алгоритма напишем программу для сортировки элементов массива с помощью метода пузырька.[1]

#include <iostream>

#include <conio.h>

#include <clocale>

#include <math.h>

using namespace std;

int main()

{

//подключение кириллицы

setlocale( LC_ALL,1201 );

//объявление всех переменных

int r, m, q;

//объявление массива

int М[40];

//ввод размерности вектора

cout<<»Введите размерность массива:»;

//считывание размерности вектора

cin>>m;

//ввод массива

cout<<"Введите элементы массива: ";

//считывание элементов

for (r=0;r<m;r++)

cin>>M[r];

//алгоритм сортировки пузырьком

for( r=0;r < m; r++)

for( q=r+1; q < m; q++)

//проверка условия для сортировки

if (M[r] > M[q])

//переназначение элементов

swap(M[r],M[q]);

//вывод массива

cout<<"Вывод элементов массива: ";

for (r=0;r<m;r++)

//вывод элемента

cout<<М[r]<<" ";

//задержка экрана

getch();

//возврат 0

return 0;

}

В результате получим:[17]

Рис.21. Результат сортировки

ЗАКЛЮЧЕНИЕ

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

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

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

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

Язык программирования служит двум связанным между собой целям: он дает программисту аппарат для задания действий, которые должны быть выполнены, и формирует концепции, которыми пользуется программист, размышляя о том, что делать. Первой цели идеально отвечает язык, который настолько "близок к машине", что всеми основными машинными аспектами можно легко и просто оперировать достаточно очевидным для программиста образом. Второй цели идеально отвечает язык, который настолько «близок к решаемой задаче», чтобы концепции ее решения можно было выражать прямо и коротко.

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

В работе были выполнены следующие задачи:

– рассмотрены основные понятия об алгоритмах, их свойства;

– описаны методы подачи алгоритмов;

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

– проведено рассмотрение операторов для реализации основных структур алгоритмов на языке С++;

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

СПИСОК ИСПОЛЬЗОВАННЫХ ИСТОЧНИКОВ

  1. Айвор Хортон. Visual C++ 2010. Полный курс. Издательский дом «Вильямс». – 2014. – 300 с.
  2. Борис Пахомов. С/С++ и MS Visual C++ 2010 для начинающих. БХВ-Петербург. – 2014. – 436 с.
  3. Брайан Керниган Алгоритмизация и программирование. Издательство «Невский диалект». – 2014. – 320 с.
  4. Бьерн Страуструп. Программирование. Принципы и практика использования. Издательский дом «Вильямс». – 2015. – 258 с.
  5. Джесс Либерти. Освой самостоятельно С++ за 21 день. Издательский дом «Вильямс». – 2012. – 230 с.
  6. Динман М.И. Алгоритмизация и программирование. Освой на примерах. – СПб.: БХВ-Петербург, 2012.– 260 с.
  7. Дэвид Гриффитс, Дон Гриффитс. Изучаем программирование на С. Издательство «Эксмо». – 2013. – 400 с.
  8. Кнут, Дональд, Эрвин. Искусство программирования. Том 1. Основные алгоритмы. 3-е изд. Пер. с англ. – : Уч. пос. М.: Издательский дом. «Вильямс», 2014.– 720с.
  9. Кубенский А.А. Структуры и алгоритмы обработки данных: объектно-ориентированный подход и реализация на С++. – СПб.: БХВ-Петербург, 2013. – 464с.
  10. Лаптев В.В., Морозов А.В., Бокова А.В. Объектно-ориентированное программирование. Задачи и упражнения. – СПб.: Питер. 2013. – 288 с.
  11. Майерс С. Эффективное использование алгоритмизации. 50 рекомендаций по улучшению ваших программ и проектов. Пер. с англ. – М.: ДМК Пресс; – СПб.: Питер. 2013.–240с.
  12. Прата С. Язык программирования С++. Издание 6. Издательский дом «Вильямс» – 2016. – 304 с.
  13. Р. Лафоре. Объектно-ориентированное программирование в С++. Издательство «Питер». Издание 4. – 2014. – 628 с.
  14. С++ Стандартная библиотека. Для профессионалов./Н. Джосьютис. – СП Питер, 2012. – 350 с.
  15. Седжвик Роберт. Фундаментальные алгоритмы. Анализ/Структуры данных/Сортировка/Поиск: Пер. с англ./ Седжвик Роберт. К.: Издательство «ДиаСофт», – 2014. – 500 с.
  16. Скляров В.А. Язык С++ и объектно-ориентированное программирование. Справочное пособие. – Минск. «Вышейшая школа». – 2012. – 478с.
  17. Харви Дейтел, Пол Дейтел. Как программировать на С++. Пер. с англ. – М.: ЗАО «Издательство БИНОМ», 2012. – 430 с.
  18. Хусаинов Б.С. Структуры и алгоритмы обработки данных. Примеры на языке Си. Учеб. пособие. – Финансы и статистика, 2014. – 464с.
  19. Штерн Виктор. Основы С++: Методы программной инженерии.– Издательство «Лори», 2013. – 860с.
  20. Язык С++: Учеб. Пособие /И.Ф. Астахова, С.В. Власов, В.В. Фертиков, А.В. Ларин.–Мн.: Новое знание, 2013. – 203 с.