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

Основные структуры алгоритмов: сравнительный анализ и примеры их использования (Операторы языка С++ для реализации базовых структур алгоритмов)

Содержание:

ВВЕДЕНИЕ

Практически в каждой минуте жизни любого человека, встречаются алгоритмы, которые часто повторяются. Например, заварить чай, завести автомобиль и поехать на прогулку, выйти погулять с собакой и ещё огромное количество подобного. При правильном подходе и взгляде многие алгоритмы можно заменить или сократить, что даст пару лишних секунд свободного времени. А время - самый ценный ресурс из всех существующих, возобновить который не представляется возможным даже для высшего истеблишмента нашего мира.
На данный момент в мире существует огромнейшее количество языков программирования, но большинство из них крайне схожи, и имеют различия только в синтаксисах команд и методе компиляции.
При помощи различных языков программирования присутствует возможность сокращения и упрощения алгоритмов, их автоматизации и улучшения.
Актуальность исследования обусловлена постоянным внедрением новых алгоритмов во все отрасли жизни, так же алгоритмы являются основными составляющими всех программ и одной из самых важных частей подготовки работников it-сферы.
Целью своей работы считаю изучить и понять типы, виды, свойства алгоритмов и возможности взаимодействия с их помощью. Выбирая источники я руководствовался авторитетностью издания, распространённостью и «наполненностью». Стараясь свести к минимум статьи-выдержки, я стараюсь использовать только объёмные и специализированные издания, в том числе учебники.
Языком программирования, который я буду использовать в практической части работы я выбрал C++, так как это самый распространённый и один из основных языков программирования.
Так же в данной работе я постараюсь раскрыть историю появления и развития понятия алгоритм, объяснить многие аспекты.




 

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

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

 

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

Понятие алгоритма относится к фундаментальным понятиям информатики, но ещё до существования информатики оно возникло в математике, став одним из основных её понятий.[[2]]

Слово «алгоритм» происходит от имени узбекского Математика Мухаммеда аль-Хорезми (783–ок. 850 гг., рис. 1).[[3]] В латинских переводах с арабского его арифметического трактата «ALgoritmi de numero Indorum» («Алгоритми о счете индийском»), где он излагал правила действия над числами в десятичной системе счисления, имя аль-Хорезми транскрибировалось как algorismi. В 1684 году Готфрид Лейбниц в сочинении «Nova Methodvs pro maximis et minimis, itemque tangentibus…» впервые использовал слово «алгоритм» («algorithmo») в широком смысле: как систематический способ решения проблем дифференциального исчисления.
Рис.1. Портрет Мугаммад аль-Хорезми

Мугаммад аль-Хорезми является одним из крупнейших ученых средневековья, родина которого - Хорезм. Знания аль-Хорезми совершенствовались в ”Доме мудрости” в Багдаде. Исследователи установили, что аль-Хорезми был автором целых 9 сочинений:
Книга об индийской арифметике;

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

9. Книга истории.
Сочинение аль-Хорезми об арифметике сыграло очень важную роль в истории математики и хоть его арабский подлинный текст со временем был утерян, содержание ныне известно по латинскому переводу XII в. В этом сочинении впервые дано систематическое изложение арифметики, основанной на десятичной позиционной системе счисления с применением нуля, т.е. та арифметика, которая в наши дни представляется столь естественной и обычной. Она возникла в индии, и поэтому аль-Хорезми, а вслед за ним и другие средневековые математики называли её индийской. Долгое время она не выходила за пределы Индии, и только благодаря книге аль-Хорезми эта арифметика получила широкое распространение в странах Ближнего и Среднего Востока, а затем и в европе. [[4]]
Алгебраическая книга аль-Хорезми (Китаб мухтасаб ал-джабр и ва-л-мукабала) состоит из двух частей – теоретической (теория решения линейных и квадратных уравнений, некоторые вопросы геометрии) и практической (применение алгебраических методов в решении хозяйственно-бытовых, торговых и юридических задач – дележ наследства, составление завещаний, раздел имущества, различные сделки, измерение земель, строительство каналов). Благодаря арабскому слову «ал-джабр» возник такой научный термин как «алгебра». Унаследованное от восточных математиков

