Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: leosansan en 23 Diciembre 2013, 17:15 pm



Título: Dudita: Inicializar matriz desde función sin punteros, si es posible.
Publicado por: leosansan en 23 Diciembre 2013, 17:15 pm
El tema está en que si declaro en main la matriz como está en la función todo va bien. Pero al intentar declararla sólo con sus dimensiones en main e intentar inicializarla desde la función no me sale.  :rolleyes:

Creo que como lo tengo en la función me estaré refiriendo al elemento 3,3 en lugar de a toda la matriz.

Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. void matriz_a_inicial (int a [][3]);
  5. int main (){
  6.    int a[3][3];
  7.    matriz_a_inicial (a);
  8.    return 0;
  9. }
  10.  
  11. void matriz_a_inicial (int  a [][3]){
  12.    a [3][3]={{1,2,3},{4,5,6},{7,8,9}};
  13. }
  14.  

Felices Navidades y Próspero Año Nuevo.

Saluditos! ..... !!!!


Título: Re: Dudita: crear matriz desde función sin punteros, si es posible.
Publicado por: amchacon en 23 Diciembre 2013, 17:55 pm
Es una sintaxis de inicialización no de asignación, el operador = no está definido en los arrays por lo que no puedes "reasignarlo in the way".

De hecho eso no es un array, puesto que los arrays no se pasan a las funciones, estas pasando un puntero char* al primer elemento.

Hay parches "chapuceros" como este:
Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. struct matriz
  4. {
  5.    char a[9];
  6. };
  7.  
  8. struct matriz matriz_a_inicial ();
  9.  
  10. int main ()
  11. {
  12.    struct matriz a;
  13.    a = matriz_a_inicial();
  14.    return 0;
  15. }
  16.  
  17. struct matriz matriz_a_inicial ()
  18. {
  19.    struct matriz a= {1,2,3,4,5,6,7,8,9};
  20.    return a;
  21. }

Si lo que quieres hacer es un mapa, quizás te convenga algo así:
Código
  1. typedef unsigned char Mapa[TAMANYOX][TAMANYOY+1];
  2.  
  3. void ElegirNivel(Mapa Nivel,short Eleccion)
  4. {
  5.  
  6.    Mapa Nivel1 =
  7.    {
  8.        {"XXXXXXXXXXXXXXXXXX"},
  9.        {"X                X"},
  10.        {"X                X"},
  11.        {"X      H         X"},
  12.        {"X                X"},
  13.        {"X                X"},
  14.        {"X                X"},
  15.        {"X                X"},
  16.        {"X                X"},
  17.        {"X                X"},
  18.        {"X                X"},
  19.        {"X                X"},
  20.        {"X                X"},
  21.        {"X                X"},
  22.        {"X  C     C    C  X"},
  23.        {"X                X"},
  24.        {"X                X"},
  25.        {"X                X"},
  26.        {"X                X"},
  27.        {"X                X"},
  28.        {"X                X"},
  29.        {"X  F     F    F  X"},
  30.        {"X                X"},
  31.        {"X                X"},
  32.        {"XXXXXXXXXXXXXXXXXX"}
  33.  
  34.    };
  35.  
  36.       Mapa Nivel2 =
  37.    {
  38.        {"XXXXXXXXXXXXXXXXXX"},
  39.        {"X                X"},
  40.        {"XH    C          X"},
  41.        {"X XXXXXX XXXXXXXXX"},
  42.        {"X        XXXXX   X"},
  43.        {"X      X C       X"},
  44.        {"X      X XXXXXX  X"},
  45.        {"X      X         X"},
  46.        {"X      X XXXXXX  X"},
  47.        {"XX XXXXXCXXXXXXXXX"},
  48.        {"X    C X X       X"},
  49.        {"X      X X       X"},
  50.        {"XXXX XXX X       X"},
  51.        {"X      X         X"},
  52.        {"X      X X    C  X"},
  53.        {"X  C   X X       X"},
  54.        {"X      X X XXXXXXX"},
  55.        {"X      X X       X"},
  56.        {"X      X X       X"},
  57.        {"XXXXXXXX XXXXXXX X"},
  58.        {"XFF              X"},
  59.        {"XFF      CC      X"},
  60.        {"XFF              X"},
  61.        {"XFF              X"},
  62.        {"XXXXXXXXXXXXXXXXXX"}
  63.    };
  64.  
  65.   switch(Eleccion)
  66.    {
  67.    case 1:
  68.        TraspasarMapas(Nivel1,Nivel);
  69.        break;
  70.  
  71.    case 2:
  72.        TraspasarMapas(Nivel2,Nivel);
  73.        break;
  74. }
  75.  
  76. void TraspasarMapas(Mapa Nivel,Mapa Objetivo)
  77. {
  78.    for (int j = 0; j < TAMANYOY; j++)
  79.        for (int i = 0; i < TAMANYOX; i++)
  80.            Objetivo[i][j] = Nivel[i][j];
  81. }
  82.  
  83.  

O cargarlo desde un fichero externo.

Citar
Creo que como lo tengo en la función me estaré refiriendo al elemento 3,3 en lugar de a toda la matriz.
Que además no existe porque es una matriz de 3x3  :silbar:


Título: Re: Dudita: crear matriz desde función sin punteros, si es posible.
Publicado por: leosansan en 23 Diciembre 2013, 18:47 pm
Es una sintaxis de inicialización no de asignación, el operador = no está definido en los arrays por lo que no puedes "reasignarlo in the way".

De hecho eso no es un array, puesto que los arrays no se pasan a las funciones, estas pasando un puntero char* al primer elemento.
......................................................
O cargarlo desde un fichero externo.
...................................................

Creo que esa sería la solución óptima. Pero para el caso que me ocupa, al necesitar solamente en dos ocasiones la matriz original, creo que optaré por hacer una copia de la misma.

Gracias por los puntos de vista que me has aportado.
;-) ;-) ;-)

Felices Navidades y Próspero Año Nuevo.

Saluditos! ..... !!!!