Сформированная математическая модель и выбранный метод решения позволяют выполнить одношаговую схему алгоритма (рис. 8.10). Ввод значений коэффициентов перевода временных отрезков и поясняющих строк заменен предварительной процедурой инициализации их значений (для использования программного аналога – определения значений элементов массива одновременно с его описанием).
Рис. 8.10. Алгоритм решения задачи 8.6
Предлагаемый вариант определения значений массива символьных строк облегчает создание программного фрагмента (замена специальных функций по работе с символьными строками на «чистый» оператор присваивания в описателе массива).
Для улучшения наглядности организации вычислений элементы дружественности не показаны.
Программирование задачи
Идентификация переменных представлена в табл. 8.6
Таблица 8.6
Обозначение в алгоритме | i | КВ | Ki | ВРi |
Обозначение в программе | i | kv | k[i] | vr[i] |
С учётом таблицы идентификации на основании схемы алгоритма составлены программы решения задачи.
Классический вариант программирования задачи
#include<stdio.h>
#include<stdlib.h>
#include<windows.h>
#include<conio.h>
main()
{
float kv; /* описание */
int i; /* локальных переменных */
int k[4]={60,24,7,52}; /*инициализация массива K*/
char buf[50]; /*описание символьного массива */
char vr[4][50]={"количество часов", /*инициализация*/
"количество суток", /*символьного*/
"количество недель", /*массива*/
"количество лет"}; /* VR*/
clrscr();
CharToOem(" Введите временной отрезок в минутах: ",buf);
printf("\n %s \n",buf); /* ввод*/
scanf("%f", &kv); /* начального значения времени*/
printf("\n -------------------------------------"
"\n | i | vr | kv |"
"\n -------------------------------------");
for (i=0; i< 4; i++)/* заголовок цикла расчёта и вывода */
{
kv=kv/k[i];
CharToOem(vr[i],buf);
printf("\n | %2d |%21s|%7.1f|", i+1, buf, kv); /* вывод */
}
printf("\n -------------------------------------");
getch();
}
1200000.
Под закрывающей скобкой программы располагается численное значение данного – исходный временной интервал.
Результаты решения представлены в приложении 8.11.
Программирование задачи с графическим интерфейсом
Программирование задачи при использовании графического интерфейса предварим его разработкой.
|
|
Для ввода исходного временного отрезка планируем однострочное поле редактирования (EditKv). Вывод расчетных значений временных отрезков с поясняющими надписями реализуем в поле-список (ListBoxKv).
Управление процессом решения реализуем двумя командными кнопками, расположенными в нижней части окна. Назначение каждой определяется ее названием.
С учетом планируемого интерфейса выполним программирование задачи.
#include<stdio.h>
#include<stdlib.h>
…
void TVrDlgClient::BNClickedOk()
{
// INSERT>> Your code here.
float kv; /* описание */
int i; /* локальных переменных */
int k[4]={60,24,7,52}; /*инициализация массива K*/
char buf[50]; /*описание символьного массива */
char vr[4][50]={"количество часов", /*инициализация*/
"количество суток", /*символьного*/
"количество недель", /*массива*/
"количество лет"}; /* VR*/
ListBoxKv->ClearList();
EditKv->GetText(buf,10); /* ввод*/
kv=atof(buf); /* исходного значения времени*/
for (i=0; i< 4; i++)/* заголовок цикла расчёта и вывода */
{
kv=kv/k[i];
sprintf(buf," % 3d %s %5.2f", i+1, vr[i], kv);
ListBoxKv->AddString(buf); /* вывод расчетного времени*/
}
}
1200000.
Под закрывающей скобкой программы располагается численное значение данного – исходный временной интервал.
Результаты решения представлены в приложении 8.12.