учение о линейных и квадратных уравнениях стало основой развития алгебры в Европе. [[5]]

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

– деление;

– умножение;

– вычитание;

– сложение. [[6]]

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

Так же аль-Хорезми сделал очень весомый вклад в астрономию написав трактат “Зидж аль-Синдх”, в котором содержались таблицы движения Солнца, луны, и пяти известных планет. Так же, его латинизированное имя вошло в историю как термин “алгоритм”.[[7]] Так же
 Аль-Хорезми усовершенствовал часы и изобрел квадрант, используемый для измерения углов

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

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

–управляющие
–вычислительные.
[[8]]
Общая Теория алгоритмов занимается проблемой эффективной вычислимости. Разработано несколько формальных определений алгоритма, в которых эффективность и конечность вычислений может быть определена количественно – числом элементарных шагов и объемом требуемой памяти. Подобными моделями алгоритмических преобразований символьной информации являются:
-конечные автоматы;
-машина Тьюринга;
-машина Поста;
- ассоциативное исчисление или нормальные алгоритмы Маркова; - рекурсивные функции. Некоторые из этих моделей лежат в основе методов программирования и используются в алгоритмических языках. В современной программной инженерии алгоритмы, как методы решения задач, занимают ведущее место по сравнению с традиционной математикой. Причем не важно, существует или нет чистое алгоритмическое решение в абстрактных моделях алгоритмов. Если решение задачи необходимо, широко используется эвристика, а “доказательством” работоспособности алгоритма является успешное его тестирование.[[9]]

 





























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




Любые алгоритмы вне зависимости от их типа обладают такими свойствами:
1)Дискретность: алгоритм должен представлять пpоцесс pешения задачи как последовательное выполнение элементарных шагов; для выполнения каждого шага требуется конечный отрезок времени.
2)Детерминированность (Однозначность). Каждое действие (шаг, этап) должно быть четким, однозначным, исключающим произвольное толкование и не оставляющим места для двусмысленности. Выполнение алгоритма носит, по сути, механический характер и не требует никаких дополнительных указаний[[10]]
3) Результативность. Алгоритм должен приводить к решению задачи или сообщению, что задача решений не имеет за конечное число шагов.
4) Конечность. Каждое отдельное действие, как и весь алгоритм должны иметь возможность реального исполнения. Поэтому алгоритм имеет предел, т. е. конечен.
5) Массовость. Алгоритм разрабатывается в общем виде так, чтобы его можно было применять для класса задач, различающихся только исходными данными. При этом исходные данные выбираются из некоторой области, которая называется областью применяемости алгоритма[[11]].
6) Ясность – это понимание исполнителя алгоритма о том, что нужно сделать для выполнения поставленного алгоритма.
7)Формальность– это когда результат выполнения алгоритмов не должен зависеть от любого рода факторов, что не являются частью рассматриваемого алгоритма.
Все исполнители, способные воспринимать и выполнять некоторые указания алгоритма (даже при этом не понимая их), действуя по нему, могут выполнить поставленную ранее задачу.
Абсолютно все шаги алгоритма должны быть четко и понятно описан и определен. Также он не должен допускать собственной и произвольной трактовки конечным исполнителем.

























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

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





Для доведения сути алгоритма к конечному пользователю, алгоритм обязан быть формализованным по принятым ныне правилам конкретных изобразительных или же графических средств.
Выбор способа записи зависит от характера задачи. Алгоритм вычислительного характера можно записать формулой, последовательностью формул. Алгоритм заваривания чая удобно записать словами в пронумерованных пунктах. Алгоритм решения квадратного уравнения будет наиболее понятен при записи словами и формулами.
Из формальных способов записи алгоритмов чаще других будем использовать язык блок-схем и алгоритмический язык. Заметим, что программа так же является записью алгоритма на языке программирования. [[12]]
Блок-схема представляет собой графический документ, дающий представление о порядке работы алгоритма. Здесь предписания изображаются с помощью различных геометрических фигур, а последовательность выполнения шагов указывается с помощью линий, соединяющих эти фигуры. Направления линий связи слева направа и сверху вниз считаются стандартными, и линии связи изображаются без стрелок, в противоположном случае - со стрелками.[[13]] Псевдокод же представляет собой систему обозначений и правил, предназначенную для единообразной записи алгоритмов. Он занимает промежуточное место между естественным и формальным языками.
С одной стороны, он близок к обычному естественному языку, поэтому алгоритмы могут на нем записываться и читаться как обычный текст. [[14]]
Блок схемы записываются подобным образом:

