
- •Технология программирования итерационных циклов
- •Итерационные циклы с точным решением
- •Физические задачи
- •Постановка задачи
- •Формирование математической модели
- •Выбор метода решения
- •Составление алгоритма решения
- •Программирование задачи
- •Составление алгоритма решения
- •Программирование задачи
- •Итерационные циклы с приближенным решением
- •Задача вычисления произведений Постановка задачи
- •Формирование математической модели
- •Выбор метода решения
- •Составление алгоритма решения
- •Программирование задачи
- •Задача о последовательном делении Постановка задачи
- •Формирование математической модели
- •Выбор метода решения
- •Составление алгоритма решения
- •Программирование задачи
- •Заключение
- •Вопросы для контроля
- •Технология программирования смешанных процессов
- •Вычисление накоплений
- •Вычисление сумм в цикле
- •Суммы элементов одномерных массивов
- •Постановка задачи
- •Формирование математической модели
- •Выбор метода решения
- •Составление алгоритма решения
- •Программирование задачи
- •Суммы в вычислении полиномов
- •Постановка задачи
- •Формирование математической модели
- •Выбор метода решения
- •Составление алгоритма решения
- •Программирование задачи
- •Суммы в вычислении степенных рядов
- •Постановка задачи
- •Формирование математической модели
- •Выбор метода решения
- •Составление алгоритма решения
- •Программирование задачи
- •Вычисление произведений в цикле
- •Постановка задачи
- •Формирование математической модели
- •Выбор метода решения
- •Составление алгоритма решения
- •Программирование задачи
- •Вычисление разностей в цикле
- •Постановка задачи
- •Формирование математической модели
- •Выбор метода решения
- •Составление алгоритма решения
- •Программирование задачи
- •Вычисление частных в цикле
- •Постановка задачи
- •Формирование математической модели
- •Выбор метода решения
- •Составление алгоритма решения
- •Программирование задачи
- •Поиск экстремальных значений
- •Поиск наибольшего (глобального) значения
- •Постановка задачи
- •Формирование математической модели
- •Выбор метода решения
- •Составление алгоритма решения
- •Программирование задачи
- •Поиск наименьшего значения
- •Постановка задачи
- •Формирование математической модели
- •Выбор метода решения
- •Составление алгоритма решения
- •Программирование задачи
- •Заключение
- •Вопросы для контроля
Составление алгоритма решения
Сформированная математическая модель и выбранный метод решения позволяют выполнить одношаговую схему алгоритма (рис. 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.
Программирование задачи с графическим интерфейсом
Программирование задачи при использовании графического интерфейса предварим его разработкой.
ListBoxKv
EditKv
Для ввода исходного временного отрезка планируем однострочное поле редактирования (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.