Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Matriz como Paramentro de una funcion (https://www.clubdelphi.com/foros/showthread.php?t=92622)

ingel 12-12-2017 16:41:32

Matriz como Paramentro de una funcion
 
Buendia a todos , seguramente este preguntando algo muy simple pero no logro resolverlo ,
En Delfi 5 , necesito pasar un parametro como VAR a una funcion y tengo problema en la definicion de
la misma . Asi es como lo hice :

Funcion mifuncion(p1:string; VAR vITems : array[1..4] of array[1..5] of string ):string;

Pero cuando asigno un valor String a la matriz :

vITems[0,i]:= fieldbyname('CAMPO').asstring;

Me da error diciendome que STRING y CHAR son incompatibles ... pero la matriz la declare de String no CHAR !!

si asigno esto NO me da error:
vITems[0,i]:='A'


probé otras forma de declarar la matriz pero ninguna me funcionó...
Gracias
sds

ingel 12-12-2017 16:55:04

Perdon.. la declaracion de la funcion estaba asi
 
Function Mifuncion(p1:string ; VAR vITems : array of string ):string;

y en el procedimiento que la llama la matriz esta declarada localmente como :

VAR vDetalleItems : array [1..4,1..5] of string;

y el error lo da al COMPILAR :

[Error] Uutiles.pas(499): Incompatible types: 'Char' and 'String'

ecfisa 12-12-2017 17:06:15

Hola.

Un ejemplo base:
Código Delphi [-]
...
type
  TMatStr4x5 = array [1..4,1..5] of string;

function foo(p1:string; var mt : TMatStr4x5 ):string;
begin
  mt[1,1] := 'mt[1,1] = ' + p1;
  Result  := mt[1,1];
end;

Ejemplo de uso:
Código Delphi [-]
procedure TForm1.Button1Click(Sender: TObject);
var
  mt: TMatStr4x5;
  s : string;
begin
  s := foo('hola', mt);
  ShowMessage(s + #10 + mt[1,1]);
end;

Saludos :)

Pd.: Recuerda usar las etiquetas cuando incluyas código fuente.

cloayza 12-12-2017 17:13:34

Te sugiero este código:
Código Delphi [-]
type
  TMatrizString=array[1..4,1..5] Of string;

  TForm1 = class(TForm)
    Button1: TButton;
    Memo1: TMemo;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
    procedure MatrizCeros(var m:TMatrizString);
    procedure MatrizPrint(var m:TMatrizString);
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.MatrizCeros(var m:TMatrizString);
var
   i:Integer;
  j: Integer;
begin
     for i := 1 to 4 do
        for j := 1 to 5 do
            m[i,j]:='0';
end;

procedure TForm1.MatrizPrint(var m:TMatrizString);
var
   i:Integer;
  j: Integer;
begin
     Memo1.Lines.Clear;
     for i := 1 to 4 do
        for j := 1 to 5 do
            Memo1.Lines.Add(Format('m[%d,%d]=%s',[i,j, m[i,j]]));
end;


procedure TForm1.Button1Click(Sender: TObject);
var
   m:TMatrizString;
begin
     MatrizCeros(m);
     MatrizPrint(m);
end;

Saludos cordiales

ingel 12-12-2017 17:59:07

GENIAL !! Gracias a ambos !!
 
Solucionado... Muchas GRacias !!

cloayza 12-12-2017 19:11:42

:D:D:D

Cuando respondí no había ninguna respuesta...

No se le ocurra pensar Don Ecfisa, que fue un copy - paste...

Los meritos son suyos...así lo indica la hora...:mad:

Un abrazo

ecfisa 12-12-2017 20:00:40

Cita:

Empezado por cloayza (Mensaje 523353)
:D:D:D
...
Cuando respondí no había ninguna respuesta...
Los meritos son suyos...así lo indica la hora...

Ni lo menciones, eso me ha pasado montones de veces. Por otro lado, tu respuesta es mucho mas completa ^\||/

Saludos :)


La franja horaria es GMT +2. Ahora son las 21: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