Рис. 2 Блок ввода-вывода данных

Блок ввода-вывода данных. Надпись в блоке: слово «ввод» («вывод» или «печать») и список вводимых (выводимых) переменных.

Рис. 3 Блок ввода-вывода данных
Блок ввода-вывода данных(Рис. 3). Надпись в блоке: слово «ввод» («вывод»или «печать») и список вводимых (выводимых) переменных.[[15]]

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

Символ "Предопределенный процесс" (рис. 4) отображает алгоритм, схема которого раскрыта отдельно. Этот тип символа позволяет описывать схемы алгоритмов иерархически и, таким образом, снизить сложность каждой отдельной схемы, повысив ее наглядность


Так же для использования блок-схем для более сложных и точных алгоритмов используется еще большее количество блоков, описанное в ГОСТ 19.701-90

Псевдокод же изображается подобным образом:

Выбираем первый элемент( i=1)


IF A> xi или хi > B THEN


печать сообщения и переход на конец

ELSE

переход к следующему элементу( i = i +1 )


IF массив не кончился ( i <= n ) THEN


переход на проверку интервала


ELSE


печать сообщения, что все элементы входят в интервал

Конец [[16]]


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

Языки программирования — искусственные языки. От естественных они отличаются ограниченным числом «слов», значение которых понятно транслятору, и очень строгими правилами записи команд (операторов). Совокупность подобных требований образует синтаксис языка программирования, а смысл каждой команды и других конструкций языка — его семантику.[[17]]

В самом общем смысле языком программирования называется фиксированная система обозначений и правил для описания алгоритмов и структур данных. Все языки программирования делятся на языки низкого, высокого и сверхвысокого уровня.[[18]]

С некоторыми из них умеют пользоваться лишь пара десятков разработчиков, которые используют эти языки программирования в штучных вариантах промышленных машин, вычислительных устройств, специфических механизмах и других схожих вещах. Другие же языки программирования – известны многим миллионам людей. Высококлассные и опытные разработчики программ иногда применяют больше десятка самых различных языков программирования.
На более “глубоких” уровнях, называемых в простонародье - “железе”, т.е. в процессоре, используется машинный язык. Язык программирования превращается в машинный язык при помощи компиллятора. Компилятор — это такой транслятор, который переводит программу на некотором языке программирования в машинный код
Машинный язык (machine language) — язык, который определяется структурой аппаратных средств компьютера и может быть непосредственно воспринят ими. Программа на машинном языке записывается в двоичных кодах.[[19]] Машинный вид команды для программы, состоящий из обозначений «0» и «1», указывает на то, именно какое действие должен выполнить центральный процессор в своей работе.
Парадигмами программирования в форме языков и систем программирования представлено знание о потенциале ИТ. В момент создания язык программирования отражает некий прогноз относительно области приложения ИТ. Практика разработки и применения систем программирования конкретизирует и уточняет такое знание в форме отлаженных программ с комплектами данных для них и прецедентами успешного их применения[[20]]

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


1) Императивные языки описывают процесс вычислений в виде команд, изменяющих состояние программы. Эти языки разрабатывались для фоннеймановской архитектуры ЭВМ, названной так в честь её автора – Джона фон Неймана. В компьютере фон Неймана данные и программы хранятся в одной и той же памяти, называемой оперативной. Центральный процессор получает из оперативной памяти очередную команду, декодирует её, выбирает из памяти указанные данные, выполняет команду и возвращает в память результат. Основными элементами императивных языков являются переменные, моделирующие ячейки памяти ЭВМ; операторы присваивания, осуществляющие пересылку данных; один или несколько итеративных циклов. Примерами императивных языков можно отнести такие языки как Algol, Fortran, Basic, PL/1, Ada.[[21]]

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

3) Декларативные языки программирования - это языки программирования, в которых операторы представляют собой объявления или высказывания в символьной логике. Типичным примером таких языков являются языки логического программирования(языки, основанные на системе правил)[[22]].


