Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 23-11-2004
DynaRoc DynaRoc is offline
Miembro
 
Registrado: nov 2004
Posts: 12
Poder: 0
DynaRoc Va por buen camino
una simple función, un grave problema..

Buenas, el caso es que necesito hacer una simple función que me calcule lo siguiente :

( 35 + 2*(111 - 7,5*log10(5-1) - 95) = 59

todos los datos serán recogidos por textfield y guardados en variables DOUBLE ( ya que la función log10 no puede trabajar con enteros)

Aki os pongo el código ke he kreado, pero el problema es que el resultado que me dá no es 59, sino 76.03!!!!

Smax := StrToFloat(Edit1.text); // le meto 95
SmaxLimite := StrToFloat(Edit2.Text); // 111
n_canales := StrToFloat(Edit6.Text); // 5
S_I_tipo := 35.0;

un_canal := n_canales - 1.0; // debería dar 4, si le meto 5
rest_ci := -7.5*(Log10(un_canal));

Edit5.Text := FloatToStr(S_I_tipo + 2.0*(Smaxlimite - rest_ci - Smax)); // muestro el resultado en un textfiled.

el problema es que esto no me dá el resultado correcto ( en papel y con la calculadora)

alguien podría ayudarme ? seguro que es una tontería vamos
Responder Con Cita
  #2  
Antiguo 23-11-2004
Avatar de marcoszorrilla
marcoszorrilla marcoszorrilla is offline
Capo
 
Registrado: may 2003
Ubicación: Cantabria - España
Posts: 11.221
Poder: 10
marcoszorrilla Va por buen camino
Código Delphi [-]
 procedure TForm1.Button1Click(Sender: TObject);
 var
 nVarouble;
 begin
 nVar:=( 35 + 2*(111 - 7.5*log10(5-1) - 95));
 ShowMessage(FormatFloat(',0.000',nVar));
 {El resultdo es 57,96 el mismo que me da
 en la Hoja de cálculo}
 end;

Un Saludo.
__________________
Guía de Estilo de los Foros
Cita:
- Ça c'est la caisse. Le mouton que tu veux est dedans.
Responder Con Cita
  #3  
Antiguo 23-11-2004
Avatar de marcoszorrilla
marcoszorrilla marcoszorrilla is offline
Capo
 
Registrado: may 2003
Ubicación: Cantabria - España
Posts: 11.221
Poder: 10
marcoszorrilla Va por buen camino
Por cierto eso me recuerda a esto que tuve que hacer cierto día:

//Como no hubo manera de hacerla funcionar la he tenido que desglosar
//en cuatro secciones.
Código:
  IF nEncesta > 0
  PRIMERO:=LOG(nEncesta/100)/LOG(10)
  SEGUNDO:=100 - 58.859191 * PRIMERO
  TERCERO:=   -0.0015225759 * SEGUNDO + 0.4753844
  CUARTO:= 10^TERCERO
  nCoefici:= INT(CUARTO * nKilomet ^ nConstan / 0.2 / nEncesta)
Un Saludo.
__________________
Guía de Estilo de los Foros
Cita:
- Ça c'est la caisse. Le mouton que tu veux est dedans.
Responder Con Cita
  #4  
Antiguo 23-11-2004
DynaRoc DynaRoc is offline
Miembro
 
Registrado: nov 2004
Posts: 12
Poder: 0
DynaRoc Va por buen camino
lo primero gracias marcoszorrilla por contestar, llevo como 3 dias con esta tontería que no logro hacer funcionar


lo que dices en tu 1º post, claro que funciona, pero el problema ocurre cuando todos los parámetros de la función se obtienen de 3 o 4 textfield y se guardan en Double

no sé pq motivo no da el resultado 56!!! ( dá 76!!)

con respecto a tu 2º mensaje, no te he entendido lo que has explicado.

por cierto y para hacer el antilog ? sería con la funcion power ? ejemplo :

Power(10,23/10); // antilog(23)

ó 10^(23/10);

Gracias por adelantado
Responder Con Cita
  #5  
Antiguo 23-11-2004
Avatar de marcoszorrilla
marcoszorrilla marcoszorrilla is offline
Capo
 
Registrado: may 2003
Ubicación: Cantabria - España
Posts: 11.221
Poder: 10
marcoszorrilla Va por buen camino
Pues convendría mostrar el valor que tiene cada uno despues de la conversión a Double, ahí puede estar el problema, que obtienes más o menos decimales.

En cuanto al segundo ejemplo que pongo no tiene nada que ver con Delphi está hecho con Clipper, pero es un ejemplo de como a veces una función hay que dividirla en pasos para racionalizarla, esta función en una calculadora científica funcionaba y también en la hoja de cálculo, el problema el tipo de cálculo que utilizaba Clipper, por lo que para hacerla funciona la tuve que dividir en 4 tramos como vés.

Un Saludo.
__________________
Guía de Estilo de los Foros
Cita:
- Ça c'est la caisse. Le mouton que tu veux est dedans.
Responder Con Cita
  #6  
Antiguo 23-11-2004
Avatar de marcoszorrilla
marcoszorrilla marcoszorrilla is offline
Capo
 
Registrado: may 2003
Ubicación: Cantabria - España
Posts: 11.221
Poder: 10
marcoszorrilla Va por buen camino
Por cierto en la unidad Math, también existen estás funciones:
Código Delphi [-]
 { Logorithmic functions }
 function LnXP1(X: Extended): Extended;   { Ln(X + 1), accurate for X near zero }
 function Log10(X: Extended): Extended;                     { Log base 10 of X}
 function Log2(X: Extended): Extended;                      { Log base 2 of X }
 function LogN(Base, X: Extended): Extended;                { Log base N of X }

Un Saludo.
__________________
Guía de Estilo de los Foros
Cita:
- Ça c'est la caisse. Le mouton que tu veux est dedans.
Responder Con Cita
  #7  
Antiguo 23-11-2004
DynaRoc DynaRoc is offline
Miembro
 
Registrado: nov 2004
Posts: 12
Poder: 0
DynaRoc Va por buen camino
madre mia si es pa matarme jajaja


gracias marcoszorrilla sugerir que valla mostrando todos los valores y así ver el error

pues no tiene más misterio aki me he ekivocao xDDD

rest_ci := -7.5*(Log10(un_canal));
Edit5.Text := FloatToStr(S_I_tipo + 2.0*(Smaxlimite - rest_ci - Smax)); // muestro el resultado en un textfiled.

normal -----> - - = +

solucion :

rest_ci := +7.5*(Log10(un_canal));

gracias de nuevo por las funciones jeje

saludos
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro


La franja horaria es GMT +2. Ahora son las 04:23:58.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi