elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado:


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Intercambiar elementos de lugar en una matriz
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Intercambiar elementos de lugar en una matriz  (Leído 8,484 veces)
binaryum

Desconectado Desconectado

Mensajes: 6


Ver Perfil
Intercambiar elementos de lugar en una matriz
« en: 25 Julio 2010, 06:42 am »

Hola que tal , pues mi duda es esa tengo que hacer un "puzzle" de numeros para que el usuario los ordene en forma creciente y el espacio en blanco quede en la esquina inferior derecha ...

Esto es lo que llevo hasta ahora .

Esta hecho en Dev c++ , pero es C .

Código
  1.  
  2. #include <stdio.h>
  3. #include <conio.h>
  4. #include <stdlib.h>
  5. #include <time.h>
  6. #define  TAM 12
  7. void ordenado (int,int,int M[TAM][TAM]);
  8. void desordenar (int,int,int M[TAM][TAM]);
  9. void jugar (int,int,int M[TAM][TAM]);
  10. main ()
  11. {
  12.  int u=0;
  13.  int i,x,a=1,menu;
  14.  int M[TAM][TAM];
  15.  int columnas,filas;
  16.  
  17.  do
  18.  {
  19.  printf ("Introduzca las filas de la matriz:  ");
  20.  scanf  ("%d",&filas);
  21.  if(filas<3 || filas>12)
  22.        {
  23.            printf("\nError. El orden debe estar entre 3 y 12");
  24.            getch();
  25.            system("cls");
  26.        }
  27.  }
  28.  while (filas<3 || filas>12);
  29.  
  30.  do
  31.  {
  32.  printf ("\nIntroduzca las columnas de la matriz: ");
  33.  scanf  ("%d",&columnas);
  34.    if(columnas<3 || columnas>12)
  35.    {
  36.            printf("\nError. El orden debe estar entre 3 y 12");
  37.            getch();
  38.            system("cls");
  39.        }
  40.  }
  41.  while (columnas<3 || columnas >12);
  42.  
  43.  
  44. ordenado (filas,columnas,M);
  45.    printf ("\n\n");
  46.    desordenar (filas,columnas,M);
  47.    jugar (filas,columnas,M);
  48.  
  49.  
  50. getch ();
  51. }
  52. //-------------------------------------------------------------------------------
  53. void ordenado (int filas,int columnas, int M[TAM][TAM])
  54. {
  55.   int i,x,a=1;;
  56.  for (i=0;i<filas;i++)
  57.    {
  58.  for (x=0;x<columnas;x++)  
  59. {  
  60.                if ((i==filas-1) && (x==columnas-1))
  61. {
  62.  M[i][x]=0;      
  63.        }
  64.        else
  65. {
  66.                  M[i][x]=a;
  67.  a++;
  68.                }  
  69.            }
  70. }
  71.  
  72.   for (i=0;i<filas;i++)
  73.   {
  74.  
  75.     printf ("\n");
  76.     for (x=0;x<columnas;x++)
  77.  {    if ((i==filas-1) && (x==columnas-1))
  78.       {
  79. printf ("%4c",' ');  
  80.               }
  81.               else
  82.               printf ("%4d",M[i][x]);
  83.  
  84.  }
  85.  printf ("\n");
  86.   }
  87.  
  88. }
  89. //--------------------------------------------------------------------------------  
  90.  
  91. void desordenar (int filas,int columnas,int M[TAM][TAM])
  92.  
  93. {
  94.      srand (time(NULL));
  95.     int i,x,g,temp,y;
  96.     temp = (filas*columnas)-1;
  97.     for(i=0; i<filas; i++)
  98.    {
  99.      for(g=0; g<columnas; g++)
  100.      {
  101.        M[i][g] = 0;
  102.      }
  103.    }
  104.  
  105.    for(i=1; i<=temp; i++)
  106.   {
  107.      do
  108.     {
  109.      y = rand() % filas;
  110.      x = rand() % columnas;
  111.     }
  112.     while(M[y][x]);
  113.     M[y][x]=i;
  114.   }
  115.      printf("\n");  
  116.     for(i=0; i<filas; i++)
  117.     {
  118.       for(g=0; g<columnas; g++)
  119.       {
  120.         if (M[i][g]==0)
  121.         {
  122.       printf ("%4c",' ');  
  123.         }
  124.         else
  125.         {
  126.           printf("%4d",M[i][g]);
  127.         }
  128.       }
  129.         printf("\n\n");
  130.     }
  131. }
  132.  
  133.  
  134. //-----------------------------------------------------------------------
  135. void jugar(int filas, int columnas, int M[TAM][TAM])
  136. {
  137.    int movimiento=0;
  138.    int auxFila=0;
  139.    int auxColumna=0;
  140.    int aux=0;
  141.    int aux2=0;
  142.    double tiempoTotal=0;
  143.  
  144.    printf("\n\n");
  145.    do
  146.    {
  147.  
  148.  
  149.        for(int x=0; x<filas; x++)
  150.        {
  151.            for(int y=0; y<columnas; y++)
  152.            {
  153.                if(M[x][y]==0)
  154.                {
  155.                    printf("  \t");
  156.                    auxFila=x;
  157.                    auxColumna=y;
  158.                }
  159.                else
  160.                {
  161.                    printf("%d\t",M[x][y]);
  162.                }
  163.            }
  164.            printf("\n\n");                    
  165.        }
  166.  
  167.        do
  168.        {
  169.            movimiento=getch();
  170.        }while((movimiento!=72)&&(movimiento!=75)&&(movimiento!=77)&&(movimiento!=80));
  171.  
  172.        switch(movimiento)
  173.        {
  174.            case 72:
  175.            {
  176.                if(auxFila+1==filas)
  177.                {
  178.                    printf("Movimiento Invalido");
  179.                    getch();
  180.                }
  181.  
  182.                else
  183.                {
  184.                    aux2=auxFila+1;
  185.                    aux=M[auxFila][auxColumna];
  186.                    M[auxFila][auxColumna]=M[aux2][auxColumna];
  187.                    M[aux2][auxColumna]=aux;
  188.                }
  189.                break;
  190.            }
  191.  
  192.            case 77:
  193.            {
  194.                if(auxColumna-1==-1)
  195.                {
  196.                    printf("Movimiento Invalido");
  197.                    getch();
  198.                }
  199.  
  200.                else
  201.                {
  202.                    aux2=auxColumna-1;
  203.                    aux=M[auxFila][auxColumna];
  204.                    M[auxFila][auxColumna]=M[auxFila][aux2];
  205.                    M[auxFila][aux2]=aux;
  206.                }
  207.                break;
  208.            }
  209.  
  210.            case 75:
  211.            {
  212.                if(auxColumna+1==columnas)
  213.                {
  214.                    printf("Movimiento Invalido");
  215.                    getch();
  216.                }
  217.  
  218.                else
  219.                {
  220.                    aux2=auxColumna+1;
  221.                    aux=M[auxFila][auxColumna];
  222.                    M[auxFila][auxColumna]=M[auxFila][aux2];
  223.                    M[auxFila][aux2]=aux;
  224.                }
  225.                break;
  226.            }
  227.  
  228.            case 80:
  229.            {
  230.                if(auxFila-1==-1)
  231.                {
  232.                    printf("Movimiento Invalido");
  233.                    getch();
  234.                }
  235.                else
  236.                {
  237.                    aux2=auxFila-1;
  238.                    aux=M[auxFila][auxColumna];
  239.                    M[auxFila][auxColumna]=M[aux2][auxColumna];
  240.                    M[aux2][auxColumna]=aux;
  241.                }
  242.                break;
  243.            }
  244.        }
  245.        system("cls");
  246.    } while(!ordenado(filas,columnas,M));
  247.  
  248.    printf("\nFelicidades has ganado!!!!");
  249. }
  250.  
  251.  