4) Объектно-ориентированное программирование является развитием императивного программирования. При его создании преследовались две цели:
1) Сократить размеры программ за счет повышения размера строительных элементов и тем самым обеспечить возможность создания более крупных программных приложений.
2) Упростить процесс создания новых программ на базе старых (за счёт применения механизма нследования)
Объектно-ориентированные языки впитали в себя лучшие понятия и механизмы императивных языков. Объектно-ориентированные языки задают вычисления как взаимодействия программных объектов.[[23]]

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



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



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

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


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

Специалисты различают следующие виды алгоритмов:
1) Линейный алгоритм - описание действий, которые выполняются однократно в точно заданном порядке.

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

3) Циклический алгоритм – это алгоритм, описывающий повторение одних и тех же вычислений над различными вариантами данных для получения необходимого результата. Требуемые вычисления производит основной блок цикла – тело цикла. Циклический процесс организуют вспомогательные блоки цикла. Они устанавливают начальное значение, новые значения данных и проверяют условие окончания циклического процесса.[[25]]



 




Рис. 5 Пример линейного алгоритма



Алгоритм, в котором команды выполняются в порядке их записи, то есть последовательно друг за другом, называется линейным.[[26]]

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

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


Рис. 6 Пример алгоритма с ветвлением

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

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

Конструкции циклов по своим основным свойствам можно характеризовать как циклы с параметром или циклы по условию, а так же как циклы с предусловием (то-есть те циклы, в которых условие цикла проверяется непосредственно перед выполнением тела цикла), и как циклы постусловием, в которых условие цикла проверяется после выполнения тела цикла.[30]

















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

В цикле с предусловием
1)вычисляется значение условия
2) если условие ложно, выполнение цикла прекращается
3)выполняется тело цикла
4)Выполнение цикла продолжается с пункта 1.

Цикл с постусловием же работает как:
1. Выполняется тело цикла
2. Вычисляется значение условия
3. Если условие принимает определённое значение, выполнение цикла прекращается.
4. Выполнение цикла продолжается с пункта 1.































Рис. 7 Пример алгоритма с постусловием

















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

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



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

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

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

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

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

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

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

else оператор;

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

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

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

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

}

else {

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

}




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

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

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

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

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

break;

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

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

break;

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

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

...

default:

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

}



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

отсутствует default), оператор switch заканчивает работу при обнаружении конца.[34]

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

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

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

3. если в операторе switch используются символьные константы, они автоматически преобразуются к целочисленным значениям.[36]
Рассмотрим реализацию алгоритмов цикла на языке С++, где существуют три разновидности цикла:

– цикл for;

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

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

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

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

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

– тело цикла;

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

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

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

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

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

{

тело цикла;

}

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

int summa = 0;

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

s = s + i;

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

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

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

{

тело цикла

};

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

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

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

do

{

тело цикла

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

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

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

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

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

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

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

{

тело цикла;

}

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

int summa = 0;

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

s = s + i;

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

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

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

{

тело цикла

};

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

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

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

do

{

тело цикла

}

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

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

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












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



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

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

С начала сутки прошло определённое количество (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")[42]; //подключаем кириллицу

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;

}
В результате получим:





Рис. 8 Результат алгоритма

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

#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();

return0;

}

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







Рис.9 Результат алгоритма

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

#include <iostream>

#include <conio.h>

#include <clocale>

#include <math.h>

using namespace std;

in main()

{

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

setlocale( LC_ALL,1201 );

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

int r, m, q;

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

int М[40];

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

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

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

cin>>m;

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

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

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

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

return0;

}

В результате исполнения данного кода мы получим:






 

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

















Заключение



