Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Sacar promedio de lista de números en un TMemo (https://www.clubdelphi.com/foros/showthread.php?t=86690)

Zmusera 17-09-2014 16:13:06

Sacar promedio de lista de números en un TMemo
 
Hola gente! Soy nueva, los vengo leyendo hace unas semanas porque empecé a trabajar en Delphi 7. Bueno ahora decidí unirme porque estoy haciendo un software y necesito su ayuda con algo que sinceramente no se me ocurre como hacer :confused:

Les explico de que va... Hay un TMemo donde yo cargo un archivo que contiene una lista de números así:
10 1654
12 4685
98 5432
(...)

Se supone que la primer columna son tensiones y la otra voltaje. Yo tengo que sacar el promedio de ambas y mostrarlo, obviamente. Pero el archivo es un .txt y digamos que las "columnas" solo están divididas por un espacio en blanco. ¿Cómo puedo hacer para sacar el promedio de cada "columna"? Gracias! :)

roman 17-09-2014 17:14:40

Un opción es que implementes un procedimiento o función para separar los dos núeros de cada línea y convertirlos a enteros. Por ejemplo ésta:

Código Delphi [-]
procedure Split(S: String; out A, B: Integer);
var
  I: Integer;

begin
  I := Pos(' ', S);
  A := StrToIntDef(Copy(S, 1, I - 1), 0);
  B := StrToIntDef(Copy(S, I + 1, Length(S)), 0);
end;

A este procedimiento le pasas cada línea del Memo y dos variables para guardar los resultados. Las sumas las acumulas en otras variables:

Código Delphi [-]
var
  SumaTension, SumaVoltaje: Integer;
  Tension, Voltaje: Integer;
  I: Integer;

begin
  SumaTension := 0;
  SumaVoltaje := 0;
 
  for I := 0 to Memo1.Lines.Count - 1 do
  begin
    Split(Memo1.Lines[i], Tension, Voltaje);
    SumaTension := SumaTension + Tension;
    SumaVoltaje := SumaVoltaje + Voltaje;
  end;
end;

Ya sólo tendrías que sacar el promedio ;)

// Saludos

Zmusera 18-09-2014 14:58:00

El split se crea? (nunca usé split) y el programa me dice que falta Result :confused:

Casimiro Notevi 18-09-2014 15:02:10

Cita:

Empezado por Zmusera (Mensaje 481698)
El split se crea? (nunca usé split) y el programa me dice que falta Result :confused:

Pon tu código que lo veamos ;)

Recuerda poner los tags al código fuente, ejemplo:



Gracias :)

Zmusera 18-09-2014 16:41:03

Aah nono ya está. Puse el procedure Split arriba de todo, claro, sino no me lo reconocía :o quedo así:

Código Delphi [-]
procedure Split(S: String; out D, E: Integer);
var
  I: Integer;

begin
  I := Pos(' ', S);
  D := StrToIntDef(Copy(S, 1, I - 1), 0);
  E := StrToIntDef(Copy(S, I + 1, Length(S)), 0);
end;

procedure TForm1.ArchivoClick(Sender: TObject);

var
i: integer;

begin
Detener1:= False;
SumaTension := 0;
SumaVoltaje := 0;

try
Archivo.enabled:=false;
detener.enabled:=true;

if OpenDialog1.Execute then

Lista.Lines.LoadFromFile(OpenDialog1.FileName);

   for i:= 0 to Lista.Lines.Count - 1 do
     begin
     Application.ProcessMessages;
     tiempo.caption := TimeToStr(Time);
     Split(Lista.Lines[i], Tension, Voltaje);
     SumaTension := SumaTension + Tension;
     SumaVoltaje := SumaVoltaje + Voltaje;
     A:=i;
          if detener1 then
           begin
           break;
           end;
     lista.Lines[i]:= lista.Lines[i] + '   ...    ' +tiempo.Caption;
     end;
     Detener.Enabled:=false;

    if (A=Lista.Lines.Count-1) then
     begin
    A:= A+1;
     PromedioT.caption:= 'El promedio de la tension es de: ' + FormatFloat('0.000',(SumaTension/A));
     PromedioV.caption:= 'El promedio del voltaje es de: ' + FormatFloat('0.000',(SumaVoltaje/A));
     end;

finally

end;
end;


procedure TForm1.DetenerClick(Sender: TObject);

begin

Detener1:=True ;
Reanudar.Enabled:=true;
Detener.Enabled:=false;
end;

procedure TForm1.ReanudarClick(Sender: TObject);
var
i: integer;

begin

   try
   reanudar.Enabled:=false;
   detener.Enabled:=true;
   detener1:=false;
 for i:= A to Lista.Lines.Count - 1 do
     begin
     Application.ProcessMessages;
          tiempo.caption := TimeToStr(Time);
          Split(Lista.Lines[i], Tension, Voltaje);
    SumaTension := SumaTension + Tension;
    SumaVoltaje := SumaVoltaje + Voltaje;
    A:=i ;
          if detener1 then
           begin

           break;
           end;
     lista.Lines[i]:= lista.Lines[i] + '   ...    ' +tiempo.Caption;
     if (A=Lista.Lines.Count -1) then
            begin
            Detener.Enabled:=false;
            Archivo.Enabled:=true;
            A:=A+1;
     PromedioT.caption:= 'El promedio de la tension es de: ' + FormatFloat('0.000',(SumaTension/A));
     PromedioV.caption:= 'El promedio del voltaje es de: ' + FormatFloat('0.000',(SumaVoltaje/A));
     end;
     end;
     detener.enabled:=false;

finally
end;
end;


end.

Gracias chicos! :D:D


La franja horaria es GMT +2. Ahora son las 13:42:35.

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