PDA

Ver la Versión Completa : Error Array TTime


shadowdark93
07-03-2017, 05:25:15
Hola gente que tal, estoy realizando una app que me permita calcular el tiempo de ejecucion de una accion repetitiva determinada en tiempo pero tengo algunos fallos ya que debo eliminar el valor maximo y el valor minimo contenido dentro del array max 20. Al menejar variables las cuales son de TTime no las puedo almacenar dentro del array o almenos poder mostrarlas, que debo hacer, agradezco su colaboracion.

Neftali [Germán.Estévez]
07-03-2017, 09:27:47
Al menejar variables las cuales son de TTime no las puedo almacenar dentro del array o almenos poder mostrarlas
¿Porqué no puedes almacenarlas en un array?
¿Porqué no puedes mostrarlas?
¿Qué te impide definir una variable como esta?


var
arr1:array of TTime;
arr2:array of Double; // equivalente


Te recomiendo que revises la guía de estilo (http://www.clubdelphi.com/foros/guiaestilo.php), en el apartado que habla de cómo formular las preguntas.

shadowdark93
07-03-2017, 23:15:31
cuando envio el dato del cronometro (now-horaInicial) para saber el tiempo exacto hago esto:

begin
// Convierte la cantidad conteos en c
c := strtoint(txtConteos.Text);
// Convierte i en formato string y pasa como parámetro con formato
i := FormatDateTime('hh.mm.ss.zzz', auxT);
// validar codigo
for x := 1 to c do
begin
vec[x] := auxT;
end;

ShowMessage(FormatDateTime('hh:mm:ss:zzz', vec[x]));

Timer1.Enabled := false;
Memo1.Lines.Add(FormatDateTime('hh:mm:ss:zzz',vec[x]));
Timer1.Enabled := true;


pero el resultado del es siempre 00:00:00:000 en el mensaje pero en el memo si es el dato correcto

AgustinOrtu
07-03-2017, 23:54:50
Que nivel de precision necesitas? Dias? Horas? Minutos? Los tipos TTime (http://docwiki.embarcadero.com/Libraries/en/System.TTime), TDate (http://docwiki.embarcadero.com/Libraries/en/System.TDate) y TDateTime (http://docwiki.embarcadero.com/Libraries/en/System.TDateTime) son en realidad alias de Double, y los numeros en coma flotante no son los mas adecuados para manejar precision, ya que se pueden perder digitos; aunque si son adecuados para manejar numeros "grandes"

Yo creo que lo mejor es utilizar enteros puros y luego "interpretarlos" como si fuesen milisegundos, segundos, minutos, o la unidad que te parezca.

Por lo general se utilizan enteros de 64 bits (UInt64, o Cardinal, que es un alias de UInt64 en Win32)

Hay soluciones ya hechas y funcionando en el lenguaje, dependiendo de tu version de Delphi, tenes la unidad System.Diagnostics (http://docwiki.embarcadero.com/Libraries/en/System.Diagnostics) la cual define una clase especial, TStopWatch (http://docwiki.embarcadero.com/Libraries/en/System.Diagnostics.TStopwatch)

Para versiones de Delphi mas antiguas, si buscas por el foro vas a encontrar una solucion que utiliza la API de Windows; este truco (https://www.clubdelphi.com/foros/showthread.php?t=89611) simplifica un poco las cosas y hay un ejemplo

Si tu objetivo es aprender y queres solucionar y entender porque no te anda (lo cual me parece barbaro) necesitamos que publiques mas codigo para poder ver que anda mal.

Te recomiendo que busques material en el foro sobre depuracion, que es muy util para este tipo de cosas. No solo te hace mejor programador, sino que te sirve para solucionar problemas "tontos" vos mismo

shadowdark93
08-03-2017, 00:31:24
bueno la verdad es que soy algo novato en el tema de programacion y mas en delphi, estoy utilizando Rad Studio Berlin pero no sabria con exactitud si estoy utilizando el tipo de dato correcto, ademas la aplicacion es para exportarla a android y no se si sirvan las librerias que me mencionas. voy a poner otro fragmento de codigo mas amplio para que entiendan mi caso.

https://drive.google.com/file/d/0By8w5Hru0B0NLXJod0ZGNkJtQUk/view?usp=sharing

Gracias por sus respuestas

AgustinOrtu
08-03-2017, 03:24:05
TStopwatch funciona en todas las plataformas

Creo que lo mejor es publicar el codigo directamente en el foro

shadowdark93
09-03-2017, 01:32:03
Amigos ya resolvi mi problema, de antemano quiero decirles a todas las personas que escribieron muchas gracias por sus aportes.