Pascal/Turbo Pascal - Puntero de matriz.. como?

 
Vista:

Puntero de matriz.. como?

Publicado por Dario (8 intervenciones) el 12/11/2002 20:26:27
Hola a todos,

tengo una consulta. En mi programa tengo una matriz de 9 x 9, y debo pasarla a una funcion que ordena los datos y luego la devuelve al programa principal. Como hago esto? Estuve viendo elemplos pero solo van sobre type record. (que todavia no estudie).
Yo pensaba que seria algo asi como se hace en C++ funcion(*puntero) pero me parece que es relativamente distino. Lo que me lama la atencion es que de todos los ejemplos que vi solo hablan de punteros de estructuras de typo record. A caso no se puede pasar una matriz a una funcion en Pascal?

Saludos,
Dario
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:Puntero de matriz.. como?

Publicado por Diego Romero (786 intervenciones) el 13/11/2002 01:48:52
No sé qué clase de textos has estado leyendo pero lo que pides es sumamente sencillo:

type
Tmatriz=Array[1..9,1..9] of integer;
var
Matriz:Tmatriz;

procedure Ordenar(var M:Tmatriz);
begin
{ Algoritmo de Ordenación Aquí }
end;

begin
{ ... Algun código de carga aquí }
Ordenar(Matriz);
{ ... }
end.

En Pascal a diferencia de C existen dos tipos de funciones, las que devuelven sí o sí un valor y las que no, respectivamente function Nombre(Parametro):Tipo_De_Valor_Devuelto; y Procedure nombre (parametro); o Procedure nombre(var parametro);
La palabra reservada Var significa que el paramero que sigue afecta a la variable que se le pasa como parámetro, es decir es un paso por referencia, en C sería como hacer nombre(*variable), sin Var el parámero no afecta a la variable, es decir es un parámetro que se pasa por valor.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Puntero de matriz.. como?

Publicado por Dario (8 intervenciones) el 13/11/2002 23:44:23
Hola Diego,

estuve leyendo textos que creo eran sobre pascal, digo "creo"porque estaban en holandes y no entiendo el 100%. :-)

Gracias por tu rspuesta, Ya habia llegado a esa conclusion. El tema es que siguiendo tu ejemplo, yo intentaba hacer algo asi.

type
Tmatriz=Array[1..9,1..9] of integer;
var
Matriz:Tmatriz;
caracter: char;

function Ordenar(var M:Tmatriz): char; {******aqui la diferencia *********}
var c: char;
begin
{ Algoritmo de Ordenación Aquí }
Ordenar:=c
end;

begin
{ ... Algun código de carga aquí }
caracter:=Ordenar(Matriz); { y llamar a la funcion asi}

porque en la variabele caracter tengo un indicador que me dice si tuvo problemas la funcion para ordenar la matrix (por si encontro datos no validos)
Pero creo que algo asi es ilegal en pascal, (no estoy seguro ¿me confirmas?) Igualmente no me es mucho problema agrandar na fila la matrix y meter por ahi ese indicador. Luego la ordeno en un procedure.

{ ... }

write('Saludos');
end.

Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Puntero de matriz.. como?

Publicado por Diego Romero (786 intervenciones) el 15/11/2002 20:19:44
El ejemplo tal y como tú lo expones es correcto (¿?).
Tal vez haya problemas dentro de tu algoritmo de ordenación.
De todas formas si el retorno de la function es solo para asignar a una variable, es decir, no usaras la function como parte de una expresión, puedes reemplazarla por una procedure de esta manera:

procedure Ordenar(var TMariz; var C:Char);
begin
{ Algoritmo de ordenación que modificará también el parámetro C }
end;

begin
Ordenar(Matriz, Caracter);
end.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Puntero de matriz.. como?

Publicado por Dario (8 intervenciones) el 15/11/2002 20:47:51
Gracias por la respuesta, al final lo resolvi de una forma no muy elegante, pero es bueno saber que lo de la funcion es correcto.

Ya tengo otra consulta... ahi va...

Saludos.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar