Составление алгоритма решения. Сформированная математическая модель и выбранный метод решения позволяют выполнить одношаговую схему алгоритма (рис
Сформированная математическая модель и выбранный метод решения позволяют выполнить одношаговую схему алгоритма (рис. 8.6).
Рис. 8.6. Алгоритм решения задачи 8.2
Для улучшения наглядности организации вычислений элементы дружественности не показаны.
Программирование задачи
Идентификация переменных представлена в табл. 8.2.
Таблица 8.2
Обозначение в алгоритме | i | n | x | ai | SPi |
Обозначение в программе | i | n | x | a[i] | sp[i] |
С учётом таблицы идентификации на основании схемы алгоритма составлены программы решения задачи.
Классический вариант программирования задачи
#include<stdio.h>
#include<stdlib.h>
#include<conio.h>
#include <windows.h>
#define N 20 /* увеличенный размер массивов */
main( )
{
float x, a[N], sp[N];
int i, n;
char buf[50]; /*описание символьного массива*/
clrscr( );
CharToOem(" Введите численные значения n и x: ",buf);
printf("\n %s ",buf);
scanf("%d%f", &n, &x);
for( i=0 ; i<n ; i++ ) /* заголовок цикла ввода */
{
CharToOem(" Введите коэффициент а",buf);
printf("\n %s%i",buf,i);
scanf("%f", &a[i]);
}
printf("\n ---------------------------------"
"\n | i | ai | SPi |"
"\n ---------------------------------");
sp[0] = a[0];
for( i = 1 ; i<=n ; i++ ) /* заголовок цикла расчёта */
{
sp[i] = sp[i-1] * x + a[i];
printf("\n | %2d | %8.2f|%15.1f|", i, a[i], sp[i]);
}
printf("\n ---------------------------------");
CharToOem(" Значение полинома SP =",buf);
printf("\n %s %.2f",buf,sp[n]);
CharToOem(" при n=",buf);
printf(" %s %.d\n",buf,n);
getch();
}
7 1.98
5 0.8 1.7 -3.2 12 0.1 63
Под закрывающей скобкой программы располагаются численные значения исходных данных для решения задачи.
Результаты решения представлены в приложении 8.3.
Программирование задачи с графическим интерфейсом
Программирование задачи при использовании графического интерфейса предварим его разработкой.
|
Для ввода порядка и основания полинома планируем однострочные поля редактирования (EditN, EditX). Для ввода коэффициентов полинома – многострочное поле редактирования (EditAi). Вывод расчетных значений реализуем в поле-список (ListBoxSP).
Управление процессом решения реализуем двумя командными кнопками, расположенными в нижней части окна. Назначение каждой определяется ее названием.
С учетом планируемого интерфейса выполним программирование задачи.
#include<stdio.h>
#include<stdlib.h>
#define N 20 /* увеличенный размер массивов */
…
void TSumprDlgClient::Ok()
{
// INSERT>> Your code here.
float x, a[N], sp[N];
int i, n;
char buf[20]; /*описание символьного массива*/
ListBoxSP->ClearList();
EditN->GetText(buf, 10);
n = atoi(buf); /* ввод значения порядка*/
EditX->GetText(buf,10);
x=atof(buf); /* ввод значения основания полинома*/
for( i=0 ; i<n ; i++ ) /* заголовок цикла ввода */
{
EditAi->GetLine(buf, 20, i);
a[i]=atof(buf); /* ввод значения массы*/
}
sp[0] = a[0];
for( i = 1 ; i<=n ; i++ ) /*заголовок цикла расчёта */
{
sp[i] = sp[i-1] * x + a[i];
sprintf(buf,"%11.1f",sp[i-1]);
ListBoxSP->AddString(buf); /*вывод текущих значений sp*/
}
}
7 1.98
5 0.8 1.7 -3.2 12 0.1 63
Под закрывающей скобкой программы записаны численные значения исходных данных для решения задачи. Результаты решения представлены в приложении 8.4.