- •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
- •Приложение коды клавиш
- •Краткий справочник по Си
- •Оператор вывода на принтер
- •Структура оператора
- •Структура оператора
- •Структура оператора
- •Библиографический список
Позиционирование курсора
Ввод-вывод информации на экран монитора выполняется с текущей позиции строки, определяемой месторасположением курсора. При необходимости указания конкретных точек начала ввода-вывода используется специальная функция позиционирования курсора. Вызов функции оформляется оператором следующей структуры:
gotoxy( поз_x , поз_y );
, где gotoxy – имя функции (перейти к x,y );
поз_x – координата столбца;
поз_y – координата строки;
( , ) – ограничители и разделитель аргументов функции;
; – признак простого оператора.
-
Внимание ! Функция используется только при работе с экраном монитора, для принтера – неприменима.
Функция предписывает установку курсора в позицию, задаваемую координатами. В качестве координат используются целые константы, переменные, арифметические выражения. Размеры экрана монитора составляют 80 столбцов на 25 строк. Поэтому диапазон изменения координаты x (столбца) от 1 до 80, а диапазон координаты y (строки) от 1 до 25.
Н
int a=3, b=5; float r; . . . gotoxy( a , b ); scanf( "%f"
, &r ); . . .
определяет начальную позицию поля (3-й столбец 5-й строки) для ввода численного значения вещественной переменной r.
Предлагаемый фрагмент позволяет вводить информацию в конкретные поля заранее заготовленной таблицы.
Так при желании ввести численные значения индексированной переменной xi в таблицу формируется её шаблон:
+––––––––+–––––––––+ +
X
+ Y + +––––––––+–––––––––+ | |
| +––––––––+–––––––––+ | |
| +––––––––+–––––––––+
Оператор вывода таблицы на экран вставляется в программу до операторов ввода численных значений таблицы.
При этом фрагмент программы ввода имеет вид
int s, k;
. . .
gotoxy( s , k );
scanf("%f" , &x[0] );
gotoxy( s , k+2 );
scanf("%f" , &x[1] );
. . .
До начала использования функции позиционирования необходимо сформировать численные значения s и k. Например, s=7 (4 пробела до таблицы + 1 ограничитель + 1 пробел + 1-я позиция ввода), k=4 (3 строки шапка + 1 строка ввода).
Применение позиционирования при выводе позволяет задавать, например, сдвиг таблицы вправо. При этом операторы позиционирования используются при формировании шапки, а также в теле цикла перед оператором вывода текущей строки таблицы.
Фрагмент программы для вывода таблицы, начиная с задаваемой координатами (s, k) позиции, может иметь вид
int s, k;
. . .
scanf(“%d%d”,&s,&k);
. . .
gotoxy( s , k );
printf("+––––––––+–––––––––+");
gotoxy( s , k+1 );
printf("| x(i) | y(i) |");
gotoxy( s , k+2 );
printf("+––––––––+–––––––––+");
. . .
gotoxy( s , k+3+i ); /* в теле цикла до оператора вывода */
printf("| %6.2f | %7.2f |", x[i] , y[i]);
. . .
Пример улучшения качества
Используем все рассмотренные варианты улучшения качества программного продукта на примере корректировки алгоритма и программы задачи о кладах, рассмотренной в арифметических циклах с табличным заданием аргумента (разд. 5.2). Улучшенный алгоритм имеет вид рис. 6.1.
Рис. 6.1. Схема улучшенного алгоритма задачи о кладах
Рис. 6.1. Продолжение
Рис. 6.1. Окончание
Улучшенная программа задачи 5.2
/* Программа с использованием цикла с параметром */
#include <stdlib.h>
#include <stdio.h> /* директивы */
#include <math.h> /* препроцессора */
#include <conio.h>
main() /* заголовок основной функции */
{
float c[7], /* массив значений стоимостей кладов */
p[7], /* массив значений начисленных премий */
pro; /* процент вознаграждения */
int n, i, /* размер массивов (количество кладов), параметр цикла */
d, t; /* переменные, определяющие печать на принтер и повторение */
do /* начало цикла для повторения вычислений */
{
clrscr(); /* очистка экрана */
printf("Вывод на печать – 1, \n"
"иначе – другая цифра: "); /* вывод запроса */
scanf("%d", &d); /* ввод значения переменной, определяющей печать на принтер (ответ на запрос) */
printf("Введите размер массива (от 1 до 7): ");
scanf("%d", &n); /* ввод размера массивов */
for( i=0 ; i < n ; i++ ) /* заголовок цикла ввода исходного массива (массив стоимостей кладов) */
{
printf("Введите значение стоимости клада "
"c(%d), тыс. р.: ", i+1);
scanf("%f", &c[i]); /* ввод значения элемента массива */
}
printf("Введите размер вознаграждения, проц. : ");
scanf("%f", &pro); /* ввод значения процента вознаграждения */
/* вывод процента вознаграждения и шапки таблицы на экран */
printf("\n Размер вознаграждения....: %.1f проц. \n", pro);
printf(" +––––––––––––+–––––––––––+\n"
" | Стоимость | Премия |\n"
" | клада c(i) | п(i) |\n"
" +––––––––––––+–––––––––––+\n");
if( d == 1 ) /* проверка условия вывода на принтер */
{
/* вывод процента вознаграждения и шапки таблицы на принтер */
fprintf(stdprn,"\n Размер вознаграждения: "
"%.1f проц. \n", pro);
fprintf(stdprn," +––––––––––––+–––––––––––+\n"
" | Стоимость | Премия |\n"
" | клада c(i) | п(i) |\n"
" +––––––––––––+–––––––––––+\n");
}
for( i=0 ; i < n ; i++ ) /* заголовок цикла вычисления значения функции (расчет премий) */
{
p[ i ] = ( c[ i ] * pro ) / 100.; /* вычисление текущего значения */
/* вывод текущих значений элементов массивов на экран */
printf(" | %7.2f | %8.3f |\n", c[ i ], p[ i ]);
if( d == 1 ) /* проверка условия вывода на принтер */
{
/* вывод текущих значений элементов массивов на принтер */
fprintf(stdprn," | %7.2f | %8.3f |\n"
, c[ i ], p[ i ]);
}
}
printf(" +––––––––––––+–––––––––––+\n");
if( d == 1 ) /* проверка условия вывода на принтер */
{
fprintf(stdprn, " +––––––––––––+–––––––––––+\n");
}
printf("Повторение решения – 1, \n"
"выход – другая цифра: "); /* вывод запроса */
scanf("%d", &t); /* ввод значения переменной, определяющей повторение вычислений (ответ на запрос) */
}while( t==1 ); /* окончание цикла, организующего повторение */
} /* завершающая скобка головной функции */
Численные значения вводимых данных не показаны.
Принципы улучшения дружественности, используемые в программе, являются универсальными и пригодны для алгоритмов и программ любых видов и типов.
Вопросы для контроля
-
Что такое улучшение качества программных продуктов и в чём оно заключается?
-
Для чего используются укороченные спецификаторы ввода-вывода?
-
Как влияет максимально укороченный спецификатор на точность выводимых вещественных переменных?
-
Как выглядят фрагменты алгоритмов и программ для организации диалогового ввода переменных?
-
Каковы варианты организации ввода массивов?
-
Как формулируется методика оформления выводимых данных?
-
Как формируются и используются составные присваивания?
-
Каковы фрагменты организации выбора устройства вывода?
-
Для чего и как реализуется в программе повторение расчётов?
-
Что такое позиционирование курсора, как реализуется?