PDA

Ver la Versión Completa : Matriz como Paramentro de una funcion


ingel
12-12-2017, 16:41:32
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
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:

...
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:

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:

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
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
: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 :)