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

Основы алгоритмизации и программирования(Основные понятия теории алгоритмов)

Содержание:

ВВЕДЕНИЕ

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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]

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

– экономические;

– графические;

– экспертные и иные.

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

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

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

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

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

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

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

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

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

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

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

– структурная;

– функциональная;

– шаблонная;

– процедурная;

– модульная;

– объектно-ориентированная.

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 с.