Формирование математической модели. УБ = _ _ _ , _ ц/га – урожайность биологическая;

Исходные данные

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.

Программирование задачи с графическим интерфейсом

Программирование задачи при использовании графического интерфейса предварим его разработкой.

ListBoxMi
ListBoxMpi

Для ввода значений потерь урожая, площади поля и биологической урожайности планируем однострочные поля редактирования (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.