Основные положения структурного программирования
Основные положения структурного программирования
Структурное программирование — методология разработки программного обеспечения, в основе которой лежит представление программы в виде иерархической структуры блоков.
Принцип абстракции.
Этот принцип позволяет разработчику рассматривать программу в нужный момент без лишней детализации. Детализация увеличивается при переходе от верхнего уровня абстракции к нижнему.
Принцип формальности.
Он предполагает строгий методический подход к программированию, придает творческому процессу определенную строгость и дисциплину
Принцип модульности.
В соответствии с этим принципом программа разделяется на отдельные законченные фрагменты, модули, которые просты по управлению и допускают независимую отладку и тестирование. В результате отдельные ветви программы могут создаваться разными группами программистов.
Принцип иерархического упорядочения.
Взаимосвязь между частями программы должна носить иерархический, подчиненный характер.
Понятие оператора (statement).
Наименьшая автономная часть языка программирования; команда или набор команд. Программа обычно представляет собой последовательность инструкций.
Многие языки (например, си) различают инструкцию и определение. Различие в том, что инструкция исполняет код, а определение создаёт идентификатор (то есть можно рассматривать определение как инструкцию присваивания).
Пустой и составной операторы.
Составной оператор - это последовательность произвольных операторов программы, заключенная в операторные скобки - зарезервированные слова begin ... end .
Пустой оператор состоит только из точки с запятой. При выполнении этого оператора ничего не происходит. Он обычно используется в следующих случаях:
в операторах do, for, while, if в строках, когда место оператора не требуется, но по синтаксису требуется хотя бы один оператор;
при необходимости пометить фигурную скобку.
Условный оператор и условная операция.
Условный оператор предназначен для выбора одного из двух альтернативных действий и имеет следующую форму записи:
БНФ: условный_оператор = "if" "("выражение")" оператор_1 ["else" оператор_2]
Терна́рная усло́вная опера́ция (от лат. ternarius — «тройной») (обычно записывается как ?:) — во многих языках программирования операция, возвращающая свой второй или третий операнд в зависимости от значения логического выражения, заданного первым операндом. Как можно судить из названия, тернарная операция принимает всего три указанных операнда.
Безотносительно к определённому языку программирования тернарную операцию можно определить так:
логическое выражение ? выражение 1 : выражение 2
Алгоритм работы операции следующий:
Вычисляется логическое выражение.
Если логическое выражение истинно, то вычисляется значение выражения выражение 1, в противном случае — значение выражения выражение 2.
Вычисленное значение возвращается.
Оператор цикла «while».
С помощью данного оператора реализуется цикл, который выполняется до тех пор, пока истинно условие цикла.
while (условие) {
// код, тело цикла
}
Запись алгоритмов с помощью диаграмм Неси-Шнейдермана (структурограмм) и блок-схем.
Диаграммы Насси – Шнейдермана строятся с использованием шести элементарных “строительных блоков”.
Блок действия
Как известно, алгоритм состоит из последовательности действий.Блок действияиспользуется для представления отдельного действия алгоритма:
Блоки с разветвлением
Блок с разветвлением используется, когда в алгоритме возможны два варианта действий, а выбор того или иного варианта действия зависит от некоторого условия:
Блок множественного выбора
Блок множественного выбора используется, когда существует несколько вариантов возможных действий, выбор которых зависит от значения некоторого выражения2:
Блок цикла с предусловием
Блок цикла с предусловием используется тогда, когда должна быть многократно выполнена некоторая последовательность действий, причем перед каждым выполнением проверяется некоторое условие:
Блок цикла с постусловием
Блок цикла с постусловием используется, когда в алгоритме действия должны повторяться до наступления определенного условия (условие проверяется после выполнения действий):
Блок подпрограммы
Блок подпрограммы используется в случаях, когда некоторый процесс в алгоритме слишком большой, чтобы изображать его на диаграмме, или когда какие-то блоки действий используются несколько раз в разных местах одной и той же диаграммы. Например, для задачи стрижки газона около дома диаграмма алгоритма ее решения может быть оформлена так:
Диаграмма, иллюстрирующая действия в подпрограмме, оформляется отдельно.
Блок схема
Имена функций
Имена должны отражать то, что делают функции и что они возвращают.
https://www.ibm.com/developerworks/ru/library/au-hook_duttaC/index.html
Оператор цикла «do-while».
Проверку условия можно поставить под телом цикла, используя специальный синтаксис do..while:
do {
// тело цикла
} while (условие);
Цикл, описанный, таким образом, сначала выполняет тело, а затем проверяет условие.
Перечисления.
Ключевое слово enum используется для объявления перечисления — отдельного типа, который состоит из набора именованных констант, называемого списком перечислителей.
Обычно лучше всего определять перечисление непосредственно в пространстве имен, чтобы всем классам в пространстве имен было одинаково удобно обращаться к нему. Однако перечисление также может быть вложенным в классе или структуре.
По умолчанию первый перечислитель имеет значение 0, и значение каждого последующего перечислителя увеличивается на 1.
Описание массива.
Одномерный массив — массив, с одним параметром, характеризующим количество элементов одномерного массива. Фактически одномерный массив — это массив, у которого может быть только одна строка, и n-е количество столбцов int a[16];
// массивы могут быть инициализированы при объявлении:
int a[16] = { 5, -12, -12, 9, 10, 0, -9, -12, -1, 23, 65, 64, 11, 43, 39, -15 };
двумерный массив — это обычная таблица, со строками и столбцами.
// пример объявление двумерного массива: int a[5][3]; |
· a— имя целочисленного массива
· число в первых квадратных скобках указывает количество строк двумерного массива, в данном случае их 5;
· число во вторых квадратных скобках указывает количество столбцов двумерного массива, в данном случае их 3.
Ввод-вывод массива.
Инициализация массива.
http://www.c-cpp.ru/books/inicializaciya-massiva
Сортировка массивов.
https://edunow.su/site/content/algorithms/sortirovka_massiva
Двумерные массивы (массивы массивов).
двумерный массив — это обычная таблица, со строками и столбцами.
// пример объявление двумерного массива: int a[5][3]; |
· a— имя целочисленного массива
· число в первых квадратных скобках указывает количество строк двумерного массива, в данном случае их 5;
· число во вторых квадратных скобках указывает количество столбцов двумерного массива, в данном случае их 3.
Массив массивов — это массив, элементы которого сами являются массивами. Элементы массива массивов могут иметь различные размеры и измерения. Массивы массивов иногда также называются "невыровненными массивами".
https://docs.microsoft.com/ru-ru/dotnet/csharp/programming-guide/arrays/jagged-arrays
Адресная арифметика.
Адресная арифметика (address arithmetic) - это способ вычисления адреса какого-либо объекта при помощи арифметических операций над указателями, а также использование указателей в операциях сравнения. Адресную арифметику также называют арифметикой над указателями (pointer arithmetic).
http://proguroki.ru/urok7/urok7_1/urok7_1_6/urok-7-1-6-adresnaya-arifmetika
Указатели и функции.
http://edusupport.ru/studentu/azyk-programmirovania-si/ukazateli-i-funkcii/
Пример использования динамической памяти.
http://helpiks.org/2-57803.html
Особенности работы с двумерными массивами: пересчет индексов вручную, http://helpiks.org/2-57804.html
динамические массивы с постоянной длиной строки, http://helpiks.org/2-57805.html
общий случай двумерного массива. http://helpiks.org/2-57806.html
Понятие рекурсии.
Рекурсия (от латинского recursio - возвращение) - это такой способ организации вычислительного процесса, при котором процедура или функция в ходе выполнения составляющих ее операторов обращается сама к себе.
Для того, чтобы такое обращение не было бесконечным, в тексте подпрограммы должно быть условие, по достижению которого дальнейшего обращения не происходит. таким образом, рекурсивное обращение может включаться только в одну из ветвей подпрограммы.
Примеры использования рекурсии.
Классический пример: рекурсивно-определённый факториал целого неотрицательного числа: n !
Рекурсия и итерация.
Рекурсиейназывается такой способ организации обработки данных, при котором программа (или функция) вызывает сама себя или непосредственно, или из других программ (функций).
Функция называется рекурсивной, если во время ее обработки возникает ее повторный вызов, либо непосредственно, либо косвенно, путем цепочки вызовов других функций.
Итерациейназывается такой способ организации обработки данных, при котором некоторые действия многократно повторяются, не приводя при этом к рекурсивным вызовам программ (функций).
Описание структуры.
Трактовка имени структуры.
Поля бит в структурах.
Битовые поля в си объявляются с помощью структур. Они позволяют получать доступ до отдельных битов или групп битов. Доступ до отдельных битов можно осуществлять и с помощью битовых операций, но использование битовых полей часто упрощает понимание программы.
Синтаксис объявления битового поля
struct <имя> { <тип> <имя>: <размер>; ...}Объединения.
http://www.c-cpp.ru/books/obedineniya
Линейные списки.
Линейный однонаправленный список — это структура данных, состоящая из элементов одного типа, связанных между собой последовательно посредством указателей. Каждый элемент списка имеет указатель на следующий элемент. Последний элемент списка указывает на NULL. Элемент, на который нет указателя, является первым (головным) элементом списка. Здесь ссылка в каждом узле указывает на следующий узел в списке. В односвязном списке можно передвигаться только в сторону конца списка. Узнать адрес предыдущего элемента, опираясь на содержимое текущего узла, невозможно.
Основные положения структурного программирования
Структурное программирование — методология разработки программного обеспечения, в основе которой лежит представление программы в виде иерархической структуры блоков.
Принцип абстракции.
Этот принцип позволяет разработчику рассматривать программу в нужный момент без лишней детализации. Детализация увеличивается при переходе от верхнего уровня абстракции к нижнему.
Принцип формальности.
Он предполагает строгий методический подход к программированию, придает творческому процессу определенную строгость и дисциплину
Принцип модульности.
В соответствии с этим принципом программа разделяется на отдельные законченные фрагменты, модули, которые просты по управлению и допускают независимую отладку и тестирование. В результате отдельные ветви программы могут создаваться разными группами программистов.
Принцип иерархического упорядочения.
Взаимосвязь между частями программы должна носить иерархический, подчиненный характер.