- •1. Основные этапы разработки программных продуктов
- •1.1 Постановка задачи
- •Словесная формулировка
- •Формульная постановка задачи
- •1.2 Создание программного продукта
- •1.2.1.Формирование математической модели
- •Формирование исходных данных
- •Составление расчётных зависимостей
- •Правила формирования математической модели.
- •1.2.2.Алгоритмизация задачи
- •Выбор метода решения
- •Составление алгоритма решения
- •Программирование задачи
- •1.2.3. Реализация программного продукта
- •1.2.4. Работа с результатами
- •1.2.5.Анализ результатов решения
- •1.2.6.Принятие решения
- •1.2.7.Составление технической документации
- •1.3.Полная обработки задачи пользователя
- •1.4.Обеспечение эффективности разработки программных продуктов
- •2.5 Идентификаторы
- •2.6 Описание операций
- •2.6.1 Унарные операции
- •2.6.2 Бинарные операции
- •2.6.3 Пунктуаторы
- •Программирование простых ветвлений
- •4.1.5. Программирование задачи
- •Правила составления и использования
- •4.1.5.2. Операторы условной передачи управления
- •Укороченный оператор условного перехода
- •Правила записи и выполнения
- •Условная операция
- •Технология программирования арифметических циклов
- •Циклы с аналитическим заданием аргумента
- •Постановка задачи
- •Формирование математической модели
- •Выбор метода решения
- •Составление алгоритма
- •Оператор цикла с предусловием
- •Правила записи и выполнения
- •Оператор цикла с постусловием
- •Правила записи и выполнения
- •Оператор пошагового цикла for
- •Правила записи и выполнения
- •Программа по алгоритму цикла с предусловием
- •Программа по алгоритму цикла с постусловием
- •Программа по алгоритму цикла с параметром
- •Циклы с табличным заданием аргумента
- •Описание массивов
- •Описатель имя[размер];
- •Обозначение элементов массива
- •Имя[индекс]
- •Описатель имя[разм_1] …[разм_i]… [разм_n];
- •Постановка задачи
- •Математическая формулировка
- •Выбор метода решения
- •Составление алгоритма решения
- •Алгоритмизация структурой цикла с предусловием
- •Алгоритмизация структурой цикла с постусловием
- •Алгоритмизация структурой цикла с параметром
- •Программирование задачи
- •Описание массивов
- •Обозначение элементов массива
- •Составление программ решения задачи
- •Улучшение качества программных продуктов
- •Организация ввода-вывода Использование укороченных спецификаторов
- •Ввод переменных
- •Вывод переменных
- •Организация ввода в диалоге
- •Варианты ввода массивов
- •Оформление выводимых величин
- •Управление выполнением программ Использование составных присваиваний
- •Выбор устройства вывода
- •Повторение расчётов
- •Приостановка вывода
- •Очистка экрана
- •Позиционирование курсора
- •Пример улучшения качества
- •Программирование с использованием подпрограмм
- •Имя (фактические параметры)
- •Подпрограмма с одним результатом
- •Формирование математической модели
- •Выбор метода решения
- •Составление алгоритма решения
- •Программирование задачи
- •Составление алгоритма решения
- •Программирование задачи
- •Составление алгоритма решения
- •Программирование задачи
- •Подпрограмма с результатом – массивом
- •Постановка задачи
- •Математическая формулировка
- •Выбор метода решения
- •Составление алгоритма решения
- •Программирование задачи
- •Обработка текстовой информации в Си Символьные строки
- •Определение значения символьной строки
- •Массивы строк
- •Ввод строки
- •Выделение памяти
- •Функции ввода символьной строки
- •Функция ввода символьной строки gets( )
- •Функция ввода символьной строки scanf( )
- •Преобразование символьных строк
- •Функция atoi( )
- •Функция atol( )
- •Функции atof( ) и atold( )
- •Методика ввода числовых данных с использованием функции gets( )
- •Вывод строки
- •Вывод строки функциями printf( ) и fprintf( )
- •Вывод строки функциями puts( ) и fputs( )
- •Перевод чисел в формат символьной строки
- •Обработка символьных строк
- •Определение длины строки
- •Объединение строк
- •Копирование строк
- •Сравнение строк
- •Функции по работе с датой и временем.
- •Структуры.
- •Работа с дисками.
- •Ввод-вывод потока.
- •Открытие потока.
- •Объектно−ориентированное программирование
- •Классы ObjectWindows
- •Приложение коды клавиш
- •Краткий справочник по Си
- •Оператор вывода на принтер
- •Структура оператора
- •Структура оператора
- •Структура оператора
- •Библиографический список
-
Формирование исходных данных
Входными (исходными) называются данные, значения которых известны до начала решения задачи.
Время появления входных данных в задаче позволяет разделить их на основные и вспомогательные .
Основными входными считаются данные, известные из словесной формулировки.
Вспомогательными называются данные, потребность в которых возникает в процессе создания модели задачи.
Вспомогательные данные могут быть фиксированными (используемыми в расчётных зависимостях в виде значений) или модифицируемыми (поименованными для увеличения универсальности).
Например, в задаче о силе тока (пример 2.1) основными входными данными будут сопротивления нагрузок и напряжение источника. Вспомогательными – коэффициенты, обеспечивающие приведение всех сопротивлений к одной размерности и перевод значения тока в миллиамперы.
-
Внимание ! К собственно исходным будем относить только модифицируемые данные.
Математически исходные данные представляются в виде простейших равенств следующей структуры:
ОДвхi = ЗДвхi [РДвхi]
, где ОДвхi – обозначение конкретного (i-го) входного данного;
ЗДвхi – значение i-го входного данного;
РДвхi – размерность i-го входного данного;
= – символ операции присваивания;
[ ] – признак необязательности содержимого.
-
Внимание ! В модели исходных данных запрещено:
– преобразовывать заданные в словесной формулировке значения к новым размерностям;
– использовать любые (даже простейшие) арифметические выражения.
Например, математическая модель исходных данных задачи о картофеле (пример 2.3) может быть оформлена правильно или неправильно (табл. 2.1).
Таблица 2.1
Правильное оформление |
Неправильное оформление |
ПД = 1,2 км ПШ = 750 м УБ = 180 ц./га ПО = 12,5 % |
ПД = 1200 м ПШ = 750 м УБ = 180 ц./га ПО = 12,5 % |
Второй столбец неверен потому, что нарушен приоритет постановщика задачи, указавшего в словесной формулировке значение ПД с желательной ему размерностью (км).
-
Внимание ! Операция преобразования размерностей должна выполняться явно (формульно) на этапе создания расчётных зависимостей.
В задаче расчёта площади круга (пример 2.2) шаг изменения диаметра (D=1/10 м) также не может быть исходным данным, т.к. в правой части вместо конкретного значения указана формула его вычисления. Следовательно, равенство D=1/10 м является не исходным данным, а расчётной зависимостью.
Составление модели исходных данных для математически сформулированных задач трудностей не представляет.
Так, для математически сформулированных постановок задач разделы «исходные данные» имеют вид.
Пример 2.4 |
Пример 2.5 |
|
Исходные данные |
Исходные данные |
|
a=12 b= -9,2; x=2,75 |
=0,76 = 3,1416 |
a=1,4 b=11,2 c= -7,8 |
-
Составление расчётных зависимостей
В математике используют два способа решения задачи:
-
аналитический;
-
численный.
Аналитическое решение – получение функциональной зависимости (желательно оптимальной) выходного данного от входных.
Типичные примеры аналитического решения:
-
зависимость – для задачи нахождения площади прямоугольника S с длинами сторон A и B;
-
зависимость () – для задачи нахождения площади круга в соответствии с конкретным входным данным (диаметром или радиусом).
Аналитические решения удобны профессионалам математикам.
Численное решение – получение конкретного значения выходного данного по известным значениям каждого из входных.
Наиболее простым и эффективным способом получения численного решения является подстановка конкретных значений входных данных в полученную ранее аналитическую зависимость и выполнение предписываемых ею действий. Численное решение удобно для пользователя непрофессионала.
Так, численное решение задачи нахождения площади прямоугольника при известных значениях входных величин (например, A = 25 м и B = 10 м), выполняется их подстановкой в аналитическое решение и имеет вид .
Для задачи о площади круга численное решение выполняется аналогично. Например, для известного значения диаметра (D = 3 см) значение площади .
Расчетные зависимости – математические закономерности, связывающие разные виды и типы данных (выходные и входные) в соответствии с требованиями словесной формулировки задачи.
Сопоставив определение расчётных зависимостей и аналитического решения задачи можно сделать вывод:
-
Внимание ! Расчётные зависимости математической модели есть аналитическое решение задачи.
Расчетные зависимости формируются в результате детального изучения постановки задачи. Для каждой конкретной зависимости, при этом, возможна своя (требуемая) степень детализации.
Наименьшая степень детализации предполагает одну расчётную зависимость для решения всей задачи, т. е. представление искомого выходного данного (Двых) единой функцией от всех исходных(Двхi).
Двых = f(Двх1, Двх2, . . ., Двхi, . . ., Двхk)
В задаче о картофеле (пример 2.3) эта зависимость, например, имеет вид
МКВ = ((ПД 1000 ПШ/104) УБ/10) - ((ПД 1000 ПШ/104) УБ/10) ОП/100
Недостатки укрупненного варианта:
-
сложность составления единой многокомпонентной функции;
-
громоздкость записи;
-
повторяемость некоторых участков;
-
затруднённость проверки результатов решения задачи.
Увеличение степени детализации ликвидирует все (некоторые) указанные недостатки. При этом единая функциональная зависимость заменяется совокупностью нескольких взаимосвязанных (более простых).
Структуры создания расчётных зависимостей с максимальной степенью детализации имеют вид (табл. 2.2).
Таблица 2.2
Универсальный вариант |
Простейший вариант |
П1 = f(Двх1, . . ., Двхk) П2 = f(Двх1, . . ., Двхk, П1) . . . Пj = f(Двх1, . . ., Двхk, П1,. . ., Пj-1) . . . Двых = f(Двх1, . . ., Двхk, П1,. . ., Пj,. . .) |
П1 = f(Двх1, . . ., Двхk1) П2 = f(Двхk2, . . ., Двхk3) . . . Пj = f(Двхki, . . ., Двхkk) . . . Двых = f(П1,. . ., Пj,. . .) |
Характерная особенность рассмотренных структур – использование промежуточных данных (П1,. . ., Пj).
В принципе, наивысшая степень детализации достигается оформлением каждой расчётной зависимости в виде одной элементарной операции.
Недостатки такой детализации:
-
увеличение объёма модели;
-
снижение наглядности.
Выбор степени детализации характеризует степень квалификации разработчика. Модель можно считать оптимальной, если степень детализации обеспечивает приемлемый объём и наглядность, а также простоту отладки при решении и удобство анализа результатов.
-
Внимание ! При отсутствии чётких критериев для каждого промежуточного (конечного) данного рекомендуется степень детализации, обеспечивающая в расчётной зависимости 2 – 5 элементарных операций.
Конечные и промежуточные данные, в отличие от входных, могут быть только переменными. Их значения определяются в процессе решения в соответствии с расчётными зависимостями.
-
Внимание ! Математическая модель, в принципе, может состоять только из расчётных зависимостей, в правой части которых указаны конкретные значения входных данных. Однако, поскольку ММ является аналитическим решением задачи, её объекты должны быть модифицируемыми, т.е. задаваться в универсальном поименованном виде (обозначениями).
Следовательно, расчётные зависимости задачи о картофеле (пример 2.3) можно детализировано представить в двух вариантах:
Конкретный вариант |
Универсальный вариант |
ПП = ПД x 1000 x ПШ/104 МВР = ПП x УБ/10 МКВ = МВР – МВР ОП/100 |
ПП = ПД x k1 x ПШ/k2 МВР = ПП x УБ/k3 МКВ = МВР – МВР x ОП/k4 |
В предлагаемых вариантах данные ПП (поле, площадь) и МВР (масса выращенная) являются промежуточными. Коэффициенты 1000 (k1), 104 (k2), 10 (k3) и 100 (k4) в расчётных зависимостях позволяют получить промежуточные и конечные результаты нужных размерностей при планируемых исходных данных. Для большей универсальности математического описания во втором варианте они обозначены именами.
-
Внимание ! Дополнительные коэффициенты, введённые в расчётные зависимости, должны быть добавлены в раздел исходных данных с указанием конкретных значений и размерностей.
Получение расчётных зависимостей для математически сформулированных задач также трудностей не представляет и выполняется в соответствии с рассмотренными правилами. Так, для задачи расчёта значения функции y (пример 2.4) расчётные зависимости могут быть выполнены с различной степенью детализации. Например, представлены в виде:
Выбранная степень детализации Увеличенная степень детализации
Степень детализации в левом варианте определялась желанием пользователя выделить основные компоненты заданной зависимости (числитель, знаменатель, второе слагаемое). Однако, выполнение таких укрупнённых компонентов не позволяет контролировать составляющие их элементы.
Правый вариант расчётных зависимостей частично устраняет этот недостаток. В принципе, детализация может быть увеличена до пооперационной, что естественно приведёт к существенному увеличению количества расчётных зависимостей.
Получение любой модели задачи должно заканчиваться проверкой на адекватность и универсальность.
Проверке на адекватность посвящены специальные разделы математики. В них достаточно подробно разработаны специальные методы оценки адекватности типовых задач. Простейшим из методов является проверка размерностей составленных расчётных зависимостей как внутри правой части, так и на соответствие левой.
-
Внимание ! Проверка соответствия размерностей обязательна для каждой расчётной зависимости модели.
Рассмотрение более сложных методик выходит за пределы данного раздела.
Обеспечение универсальности входит в обязанности разработчика математической модели. При этом действует правило, – чем универсальнее модель, тем она сложнее.
История развития математики условно делится на два этапа. На первом, докомпьютерном, из-за несовершенства средств реализации решения задач, использовались методы упрощения математических формулировок. На этом этапе были разработаны классические аналитические зависимости, широко используемые и в настоящее время. Например, вычисления площадей простейших фигур. Широкое внедрение ЭВМ показало, низкую универсальность классических зависимостей.
Один из способов увеличения универсальности – использование шаблонов задания значений входных данных. Под шаблоном будем понимать общий вид подразумеваемого численного (текстового) значения.
Структура шаблона:
_ _ . . . _[,]_ _ . . ._ [10 _ _]
, где _ – единичная цифра (символ) формируемого значения;
, – разделитель целой и дробной части (для вещественного числа);
10 – основание системы счисления;
[ ] – признак необязательности содержимого.
Например, запись
x = _ _
h = _ _,_ _ _
z = _ _,_ _ _ 10 _ _
предписывает, что данное x может принимать целое положительное значение от 1 до 99 или отрицательное от -1 до -9; данное h – любое значение от -9,999 до 99,999; данное z – любое значение указанное для данного h с учётом сомножителя 10 в степени с диапазоном от 10-9 до 1099.
Используем шаблоны для примера вычисления площади прямоугольника.
Классическая математическая модель задачи имеет вид:
Исходные данные
a = _ _ _,_ _
b = _ _ _,_ _
Расчётные зависимости
s = a * b
Анализ модели показывает:
-
адекватность задаче достигается только в случае, когда размерности всех объектов задачи одинаковы;
-
универсальность невысока и определяется возможностью выбора значения в диапазоне шаблона;
-
использование данных разной размерности одновременно не предусмотрено, т.к. создатели зависимостей подразумевали мысленную работу пользователя по предварительной подготовке данных к использованию в расчёте.
Универсальность модели достигается применением вспомогательных данных (коэффициентов). Это позволяет получить вариант расчётной зависимости, пригодный для использования с любыми по размерности величинами.
Возможны несколько вариантов модернизации. Наиболее эффективным является следующий:
Исходные данные
(основные) |
(вспомогательные) |
a = _ _ _,_ _ b = _ _ _,_ _ |
k1 = _ _ _ _,_ _ _ _ k2 = _ _ _ _,_ _ _ _ |
Расчётная зависимость
s = (a * k1) * (b * k2)
Вспомогательные данные (k1, k2) позволяют привести значения (размерности) каждого основного входного данного к размерности выходного. При этом зависимость вычисления площади s работоспособна при любых (различных по размерности) значениях a и b.
Так, если a = 3 мм; b = 6,2 см и s требуется получить в квадратных метрах, достаточно присвоить коэффициенту k1 значение 0,001 м/мм, а коэффициенту k2 – значение 0,01 м/см.
При этом математическая модель может быть представлена вариантом:
Исходные данные
(основные) |
(вспомогательные) |
a = 3 мм b = 6,2 см |
k1 = 0,001 м/мм k2 = 0,01 м/см |
Расчётная зависимость
s = (a * k1) * (b * k2) [ м2 = (мм * м/мм) * (см * м/см) ]
Проверка размерностей доказывает правильность составленной расчётной зависимости.
-
Внимание ! Вспомогательные коэффициенты для уравнивания размерностей данных всегда размерны.
Аналогично рассмотренному, создадим универсальную модель вычисления площади круга.
Исходные данные
(основные) |
(вспомогательные) |
ЛР = _ _,_ = 3,_ _ _ _ |
k1 = _ _ _ _,_ _ _ _ k2 = _ |
Расчётная зависимость
s = (ЛР * k1)2 /k2
Полученная расчётная зависимость универсальна по размерности благодаря коэффициенту k1 и виду линейного размера ЛР (диаметр или радиус), определяющего значение коэффициента k2 (4 или 2).
Например, конкретная модель для вычисления площади в квадратных сантиметрах через радиус в дециметрах имеет вид:
Исходные данные
(основные) |
(вспомогательные) |
ЛР = 50,1 дм = 3,1416 |
k1 = 10 см/дм k2 = 2 |
Расчётная зависимость
s = (ЛР * k1)2 /k2 [ cм2 = (дм * см/дм)2 / ]
Рассмотренные варианты представления данных и расчётных зависимостей позволяют сформулировать общие правила составления модели задачи.