Club Delphi  
    Paypal   FTP   CCD     Buscar   Trucos   Trabajo   Foros

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

Coloboración Paypal con ClubDelphi

 
 
Herramientas Buscar en Tema Desplegado
  #9  
Antiguo 13-02-2011
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 38
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola JLMN22.

Estuve mirando tu código y dos motivos causan tus errores.

(Error de conversión)
Si lees la propiedad Cells de TStringGrid, verás que no es: [Fila, Columna], sino:[Columna, Fila].
Cuando haces:
Código Delphi [-]
  for renglones:=0 to 3 do 
    for columnas:=0 to 2 do 
      totsuc[renglones]:=totsuc[renglones]+
          strtofloat(stringgrid1.Cells[renglones,columnas]);
y la variable 'renglones' alcanza el valor 3, es lógico que allí haya un espacio vacío por que esa es la posición de los meses y estos sólo tendrían que alcanzar el valor 2. Ojalá hubiesen sido 4 meses...

Entonces lo correcto sería:
Código Delphi [-]
 for renglones:=0 to 3 do 
    for columnas:=0 to 2 do 
      totsuc[renglones]:=totsuc[renglones]+
          strtofloat(stringgrid1.Cells[columnas, renglones]);

Ahora tenés otro error, que lógicamente aún no has podido descubrir...
Si miramos la declaración de los arreglos
Código Delphi [-]
var
 totsuc: array [1..4] of real;
 promsuc: array [1..4] of real;
 totmes: array [1..3] of real;
 prommes: array [1..3] of real;
y los valores en que inician y finalizan los for, no nos dan las cuentas...
Empiezan en una posición inexistente(0) y terminan una posición antes(3) como por ejemplo: totsuc. Cuando recorremos los arreglos tenemos que sumar 1 tanto a filas como a columnas.

Bueno, resumiendo:
Código Delphi [-]
procedure TForm1.CalcularClick(Sender: TObject);
var
  totsuc: array [1..4] of real;
  promsuc: array [1..4] of real;
  totmes: array [1..3] of real;
  prommes: array [1..3] of real;
  Suc, Mes:integer;
  Aux: Double;
begin
  for Suc:= 0 to 3 do
   for Mes:= 0 to 2 do
     if TryStrToFloat(StringGrid1.Cells[Mes,Suc],Aux) then
       totsuc[Suc+1]:= totsuc[Suc+1] + Aux
     else
     begin
       ShowMessage(Format('Error: Sucursal: %d, Mes: %d',[Suc+1,Mes+1]));
       StringGrid1.Col:= Mes;  // Posicionar en la celda,
       StringGrid1.Row:= Suc; // donde se produjo el error
       Exit; // Salir
     end;

  for Suc:= 0 to 3 do
    promsuc[Suc+1]:= totsuc[Suc+1]/3;

  for Suc:= 0 to 3 do
    for Mes:= 0 to 2 do // TryStrToFloat no es necesario, ya se controló arriba
       totmes[Mes+1]:= totmes[Mes+1]+StrToFloat(StringGrid1.Cells[Mes, Suc]);

  for Mes:= 0 to 2 do
   prommes[Mes+1]:=totmes[Mes+1]/4;

  for Suc := 0 to 3 do
  begin
    listbox1.Items.Add(floattostr(totsuc[Suc+1]));
    listbox1.Items.Add(floattostr(promsuc[Suc+1]));
  end;

  for Mes := 0 to 2 do
  begin
    listbox3.Items.Add(floattostr(totmes[Mes+1]));
    listbox4.Items.Add(floattostr(prommes[Mes+1]))
  end;
end;

Para evitar posibles errores de conversión en el ingreso de los valores, use la función TryStrToFloat, informando sucursal y mes en que se produjo en tal caso.

Otra cosa, el begin / end es innecesario cuando hay una sola instrucción, lo único que logra es oscurecer el código.

No comprobé si el resultado concuerda con la lógica del algorítmo, eso lo dejo a tu buen criterio...


Un saludo.
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....

Última edición por ecfisa fecha: 13-02-2011 a las 12:26:48.
Responder Con Cita
 



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

Temas Similares
Tema Autor Foro Respuestas Último mensaje
como comparar cada linea de un componente Memo1 con un componente ListBox1 soma25 C++ Builder 1 31-10-2007 10:02:22
Componente VCL a OCX Pook OOP 4 27-04-2006 10:27:24
Componente chalys Varios 1 20-10-2005 08:11:47
Componente mes carlomagno OOP 1 23-08-2004 23:15:29
Apuntar una propiedad de un componente a otra de otro componente Majo Varios 10 24-03-2004 19:46:39


La franja horaria es GMT +2. Ahora son las 16:46:16.


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