RE:MATRICES parametros por referencia
Hola, creo que andas un poco perdido en con el paso de parámetros.
Cuando una matriz se pasa a una función, ésta SIEMPRE se pasa por REFERENCIA, ya que su nombre es un puntero a su primer elemento o lo que es lo mismo un puntero a la propia matiriz. y no es necesario utilizar el operador de dirección (&) para pasarla por referencia. Ahora el parametro formal, es decir, el parametro que recibe a la matriz debe ir acorde al tipo de matiz que se está pasando.
Si pasas una matriz unidimensional, podrías declararlo como:
- Un puntero
- Un vector delimitado ( matriz unidimensional)
- Un vector no limitado
Si pasas una matriz bidimensional, podrías declararlo como
- Un vector limitado de punteros.
- Una matriz bidimensional limitada (especificar ambos índices)
- Una matriz bidimensional limitada (especificar sólo segundo indice)
Bueno te pongo un ejemplo en C y estúdialo.
Salu2:
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
#include <conio.h> /* No Ansi C */
#define LIN 100 /* máximo número de lineas de texto */
#define LONG 255 /* máximo número de caracteres por linea de texto */
/* prototipos */
char menu( void );
int readText( char s[][LONG + 1] );
long printText( const char s[][LONG + 1], const int t );
/* la función main() comienza la ejecución del programa */
int main( void )
{
char texto[LIN][LONG + 1] = { "" }; /* iniciar todas las cadenas a nulo */
int t;
char opcion;
/* ciclo de control del programa */
while ( (opcion = menu()) != 'S' ) {
switch ( opcion ) {
case 'N':
t = readText( texto );
break;
case 'M':
printText( texto, t );
break;
default:
printf( "\n Opcion no valida\n\n" );
break;
}
printf( "\n\n\t PULSE UNA TECLA PARA IR AL MENU PRINCIPAL... " );
getch(); /* pausa */
}
return 0; /* indicar terminación exitosa */
} /* fin de main() */
/* IMPLEMENTACIÓN DE FUNCIONES */
/* devuelve la opción elegida por el usuario */
char menu( void )
{
char c;
system( "cls" );
printf( "\n (N) Nuevo texto" );
printf( "\n (M) Mostrar texto" );
printf( "\n (S) Salir\n" );
printf( "\n ?: " );
c = (char)toupper( getch() );
system( "cls" );
return c;
}
/* lee el texto y devuelve el número de lineas ingresadas */
int readText( char s[][LONG + 1] )
{
register int t;
printf( "\n Ingrese su texto (una linea en blanco para terminar):\n\n" );
s[0][0] = '\0'; /* iniciar la primera cadena a nulo */
for ( t = 0; t < LIN; ++t ) {
printf( "%2d: ", t );
gets( &s[t][0] );
/* salir en caso de linea en blanco */
if ( !s[t][0] ) break;
}
return t;
}
/* imprime el texto caracter a caracter, devuelve el número de caracteres impresos */
long printText( const char s[][LONG + 1], const int t )
{
register int i, j;
/* si el primer caracter del texto es nulo */
if ( !s[0][0] ) {
printf( "\n\t No hay texto que mostrar\n" );
return 0;
}
printf( "\n\t Su texto es:\n\t ===========\n\n" );
for ( i = 0; i < t; ++i ) {
printf( "%2d: ", i );
for ( j = 0; s[i][j]; ++j )
printf( "%c", s[i][j] );
printf( "\n" );
}
return i * j;
}