Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 13.11.2017, 13:34   #1
toha0074
 
Регистрация: 13.11.2017
Сообщений: 8
По умолчанию , решить уравнение методом хорд с графиком, я сделал все по формуле, но выдает ошибку в 71 строке кода.

Дана задача, решить уравнение методом хорд с графиком, я сделал все по формуле, но выдает ошибку в 71 строке кода. Ниже код и скриншоты, помогите пожалуйста. С++Builder 6.




//---------------------------------------------------------------------------

#include <vcl.h>
#pragma hdrstop
#include "math.h"

#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------------------

double fy(double x){
double k; k=-x*x+1;//(pow(x,2)*x-0.2*pow(x,2.00)-0.2*x-1.2);//*(-1);
return k;};

double proizII(double x){
double k; k=-2;//(6*x-0.4);//*(-1);
return k;};

void __fastcall TForm1::FormActivate(TObject *Sender)
{
double x,y;
Series1->Clear();
for (x=-10; x<=10; x=x+0.01) { y=fy(x); Series1->AddXY(x,y);}
y=0; x=0;
for (x=-20; x<=20; x=x+0.01) { y=0; Series2->AddXY(x,y);}
y=0; x=0;
for (y=-20; y<=20; y=y+0.01) { x=0; Series3->AddXY(x,y);}
Chart1->Refresh();
Chart1->LeftAxis->Maximum=20;
Chart1->LeftAxis->Minimum=-20;
Chart1->LeftAxis->Increment=(Chart1->LeftAxis->Maximum-Chart1->LeftAxis->Minimum)/20;
}
//---------------------------------------------------------------------------

void __fastcall TForm1::Button1Click(TObject *Sender)
{
float** tabl = new float *[10];
for (int i = 0; i < 10; i++)
tabl[i] = new float[8];


tabl[0][0]=1;
tabl[0][1]=StrToFloat(Edit1->Text);
tabl[0][2]=StrToFloat(Edit2->Text);
tabl[0][5]=fy(StrToFloat(Edit1->Text));
tabl[0][6]=fy(StrToFloat(Edit2->Text));
tabl[0][4]=(tabl[0][1]*tabl[0][6]-tabl[0][2]*tabl[0][5])/(tabl[0][6]-tabl[0][5]);
tabl[0][7]=fy(tabl[0][4]);

int p;
if(fy(tabl[0][1])*proizII(tabl[0][4])>0) p=1;
if(fy(tabl[0][1])*proizII(tabl[0][4])<0) p=2;

for (int w=0; w<8; w++) StringGrid1->Cells[w][1]=FloatToStr(tabl[0][w]);
int i=1; float t,o; t=StrToFloat(Edit3->Text);

do{
tabl[i][0]=i+1;
if (p==1) {tabl[i][1]=tabl[i-1][1]; tabl[i][2]=tabl[i-1][4]; };
if (p==2) {tabl[i][2]=tabl[i-1][2]; tabl[i][1]=tabl[i-1][4]; };
tabl[i][5]=fy(tabl[i][1]);
tabl[i][6]=fy(tabl[i][2]);
tabl[i][4]=(tabl[i][1]*tabl[i][6]-tabl[i][2]*tabl[i][5])/(tabl[i][6]-tabl[i][5]);
tabl[i][7]=fy(tabl[i][4]);
o=fabs(tabl[i-1][4]-tabl[i][4]);
i++;

} while (t<o);



Edit4->Text=FloatToStr(tabl[i-1][4]);
StringGrid1->RowCount=i+1;
for (int q=1; q<i; q++) {for (int w=0; w<8; w++) {StringGrid1->Cells[w][q+1]=FloatToStr(tabl[q][w]);}}

}
//---------------------------------------------------------------------------





void __fastcall TForm1::FormCreate(TObject *Sender)
{
StringGrid1->Cells[0][0]="Номер итерации";
StringGrid1->Cells[1][0]="Левая границы";
StringGrid1->Cells[2][0]="Правая граница";
StringGrid1->Cells[3][0]="h";
StringGrid1->Cells[4][0]="Точка перес. Ox и хорды";
StringGrid1->Cells[5][0]="Функция от лев. гран.";
StringGrid1->Cells[6][0]="Функция от пр. отр.";
StringGrid1->Cells[7][0]="Функция от корня";
}
//---------------------------------------------------------------------------
Изображения
Тип файла: jpg Безымянный.jpg (101.4 Кб, 111 просмотров)
Тип файла: jpg Безымянный2.jpg (103.3 Кб, 114 просмотров)
Тип файла: jpg Безымянный3.jpg (103.5 Кб, 106 просмотров)
toha0074 вне форума Ответить с цитированием
Старый 13.11.2017, 13:36   #2
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,709
По умолчанию

Проверяйте, скорее всего tabl[i][6] == tabl[i][5]
p51x вне форума Ответить с цитированием
Старый 13.11.2017, 14:49   #3
toha0074
 
Регистрация: 13.11.2017
Сообщений: 8
По умолчанию

Цитата:
Сообщение от p51x Посмотреть сообщение
Проверяйте, скорее всего tabl[i][6] == tabl[i][5]
Должен быть именно - по формуле, а если применить ваше исправление, то программа работает не правильно. Дело не в этом, а в чем то другом я думаю, но не могу понять в чем
toha0074 вне форума Ответить с цитированием
Старый 13.11.2017, 14:51   #4
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,709
По умолчанию

Это не исправление. Это фраза о том, что у вас tabl[i][6] РАВНО tabl[i][5] и происходит деление на 0.
p51x вне форума Ответить с цитированием
Старый 13.11.2017, 15:03   #5
toha0074
 
Регистрация: 13.11.2017
Сообщений: 8
По умолчанию

Большое спасибо))
toha0074 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
решить нелинейное уравнение методом секущих (хорд). Нелинейные уравнения (Lazarus) Loonas Lazarus, Free Pascal, CodeTyphon 2 24.04.2014 21:45
Решить уравнение методом хорд( нужен ответ - программа работает правильно?) alilar Помощь студентам 1 17.09.2012 20:31
квадратное уравнение методом Хорд и методом касательных Pomio1 Помощь студентам 1 24.11.2011 00:37
уравнение x=f(x) методом касательный и методом хорд в делфи electrovolk Помощь студентам 0 30.12.2010 00:06