Алгоритм Алгоритм Блок-схема Модуль Процедура Процедурная декомпозиция Процедурное программирование Модульное программирование Структурное программирование
Чтобы решить задачу, надо Чтобы решить задачу, надо Разработать последовательность элементарных действий →разработать алгоритм Каждое действие преобразовать в инструкции, понятные компьютеру → написать текст программы
- точно определённая последовательность действий для решения задачи. - точно определённая последовательность действий для решения задачи.
законченная точно определённая последовательность операций для решения отдельной задачи. законченная точно определённая последовательность операций для решения отдельной задачи. Procedure Vvod_ID(var x,y:byte); Begin … … End;
Процедурная декомпозиция - разделение большой программы на отдельные части, процедуры (модули) - облегчает разработку, отладку и сопровождение программы. Процедурная декомпозиция - разделение большой программы на отдельные части, процедуры (модули) - облегчает разработку, отладку и сопровождение программы. В свою очередь модуль также представляет собой совокупность процедур. Программа всегда имеет начальную процедуру и окончание. Для начала действия последующей процедуры необходимо завершение всех действий предшествующей процедуры. Вся программа может быть представлена в виде направленной последовательности графических блоков:
Фредерик Брукс. Фредерик Брукс. «Мифический человеко-месяц, или Как создаются программные системы»
Глава 2. Мифический человеко-месяц Глава 2. Мифический человеко-месяц 2.1 Программные проекты чаще проваливаются из-за нехватки календарного времени, чем по всем остальным причинам, вместе взятым. 2.2 Чтобы приготовить вкусную пищу, нужно время; некоторые задачи нельзя ускорить, не испортив результат. 2.3 Все программисты являются оптимистами: "Все будет хорошо". 2.4 Поскольку программист работает с чистыми идеями, мы не ожидаем особых трудностей при реализации. 2.5 Но сами наши идеи бывают ошибочными - отсюда и ошибки в программах. 2.6 Наши методы оценивания, основанные на учете затрат, смешивают затраты с полученным результатом. Человеко-месяц является ошибочным и опасным заблуждением, поскольку предполагает, что месяцы и количество людей можно менять местами. 2.7 Разделение задачи между несколькими людьми вызывает дополнительные затраты на обучение и обмен информацией. 2.8 Мое практическое правило: 1/3 времени - на проектирование, 1/6 - на написание программы, 1/4 - на тестирование компонентов и 1/4 - на системное тестирование. 2.9 Как научной дисциплине нам не хватает методов оценки. 2.10 Поскольку мы не уверены в своих оценках сроков работы, нам часто не достает смелости упрямо отстаивать их под нажимом руководства и клиентов. 2.11 Закон Брукса: если проект не укладывается в сроки, то добавление рабочей силы задержит его еще больше. 2.12 Добавление рабочей силы увеличивает общий объем затрат тремя путями: труд по перекраиванию задач и происходящее при этом нарушение работы, обучение новых людей, дополнительное общение.
«Любой проект по разработке ПО потребует в три раза больше времени, чем вы рассчитываете, даже если вы учитываете этот закон» «Любой проект по разработке ПО потребует в три раза больше времени, чем вы рассчитываете, даже если вы учитываете этот закон»
Edward Yourdon. «Death March. The Complete Software Developers’s Guide to Surviving “Mission Impossible” Projects» Edward Yourdon. «Death March. The Complete Software Developers’s Guide to Surviving “Mission Impossible” Projects» Эдвард Йордон. «Путь камикадзе. Как разработчику программного обеспечения выжить в безнадёжном проекте»
Безусловный переход: Безусловный переход: GOTO <номер строки/метка> Условный переход: IF <условие> THEN <путь1> ELSE <путь2> Цикл: DO WHILE <условие> <тело цикла> ENDDO REPEAT <тело цикла> UNTIL <условие> Выбор варианта: DO CASE <выражение> OF <значение1>: <путь1> <значение2>: <путь3> … ENDDO
- методология и технология разработки программных комплексов, основанная на принципах: - методология и технология разработки программных комплексов, основанная на принципах: - нисходящего программирования; - модульного программирования. Основа методологии: процедурная декомпозиция на всех уровнях проектирования программной системы.
Старайтесь, чтобы имена переменных отражали смысл их содержимого Старайтесь, чтобы имена переменных отражали смысл их содержимого Не используйте одну и ту же переменную в разных смыслах Пишите комментарии! Одна строка = один оператор + один комментарий Выделяйте отступами блоки, вложенные циклы и условные операторы Оптимальный по размерам модуль целиком должен помещаться на экране Избегайте неявного преобразования типов данных …
Дано: капитал Q вкладывается в предприятие с ежегодным приростом D%. Дано: капитал Q вкладывается в предприятие с ежегодным приростом D%. Определить: текущую величину капитала в течение первых N лет.
Условие задачи. Условие задачи. Дано: капитал Q вкладывается в предприятие с ежегодным приростом D%. Определить: текущую величину капитала в течение первых N лет. Решение: Прирост D% означает увеличение капитала в (1+D/100) раз. Введём коэффициент увеличения Draz = 1+ D/100. Тогда текущая величина капитала по итогам: 1-го года равняется Q * Draz; 2-го года равняется Q * Draz * Draz; …; N-го года равняется Q * Draz.* Draz * …* Draz (умножать N раз).
10 PRINT “Расчёт сложных процентов 10 PRINT “Расчёт сложных процентов 20 INPUT “Введите Q, D, N”, Q, D, N 30 D_RAZ=1+D/100 40 J=1 50 Q=Q*D_RAZ 60 PRINT J,Q 70 J=J+1 80 IF J<=N THEN GOTO 50 90 END