С каждым днём влияние компьютеров и различной умной техники на нашу жизнь увеличивается, и упрощает её. Если большинство пользователей овладеют пониманием и умением правильно обращаться с алгоритмами, а так же правильно понимать их суть — жизнь станет намного проще и легче.
Процессор компьютера, самая важная его составляющая, умеет понимать и обрабатывать только простейшие команды. А для обработки сложнейших и трудоёмких задач ему нужна помощь программиста, который составит узконаправленные и точные инструкции.
Составление алгоритма, пошагового описания каждого действия, необходимо для точного понимания исполнителем и правильной постановки действий. Этот процесс называется алгоритмизацией. В роли исполнителя может быть кто и что угодно, от сложной вычислительной техники до самого обычного человека.
Развитие и прогресс электронно-вычислительных машин определил процесс появления метода общения с процессорами — языков программирования. Цель появления таких языков — набор вычислительных формул дополнительной информации, превращающий её в алгоритм.
Язык программирования это метод общения человека и компьютера. Компьютер начинает понимать, чего от него требует программист, и выполняет предписанные ему действия в строго определённом порядке.
В работе выполнены несколько задач:
- рассмотрены и обсуждены основные понятия алгоритмов, их свойства
-описаны методы подачи алгоритмов
- дана характеристика базовых структур алгоритмов
- проведён сравнительный анализ структур алгоритмов
- проведено рассмотрение операторов для реализации основных структур алгоримов используя язык программирования C++
- приведены примеры использования базовых структур алгоритмов



























 


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




1Основы алгоритмизации и программирования: учеб. пособие / Т.А.
Жданова, Ю.С. Бузыкова. – Хабаровск : Изд-во Тихоокеан. гос.ун-та, 2011. –56 с.
2. Горностаева, Татьяна Николаевна Г 67 Алгоритмы. Учебное пособие – М.: Мир науки, 2019. – Сетевое издание. Режим доступа:https://izd-mn.com/PDF/33MNNPU19.pdf Дата обращения 25.06.2020
3. Харахан О.Г., Системы искусственного интеллекта. Практикум для проведения лабораторных работ. Ч. 1 : Учебное пособие для вузов / Харахан О.Г. - М: Издательство Московского государственного горного университета, 2006. - ISBN 5-7418-0425-1 - Текст : электронный // ЭБС "Консультант студента" : [сайт]. - URL : https://www.studentlibrary.ru/book/ISBN5741804251.html (дата обращения: 10.07.2020). - Режим доступа : по подписке.
4.Сираждинов С.Х., Матиевская Г.П. Ал-Хорезми — выдающийся математик и астроном средневековья: Пособие для учащихся, - М.: Просвещение, 1983 89 с.
5. Алгебра: Элементы комбинаторики. Бином ньютона: Методические указания/Авт.-сост- В.А. Васильева, Т.Б. Волкова, Р.Н. Молодожникова.- М.: Изд-во МАИ. 2002 с. 88 с.
6. Физическая лаборатория школьника. Часть 2: учеб.-метод. Пособие / Н.Ю. Петров, Н.Ю. Березин, В.В. Христофоров. Новосибирск: Изд-во НГТУ, 2015. 108 с.
7. В.И. Поляков, В.И. Скорубский Основы теории алгоритмов Учебное пособие по дисциплине «Математическая логика и теория алгоритмов» - Санкт-Петербург: НИУ ИТМО, 2012 51 с.

