Вместо компонента Edit используем компонент SpinEdit, который обеспечивает отображение и редактирование целого числа с возможностью его изменения посредством двойной кнопки.
|
Компонент SpinEdit находится на странице Samples Палитры Компонентов. В тех случаях, когда объем выводимой информации превышает размер поля компонента Memo, целесообразно снабдить его линейками прокрутки. В свойстве ScrollBars компонента Memo1 установим значение ssVertical – появится вертикальная линейка прокрутки. Присвоим модулю имя UnCiklAlg.
Текст модуля
#include “math.h”
Form1: TForm1;
long fakt(int n) //функция вычисления фактариала числа n
{
double t=1;
if(n<1) return 1;
else
for(int i=1; i<n; i++)
t=t*(i+1);
return t;
}
void __fastcall TForm1::FormCreate(TObject *Sender)
{
СSpinEdit1->Text= ''3''; // начальное значение N
Edit1->Text= ''0,1''; // начальное значение Xn
Edit2->Text= ''2,0''; // начальное значение Xk
Memo1->Clear;
Memo1->Lines->Add(''Лабораторная работа №3 - Циклический алгоритм'');
}
void __fastcall TForm1::Button1Click(TObject *Sender)
{
double xn,xk,x,h,s,y,al,del;
int n,k;
n = StrToInt(CSpinEdit1->Text);
xn = StrToFloat(Edit1->Text);
xk = StrToFloat(Edit2->Text);
if (CheckBox1->Checked)
Memo1->Lines->Add('' Исходные данные: n='' +IntToStr(n)+
'' Xn= ''+FloatToStrF(xn,ffFixed,6,1)+
'' Xk= ''+FloatToStrF(xk,ffFixed,6,1));
h=(xk-xn)*0.1; // шаг h
x=xn;
do
{ // цикл по x
s=1;
for (k=1; k<n; k++)
{
s=s+pow(-1,k)*((2*k*k+1)/fakt(2*k))*pow(x,2*k);
}
y=(1-x*x*0.5)*cos(x)-0.5*x*sin(x);
if (CheckBox2->Checked)
if (CheckBox3->Checked )
{
al=s-y; // абсолютная погрешность
del=abs((s-y)/y)*100; // относительная погрешность
Memo1->Lines->Add('' x= '' +FloatToStrF(x,ffFixed,6,2)+
'' S= ''+ FloatToStrF(s,ffFixed,6,3)+
'' Y= ''+ FloatToStrF(y,ffFixed,6,3)+
'' A= ''+ FloatToStrF(al,ffFixed,6,3)+
'' D= ''+ FloatToStrF(del,ffFixed,6,0)+'' %'');
}
Else
{
al=s-y;
Memo1->Lines->Add('' x='' +FloatToStrF(x,ffFixed,6,2)+
'' S='' + FloatToStrF(s,ffFixed,6,3)+
'' Y='' + FloatToStrF(y,ffFixed,6,3)+
'' A='' + FloatToStrF(al,ffFixed,6,3));
}
Else
if (CheckBox3->Checked)
{
del=abs((s-y)/y)*100;
Memo1->Lines->Add('' x='' +FloatToStrF(x,ffFixed,6,2)+
'' S='' + FloatToStrF(s,ffFixed,6,3)+
'' Y='' + FloatToStrF(y,ffFixed,6,3)+
'' D='' + FloatToStrF(del,ffFixed,6,0)+'' %'');
}
Else
Memo1->Lines->Add('' x='' +FloatToStrF(x,ffFixed,6,2)+
'' S='' + FloatToStrF(s,ffFixed,6,3)+
'' Y='' + FloatToStrF(y,ffFixed,6,3));
x=x+h;
}
while (x<xk);
}
}
Выполнение индивидуального задания
По указанию преподавателя выберите свое индивидуальное задание. Создайте приложение и протестируйте его работу.
Индивидуальные задания
В заданиях с №1 по №15 необходимо вывести на экран таблицу значений функции Y(x) и ее разложения в ряд S(x) для значений x от до
с шагом
. Близость значений S(x) и Y(x) во всем диапазоне значений x указывает на правильность вычисления S(x) и Y(x).
№ | ![]() | ![]() | S(x) | n | Y(x) |
0.1 | ![]() ![]() ![]() |
![]() | |||
0.1 | ![]() | ![]() | |||
0.1 | ![]() | ![]() | |||
0.1 | ![]() |
![]() | |||
0.1 | ![]() | ![]() | |||
0.1 | ![]() | ![]() | ![]() | ||
0.1 | ![]() | ![]() | |||
0.1 | ![]() |
![]() | |||
0.1 | ![]() | ![]() | |||
0.1 | 0.5 | ![]() |
![]() | ||
0.1 | 0.8 | ![]() |
![]() | ||
0.1 | ![]() |
![]() |