Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Problemilla de matematicas. (https://www.clubdelphi.com/foros/showthread.php?t=27094)

CRIS 11-11-2005 10:55:40

Problemilla con un calculo.
 
Hola chicos aqui tamos con un problema que ma surgido y no se como resolverlo, os explico.

Tengo label1 y label2 con este caption el label1 1:12:150 y 1:13:250 el label2, el formto es de minuto segundos milesimas, lo que necesito es que me compruebe si entre los dos label hay una diferencia de 2 minutos, si la hay que me devuelva un mensajito y si no la hay pues que me devuelva otro mensaje.

Espero haberme explicado con claridad, como siempre un saludo.CRIS.

Neftali [Germán.Estévez] 11-11-2005 11:45:03

Deberías decir en qué parte tienes el problema...
(1a) Primero deberías convertir los valores a DateTime (StrToDateTime)
(2a) Una vez tienes TDateTime hay una función llamada DecodeDateTime que te "trocea" un DateTime y te devuelve las horas, minutos, segundos y milésimas...

(1b) O directamente extraer cada una de las partes correspondientes a horas, minutos, segundos y milésimas (función Copy)

A partir de aquí es cuestión de un IF, una sencilla resta, sacar el mensaje.

CRIS 11-11-2005 13:17:54

Muchas gracias, voy a intentarlo a ver si soy capaz de hacerlo.

Salu2.CRIS.

roman 11-11-2005 15:20:42

Disculpen pero, esto ¿qué tiene que ver con matemáticas?

// Saludos

marcoszorrilla 11-11-2005 15:24:15

Hola Román, yo recuerdo un catedrático de matemáticas que tuve que contaba chistes muy buenos, pero nunca le pregunte la relación del humor y la cifra, por si acaso......

Jeje.

Un Saludo atemporal.

CRIS 11-11-2005 16:08:26

No se como hacerlo, gracias a los tres.

Salu2.CRIS.

roman 11-11-2005 16:20:08

Cita:

Empezado por CRIS
Tengo label1 y label2 con este caption el label1 1:12:150 y 1:13:250 el label2

Una pregunta. ¿De dónde obtienen estos valores las etiquetas? Yo creo que sería mejor que buscaras la diferencia de tiempos en los valores originales en lugar de basar tu código en elementos de la interfaz de usuario.

// Saludos

Neftali [Germán.Estévez] 11-11-2005 16:20:22

Cita:

Empezado por CRIS
No se como hacerlo

Me reitero en lo dicho antes. Dinos qué es lo que no saber hacer. Danos algo más de info...

¿No entiendes las funciones?
¿No sabes cómo usarlas?
¿Te dan error (y qué error te dan)?
¿No te dan error, pero no te funciona?

La verdad es que 4 palabras -del último mensaje- (sin contar las gracias y el saludo) es muy poca información.

CRIS 11-11-2005 17:38:19

Los datos los pillo de un fichero.ini que me bajo de internet, el label1 pilla el dato del ini y el label2 pilla el dato de un fichero de texto que esta encriptado, lo que necesito es comparar los dos tiempos y si es mayor de dos segundos que me devuelva un mensaje de, la vuelta rapida supera en dos segundos el record de la pista.

Neftali estas dos cosas son las que me ocurre ¿No entiend las funciones?
¿No se cómo usarlas?

pd. el saludo y las gracias nunca pueden faltar.

Salu2.CRIS.

CRIS 11-11-2005 18:38:03

Código Delphi [-]
procedure TForm1.SpeedButton1Click(Sender: TObject);
var recordpista,vueltarapida,Diferencia:TTime;
begin
recordpista:=StrToTime(label1.caption);
vueltarapida:=StrToTime(label2.caption);
Diferencia:=recordpista-vueltarapida;
label3.caption:=TimeToStr(Diferencia);
end;
end.

Hasta aqui llego chicos, pero me da horas minutos y segundos.

ContraVeneno 11-11-2005 19:33:56

Supongo que de "diferencia" tendrías que usar DecodeDateTime para obtener los segundos y luego una simple comparación para ver si es mayo o no a 2 segundos. DecodeDateTime viene muy bien explicado en la ayuda de delphi, presionando F1 sobre la palabra. O tal vez solo comparando Dierencia.

OSKR 11-11-2005 21:06:08

Código:

DecodeTime(StrToTime("00:"+label1->Caption),h1,m1,s1,ms1);
DecodeTime(StrToTime("00:"+label2->Caption),h1,m2,s2,ms2);
if( abs(((m1*60*1000+s1*1000+ms1)-(m2*60*1000+s2*1000+ms2))/(1000*60)) >= 2)
 //hay por lo menos 2 segundos de diferencia


Héctor Randolph 11-11-2005 23:14:03

Al menos en Delphi7 existe la función MinutesBetween, que devuelve la diferencia en minutos entre dos variables tipo TDateTime.

Cita:

Empezado por Ayuda de Delphi
MinutesBetween

Returns the number of minutes between two specified TDateTime values.

Unit

DateUtils

Category

date/time routines

Description

Call MinutesBetween to obtain the difference, in minutes, between two TDateTime values. MinutesBetween counts only entire minutes. Thus, MinutesBetween reports the difference between 9:00:00 AM and 9:00:59:999 AM as 0 because the difference is one millisecond short of an entire minute.

Un saludo

CRIS 12-11-2005 11:20:17

Solucionado bajando los tiempos en el ini en milisegundos:

Código Delphi [-]
procedure TForm1.SpeedButton1Click(Sender: TObject);
var
tiempo1:variant;
tiempo2:variant;
nValor,ErrCode:Integer;
begin
tiempo1:=edit2.text;
tiempo2:=edit3.Text;
diferenciavuelta.Text:= (tiempo2)-(tiempo1);
val(diferenciavuelta.Text,nValor,Errcode);
    if nValor > StrToInt('2000') then
    mensaje.Caption:='Vuelta Mala, 2 Seg +'
    else
    mensaje.Caption:='Vuelta Buena';
 if diferenciavuelta.Text='2000' then mensaje.Caption:='Vuelta Mala, 2 Seg +';

end;

end.

Muchas gracias a todos y un Salu2.CRIS.

Lepe 12-11-2005 12:25:27

CRIS, ten cuidado, ese código es "muy perezoso", y puedes tener muchos problemas con él. Deberías leer de nuevo las soluciones que te han propuesto.

Razones:

- Val intenta convertir el diferencia.Text en Nvalor, si no se puede convertir, Devuelve el ErrCode, que despues no lo usas para nada, El valor que tenga nvalor puede estar indefinido, o peor aún, será cero, indicando que ha hecho la mejor vuelta posible, cuando en realidad no es cierto.

- Estas realizando conversiones innecesarias:
if nValor > StrToInt('2000') :confused: quizás if nValor > 2000

- Que jamás se ejecute tu programa entre las 23:59:00 y las 0:00:00, como no controlas las fechas, dará casi 24 horas de diferencia.

Por tus mensajes, deduzco que tienes prisas en terminarlo. Para el reloj y estudia las funciones de fechas, vienen muy bien en la ayuda, y si despues tienes preguntas, estaremos por aquí.

saludos


La franja horaria es GMT +2. Ahora son las 09:20:36.

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