[ Foro de Pascal ]

Parametros en procedimientos y funciones

16-Apr-2008 18:58
Roberto Elizo
10 Respuestas

Hola,

Mi duda es puedo pasar como argumentos a un procedimiento dos parametros de distinto tipo?

coloca(tablero,barco); asi llamo al procedimiento

procedure coloca (var tablero:TMatriz, barco:string); y este es el procedimiento

a mi eso me da error, se que se pueden pasar varios parametros pero en todos los ejemplos que he encontrado siempre son parametros del mismo tipo.

16-Apr-2008 20:37
MyName1 MySurname1

Sí, sí se pueden pasar como argumentos a un procedimiento dos parámetros de distinto tipo.

Te aclaro, probablemente eso te de error porque en PASCAL, tras pasar como parámetro a una función o procedimiento una variable, si la siguiente que vas a pasar es de tipo distinto, debes separarlo por un punto y coma, no con una sola coma, como haces ahí.

De tal modo que si lo que tu tienes es: procedure nombre (var variable:tipo1, variable:tipo2);

Tendrías que corregirlo y hacerlo del modo: procedure nombre (var variable:tipo1; variable:tipo2);

Por tanto, tu procedimiento quedaría:

procedure coloca (var tablero:TMatriz; barco:string);

Saludos y suerte!.

David.

16-Apr-2008 21:46
Roberto Elizo

Hola David,

Gracias por el interes efectivamente se hace asi pero ahora el problema es la llamada a la funcion que me sigue dando error

coloca (tablero, barco);

haciendo esta llamada me da error, probe separando x ; xDD pero no cuela.

procedure coloca (var tablero:TMatriz; barco:string);

esta parte poniendo punto y coma no da error

17-Apr-2008 00:52
MyName1 MySurname1

Con respecto a ese error. Me gustaría saber qué te dice el compilador cuando te da el error. Es decir, ¿qué mensaje te da?. Ya que podrían ser diversas causas.

Saludos.

17-Apr-2008 01:19
Nacho Cabanes (+84)

Como dice David, sin más detalles no podemos saber el fallo. Aun así, hay dos motivos muy habituales:

- No haber declarado alguna de las variables que intentas pasar como parámetro.

- Haberlas declarado pero que en alguna no coincida el tipo de datos que has declarado con el tipo de datos del parámetro.


17-Apr-2008 15:00
Roberto Elizo

Hola de nuevo el error es este:

"Each undeclared identifier is reported only once for each routine it appears in."

Las variables si estan declaradas y con el tipo correcto

var barco:string;
var tablero:TMatriz;

procedure coloca (var tablero:TMatriz; barco:string)

Lo uniko ke se me ocurre que podia ser problema es ke la variable barco esta declara dentro del procedimiento y tablero es una variable del main osea del programa principal, pero segun pienso io no deberia de haber ningun problema ya que a la segunda funcion "coloca" la llamo desde el procedimiento "crea" que es dnd esta declara la variable barcos.

PRINCIPAL --- pasa tablero a ---> CREA --- pasa tablero y barco a ---> COLOCA

- tablero esta declarada en principal
- barco esta declarada en crea

Espero haberme explikado bien


17-Apr-2008 15:01
Roberto Elizo

Hola de nuevo el error es este:

"Each undeclared identifier is reported only once for each routine it appears in."

Las variables si estan declaradas y con el tipo correcto

var barco:string;
var tablero:TMatriz;

procedure coloca (var tablero:TMatriz; barco:string)

Lo uniko ke se me ocurre que podia ser problema es ke la variable barco esta declara dentro del procedimiento y tablero es una variable del main osea del programa principal, pero segun pienso io no deberia de haber ningun problema ya que a la segunda funcion "coloca" la llamo desde el procedimiento "crea" que es dnd esta declara la variable barcos.

PRINCIPAL --- pasa tablero a ---> CREA --- pasa tablero y barco a ---> COLOCA

- tablero esta declarada en principal
- barco esta declarada en crea

Espero haberme explikado bien


18-Apr-2008 09:33
Nacho Cabanes (+84)

Decididamente, no has declarado una variable o un tipo de datos:

"Each undeclared identifier ..."

Basta con que mires qué hay en la línea que contiene ese error (dices el tipo de error que te da, pero no en qué linea, ni que identificador no has declarado). Por ejemplo, ¿has declarado el tipo TMatriz?

Esta línea no debería ser problema (salvo por TMatriz):
procedure coloca (var tablero:TMatriz; barco:string)

Esta llamada es más fácil que de problemas:
coloca(tablero,barco);

si no has definido ANTES el procedimiento coloca, o si no has declarado ANTES las variables tablero o barco.





18-Apr-2008 14:56
Roberto Elizo

Ya esta resuelto el problema era que el procedimiento coloca iba despues del que le llamaba, como tu me dijiste puse el procedimiento coloca antes del que lo llamaba y funciono.

Gracias Nacho.

18-Apr-2008 15:35
MyName1 MySurname1

Igualmente creo que había alguna manera, no sé si era 'Forward' o algo así, de hacerle entender al compilador que esa función estaría declarada más abajo. Permitiéndote llamarla antes de declararla.

Pero no estoy seguro.

Saludos.


21-Apr-2008 01:28
Nacho Cabanes (+84)

Efectivamente, puedes decir "ya declararé esta función más adelante" usando "forward", así:

procedure coloca (var tablero:TMatriz, barco:string); forward;

A partir de ese punto, el compilador ya sabe que existe un procedimiento llamado "coloca" y que debe recibir un parámetro string y otro TMatriz, así que no protestará diciendo que no sabe de qué le hablas.

Tú continúas el resto de declaraciones y más adelante ya indicas "realmente" cómo es ese procedure "coloca".






(No se puede continuar esta discusión porque tiene más de dos meses de antigüedad. Si tienes dudas parecidas, abre un nuevo hilo.)