Представим алгоритм решения задачи одношаговой схемой без элементов организации дружественности (рис. 7.6).
Рис. 7.6. Схема алгоритма задачи о сосульке
Программирование задачи
Программирование задачи требует следующей идентификации переменных (табл. 7.1).
Таблица 7.1
Обозначение в алгоритме | mн | mi | mгр | пп | tн | Dt | ti | Dmi |
Обозначение в программе | mn | mi | mgr | pp | tn | dt | ti | dmi |
Программы решения задачи по полученной схеме алгоритма с учетом таблицы идентификации переменных представлены ниже.
Классический вариант программирования задачи
#include <stdlib.h> /* директивы */
#include <stdio.h> /* препроцессора */
#include <conio.h>
#include <windows.h>:
void main()
{
float mn, mi, mgr,
pp, tn, dt, dmi,ti; /*описание переменных*/
char buf[50]; /*описание символьного массива*/
CharToOem("\n Введите начальную массу сосульки, кг: ", buf);
printf(buf);
scanf("%f", &mn);
CharToOem("\n Введите граничную массу сосульки, кг:", buf);
printf(buf);
scanf("%f", &mgr);
CharToOem("\n Введите потери массы, %/ч: ",buf);
printf(buf);
scanf("%f", &pp);
CharToOem("\n Введите начальное время таяния, ч: ",buf);
printf(buf);
scanf("%f", &tn);
CharToOem("\n Введите шаг времени, ч: ",buf);
printf(buf);
scanf("%f", &dt);
printf("\n ------------------------------"
"\n | ti | dmi | mi |"
"\n ------------------------------");
mi=mn; /*формирование текущего значения массы*/
ti=tn; /*формирование текущего значения времени*/
do
{
dmi = pp * mi * dt / 100; /*расчет текущих потерь */
printf("\n | %4.2f | %6.4f | %6.4f |", ti, dmi, mi);
mi = mi - dmi; /*расчет текущей массы */
ti = ti + dt; /*расчет текущего времени */
}
while(mi >= mgr); /*условие повторения цикла*/
printf("\n ------------------------------");
getch();
}
5 1 10 0 1.5 – исходные данные для решения задачи.
Результаты решения представлены в приложении 7.1.
Программирование задачи с графическим интерфейсом
Программирование задачи при использовании графического интерфейса предварим его разработкой.
|
|
|
Для ввода начального и граничного значения массы сосульки планируем однострочные поля редактирования (EditMn и EditMgr). Процент потерь, начальное время и шаг времени предусматриваем вводить в однострочные поля редактирования (EditPP, EditTn и EditDt). Под вывод расчетных значений текущих значений времени, потерь массы и массы сосульки планируем поля-списки (ListBoxTi, ListBoxMp и ListBoxMi).
Управление процессом решения реализуем двумя командными кнопками, расположенными в нижней части окна. Назначение каждой определяется ее названием.
С учетом планируемого интерфейса выполним программирование задачи.
#include <stdlib.h> /* директивы */
#include <stdio.h> /* препроцессора */
…
|
|
|
{
// INSERT>> Your code here.
float mn, mi, mgr,
pp, tn, dt,dmi,ti; /*описание переменных*/
char buf[10]; /*описание символьного массива*/
ListBoxTi->ClearList(); /*Очистка */
ListBoxMp->ClearList(); /* полей */
ListBoxMi->ClearList(); /*вывода */
EditMn->GetText(buf,10); /* ввод начальной */
mn=atof(buf); /* массы сосульки*/
EditMgr->GetText(buf,10); /* ввод граничной */
mgr=atof(buf); /* массы сосульки*/
EditPP->GetText(buf,10); /* массы процента*/
pp=atof(buf); /* потерь*/
EditTn->GetText(buf,10); /* ввод начального */
tn=atof(buf); /* времени */
EditDt->GetText(buf,10); /* ввод шага */
dt=atof(buf); /* времени */
mi=mn; /*формирование текущего значения массы*/
ti=tn; /*формирование текущего значения времени*/
do
{
dmi = pp * mi *dt / 100; /*расчет текущих потерь */
sprintf(buf,"%5.3f",ti); /* вывод текущего */
ListBoxTi->AddString(buf); /* времени */
sprintf(buf,"%10.7f",dmi); /* вывод текущих */
ListBoxMp->AddString(buf); /* потерь */
sprintf(buf,"%10.7f",mi); /* вывод текущей */
ListBoxMi->AddString(buf); /* массы */
mi = mi - dmi; /*расчет текущей массы */
ti = ti + dt; /*расчет текущего времени */
}
while(mi >= mgr); /*условие повторения цикла*/
}
5 1 10 0 1.5 – исходные данные для решения задачи.
Результаты решения представлены в приложении 7.2.
Внимание! Здесь и далее выделенные курсивом строки создателем программы не пишутся. Они формируются автоматически ИСРП в процессе машинной обработки программы.
Математические задачи
Математические вычисления, обеспечивающие достижение (превышение) заданной границы счета иллюстрируются задачей (7.2) расчета ряда Фибоначчи.
Ряд Фибоначчи – последовательность целых положительных чисел, начиная с 0 и 1, организованных таким образом, что каждое следующее число равно сумме двух предыдущих.
Постановка задачи
Рассчитать числа Фибоначчи (в порядке увеличения) до достижения трёхзначного значения.