Ver Mensaje Individual
  #18  
Antiguo 15-01-2012
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Reputación: 36
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 RadamantiS.

No me queda bién en claro si deseas cambiar los valores de las variables máximo y mínimo, en cuyo caso es tan simple como:
Código Delphi [-]
var
  aux: Integer;
begin
  aux:= Minimo;
  Minimo:= Maximo;
  Maximo:= aux;
  ...
o deseas que intercambien las posiciciones dentro de la matriz. Si este último es el caso, te hice un ejemplo muy simple para que te sirva de guía:
Código Delphi [-]
program Project1; {$APPTYPE CONSOLE}

uses
  SysUtils, Types;

const
  MAX_FIL = 5;
  MAX_COL = 5;

type
  TMatrix = array[1..MAX_FIL, 1..MAX_COL] of Integer;

(* Carga valores aleatorios *)
procedure LoadMatrix(var mat: TMatrix);
var
  f,c: Integer;
begin
  Randomize;
  for f:= 1 to 5 do
   for c:= 1 to 5 do
     mat[f,c]:= Random(100);
end;

(* Mostrar valores de matriz *)
procedure ShowMatrix(Mat: TMatrix);
var
  f,c: Integer;
begin
  Randomize;
  for f:= 1 to 5 do
  begin
    for c:= 1 to 5 do
      Write(mat[f,c]:3);
    writeln;
  end;
end;

(* devuelve posiciones de valores mínimo y máximo en Result *)
function MaxMinValues(Mat: TMatrix; var Mayor, Menor:integer): TRect; 
var
  f, c: Integer;
begin
  Mayor:= mat[1,1];
  Menor:= mat[1,1];
  for f:= 1 to  MAX_FIL do
    for c:= 1 to MAX_COL do
      if mat[f,c] < Menor then
      begin
        Menor:= Mat[f,c];
        Result.Left:= f;   // fila valor mínimo
        Result.Top:= c;  //  columna valor mínimo
      end
      else if Mat[f,c] > Mayor then
      begin
        Mayor:= Mat[f,c];
        Result.Right:= f;    // fila valor máximo
        Result.Bottom:= c; // columna valor máximo
      end;
end;

(* Intercambia posiciones de valores mínimo y máximo *)
procedure SwapValues(var Mat: TMatrix; T: TRect);
var
  aux: Integer;
begin
  aux:= Mat[T.Left,T.Top];
  Mat[T.Left,T.Top]:= Mat[T.Right, T.Bottom];
  Mat[T.Right, T.Bottom]:= aux;
end;

(* main *)
var
  May, Min: Integer;
  Mat: TMatrix;
  T: TRect;
begin
  LoadMatrix(Mat);
  Writeln('Carga inicial:');
  ShowMatrix(Mat);
  T:= MaxMinValues(Mat, May, Min);
  writeln (#10,'Menor elemento: ',Min,' Mayor elemento: ',May,#10);
  Writeln('Valores intercambiados');
  SwapValues(Mat, T);
  ShowMatrix(Mat);
  Readln;
end.
Ahora bién, hay que tomar en cuenta que al cargarse de forma aleatoria puede haber repetición de valores. Es decir que si en la matriz tenemos duplicados los valores mínimos y máximos posibles (en el ejemplo 0 y 99), sólo se hará un intercambio.


Un saludo.

Edito: Dos comentarios, no olvides incluir Types en la cláusula uses. La función MaxMinValues bién podría prescindir de los argumentos por referencia Mayor y Menor, pero los dejé por si necesitas utilizar su valor en otra parte del programa.
__________________
Daniel Didriksen

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

Última edición por ecfisa fecha: 15-01-2012 a las 19:36:07.
Responder Con Cita