Cuando trato de compilar me da este error

in function void jugar (int,int,int(*)[12])
could no convert ordenado (filas,columnas,M) to bool
in argument to unary !

Por favor hay alguien que me pueda ayudar ?


« Última modificación: 25 Julio 2010, 06:47 am por binaryum » En línea

do-while


Desconectado Desconectado

Mensajes: 1.276


¿Habra que sacarla de paseo?


Ver Perfil
Re: Intercambiar elementos de lugar en una matriz
« Respuesta #1 en: 25 Julio 2010, 07:34 am »

¡Buenas!

El problema esta en la definicion de la funcion ordenado:
Código
  1. void ordenado (int filas,int columnas, int M[TAM][TAM])
  2. {
  3.   int i,x,a=1;;
  4.  for (i=0;i<filas;i++)
  5.    {
  6.  for (x=0;x<columnas;x++)  
  7. {  
  8.                if ((i==filas-1) && (x==columnas-1))
  9. {
  10.  M[i][x]=0;      
  11.        }
  12.        else
  13. {
  14.                  M[i][x]=a;
  15.  a++;
  16.                }  
  17.            }
  18. }
  19.  
  20.   for (i=0;i<filas;i++)
  21.   {
  22.  
  23.     printf ("\n");
  24.     for (x=0;x<columnas;x++)
  25.  {    if ((i==filas-1) && (x==columnas-1))
  26.       {
  27. printf ("%4c",' ');  
  28.               }
  29.               else
  30.               printf ("%4d",M[i][x]);
  31.  
  32.  }
  33.  printf ("\n");
  34.   }
  35.  
  36. }
  37.  

Que es de tipo void, y la has definido para inicializar la matriz, pero luego, al parecer estas intentando utilizarla para comprobar si se ha terminado el juego, lo cual no es correcto.

¡Saludos!


En línea

- Doctor, confundo los números y los colores.
- Vaya marrón.
- ¿Marrón? ¡Por el culo te la hinco!
binaryum

Desconectado Desconectado

Mensajes: 6


Ver Perfil
Re: Intercambiar elementos de lugar en una matriz
« Respuesta #2 en: 25 Julio 2010, 16:22 pm »

Tienes razón. Y entonces me ayudarías con alguna condición para comprobar si el juego esta hecho ? por favor , no se me ocurre más nada
En línea

do-while


Desconectado Desconectado

Mensajes: 1.276


¿Habra que sacarla de paseo?


Ver Perfil
Re: Intercambiar elementos de lugar en una matriz
« Respuesta #3 en: 25 Julio 2010, 18:35 pm »

¿¿¿¿¿¿¿Como???????

Estoy emepezando a pensar que este codigo no lo has escrito tu. Si lo hubieses echo, sabrias perfectamente que es lo que tienes que hacer para corregirlo, ya que es bien sencillo (solo requiere cambiar un sentencia y añadir una funcion). En la explicacion que te he dado antes tambien se encuentra la solucion.

¡Saludos!
En línea

- Doctor, confundo los números y los colores.
- Vaya marrón.
- ¿Marrón? ¡Por el culo te la hinco!
mk_137

Desconectado Desconectado

Mensajes: 120



Ver Perfil
Re: Intercambiar elementos de lugar en una matriz
« Respuesta #4 en: 25 Julio 2010, 22:15 pm »

Tienes razón. Y entonces me ayudarías con alguna condición para comprobar si el juego esta hecho ? por favor , no se me ocurre más nada
xDDD
para no ocurrirsete nada te has currado el programa...
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines