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