Поиск:

Ответ в темуСоздание новой темы Создание опроса
> численные методы, решение нелинейных уравнений 
:(
    Опции темы
leahov
Дата 26.11.2007, 11:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 62
Регистрация: 9.12.2005

Репутация: нет
Всего: нет



Помогите оформить задание сделанное в turbo c++. Нужно оформить его в форме и именно в билдере (ну такой вот бзик у препода smile ) Ниже привожу код 
Код

#include<stdio.h>
#include<math.h>
#include<conio.h>
#include <iostream.h>

float f(float x)
{
//    return x*x*x + 3*x - 2;
        return x*x*x + x - 5;
}

float fdx(float x)
{
//    return 3*x*x +3;
        return 3*x*x +1;
}

float fd2x(float x)
{
    return 4*x;
}
float absolute(float x)
{
    return x < 0 ? -x : x;
}

void chordes(float a, float b, float eps)
{

    if(f(a)*f(b) < 0)
    {
        cout << "Chordes: a i b nepravilnye";
        return;
    }
    float x0 = a;
    float xf = b;

    if(f(a)*fd2x(a) > 0)
    {
        x0 = b;
        xf = a;
    }

    int step = 1;

    float x1 = x0 - f(x0)*(xf-x0)/(f(xf)-f(x0));


    while(absolute(x1-x0) > eps)
    {
        x0 = x1;
        x1 = x0 - f(x0)*(xf-x0)/(f(xf)-f(x0));
        step = step + 1;
    }

    cout << "Chordes: x: " << x1 << "\nf(x): " << f(x1) << "\nsteps:" << step;
}

void sek(float a, float b, float eps)
{

    if(f(a)*f(b) < 0)
    {
        cout << "Sekush: a i b nepravilnye";
        return;
    }
    float x0 = a;
    float x1 = a + eps;

    if(f(a)*fd2x(a) < 0)
    {
        x0 = b;
        x1 = b - eps;
    }

    int step = 1;

    float x = x1 - f(x1)*(x1 - x0)/(f(x1) - f(x0));

    x0 = x1;
    x1 = x;


    while(absolute(x1-x0) > eps)
    {
        x = x1 - f(x1)*(x1 - x0)/(f(x1) - f(x0));
        x0 = x1;
        x1 = x;
        step = step + 1;
    }

    cout << "Sek: x: " << x1 << "\nf(x): " << f(x1) << "\nsteps:" << step;
}

void kasat(float a, float b, float eps)
{

    if(f(a)*f(b) < 0)
    {
        cout << "Sekush: a i b nepravilnye";
        return;
    }
    float x0 = a;

    if(f(a)*fd2x(a) < 0)
    {
        x0 = b;
    }

    int step = 1;

    float x1 = x0 - f(x0)/fdx(x0);

    while(absolute(x1-x0) > eps)
    {
        x0 = x1;
        x1 = x0 - f(x0)/fdx(x0);
        step = step + 1;
    }

    cout << "Kasat: x: " << x1 << "\nf(x): " << f(x1) << "\nsteps:" << step;
}

void main()
{
    float a, b, eps;
    cout << "Vvedite a, b, epsilon: ";
    cin >> a >> b >> eps;

    chordes(a, b, eps);
    sek(a, b, eps);
    //kasat(a, b, eps);

}// end main()



Помогите это оформить в билдере

Это сообщение отредактировал(а) leahov - 26.11.2007, 17:32
PM MAIL   Вверх
Artemon
Дата 27.11.2007, 19:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


а ты мне нравишься
***


Профиль
Группа: Завсегдатай
Сообщений: 1771
Регистрация: 24.2.2004
Где: Челябинск

Репутация: 7
Всего: 20



1. Убери весь вывод на жкран из функций.
2. Создай 3 компонента TEdit на форме (для a,b, эпсилон)
3. Добавь на форму Компонет TMemo - сюда будешь выводить свои результаты.
4. Добавь кнопку, по нажатию которой будет выполняться код из main
5. Замени весь вывод на консоль - выводом на TMemo.


--------------------
Контроль топлива на топливозаправщиках, мониторинг автотранспорта, расчет зарплаты водителей www.rscat.ru
PM MAIL   Вверх
leahov
Дата 3.12.2007, 10:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 62
Регистрация: 9.12.2005

Репутация: нет
Всего: нет



с оформлением вроде разобрался, остались некоторые недочеты. Вот листинг
Код


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

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

#include "urav.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
    : TForm(Owner)
{
}
//---------------------------------------------------------------------------
float f(float x)
{
//    return x*x*x + 3*x - 2;
 return x*x*x + x - 5;
}
float fdx(float x)
{//    return 3*x*x +3;
  return 3*x*x +1;
}
float fd2x(float x)
{
    return 4*x;
}
float absolute(float x)
{    return x < 0 ? -x : x;
}
void chordes(float a, float b, float eps, TLabel* lbl3, TLabel* lbl4, TLabel* lbl5)
{
  if(f(a)*f(b) < 0)
    {
      ShowMessage("Хорды: a и b неправильные");
      return;
    }
  float x0 = a;
  float xf = b;
  if(f(a)*fd2x(a) > 0)
  {
    x0 = b;
    xf = a;
  }
  int step = 1;
  float x1 = x0 - f(x0)*(xf-x0)/(f(xf)-f(x0));
  while(absolute(x1-x0) > eps)
   {
     x0 = x1;
     x1 = x0 - f(x0)*(xf-x0)/(f(xf)-f(x0));
     step = step + 1;
   }
   lbl3->Caption = x1;
   lbl4->Caption = f(x1);
   lbl5->Caption = step;
}
void __fastcall TForm1::sek(float a, float b, float eps)
{
  if(f(a)*f(b) < 0)
  {
   ShowMessage("Секущие : a и b неправильные");
   return;
  }
  float x0 = a;
  float x1 = a + eps;
  if(f(a)*fd2x(a) < 0)
   {
     x0 = b;
     x1 = b - eps;
   }
  int step = 1;
  float x = x1 - f(x1)*(x1 - x0)/(f(x1) - f(x0));
  x0 = x1;
  x1 = x;
  while(absolute(x1-x0) > eps)
  {
   x = x1 - f(x1)*(x1 - x0)/(f(x1) - f(x0));
   x0 = x1;
   x1 = x;
   step = step + 1;
  }
  Label11->Caption = x1;
  Label12->Caption = f(x1);
  Label13->Caption = step;
}

void __fastcall TForm1::kasat(float a, float b, float eps)
{
 if(f(a)*f(b) < 0)
 {
  ShowMessage("Касательные: a и b неправильные");
  return;
 }
 float x0 = a;
 if(f(a)*fd2x(a) < 0)
 {
  x0 = b;
 }
 int step = 1;
 float x1 = x0 - f(x0)/fdx(x0);
 while(absolute(x1-x0) > eps)
 {
  x0 = x1;
  x1 = x0 - f(x0)/fdx(x0);
  step = step + 1;
 }
 Label17->Caption = x1;
 Label18->Caption = f(x1);
 Label25->Caption = step;
}

void __fastcall TForm1::combi(float a, float b, float eps)
{
if ((abs(f(a)*fd2x(a)) == f(a)*fd2x(a)) &&
      (abs(f(b)*fd2x(b)) == f(b)*fd2x(b)))
 {
   ShowMessage("Данные: a и b неправильные");
  return;
}
float x0=a;
float t0=b;

 if(f(a)*fd2x(a) > 0)
  {
    x0 = b;
    t0 = a;
  }

int step = 1;
float x = x0 - f(x0)*(t0-x0)/(f(t0)-f(x0));
float t = t0 - f(t0)/fdx(t0);
while (absolute(x0-t0) < eps)
 {
  x0 = (x0+t0)/2;
  t0 = f((x0+t0)/2);
  step = step + 1;
 }
Label28->Caption = x0;
Label30->Caption = t0;
Label32->Caption = step;

}

void __fastcall TForm1::Button1Click(TObject *Sender)
{
   float a, b, eps;
 //  ShowMessage("Vvedite a, b, epsilon: ");
   a = StrToFloat(Edit1->Text);
   b = StrToFloat(Edit2->Text);
   eps = StrToFloat(Edit3->Text);
   chordes(a, b, eps, Label3, Label4, Label7);
   sek(a, b, eps);
   kasat(a, b, eps);
   combi(a, b, eps);
}
//---------------------------------------------------------------------------



в чем выявлены ошибки:

касательные, секущие и хорды вроде считает, но в комбинированные (combi) какая-то засада.
Выдает без расчетов "Данные: a и b неправильные", если убрать 

Код

 if ((abs(f(a)*fd2x(a)) == f(a)*fd2x(a)) &&
      (abs(f(b)*fd2x(b)) == f(b)*fd2x(b)))
  {
    ShowMessage("Данные: a и b неправильные");
    return;
  }



то вроде запускается, но не считает.
Если здесь в label убрать нули
Код

while (absolute(x0-t0) < eps)
 {
  x0 = (x0+t0)/2;
  t0 = f((x0+t0)/2);
  step = step + 1;
 }
Label28->Caption = x0;
Label30->Caption = t0;
Label32->Caption = step;
 
}
 


то получается какой то расчет и всё время со степом 1. Явно математическая часть не верна. Кто знает как её реализовать, подскажите пожалуйста
PM MAIL   Вверх
leahov
Дата 3.12.2007, 16:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 62
Регистрация: 9.12.2005

Репутация: нет
Всего: нет



так может правильней?

Код

while (absolute(x0-t0) < eps)
 {
  x = (x0+t0)/2;
  t = f((x0+t0)/2);
  step = step + 1;
 }
Label28->Caption = x;
Label30->Caption = t;
Label32->Caption = step;
 


но степ по прежнему 1
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++ Builder"
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по С++ Builder обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Настоятельно рекомендуем заглянуть в DRKB (Delphi Russian Knowledge Base) - крупнейший в рунете сборник материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C++ Builder | Следующая тема »


 




[ Время генерации скрипта: 0.0483 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.