- •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.5).
Рис. 1.5. Схема преобразования записей алгоритма в машинную программу
При этом программист выполняет лишь запись предписаний алгоритма на выбранном входном языке. Перевод с алгоритмического языка на машинный выполняет сама ЭВМ с помощью специальной программы – транслятора (компилятора).
Входные языки могут быть высокого и низкого уровня. Уровень определяется степенью близости к математическому или машинному языку.
Языки высокого уровня существенно облегчают труд программистов, особенно непрофессионалов. Основными компонентами таких языков являются операторы.
Оператор– основная конструкция входного языка высокого уровня, позволяющая в форме, близкой к математической, записать указание соответствующего блока схемы алгоритма.
Программа на языке высокого уровня – это последовательность операторов, определяющих путь решения задачи.
Операторы выполняются ЭВМ в порядке расположения в программе. Такой порядок называется естественным.
Языки высокого уровня являются проблемно-ориентированными (например, на инженерно-технические или экономические задачи), либо универсальными. Типичные представители проблемно-ориентированных (Фортран, Кобол) и универсальных (Паскаль, Си) языков широко используются программистами любой квалификации – от начинающих, до профессионалов.
Языки низкого уровня (ассемблеры) относятся к машинно-ориентированным. Их основные конструкции аналогичны машинным командам, записанным в удобном для человека виде. Ассемблеры позволяют эффективно использовать внутренние возможности ЭВМ и необходимы, как правило, программистам-профессионалам.
В данном учебном пособии в качестве языка программирования принят Си – универсальный язык высокого уровня, ориентированный на решение прикладных и системных задач.
Каждый входной язык имеет собственные правила формирования операторов и их элементов. В Си, например, для обозначения переменных используют латинский алфавит.
Поэтому, до начала записи программы необходимо выполнить идентификацию обозначений переменных в алгоритме и будущей программе. Идентификация переменных оформляется в виде горизонтальной таблицы. Например, для задачи о картофеле (пример 2.3) она имеет вид (табл. 2.6).
Таблица 2.6
Наименование в алгоритме |
1 |
ПД |
ПШ |
УБ |
ПО |
Наименование в программе |
2 |
pd |
psh |
ub |
po |
Окончание табл. 2.6
1 |
k1 |
k2 |
k3 |
k4 |
ПП |
МВ |
МП |
МТ |
2 |
k1 |
k2 |
k3 |
k4 |
pp |
mv |
mp |
mt |
С учётом таблицы идентификации, алгоритма и правил составления программы выполнен простейший пример записи на Си алгоритма решения задачи о картофеле:
#include<stdio.h>
#include<math.h>
main( )
{
float pd, psh, ub, po,
k1, k2, k3, k4;
float pp, mv, mp, mt;
scanf("%3f%4f%4f%4f",&pd, &psh, &ub, &po);
scanf("%5f%5e%3f%4f",&k1, &k2, &k3, &k4);
fprintf(stdprn,"%3.1f %4.0f %4.0f %4.1f\n",pd, psh, ub, po);
fprintf(stdprn,"%5.0f %5.0e %3.1f %4.0f\n",k1, k2, k3, k4);
pp=(pd*k1*psh)*k2;
mv=ub*pp*k3;
mp=mv*po/k4;
mt=mv-mp;
fprintf(stdprn,"%f %f %f %f\n",pp, mv, mp, mt);
}
1.2750.180.12.7
1000.1.e-40.1100.
Пояснения к программе.
Первые две строки предписывают подключение к программе пользователя необходимых стандартных функций из внешних файлов stdio.hиmath.h.
Третья строка – заголовок тела программы.
Четвёртая – признак начала тела программы.
Строки 5-7 – описатели типов всех данных задачи.
Строка 8 – ввод основных исходных данных.
Строка 9– ввод вспомогательных исходных данных (коэффициентов).
Строка 10 –распечатка введённых данных.
Строка 11 – распечатка коэффициентов.
Строки 12-15 – расчёт промежуточных и конечного данных.
Строка 16 – распечатка рассчитанных данных.
Строка 17 – признак окончания тела программы.
Последние две строки в программу не входят. В них записаны численные значения переменных, указанных в операторах ввода.
Рекомендации по улучшению качества программ даны в разд. 2.6.
Выполнение этапа программирования свидетельствует о достижении цели –создании программного продукта, т.е. окончании предмашинной подготовки задачи.