Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   OOP (https://www.clubdelphi.com/foros/forumdisplay.php?f=5)
-   -   Array de dimensiones (https://www.clubdelphi.com/foros/showthread.php?t=72038)

JLMN22 25-01-2011 12:22:01

Array de dimensiones
 
Estoy viendo los vectores en delphi, y tengo problemas con los de 2 dimensiones.

El ejercicio es que tengo que poner en un cuadro de 3 por 4 con un array de 2 dimensiones los ingresos de 4 sucursales durante 3 meses.

Despues de eso, tengo que hacer la suma por sucursal y por meses.

Me he quedado en el de insertar, he visto el codigo una y otra vez y sigo sin encontrar el fallo.

os dejo el codigo:
Código Delphi [-]
var
  Form1: TForm1;
  datos: array[1..3,1..4] of integer;
  ren:integer=1;
  col:integer=1;

implementation 
{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin

end;

procedure TForm1.InsertarClick(Sender: TObject);
var 
  temp:string;
begin
  datos[ren,col]:= strtoint(edit1.Text);
  col:= col+1;
  edit1.Text:= ' ';
  temp:= temp+inttostr(datos[ren,col]);
  listbox1.Items.Add(temp);
  if (col=5) then   
  begin
    ren:=ren+1; 
    col:=1;
  end;
  if (ren=4) then 
  begin
    showmessage('Lista llena');
  end;
  edit1.Visible:=false;
end;

end.

Aleca 25-01-2011 15:35:29

Código Delphi [-]
var
  Form1: TForm1;
  datos: array[1..3,1..4] of integer;
  ren:integer=1;col:integer=1;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin

end;

procedure TForm1.InsertarClick(Sender: TObject);
var 
  temp:string;
begin
  col := col + 1;
  if (col=5) then   
  begin
     ren:=ren+1; 
     col:=1;
  end;
   
  if (ren=4) then 
  begin
     showmessage('Lista llena'); 
     edit1.Visible:=false;
  end
  else
    datos[ren,col]:=strtoint(edit1.Text);
 
  edit1.Text := ' ';
  temp := temp+inttostr(datos[ren,col]);
  listbox1.Items.Add(temp);
end;

end.
Creo q seria algo asi. :)
PD: hay q leer la guia de estilo.

Chris 25-01-2011 16:13:27

Falta información!
 
Falta información!
Cuál es el error que te da tu código?

JLMN22 26-01-2011 11:51:21

Cita:

Empezado por Chris (Mensaje 388729)
Falta información!
Cuál es el error que te da tu código?

Cuando pongo mi codigo, en la lista pone 0 no el valor que le he metido al edit.

He metido el codigo que me ha dejado una persona del foro, y lo que hace es meter en forma de columa datos, es decir, que no lo hace como un cuadro.

Aleca 26-01-2011 12:04:25

Cita:

Empezado por JLMN22 (Mensaje 388872)
Cuando pongo mi codigo, en la lista pone 0 no el valor que le he metido al edit.

He metido el codigo que me ha dejado una persona del foro, y lo que hace es meter en forma de columa datos, es decir, que no lo hace como un cuadro.

1) te pone 0 porque lo blanqueas antes de cargarlo a lista.
2) tenes que invertir los if para llenarlo por fila y sumar x col en vez de ren

:)

JLMN22 01-02-2011 12:17:19

Sigo igual
 
El programa lo que hace es rellenar por filas y lo hace indefinidamente no por columnas, dejo el codigo nuevamente.

Código Delphi [-]
var
  temp:string;
begin
  datos[ren,col]:=strtoint(edit1.Text);
  edit1.Text:=' ';
  temp:=temp+inttostr(datos[ren,col]);
  listbox1.Items.Add(temp);
  col:=col+1;
  if (col=5) then
  begin
    ren:=ren+1; 
    col:=1;
  end;
  if (ren=4) then
  begin
    showmessage('Lista llena');
    edit1.Visible:=false;
  end;
end;
end.

ecfisa 01-02-2011 19:37:31

Hola JLMN22.

Por favor, encierra el código entre las etiquetas [delphi] y [/delphi] , ya que facilita la lectura del mismo.

Te aconsejo leer el manual de etiquetas vB.

Saludos.

ecfisa 01-02-2011 21:46:25

Me parece que un ListBox no es el componente más adecuado para mostrar una matríz, un StringGrid es más apropiado, es más,
hace innecesaria la declaración del arreglo bidimensional 'datos'.
El código que te adjunto conserva el array por si lo exige el ejercicio. No hace ninguna comprobación en las conversiones.

Código Delphi [-]
...
const
   MESES = 3;
   SUCURSALES = 4;
var
  Form1: TForm1;
  datos: array[1..MESES,1..SUCURSALES] of Double;
  fil: Integer=1;
  col: Integer=1;
 
implementation 

procedure TForm1.FormShow(Sender: TObject);
var
  i: Integer;
begin
  StringGrid1.FixedCols:= 1;
  StringGrid1.FixedRows:= 1;
  StringGrid1.ColCount:= SUCURSALES + 2;
  StringGrid1.RowCount:= MESES + 2;
  for i:= 1 to MESES do
   StringGrid1.Cells[0,i]:= 'Mes '+FloatToStr(i);
  StringGrid1.Cells[0,MESES+1]:= 'Tot mes';
  for i:= 1 to SUCURSALES do
   StringGrid1.Cells[i,0]:= 'Suc '+FloatToStr(i);
  StringGrid1.Cells[SUCURSALES+1,0]:= 'Tot suc';
end;

procedure TForm1.CalcularTotales;
var
  i,j: Integer;
  t: Double;
begin
  for i:= 1 to MESES do
  begin
    t:= 0;
    for j:= 1 to SUCURSALES do
      t:= t + datos[i,j];
    StringGrid1.Cells[SUCURSALES+1,i]:= FloatToStr(t);
  end;
  for i:= 1 to SUCURSALES do
  begin
    t:= 0;
    for j:= 1 to MESES do
      t:= t + datos[j,i];
    StringGrid1.Cells[i,MESES+1]:= FloatToStr(t);
  end;
end;

procedure TForm1.InsertaClick(Sender: TObject);
begin
  if col > SUCURSALES then
  begin
    CalcularTotales;
    showmessage('Ingreso completado');
  end
  else
  begin
    datos[fil,col]:= StrToFloat(Edit1.Text);
    StringGrid1.Cells[col,fil]:= Edit1.Text;
    if (fil = MESES) then
    begin
      fil:= 0;
      Inc(Col);
    end;
    Inc(fil);
  end;
end;
...

Un saludo.


La franja horaria es GMT +2. Ahora son las 04:29:34.

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