8. Забуга А.А. Теоретические основы: Учебное пособие. Стандарт третьего пооколения. - Спб.: Питер, 2014, 208 с.
9. Основы алгоритмизации и программирования на языке высокого уровня Си: учебно-практическое пособие / Т.В. Панова, Н.Д. Николаева; Балт. гос. техн. ун-т. – СПб., 2015 176 с.
10. Есипов А.А. Информатика и информационные технологии для учащихся школ и колледжей. Спб.: БХВ-Петербург, 2004. - 470 c.
11. Информатика и ИКТ: Учебник для 9 класса:в 2ч. ч.1 / А.Ю. Босова. -М. :БИНОМ. Лаборатория знаний, 2012 244. с.
12. Программирование и основы алгоритмизации: Для инженерных специальностей технических университетов и вузов. /А.Г. Аузяк, Ю.А. Богомолов, А.И. Маликов, Б.А. Старостин. Казань: Изд-во Казанского национального исследовательского технического ун-та - КАИ, 2013, 153 С.
13. Основы алгоритмизации и программирования : учебное пособие / Г. Р. Кадырова. – Ульяновск : УлГТУ, 2014. 95 с.
14. Учебное пособие, руководство по изучению дисциплины, практикум, учебная программа / Московский государственный университет экономики, статистики и информатики. – М. ,2004. – 220 с
15. Симонович С.В. Базовый курс: Учебник для вузов. 3-е пзд. Стандарт третьего поколения. - Спб.:Питер, 2011. 640 с.
16. А.А. Тюгашев. Основы программирования. Часть I. – СПб: Университет ИТМО, 2016. – 1 Режим доступа :https://books.ifmo.ru/file/pdf/1917.pdf Дата обращения 06.07.2020 117 С.
17.Лекции по операционным системам (общий курс): учебное пособие / Е.М. Карчевский, О.В. Панкратова — Казань: Казан. Ун-т, 2011. 255 с.
18.Парадигма программирования : курс лекций / Л. В. Городняя ; Новосиб. гос. ун-т. – Новосибирск : РИЦ НГУ, 2015. 206 с.
19. Молдованова О.В. Языки программирования и методы трансляции: Учебное пособие. – Новосибирск/СибГУТИ, 2012. 134 С.
20. Опалева Э.А., Самойленко В.П. Языки программирования и методы трансляции СПб.: БХВ-Петербург,2003. – 471 с.
21. Орлов С. Теория и практика языков программирования: Учебник для вузов. 2-Ее изд. Стандарт 3-го поколения. -Спб. Питер, 2017. 688 с.
22. Гниденко И.Г., Соколовская С.А. Информатика, 2-е изд. - Спб..: Издательский дом «Нева», 2003. 320 С.
23. Перова В.И., Сабаева Т.А., Чекмарев Д.Т. РАЗРАБОТКА АЛГОРИТМОВ ДЛЯ РЕШЕНИЯ ЗАДАЧ НА ЭВМ: Учебное пособие. – Нижний Новгород: Нижегородский госуниверситет, 2015. Режим доступа:http://www.lib.unn.ru/students/src/RACV.pdf 136 с.
24. Информатика :Учебник для 6 класса / Л.Л. Босова, А.Ю. Босова. - М.: БИНОМ. Лаборатория знаний, 2013. 215 с.
25. Могилев, А. Информация и информационные процессы. Социальная информатика] / Л. Листрова, А. Могилев .— СПб. : БХВ-Петербург, 2006 222 с.
26. Хиценко В.П. Основы программирования: учебное пособие /В.П. Хиценко. - Новосибирск: Изд-во НГТУ, 2015 83 с.
27. Потопахин В.В. Язык C. Освой на примерах. Спб.: БХВПетербург, 2006.
28. Язык С : освой на примерах / Виталий Потопахин. - Санкт-Петербург : БХВ-Петербург, 2006 (СПб. : Типография "Наука" РАН). - 301 с
29. Сети и телекоммуникации : учебник и практикум для СПО / Под ред. К.Е. Самуйлова, И.А. Шалимова, Д.С. Кулябова. - М.: Издательство Юрайт, 2019. 363 с.
30. Кернинган, Брайан У,, Ритчи, Деннис М. Язык программирования С, 2-е издание.: Пер с англ. - М.: Издательский дом «Вильямс», 2007. 304 с.
31. Шилдт, Герберт, Полный справочник по С, 4-е издание. : Пер. С англ. - М.: Издательский дом «Вильямс», 2007 704 с.
32. Довбуш, Г.Ф. Visual C++ на примерах/ Г.Ф. Довбуш, А.Д. Хомоненко/ Под ред проф. А.Д.Хомоненко. - Спб.:БХВ-Петербург, 2007. 528 с.
33. Орлов С. Теория и практика языков программирования: Учебник для вузов. 2-е изд. Стандарт 3-го поколения. -Спб.: Питер, 2017 686 с.
34. Пахомов Б.И. и MS visual c++ 2010 для начинающих. СПБ.: БХВпетербург. 2011. 736 с.
35. Большая школьная энциклопедия, Т.1. Естественные науки( автор-составитель С. Исмаилова).-М.:Русское энциклопедическое товарищество, 2003 702 с.
36. Дейл Н., Уима Ч., Хедингтон М. Программирование на С++: Пер. С англ. - М.: ДМК Пресс. 673 с.
37. Программирование на языке Си: учеб. Пособие / Р.Ю. Царев. - Красноярск: Сиб. Федер. Ун-т, 2014. 108 с.
38. Прохоренок Н.А. Язык С. Самое необходимое. СПБ,: БХВПетербург, 2020. 408 с.
39. Герберт Шилдт C++: Руководство для начинающих, 2-е издание. : Пер.с англ. - М.: Издательский дом «Вильямс», 2005. 672 с

  1. 1Основы алгоритмизации и программирования: учеб. пособие / Т.А.
    Жданова, Ю.С. Бузыкова. – Хабаровск : Изд-во Тихоокеан. гос.ун-та, 2011. –
    с. 8

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

  3. Системы искуственного интеллекта. Практикум для проведения лабораторных работ. Ч. 1: Учебное пособие для вузов. - М.: Издательство Московского государственного горного университета, 2006 с. 199

  4. Сираждинов С.Х., Матиевская Г.П. Ал-Хорезми — выдающийся математик и астроном средневековья: Пособие для учащихся, - М.: Просвещение, 1983 с.11

  5. Алгебра: Элементы комбинаторики. Бином ньютона: Методические указания/Авт.-сост- В.А. Васильева, Т.Б. Волкова, Р.Н. Молодожникова.- М.: Изд-во МАИ. 2002 с. 82

  6. Физическая лаборатория школьника. Часть 2: учеб.-метод. Пособие / Н.Ю. Петров, Н.Ю. Березин, В.В. Христофоров. Новосибирск: Изд-во НГТУ, 2015. с. 20

  7. В.И. Поляков, В.И. Скорубский Основы теории алгоритмов Учебное пособие по дисциплине «Математическая логика и теория алгоритмов» - Санкт-Петербург: НИУ ИТМО, 2012

  8. Забуга А.А. Теоретические основы: Учебное пособие. Стандарт третьего пооколения. - Спб.: Питер, 2014, с. 61

  9. В.И. Поляков, В.И. Скорубский Основы теории алгоритмов Учебное пособие по дисциплине «Математическая логика и теория алгоритмов» - Санкт-Петербург: НИУ ИТМО, 2012 с. 6

  10. Основы алгоритмизации и программирования на языке высокого уровня Си: учебно-практическое пособие / Т.В. Панова, Н.Д. Николаева; Балт. гос. техн. ун-т. – СПб., 2015. с. 5

  11. Основы алгоритмизации и программирования: учеб. пособие / Т.А. Жданова, Ю.С. Бузыкова. – Хабаровск : Изд-во Тихоокеан. гос.ун-та, 2011. с..9

  12. Есипов А.А. Информатика и информационные технологии для учащихся школ и колледжей. Спб.: БХВ-Петербург, 2004. - с. 149

  13. Информатика и ИКТ: Учебник для 9 класса:в 2ч. ч.1 / А.Ю. Босова. -М. :БИНОМ. Лаборатория знаний, 2012. с.

  14. Программирование и основы алгоритмизации: Для инженерных специальностей технических университетов и вузов. /А.Г. Аузяк, Ю.А. Богомолов, А.И. Маликов, Б.А. Старостин. Казань: Изд-во Казанского национального исследовательского технического ун-та - КАИ, 2013 с. 11

  15. Основы алгоритмизации и программирования : учебное пособие / Г. Р. Кадырова. – Ульяновск : УлГТУ, 2014. c.7

  16. Калмыкова О.В., Грибанов В.П., Сорока Р.И. ОСНОВЫ АЛГОРИТМИЗАЦИИ И ПРОГРАММИРОВАНИЯ: Учебное пособие, руководство по изучению дисциплины, практикум, учебная программа / Московский государственный университет экономики, статистики и информатики. – М., 2004. с. 10

  17. Симонович С.В. Базовый курс: Учебник для вузов. 3-е пзд. Стандарт третьего поколения. - Спб.:Питер, 2011. с 578.

  18. А.А. Тюгашев. Основы программирования. Часть I. – СПб: Университет ИТМО, 2016. – 1 Режим доступа :https://books.ifmo.ru/file/pdf/1917.pdf Дата обращения 06.07.2020 с. 10

  19. Лекции по операционным системам (общий курс): учебное пособие / Е.М. Карчевский, О.В. Панкратова — Казань: Казан. ун-т, 2011. с. 14

  20. Парадигма программирования : курс лекций / Л. В. Городняя ; Новосиб. гос. ун-т. – Новосибирск : РИЦ НГУ, 2015. с. 5

  21. Молдованова О.В. Языки программирования и методы трансляции: Учебное пособие. – Новосибирск/СибГУТИ, 2012. с. 5

  22. Опалева Э.А., Самойленко В.П. Языки программирования и методы трансляции

    Спб.: БХВПетербург, 2005. с.17

  23. Орлов С. Теория и практика языков программирования: Учебник для вузов. 2-Ее изд. Стандарт 3-го поколения. -Спб. Питер, 2017. с. 65:

  24. Гниденко И.Г., Соколовская С.А. Информатика, 2-е изд. - Спб..: Издательский дом «Нева», 2003. с. 94

  25. Перова В.И., Сабаева Т.А., Чекмарев Д.Т. РАЗРАБОТКА АЛГОРИТМОВ ДЛЯ РЕШЕНИЯ ЗАДАЧ НА ЭВМ: Учебное пособие. – Нижний Новгород: Нижегородский госуниверситет, 2015. Режим доступа:http://www.lib.unn.ru/students/src/RACV.pdf с. 32

  26. Информатика :Учебник для 6 класса / Л.Л. Босова, А.Ю. Босова. - М.: БИНОМ. Лаборатория знаний, 2013. с. 111

  27. Могилев, А. Информация и информационные процессы. Социальная информатика] / Л. Листрова, А. Могилев .— СПб. : БХВ-Петербург, 2006 с. 98

  28. Босова Л. Л., Босова А. Ю., Информатика: учебник для 6 класса. М. : БИНОМ. Лаборатория знаний, 114 с.

  29. Хиценко В.П. Основы программирования: учебное пособие /В.П. Хиценко. - Новосибирск: Изд-во НГТУ, 2015 с.19

  30. Потопахин В.В. Язык C. Освой на примерах. Спб.: БХВПетербург, 2006. с.77

  31. Сети и телекоммуникации : учебник и практикум для СПО / Под ред. К.Е. Самуйлова, И.А. Шалимова, Д.С. Кулябова. - М.: Издательство Юрайт, 2019. с.298

  32. Кернинган, Брайан У,, Ритчи, Деннис М. Язык программирования С, 2-е издание.: Пер с англ. - М.: Издательский дом «Вильямс», 2007. с. 71

  33. Шилдт, Герберт, Полный справочник по С, 4-е издание. : Пер. С англ. - М.: Издательский дом «Вильямс», 2007. с.83

  34. Кочан, Стефан. Программирование на языке С, 3-е издание.: Пер. с. англ. -М.: ООО «И.Д. Вильямс» 2006. с.81

  35. Прата,Ствиен. Язык программирования С++. Лекции и упражнения, 5-е изд.: Пер. С англ.-М.: ООО «И.Д. Вильямс», 2007. с.259

  36. Довбуш, Г.Ф. Visual C++ на примерах/ Г.Ф. Довбуш, А.Д. Хомоненко/ Под ред проф. А.Д.Хомоненко. - Спб.:БХВ-Петербург, 2007. с.39

  37. Орлов С. Теория и практика языков программирования: Учебник для вузов. 2-е изд. Стандарт 3-го поколения. -Спб.: Питер, 2017. с. 137

  38. Пахомов Б.И. и MS visual c++ 2010 для начинающих. СПБ.: БХВпетербург. 2011. c.38

  39. Большая школьная энциклопедия, Т.1. Естественные науки( автор-составитель С. Исмаилова).-М.:Русское энциклопедическое товарищество, 2003. с.693

  40. Дейл Н., Уима Ч., Хедингтон М. Программирование на С++: Пер. С англ. - М.: ДМК Пресс. с. 198

  41. Программирование на языке Си: учеб. Пособие / Р.Ю. Царев. - Красноярск: Сиб. Федер. Ун-т, 2014. с.11

  42. Прохоренок Н.А. Язык С. Самое необходимое. СПБ,: БХВПетербург, 2020. с. 212

  43. Герберт Шилдт C++: Руководство для начинающих, 2-е издание. : Пер.с англ. - М.: Издательский дом «Вильямс», 2005. с 46