Загрузка данных


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

---

Оглавление

Введение.......................................................................................................1
Понятие алгоритма и его свойства............................................................2
Классификация простейших алгоритмов в C++.........................................3
Линейные алгоритмы...............................................................................3.1
Разветвляющиеся алгоритмы..................................................................3.2
Циклические алгоритмы..........................................................................3.3
Работа с массивами и базовые алгоритмы сортировки...........................4
Примеры реализованных программ..........................................................5
Заключение..................................................................................................6
Список использованных источников информации.................................7
Приложение 1. Листинги программ.........................................................8

Введение

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

Цель работы — изучить и самостоятельно реализовать базовые алгоритмы на C++. Для достижения цели поставлены следующие задачи: во-первых, разобраться, что такое алгоритм и какими свойствами он обладает; во-вторых, изучить три основные разновидности алгоритмов: линейные, разветвляющиеся и циклические; в-третьих, написать работающие программы на C++, которые наглядно демонстрируют каждый из типов; наконец, проанализировать полученные результаты и понять, как эти знания могут пригодиться в дальнейшем.

Объект исследования — алгоритмические конструкции языка C++. Предмет — простейшие алгоритмы и их программная реализация. При написании работы использовались компилятор g++, среда разработки Code::Blocks, а также несколько источников по основам программирования, перечисленных в списке литературы. Все описанные программы были реально выполнены, запущены и проверены. Общий объём работы составил 32 страницы.

Понятие алгоритма и его свойства

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

У любого алгоритма есть несколько обязательных свойств. Первое — дискретность, то есть разбиение на отдельные шаги, которые выполняются строго друг за другом. Компьютер не понимает расплывчатых указаний. Второе свойство — детерминированность (однозначность). На каждом шаге должно быть абсолютно понятно, что делать, без вариантов. Третье — результативность: алгоритм обязан завершиться и дать какой-либо результат. Четвертое — массовость: алгоритм должен работать не для одного набора данных, а для целого класса похожих задач.

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

Классификация простейших алгоритмов в C++

По своей структуре все алгоритмы делятся на три основных типа, каждый из которых по-своему реализуется в C++.

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

Второй тип — разветвляющиеся алгоритмы. Они позволяют программе выбирать дальнейший путь выполнения в зависимости от условий. В C++ для этого используются операторы if, else и switch. Благодаря разветвлениям программа становится гибкой.

Третий тип — циклические алгоритмы. Они применяются, когда одно и то же действие требуется повторить многократно. Вместо многократного дублирования кода используются циклы for, while или do-while. Это экономит время и делает программу короче.

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

Линейные алгоритмы

Линейные алгоритмы — это основа. Суть линейных алгоритмов хорошо показывает вычисление значения функции. Выбрана квадратичная функция  y = ax^2 + bx + c .

Программа запрашивает у пользователя коэффициенты  a, b, c  и значение  x , затем выводит результат. В этом коде нет ни одного if или цикла — только последовательные строки: вывод приглашения, считывание чисел, вычисление, вывод ответа.

Программа тестировалась с разными числами. Например, при  a=1, b=0, c=0  и  x=5  получается 25. Возможности линейных алгоритмов ограничены — они не адаптируются к данным. Но для понимания потока выполнения они идеально подходят. На таких примерах легко усвоить порядок действий в программе.

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

После освоения линейных программ логично перейти к программам, которые самостоятельно принимают решения. В C++ главный инструмент для этого — оператор if, а в некоторых случаях switch.

Для примера написана программа, определяющая, является ли год високосным. Год считается високосным, если он делится на четыре. Исключения: если год делится на сто, он не високосный; если делится на четыреста — високосный. Без разветвлений такую логику не реализовать.

В программе проверяется сложное условие: год делится на 4 и при этом не делится на 100, либо год делится на 400. При выполнении условия выводится «Високосный», иначе — «Не високосный». Тестирование на нескольких годах подтвердило корректность: 2020 — високосный, 2021 — нет, 1900 — не високосный, 2000 — високосный. Этот пример показывает, как разветвления делают программу «умнее».

Циклические алгоритмы

Циклические алгоритмы необходимы, когда одно и то же действие нужно повторить многократно. В C++ используются три вида циклов: for (когда число повторений известно заранее), while и do-while (когда количество повторений зависит от условий).

Для демонстрации выбрана задача вычисления факториала числа  n . Факториал — произведение всех целых чисел от 1 до  n . Количество повторений строго равно  n , поэтому логично использовать цикл for.

Программа запрашивает число  n , затем в цикле перемножает все числа от 1 до  n , сохраняя результат. Тестирование показало правильные результаты: для 5 — 120, для 10 — 3 628 800. Для закрепления материала та же программа была переписана с использованием цикла while с тем же результатом.

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

Работа с массивами и базовые алгоритмы сортировки

После освоения циклов и условий рассматриваются массивы. Массив — это набор ячеек одного типа, расположенных в памяти подряд. Работа с массивами вручную (обращение к каждому элементу) крайне утомительна, поэтому применяются циклы.

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

Затем реализована сортировка пузырьком — один из простейших алгоритмов сортировки. Суть: несколько проходов по массиву, на каждом сравниваются соседние элементы. Если левый элемент больше правого, они меняются местами. Таким образом, наибольшие элементы «всплывают» в конец массива. Для этого требуются два вложенных цикла: внешний отвечает за количество проходов, внутренний — за сравнение соседних элементов.

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

Примеры реализованных программ

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

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

Вторая программа — таблица умножения. Выводится таблица Пифагора размером 10×10. Используются вложенные циклы: внешний по строкам, внутренний по столбцам. На каждом шаге вычисляется произведение номера строки на номер столбца и выводится результат. Это пример автоматизации рутинной работы с помощью циклов.

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

Все программы отлажены и протестированы на разных входных данных. Полные листинги кода приведены в приложении.

Заключение

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

За время работы над проектом не только изучена теория, но и написаны и отлажены многочисленные программы — от простейшего калькулятора до сортировки массива. Усвоен поток выполнения программы, понимание, где нужно поставить условие, а где — цикл. C++ даёт программисту полный контроль над алгоритмами, но требует внимательности и аккуратности.

Все поставленные задачи выполнены: изучены понятие алгоритма и его свойства, разобраны три основных типа алгоритмов, реализованы на C++, рассмотрены примеры работы с массивами. Данный проект пригодится в дальнейшем при изучении более сложных тем (быстрая сортировка, рекурсия, структуры данных). Результат работы можно считать успешным.