Resultados 1 al 6 de 6

Tema: Need Help! Alguien que la tenga mas o menos clara con Delphi??

Ver Modo Hilado

Mensaje Anterior Mensaje Anterior   Próximo Mensaje Próximo Mensaje
  1. #1
    Senior Member Avatar de MARS
    Fecha de Ingreso
    01 sep, 05
    Ubicación
    La Plata
    Mensajes
    4,714

    Need Help! Alguien que la tenga mas o menos clara con Delphi??

    Basicamente lo que necesito es ingresar una funcion mediante un TEdit.

    Digamos, Asquerosamente a lo bruto, algo asi:

    function func(x):double;
    begin
    func:=Form1.Edit1.Text;
    end;

    Donde Edit1.Text sea por ejemplo: (exp(-x))-x;

    me estoy rompiendo el mate con eso hace horas, y encima supongo que debe ser una gilada de aquellas.

    btw, para el curioso, el programa es de Busqueda de Raices por Biseccion, Regula Falsi, Punto Fijo, Newton Raphson con tabla de iteraciones detallada, etc, funca todo, lo unico q me falta para dejarlo pipi cucu es eso xD

    Por si a alguien le interesa el .pas

    Código:
    unit AN;
    
    interface
    
    uses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, StdCtrls, DB, DBTables, Grids, DBGrids, ComCtrls, ExtCtrls;
    
    type
      TForm1 = class(TForm)
        Panel1: TPanel;
        PageControl1: TPageControl;
        TabSheet1: TTabSheet;
        TabSheet2: TTabSheet;
        TabSheet4: TTabSheet;
        TabSheet5: TTabSheet;
        DataSource1: TDataSource;
        DBGrid1: TDBGrid;
        Table1: TTable;
        Edit1: TEdit;
        Edit2: TEdit;
        Edit3: TEdit;
        Edit4: TEdit;
        Edit5: TEdit;
        Button1: TButton;
        Label1: TLabel;
        Label2: TLabel;
        Label3: TLabel;
        Label4: TLabel;
        Label5: TLabel;
        Edit6: TEdit;
        Edit7: TEdit;
        Edit8: TEdit;
        Edit9: TEdit;
        Edit10: TEdit;
        Label16: TLabel;
        TabSheet3: TTabSheet;
        Label6: TLabel;
        Label7: TLabel;
        Label8: TLabel;
        Label9: TLabel;
        Label10: TLabel;
        DBGrid2: TDBGrid;
        DataSource2: TDataSource;
        Table2: TTable;
        Button2: TButton;
        DataSource3: TDataSource;
        Table3: TTable;
        DBGrid3: TDBGrid;
        Edit11: TEdit;
        Edit12: TEdit;
        Edit13: TEdit;
        Edit14: TEdit;
        Label11: TLabel;
        Label12: TLabel;
        Label13: TLabel;
        Label14: TLabel;
        Button3: TButton;
        DBGrid4: TDBGrid;
        Table4: TTable;
        DataSource4: TDataSource;
        Edit15: TEdit;
        Edit16: TEdit;
        Edit17: TEdit;
        Edit18: TEdit;
        Label15: TLabel;
        Label17: TLabel;
        Label18: TLabel;
        Label19: TLabel;
        Button4: TButton;
        Edit19: TEdit;
        Edit20: TEdit;
        Edit21: TEdit;
        Edit22: TEdit;
        Label20: TLabel;
        Label21: TLabel;
        Label22: TLabel;
        Label23: TLabel;
        DBGrid5: TDBGrid;
        DataSource5: TDataSource;
        Table5: TTable;
        Button5: TButton;
        Edit23: TEdit;
        Label24: TLabel;
        procedure Button1Click(Sender: TObject);
        procedure Button2Click(Sender: TObject);
        procedure Button3Click(Sender: TObject);
        procedure Button4Click(Sender: TObject);
      private
        { Private declarations }
      public
        { Public declarations }
      end;
    
    var
      Form1: TForm1;
      var xl,xu,es,imax,iter:double;
      var xr,ea,xrold,test:double;
      var x:double;
      var aux:double;
    
    implementation
    
    function func(x:double):double;
    //var aux:double;
    begin
    
    func:= (exp(-x))-x;
    
    end;
    
    function deriv(x:double):double;
    begin
    
    deriv:=(-exp(-x))-1;
    
    end;
    
    function xpunto(x:double):double;
    begin
    xpunto:=exp(-x);
    end;
    
    function bisect(xl,xu,es,imax:double):double;
    begin
    
    iter:=0;
    ea:=1;
    while (ea > es) and (iter <= imax)
    do
    begin
    
    form1.Table1.Append;
    form1.Table1.FieldByName('ITER').AsFloat := iter;
    form1.table1.FieldByName('AI').AsFloat := xl;
    form1.table1.FieldByName('BI').AsFloat := xu;
    form1.table1.FieldByName('FA').AsFloat := func(xl);
    form1.table1.FieldByName('FB').AsFloat := func(xu);
    
    xrold:=xr;
    xr:= (xl+xu)/2;
    
    form1.table1.FieldByName('RI').AsFloat := xr;
    form1.table1.FieldByName('FRI').AsFloat := func(xr);
    
    iter:=iter+1;
    if (func(xr) <> 0) then
    begin
    aux:=(xr-xrold)/xr;
    
    ea:= abs(aux);
    
    form1.table1.FieldByName('EI').AsFloat := ea;
    
    end;
    test:=func(xl) * func(xr);
    
    if (test<0) then
    begin
    xu:=xr;
    
    end
    else if (test>0) then
    begin
    xl:=xr;
    
    form1.Table1.Post;
    end
    else
    begin
    ea:=0;
    end;
    end;
    bisect:=xr;
    end;
    
    
    function interp(xl,xu,es,imax:double):double;
    begin
    
    iter:=0;
    ea:=1;
    while (ea > es) and (iter <= imax)
    do
    begin
    
    form1.Table2.Append;
    form1.Table2.FieldByName('ITER').AsFloat := iter;
    form1.table2.FieldByName('AI').AsFloat := xl;
    form1.table2.FieldByName('BI').AsFloat := xu;
    form1.table2.FieldByName('FA').AsFloat := func(xl);
    form1.table2.FieldByName('FB').AsFloat := func(xu);
    
    xrold:=xr;
    xr:= xu-((func(xu)*(xu-xl))/(func(xu)-func(xl)));
    
    form1.table2.FieldByName('RI').AsFloat := xr;
    form1.table2.FieldByName('FRI').AsFloat := func(xr);
    
    iter:=iter+1;
    if (func(xr) <> 0) then
    begin
    aux:=(xr-xrold)/xr;
    
    ea:= abs(aux);
    
    form1.table2.FieldByName('EI').AsFloat := ea;
    
    end;
    test:=func(xl) * func(xr);
    
    
    if (test<0) then
    begin
    xu:=xr;
    
    end
    else if (test>0) then
    begin
    xl:=xr;
    
    form1.Table2.Post;
    end
    else
    begin
    ea:=0;
    end;
    end;
    interp:=xr;
    end;
    
    function newton(xl,es,imax:double):double;
    begin
    
    iter:=0;
    ea:=1;
    
    while (ea > es) and (iter <= imax)
    do
    begin
    
    form1.Table3.Append;
    form1.Table3.FieldByName('ITER').AsFloat := iter;
    form1.table3.FieldByName('XI').AsFloat := xl;
    form1.table3.FieldByName('FXI').AsFloat := func(xl);
    
    xrold:=xr;
    xr:= -(func(xl)/deriv(xl))+xl;
    
    form1.table3.FieldByName('XR').AsFloat := xr;
    form1.table3.FieldByName('FXR').AsFloat := func(xr);
    
    iter:=iter+1;
    if (func(xr) <> 0) then
    begin
    aux:=(xr-xl)/xr;
    
    ea:= abs(aux);
    
    form1.table3.FieldByName('EI').AsFloat := ea;
    
    end;
    xl:=xr;
    form1.Table3.Post;
    
    end;
    newton:=xr;
    end;
    
    function punto(xl,es,imax:double):double;
    begin
    
    iter:=0;
    ea:=1;
    
    while (ea > es) and (iter <= imax)
    do
    begin
    
    form1.Table4.Append;
    form1.Table4.FieldByName('ITER').AsFloat := iter;
    form1.table4.FieldByName('XI').AsFloat := xl;
    form1.table4.FieldByName('FXI').AsFloat := func(xl);
    
    xrold:=xr;
    xr:= xpunto(xl);
    
    form1.table4.FieldByName('XR').AsFloat := xr;
    form1.table4.FieldByName('FXR').AsFloat := func(xr);
    
    iter:=iter+1;
    if (func(xr) <> 0) then
    begin
    aux:=(xr-xl)/xr;
    
    ea:= abs(aux);
    
    form1.table4.FieldByName('EI').AsFloat := ea;
    
    end;
    xl:=xr;
    form1.Table4.Post;
    
    end;
    punto:=xr;
    end;
    
    
    {$R *.dfm}
    
    procedure TForm1.Button1Click(Sender: TObject);
    begin
    while(form1.Table1.Bof = false) do
            form1.Table1.Prior;
    While(form1.Table1.IsEmpty<>true)do
            form1.Table1.Delete;
    xl := StrToFloat(edit1.Text);
    xu := StrToFloat(edit2.Text);
    es := StrToFloat(edit3.Text);
    imax := StrToFloat(edit4.Text);
    
    if (abs(xl)=abs(xu))
    then
    MessageDlg('El resultado de Xl + Xu tiene que ser diferente de 0',mtError,[mbOk],0)
    else
    
    Edit5.Text := FloatToStr(bisect(xl,xu,es,imax));
    
    end;
    
    procedure TForm1.Button2Click(Sender: TObject);
    begin
    while(form1.Table2.Bof = false) do
            form1.Table2.Prior;
    While(form1.Table2.IsEmpty<>true)do
            form1.Table2.Delete;
    xl := StrToFloat(edit6.Text);
    xu := StrToFloat(edit7.Text);
    es := StrToFloat(edit8.Text);
    imax := StrToFloat(edit9.Text);
    
    Edit10.Text := FloatToStr(interp(xl,xu,es,imax));
    
    end;
    
    procedure TForm1.Button3Click(Sender: TObject);
    begin
    while(form1.Table3.Bof = false) do
            form1.Table3.Prior;
    While(form1.Table3.IsEmpty<>true)do
            form1.Table3.Delete;
    xl := StrToFloat(edit11.Text);
    es := StrToFloat(edit12.Text);
    imax := StrToFloat(edit13.Text);
    
    Edit14.Text := FloatToStr(newton(xl,es,imax));
    
    end;
    
    procedure TForm1.Button4Click(Sender: TObject);
    begin
    while(form1.Table4.Bof = false) do
            form1.Table4.Prior;
    While(form1.Table4.IsEmpty<>true)do
            form1.Table4.Delete;
    xl := StrToFloat(edit15.Text);
    es := StrToFloat(edit16.Text);
    imax := StrToFloat(edit17.Text);
    
    Edit18.Text := FloatToStr(punto(xl,es,imax));
    
    end;
    
    end.
    Última edición por MARS; 28/05/2008 a las 16:29
    Eclipse Clan Member - RETIRADO - ESTUDIANTES TETRACAMPEON DE AMERICA
    || MARS || Elwyn Server ||
    ~Hell Knight 78~ ~SoulTaker 77~ ~HawkEye 70~
    Powered By:
    Nostromo N52te
    Logitech MX Revolution
    Logitech G15 Gaming Keyboard

Temas Similares

  1. Busco a alguien que la tenga clara
    Por MANDIGAN2 en el foro General
    Respuestas: 2
    Último Mensaje: 13/11/2007, 02:08
  2. Respuestas: 3
    Último Mensaje: 22/01/2005, 11:22
  3. che Stock (o alguien que la tenga clara en OC)....
    Por Nick_Fury en el foro Hardware
    Respuestas: 7
    Último Mensaje: 01/10/2004, 13:39

Permisos de Publicación

  • No puedes crear nuevos temas
  • No puedes responder temas
  • No puedes subir archivos adjuntos
  • No puedes editar tus mensajes
  •  

ESCORTS Capital Federal | ESCORTS Zona Sur | ESCORTS Zona Norte | ESCORTS Zona Oeste | ESCORTS Mar del Plata | ESCORTS La Plata | ESCORTS Cordoba | ESCORTS Rosario | ESCORTS Tucuman | Escorts Almagro | Escorts Belgrano | Escorts Caballito | Escorts Centro | Escorts Flores | Escorts Microcentro | Escorts Once | Escorts Palermo | Escorts Recoleta | Escorts Tribunales | Escorts Devoto | Escorts Villa Urquiza | Escorts Caba