Формирование математической модели. УБ = _ _ _ , _ ц/га – урожайность биологическая;
Исходные данные
S = _ _ _ , _ га – площадь поля;
УБ = _ _ _ , _ ц/га – урожайность биологическая;
п1 = _ _ , _ % – потери при копке;
п2 = _ _ , _ % – потери при сборе;
п3 = _ _ , _ % – потери при погрузке;
п4 = _ _ , _ % – потери при перевозке;
п5 = _ _ , _ % – потери при сортировке;
п6 = _ _ , _ % – потери при хранении.
Расчётные зависимости
[ц/га×га=ц] биологическая масса;
М = (((((МБ - МП1) - МП2) - МП3) - МП4) - МП5) - МП6 [ц]
общая математическая зависимость вычисления искомой
массы;
[ц] задание начального значения
массы;
[ц] вычисление текущего значения потерь;
Мi = Мi-1 - МПi [ц] вычисление текущего значения массы;
диапазон изменения параметра;
i = i + 1 закон изменения параметра.
Выбор метода решения
Математическая модель задает аргументы (проценты потерь) в форме одномерного массива. Она предписывает последовательное вычисление текущих значений масс потерь и собственно масс продукции на каждом этапе технологической обработки, начиная с копки (i = 1) и заканчивая хранением (i = 6).
Поэтому в качестве параметра цикла необходимо использовать индекс потерь (i) с диапазоном изменения и стандартным законом i = i + 1. Дополнительно необходимо сформировать начальное значение массы , а затем изменять его с учётом вычисления конкретных потерь МПi на каждом цикле.
Следовательно, в качестве метода решения необходимо использовать смешанный вычислительный процесс – арифметический циклический процесс с табличным заданием аргумента и дополнительным формированием уменьшения (разности).
Составление алгоритма решения
Сформированная математическая модель и выбранный метод решения позволяют выполнить одношаговую схему алгоритма (рис. 8.9).
Рис. 8.9 Алгоритм решения задачи 8.5
Для улучшения наглядности организации вычислений элементы дружественности не показаны.
Программирование задачи
Идентификация переменных представлена в табл. 8.5
Таблица 8.5
Обозначение в алгоритме | i | n | S | УБ | пi | МБ | Мi | МПi |
Обозначение в программе | i | n | s | ub | p[i] | mb | m[i] | mp[i] |
С учётом таблицы идентификации на основании схемы алгоритма составлены программы решения задачи.
Классический вариант программирования задачи
#include<stdio.h>
#include<stdlib.h>
#include<math.h>
#include<conio.h>
#include <windows.h>
#define N 20 /* увеличенный размер массивов */
main( )
{
float s, ub, mb, p[N], m[N], mp[N];
int i, n;
char buf[50]; /*описание символьного массива*/
clrscr( );
CharToOem("Введите значения S (га), УБ(ц/га) и n:", buf);
printf("\n %s ",buf);
scanf("%f %f %d", &s, &ub, &n);
for( i = 1 ; i <= n ; i++ ) /* заголовок цикла ввода */
{
CharToOem(" Введите п(",buf);
printf("\n %s %d) ",buf,i);
scanf("%f", &p[i]);
}
mb = ub * s;
m[ 0 ] = mb;
printf("\n S = %.1f , UB = %.1f , n = %d, MB = %.1f ", s, ub, n, mb);
printf("\n ----------------------------------" );
CharToOem("| пi | Mпi | Mi |",buf);
printf("\n %s ",buf);
CharToOem("| % | ц | ц |",buf);
printf("\n %s ",buf);
printf( "\n ----------------------------------");
for( i = 1 ; i<=n ; i++ ) /* заголовок цикла расчёта */
{
mp[i] = m[i-1] * p[i]/100.;
m[i] = m[i-1] - mp[i];
printf("\n | %4.1f | %6.2f |%8.1f |",
p[i], mp[i], m[i]);
}
printf("\n ----------------------------------");
getch();
}
120. 200 5 конкретные значения
5. 3.2 4. 3.5 10.4 вводимых переменных
Результаты решения представлены в приложении 8.9.
Программирование задачи с графическим интерфейсом
Программирование задачи при использовании графического интерфейса предварим его разработкой.
|
|
Для ввода значений потерь урожая, площади поля и биологической урожайности планируем однострочные поля редактирования (EditN, EditS, EditUB). Для ввода процента потерь урожая – многострочное поле редактирования (EditP). Вывод расчетных значений массы потерь и массы собранного урожая реализуем в поля-списки (ListBoxMpi, ListBoxMi).
Управление процессом решения реализуем двумя командными кнопками, расположенными в нижней части окна. Назначение каждой определяется ее названием.
С учетом планируемого интерфейса выполним программирование задачи.
#include<stdio.h>
#include<stdlib.h>
#include<math.h>
#define N 20 /* увеличенный размер массивов */
…
void TSumprDlgClient::BNClickedOk()
{
// INSERT>> Your code here.
float s, ub, mb, p[N], m[N], mp[N];
int i, n;
char buf[20]; /*описание символьного массива*/
ListBoxMpi->ClearList(); /*очистка полей*/
ListBoxMi->ClearList(); /*вывода*/
EditN->GetText(buf,10); /*ввод*/
n=atoi(buf); /*количества потерь*/
EditS->GetText(buf,10); /*ввод*/
s=atof(buf); /*площади поля*/
EditUB->GetText(buf,10); /*ввод*/
ub=atof(buf); /*биологической урожайности*/
for( i = 1 ; i <= n ; i++ ) /* заголовок цикла ввода */
{
EditP->GetLine(buf, 20, i-1); /* ввод */
p[i]=atof(buf); /*значения потерь */
}
mb = ub * s; /*расчет биологической массы урожая*/
m[ 0 ] = mb; /*формирование начального значения массы*/
for( i = 1 ; i<=n ; i++ ) /* заголовок цикла расчёта */
{
mp[i] = m[i-1] * p[i]/100.; /*масса потерь*/
m[i] = m[i-1] - mp[i]; /*масса урожая*/
sprintf(buf,"%3f",mp[i]); /* вывод текущих*/
ListBoxMpi->AddString(buf); /*значений mp[i]*/
sprintf(buf,"%3f",m[i]); /* вывод текущих*/
ListBoxMi->AddString(buf); /*значений m[i]*/
}
}
5 120. 200 конкретные значения
5. 3.2 4. 3.5 10.4 вводимых переменных
Результаты решения представлены в приложении 8.10.