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

Введение в алгоритмы. Структурное программирование.

О чём пойдёт речь

  • Основы алгоритмизации. Понятие структурного программирования.
  • Языки высокого уровня на примере C#. Базовый синтаксис и типы данных.
  • Массивы и строки.
  • Базовые структуры данных.

Source: https://pixabay.com/vectors/pencil-marks-notes-agenda-list-308509/

Чуть-чуть обо мне

  • Роман Бут-Гусаим
  • Пишу код 12+ лет
  • Живые системы 7+ лет
  • Ведущий разработчик в компании

Основы алгоритмизации

Source: https://pixabay.com/illustrations/fractal-recursive-geometry-dynamic-1119594/

Решение задач в построении ПО

Реальная

задача

Построение

модели

Алгоритм

Программа

Отладка

Тестирование

Использование

Определение алгоритма

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

Source: https://pixabay.com/photos/khiva-al-khwarazmi-universal-scholar-198613/

Термин «алгоритм» происходит от латинской формы имени среднеазиатского математика Аль-Хорезми – Algorithmi.

Пример алгоритма

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

 

Как всем переплыть на другой берег?

Source: сам нарисовал :)

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

  1. Универсальность (массовость) - применимость алгоритма к различным наборам исходных данных.
  2. Дискретность - процесс решения по алгоритму разбит на отдельные действия.
  3. Однозначность (понятность) - правила и порядок действий алгоритма имеют единственное толкование.
  4. Конечность - шаги алгоритма и алгоритм в целом обязательно завершаются.
  5. Результативность - в завершении обязательно есть конечный результат.

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

  1. Словесно-формульная.
  2. Графическая.
  3. Псевдокод (описание на условном алгоритмическом языке).
  4. Программная (с использование языка программирования).
y={-b \pm \sqrt{b^2 - 4ac} \over 2a}

Словесно-формульная запись алгоритма

Графическая форма представления алгоритма

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

Пример блок-схемы алгоритма

* есть ГОСТ, которому подчиняется построение блок-схем. В нашей практике следование им почти не встречается, поэтому не останавливаемся.

Блок-схема - основные элементы

Основные блоки при построении блок-схеми

Теорема Бёма-Якопини

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

Коррадо Бём

Source: https://ru.wikipedia.org/wiki/%D0%91%D1%91%D0%BC,_%D0%9A%D0%BE%D1%80%D1%80%D0%B0%D0%B4%D0%BE

Последовательная структура

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

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

Начало Программа 1
  Инструкция 1
  Инструкция 2
  ...
  Инструкция n
Конец Программа 1

Структура ветвлений

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

Пример ветвления

Начало Программа 1
  Если условие 1 то Инструкция 1
  Если условие 2 то Инструкция 2
  ...
  Иначе Инструкция n
Конец Программа 1

Циклический процесс

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

 

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

 

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

Постусловие

Предусловие

С параметром

Итерационные

Цикл

Цикл

Циклический процесс - Виды циклов

Циклический процесс - Итерационный цикл

  • Количество повторений заранее не известно. Предусловие/постусловие контролирует выход из цикла.
  • На каждом шаге происходит вычисление и проверка условия.
  • Должен быть сходимым - обязательно достигаться условие выхода из цикла. Иначе цикл будет бесконечным, что порождает ворох проблем.
S=x - x^2/2 + x^3/3 - x^4/4+...+(-1)^{(i-1)}*x^i/i+...

Циклический процесс - Задачка

Посчитать сумму элементов матрицы, расположенных на пересечении нечётных строк и столбцов.

Структурное программирование

Source: https://pixabay.com/photos/architecture-skyscraper-urban-city-768432/

Основная идея

  1. В основе лежит теорема Бёма-Якопини, рассмотренная ранее.
  2. В соответствии с парадигмой, любая программа, которая строится без использования оператора goto, состоит из трёх базовых управляющих конструкций: последовательность, ветвление, цикл; кроме того, используются подпрограммы. Wiki
    
  3. Появилась в 70-х годах прошлого века как ответ на всё возрастающую сложность программ.

Дейкстра, Э.

Хоар, Ч.

Принципы структурного программирования

  1. Следует отказаться от использования безусловного оператора goto.
  2. Любая программа состоит из трёх базовых конструкций: последовательность, ветвление, цикл.
  3. В программе базовые управляющие конструкции могут быть вложены друг в друга произвольным образом.
  4. Повторяющиеся фрагменты программы можно оформить в виде подпрограмм (процедур и функций). Таким же образом (в виде подпрограмм) можно оформить логически целостные фрагменты программы, даже если они не повторяются.
  5. Каждую логически законченную группу инструкций следует оформить как блок.
  6. Все перечисленные конструкции должны иметь один вход и один выход.
  7. Разработка программы ведётся пошагово, методом «сверху вниз».

Source: https://pixabay.com/photos/light-idea-girl-the-imagination-2188464/

Пару слов о goto

  1. Оператор безусловного перехода.
  2. Присутствует во многих языках программирования (да, в C# тоже).
  3. Крайне нежелателен с точки зрения структурного программирования. Т.е. надо хорошо понимать, что делаешь.
  4. Есть случаи, когда сильно облегчает жизнь*.

* мы про его использование забываем. Оправданий нет.

Разработка "сверху-вниз"

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

Подпрограммы

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

Ещё одна задачка

Формулировка

Дано число n. Вывести все числа, меньшие чем n, которые являются простыми.

 

Простое число - натуральное число, у которого  есть два делится - 1 и само число.

Source: https://pixabay.com/photos/problem-question-solution-response-860227/

Победа!

Source: https://pixabay.com/photos/solution-question-problem-response-860229//

Внеклассное чтение

  1. Вирт, Н. - Алгоритмы и структуры данных
  2. Ахо, А., Хопкрофт, Дж. - Структуры данных и алгоритмы

 

После освоения на базовом уровне C#

  1. Сэджвик, Р. - Алгоритмы на Java
  2. Вместе с книгой выше - Coursera, Algorithms, Part I

Source: https://pixabay.com/photos/woman-away-nature-forest-meadow-2827304/

Источники

Source: https://pixabay.com/photos/writing-writer-notes-pen-notebook-923882/

Source: https://pixabay.com/photos/lamps-thank-you-door-workshop-1030901/

Введение в алгоритмы. Структурное программирование

By Raman But-Husaim

Введение в алгоритмы. Структурное программирование

  • 459