ТЕМА 1.7. МЕТОДОЛОГИЯ ПРОЕКТИРОВАНИЯ ПРОГРАММНЫХ ПРОДУКТОВ. АЛГОРИТМИЗАЦИЯ И ПРОГРАММИРОВАНИЕ 1.7.1. Основы алгоритмизации Решение задач с помощью компьютера предполагает использование различных программных средств, которые с разной степенью детализации процессов обработки преобразуют входные данные в выходные. Одна и та же задача может быть решена с использованием различных программных средств. Каждое из них имеет свой набор команд и реализует разные функции. Основой создания программ являются алгоритмизация и программирование. Алгоритм – понятное и точное предписание, определяющее последовательность действий, строгое исполнение которых приводит к решению поставленной задачи за конечное число шагов. Алгоритм определяет вычислительный процесс, направленный на получение результатов обработки некоторого набора исходных данных. Алгоритмы описываются разными способами, среди которых довольно распространенными являются словесно-формульный и структурный или блоксхемный. В качестве словесного описания алгоритма иногда используют записи с помощью конструкций некоторого высокоуровнего языка программирования. При словесно-формульный алгоритм записывается в виде текста с формулами по пунктам, определяющим последовательность действий. Пример словесно-формульной записи алгоритма вычисления значения математического выражения: y = 40а/(a - b) – (2 x 2 +8). Ввести значения а, b, х. Вычислить значения а – b Вычислить значение 40 х а Разделить результат шага 3 на результат шага 2 алгоритма. Возвести х в квадрат. Умножить результат шага 5 на 2. Сложить результат шага 6 с числом 8. Из результата шага 4 вычесть результат шага 7 Вывести результат вычисления выражения. При описании алгоритма с помощью блок-схемы используются геометрические фигуры (блоки), связанные линиями. В блоках записывается последовательность действий. Рис. 1. Графическое обозначение основных блоков алгоритмов Такой способ нагляден: каждая операция вычислительного процесса изображается отдельной геометрической фигурой, называемой блоком. Виды и назначение основных блоков приведены на рисунке 1. Графическое изображение алгоритма наглядно показывает разветвления путей решения задачи в зависимости от различных условий, повторение отдельных этапов вычислительного процесса. Линии, соединяющие блоки, указывают последовательность их следования. В блок может входить несколько линий, но выходить из может выходить только одна линия. Исключением является только логический блок, из которого выходят две линии. В построении алгоритма используются основные структуры: линейная последовательность действий, ветвление, циклическое повторение. Линейный алгоритм - фиксированный перечень блоков (операторов). Блок-схема линейного алгоритма изображена на рис. 2. Каждый очередной блок обрабатывается после завершения предыдущего без дополнительных условий. Для изменения порядка обработки блоков выполняется редактирование их последовательности. Рис. 2. Линейная структура алгоритма Условные структуры алгоритмов часто называют ветвлениями. Блок Условие содержит альтернативные последовательности обработки данных в зависимости от того выполнено условие или нет (рис. 3). Результатом выполнения условия является Истина или Ложь (Да или Нет). В зависимости от него выполняется Блок 1 или Блок 2. Обязательно выполняется один из альтернативных блоков операций. Рис. 3. Условная структура алгоритма Циклические структуры алгоритма обеспечивают выполнение повторяющихся действий. Повторяющиеся действия называют телом цикла . Для организации цикла в блоке "Условие" задается условие выполнения тела цикла (рис. 4). Если условие не выполняется, цикл прерывается и осуществляется выход. Цикл может повторяться заданное количество раз, если "Условие" использует счетчик числа повторений, для которого задается начальное, конечное значение и шаг изменения. Цикл может выполняться неизвестное количество раз, зависящее от того выполняется ли логическое условие. Рис. 4. Циклическая структура алгоритма Пример На рис. 5 представлена блок-схема алгоритма вычисления суммы оплаты за обучение (переменная P), которая назначается в зависимости от результатов сессии. Если средний балл (переменная SB) по всем экзаменам составляет 5, то студент получает скидку – 15 % от базовой суммы оплаты (В), если 4 – 10 %, иначе - скидок нет. Осуществляется ввод переменных. Выполнение первого условного блока определяет проверку равен ли средний балл 5. Если да, то выполняется назначение оплаты со скидкой 15 % (PL = PL - 0,15 PL). Если средний балл не 5, то выполняется процесс НЕТ, ведущий к проверке условия другого значения среднего балла. Второе условие проверяет является ли средний балл большим или равным 4. Если это условие выполнено, то назначается скидка 10% ( PL = PL - 0,1 PL). Иначе выполняется альтернативная операция назначения оплаты, равной базовой сумме. На выходе пользователь получает значение среднего балла и назначенной суммы оплаты. Рис. 5. Пример блок-схемы алгоритма Алгоритмы должны соответствовать следующим свойствам, обеспечивающим их применимость: дискретность - разбиение процесса обработки информации на более простые этапы (шаги выполнения), при этом сложные функции обработки могут быть представлены через более простые последовательно выполняемые функции; определенность алгоритма - однозначность выполнения каждого отдельного шага преобразования информации; выполнимость - конечность действий алгоритма решения задач, позволяющая получить желаемый результат при допустимых исходных данных за конечное число шагов; массовость - пригодность алгоритма для решения определенного класса задач. Алгоритм служит основой для создания программ. Программа для ЭВМ представляет собой описание алгоритма и данных на некотором языке программирования. Язык программирования – формализованный язык для описания алгоритма решения задачи на компьютере . Любой язык определяется алфавитом, семантикой, синтаксисом. По синтаксису образования конструкций языки разделяют на: машинные языки (machine language) – язык, воспринимаемый аппаратной частью компьютера (машинные коды); машинно-ориентированные (machine oriented) языки – языки программирования, отражающие структуру конкретного типа компьютера (например, Ассемблер) алгоритмические языки (algorythmic language) - не зависящие от архитектуры компьютера; процедурно-ориентированные (procedure oriented)– имеющие возможность описания программы как совокупности процедур; Процедура представляет собой законченную часть программы, реализующую функцию или обработку данных, которая часто используется программой. Одна процедура может использоваться в программе множество раз в зависимости от потребности проблемно-ориентированные (universal programming) – предназначенные для решения задач определенного класса. Другая классификация относит языки к реализующим: структурное программирование; объектно-ориентированное программирование (поддерживающее понятие объектов, их свойств, методов обработки). 1.7.2. Основные этапы процесса создания программ Схематично процесс создания программ можно представить как последовательность следующих этапов (рис. 6): постановка задачи, алгоритм решения задачи, программирование. Рис. 6. Основные этапы процесса создания программ Рассмотрим основные задачи и проблемы, решаемые на каждом из этих этапов. Постановка задачи (problem definition ) - это точная формулировка решения задачи на компьютере с описанием входной и выходной информации. Постановка задачи - это обобщенный термин, который означает определенность содержательной стороны обработки данных. Постановка задачи связана с конкретизацией основных параметров ее реализации, определением источников и структурой входной и выходной информации. К основным характеристикам функциональных задач, уточняемым в процессе ее формализованной постановки, относятся: цель или назначение задачи, ее место и связи с другими задачами; условия решения задачи с использованием компьютеров; содержание функций обработки входной информации при решении задачи; требования к периодичности решения задачи; ограничения по срокам и точности выходной информации; состав и форма представления выходной информации; источники входной информации для решения задачи; пользователи задачи (кто осуществляет ее решение и пользуется результатами решения). Выходная информация по задаче - состав, вид и структура данных, представленных в виде: документов, отчетов, файлов, изображений на экране монитора и пр. Входная информация по задаче определяется как данные, поступающие на вход задачи и используемые для ее решения. В качестве входной информации выступают: первичные данные документов ручного заполнения, файлы базы данных, результаты решения других задач, нормативно-справочная информация, классификаторы, кодификаторы, справочники. Алгоритм решения задач основан на математической модели процесса решения. В алгоритме отражается логика и способ формирования результатов решения с указанием необходимых расчетных формул, логических условий, соотношений для контроля достоверности выходных результатов. В алгоритме обязательно должны быть предусмотрены все ситуации, которые могут возникнуть в процессе решения комплекса задач. Алгоритм комплекса задач и его программная реализация тесно взаимосвязаны. Специфика применяемых методов проектирования алгоритмов и используемых при этом инструментальных средствах разработки программ, в свою очередь, могут повлиять на форму представления и содержание алгоритма обработки данных.