Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   [Delphi] Matriz, encontrar el menor de cada fila. (https://www.clubdelphi.com/foros/showthread.php?t=88150)

franco_cvm 19-04-2015 00:34:58

[Delphi] Matriz, encontrar el menor de cada fila.
 
Hola, tengo una matriz de m*n y, como dice el titulo, me pide encontrar el numero menor de cada fila.

Lo intente hacer, use dos botones (por las dudas de que con uno no me deje), al apretar el primero me carga valores en un stringgrid, el segundo boton, es para que en un memo me muestre el valor mas chico de cada fila, pero el segundo boton no anda.

aca el codigo:
Código Delphi [-]
const
n=10;
m=6;
type
Tmatriz= array [1..n, 1..m] of integer;
var
matriz:Tmatriz;

procedure TForm1.Button1Click(Sender: TObject);
var
i,j: integer;
begin

 for i:= 1 to n do
  begin
   for j:= 1 to m do
    begin
     matriz[i,j]:= random(99)+1;
    end;
  end;
 for i:= 1 to n do
  begin
   for j:=1 to m do
    begin
     Stringgrid1.Cells [i,0]:= IntToStr(i);
     Stringgrid1.Cells [0,j]:= IntToStr(j);
     Stringgrid1.Cells [i,j]:= IntToStr(matriz[i,j]);
    end;
  end;

end;

procedure TForm1.Button2Click(Sender: TObject);
var
i,j:integer;
menor:string;
begin
menor:= Stringgrid1.Cells [1,1];
 memo1.clear;
 for j:= 1 to m do
  begin
   for i:= 1 to n do
    begin
     if Stringgrid1.Cells [i,j] < menor then
     menor:=Stringgrid1.Cells [i,j];
    end;
    memo1.Lines.Add(menor);
  end;

end;

Quisiera que me digan por que mi razonamiento en el boton2 esta mal,si se puede hacer todo en un solo boton, y la manera en que funciona un For dentro de otro For.

saludos, MUCHAS GRACIAS!! :)

ecfisa 19-04-2015 02:26:12

Hola franco_cvm
Cita:

Empezado por franco_cvm (Mensaje 491516)
Quisiera que me digan por que mi razonamiento en el boton2 esta mal

Por que tomas un mínimo antes de entrar a los ciclos, cuando tendrías que hacerlo una vez por cada fila. Te hice un código de ejemplo comentado para que puedas analizarlo:
Código Delphi [-]
const
  MAX_COL = 10;
  MAX_ROW =  6;

type
  TMatriz = array [1..MAX_COL, 1..MAX_ROW] of Integer;

var
  Matriz: TMatriz;

procedure TForm1.FormCreate(Sender: TObject);
var
  c, r : Integer;
begin
  // inicializar el generador aleatorio
  Randomize();
  // darle al StringGrid el espacio necesario para visualizar
  StringGrid1.ColCount := MAX_COL;
  StringGrid1.RowCount := MAX_ROW;
  // carga
  for r := 1 to MAX_ROW do
   for c := 1 to MAX_COL do
   begin
     Matriz[c, r] := Random(99) + 1;
     StringGrid1.Cells[c-1, r-1] := IntToStr(Matriz[c, r]); // visualizar
   end;
  Memo1.Clear; // limpiar memo
end;

procedure TForm1.Button1Click(Sender: TObject);
var
  c, r, Minimo: Integer;
begin
  for r := 1 to MAX_ROW do    // recorrer las filas
  begin
    Minimo := Matriz[1, r];   // Minimo es la 1er columna
    for c := 2 to MAX_COL do  // recorrer desde la 2da col. hasta la última
      if Matriz[c, r] < Minimo then   // si Matriz[c, r] menor a Minimo,
        Minimo := Matriz[c, r];       // Matriz[c, r] es ahora el minimo
    Memo1.Lines.Add(IntToStr(Minimo));// mostrar
  end;
end;

Saludos :)

franco_cvm 19-04-2015 03:03:50

Muchas gracias chee ^\||/
mi profesor me explico algo de que con f8 te corria el programa linea por linea y te va mostrando lo que pasa, pero no lo puedo hacer...¿tenes alguna idea?
Cita:

Empezado por ecfisa (Mensaje 491519)
Hola franco_cvm

Por que tomas un mínimo antes de entrar a los ciclos, cuando tendrías que hacerlo una vez por cada fila. Te hice un código de ejemplo comentado para que puedas analizarlo:
Código Delphi [-]
const
  MAX_COL = 10;
  MAX_ROW =  6;

type
  TMatriz = array [1..MAX_COL, 1..MAX_ROW] of Integer;

var
  Matriz: TMatriz;

procedure TForm1.FormCreate(Sender: TObject);
var
  c, r : Integer;
begin
  // inicializar el generador aleatorio
  Randomize();
  // darle al StringGrid el espacio necesario para visualizar
  StringGrid1.ColCount := MAX_COL;
  StringGrid1.RowCount := MAX_ROW;
  // carga
  for r := 1 to MAX_ROW do
   for c := 1 to MAX_COL do
   begin
     Matriz[c, r] := Random(99) + 1;
     StringGrid1.Cells[c-1, r-1] := IntToStr(Matriz[c, r]); // visualizar
   end;
  Memo1.Clear; // limpiar memo
end;

procedure TForm1.Button1Click(Sender: TObject);
var
  c, r, Minimo: Integer;
begin
  for r := 1 to MAX_ROW do    // recorrer las filas
  begin
    Minimo := Matriz[1, r];   // Minimo es la 1er columna
    for c := 2 to MAX_COL do  // recorrer desde la 2da col. hasta la última
      if Matriz[c, r] < Minimo then   // si Matriz[c, r] menor a Minimo,
        Minimo := Matriz[c, r];       // Matriz[c, r] es ahora el minimo
    Memo1.Lines.Add(IntToStr(Minimo));// mostrar
  end;
end;

Saludos :)


franco_cvm 19-04-2015 03:07:25

Cita:

Empezado por franco_cvm (Mensaje 491520)
Muchas gracias chee ^\||/
mi profesor me explico algo de que con f8 te corria el programa linea por linea y te va mostrando lo que pasa, pero no lo puedo hacer...¿tenes alguna idea?

ya pude, ya pude..muchas graciass


La franja horaria es GMT +2. Ahora son las 22:53:44.

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