Foros del Web » Programación para mayores de 30 ;) » C/C++ »

Matrices

Estas en el tema de Matrices en el foro de C/C++ en Foros del Web. Hola a todos , estoy programando un sudoku en C y me piden para cargar un Sudoku desde un fichero .txt y cargar más 5 ...
  #1 (permalink)  
Antiguo 17/06/2012, 04:00
 
Fecha de Ingreso: abril-2012
Mensajes: 12
Antigüedad: 12 años
Puntos: 0
Matrices

Hola a todos , estoy programando un sudoku en C y me piden para cargar un Sudoku desde un fichero .txt y cargar más 5 ficheros que pueden estar en un fichero .txt o metidos en el codigo, solo que ninguno de los me salen bien :(
Declare las 5 matrices para los sudokus en el mismo programa , mas solo me imprime las matrices y no las puedo utilizar despues para nada, y el fichero no me abre .... ya no se que hacer
Si alguien puede ayudarme en como puedo cargar dichas matrices?
Muchas Gracias
  #2 (permalink)  
Antiguo 17/06/2012, 10:48
 
Fecha de Ingreso: diciembre-2011
Ubicación: CABA
Mensajes: 433
Antigüedad: 12 años, 4 meses
Puntos: 94
Respuesta: Matrices

Hola! subi el codigo q tengas para poder ayudarte mejor... Para cargar matrices desde archivos utilizo esto:
Código C:
Ver original
  1. for(i=0; i<filas; i++)
  2.    for(j=0; j<columnas; j++)
  3.         fscanf(fp,"%d",matriz[i][j]);

Saludos
  #3 (permalink)  
Antiguo 17/06/2012, 13:16
 
Fecha de Ingreso: abril-2012
Mensajes: 12
Antigüedad: 12 años
Puntos: 0
Respuesta: Matrices

Saludos cesar_casla muchas gracias aqui mi codigo, le dividi en dos pq era muy grande
Código C:
Ver original
  1. #include<stdio.h>
  2. #include<stdlib.h>
  3. #include <time.h>
  4.  
  5. #define ALTO 9
  6. #define ANCHO 9
  7.  
  8.  
  9. int fila,columna,numero;
  10. int sudokuceros[ALTO][ANCHO]={
  11.              {0, 0, 0, 0, 0, 0, 0, 0, 0},
  12.              {0, 0, 0, 0, 0, 0, 0, 0, 0},
  13.              {0, 0, 0, 0, 0, 0, 0, 0, 0},
  14.              {0, 0, 0, 0, 0, 0, 0, 0, 0},
  15.              {0, 0, 0, 0, 0, 0, 0, 0, 0},
  16.              {0, 0, 0, 0, 0, 0, 0, 0, 0},
  17.              {0, 0, 0, 0, 0, 0, 0, 0, 0},
  18.              {0, 0, 0, 0, 0, 0, 0, 0, 0},
  19.              {0, 0, 0, 0, 0, 0, 0, 0, 0},
  20.              };
  21.  
  22. int sudokus1[ALTO][ANCHO]={
  23.              {0, 2, 0, 0, 0, 0, 0, 0, 0},
  24.              {0, 0, 0, 6, 0, 0, 0, 0, 3},
  25.              {0, 7, 4, 0, 8, 0, 0, 0, 0},
  26.              {0, 0, 0, 0, 0, 3, 0, 0, 2},
  27.              {0, 8, 0, 0, 4, 0, 0, 1, 0},
  28.              {6, 0, 0, 5, 0, 0, 0, 0, 0},
  29.              {0, 0, 0, 0, 1, 0, 7, 8, 0},
  30.              {5, 0, 0, 0, 0, 9, 0, 0, 0},
  31.              {0, 0, 0, 0, 0, 0, 0, 4, 0},
  32.              };
  33.  
  34. int matriz[ALTO][ANCHO];
  35. void cargarsudokus(int matriz[ALTO][ANCHO]);
  36. void submenu1 (int opcion1);
  37. void metenumeros(int matriz[ALTO][ANCHO]);
  38. void DaValoresMatriz(int matriz[ALTO][ANCHO]);
  39. void imprimirmatriz(int matriz[ALTO][ANCHO]);
  40. void jugar_sudoku(int num1,int num2);
  41.  
  42. void escribir(int matriz[ALTO][ANCHO],int fila, int columna, int numero);
  43. void dibujar_tablero(int matriz[ALTO][ANCHO]);
  44. void juego(int matriz[ALTO][ANCHO]);
  45. int finalizar(int matriz[ALTO][ANCHO]);
  46. int intenta_poner(int matriz[ALTO][ANCHO],int i,int j,int k);
  47. int coordenadavalida(int linea, int columna);
  48. int comprobar(int matriz[ALTO][ANCHO], int fila, int columna, int numero);
  49. int numerovalido(int numero);
  50.  
  51. void practicar_sudoku(int matriz[ALTO][ANCHO]);
  52.  
  53. void metenumeros_();
  54. void juego_();
  55.  
  56. void llamararchivo ();
  57.  
  58. /* Declaracion de la función main */
  59. int main () {
  60.  
  61.      /* Declaración de variables */
  62.      srand(time(NULL));
  63.      //int matriz[ALTO][ANCHO];
  64.      int opcion = -1;
  65.      int variable = 0;
  66.      int opcion1 = -1;
  67.  
  68.      /* Declaracion del While */
  69.      while((opcion!=0)&&(variable<4))     /*la sentencia se ejecutara mientras la condición sea cierta
  70.                                           o sea mientras la variable no sea mayor que 10 se mantiene el bucler */
  71.      {          
  72.          printf ("                          ***********************************\n");
  73.          printf ("                          *                                 *\n");
  74.          printf ("                          *              SUDOKU             *\n");
  75.          printf ("                          *                                 *\n");
  76.          printf ("                          ***********************************\n");
  77.                  
  78.                  /*Menu del Sudoku*/
  79.          printf("                          Introduzca una operacion a realizar: \n");
  80.          printf("                                1) Crear Sudoku \n");
  81.          printf("                                2) Practicar Sudoku \n");
  82.          printf("                                3) Guardar Sudoku \n");
  83.          printf("                          ===================================== \n");
  84.          printf("                                Pulse 0 para salir \n");
  85.          scanf("%d", &opcion);  
  86.        
  87.          if(opcion==1)
  88.          {
  89.          submenu1 (opcion1);
  90.          }
  91.          else if (opcion==2)
  92.          {
  93.          practicar_sudoku(matriz);
  94.          }
  95.          else if(opcion==3)
  96.          {
  97.          
  98.          }
  99.          else if (opcion == 0)
  100.          {
  101.          printf ("\nSeleccion salida\n");
  102.          }
  103.          else
  104.          {
  105.          printf("\nLa opcion es incorrecta\n");
  106.          }
  107.      } variable ++; /* Fin funcion While, se incrementa en uno el valor de la variable --> variable = variable + 1 */
  108.      return 0;
  109.  }/*Fin funcion Main */
  110.    
  111.      
  112.  void submenu1 (int opcion1)   
  113.      {   
  114.          int matriz[ALTO][ANCHO];
  115.          int opsudokus;
  116.          while(opcion1!=0)
  117.          {
  118.  
  119.          printf ("\n                        ***********************************\n");
  120.          printf ("\n                        *           CREAR SUDOKU          *\n");
  121.          printf ("\n                        ***********************************\n");
  122.          printf("\n                         Elija opciones para crear sudoku   \n");
  123.          printf("\n                         1) Cargar Sudoku\n");
  124.          printf("\n                         2) Cargar Sudoku desde fichero\n");
  125.          printf("\n                         3) Crear Sudoku\n");
  126.          printf("\n                         =====================================\n");
  127.          printf("\n                         Pulse 0 para volver al menu principal \n");
  128.          scanf("%d", &opcion1);
  129.            
  130.             if(opcion1==1)
  131.              {
  132.              cargarsudokus(matriz);
  133.              }
  134.              else if(opcion1==2)
  135.              {
  136.              llamararchivo ();
  137.              }
  138.              
  139.              else if(opcion1==3)
  140.              {
  141.              int op = -1;  
  142.              while(finalizar(sudokuceros)!=0){
  143.              dibujar_tablero(sudokuceros);
  144.              metenumeros(sudokuceros);
  145.              printf("Desea seguir introduciendo valores al sudoku? (1)Si (2) No: ");
  146.                                          scanf("%d", &op);
  147.                                          if(op==1)
  148.                                          {
  149.                                          printf("Guardando...\n");
  150.                                          }
  151.                                          else
  152.                                          {
  153.                                          printf("Validando su sudoku:OK\n");
  154.                                          printf("-->>Regresando al menu<<--\n");
  155.                                          main();
  156.                                          }           
  157.              finalizar(sudokuceros);
  158.                          
  159.                   }              
  160.                
  161.              }    
  162.              else
  163.              {
  164.              printf("\nOpcion salida de la opcion crear sudoku\n");
  165.              }
  166.         }
  167.     }
  #4 (permalink)  
Antiguo 17/06/2012, 13:18
 
Fecha de Ingreso: abril-2012
Mensajes: 12
Antigüedad: 12 años
Puntos: 0
Respuesta: Matrices

Código C:
Ver original
  1. void cargarsudokus(int matriz[ALTO][ANCHO])
  2. {
  3.  int i;
  4.  int e;
  5.  int sudokus = -1;
  6.  
  7.  printf("\n Elija entre los 5 sudokus, pulsando del 1 al 5: ");
  8.  scanf("%d",&sudokus);
  9.  
  10.  
  11.      
  12.      if(sudokus == 1)
  13.      {
  14.      dibujar_tablero(sudokus1);
  15.      }
  16.              
  17.      else if(sudokus == 2)
  18.      {
  19.    
  20.     dibujar_tablero(sudokus2);
  21.        
  22.      }
  23.    
  24.      
  25.      else if(sudokus == 3)
  26.      {
  27.    
  28.      dibujar_tablero(sudokus3);
  29.    
  30.      }
  31.      
  32.      else if(sudokus == 4)
  33.      {
  34.      
  35.     dibujar_tablero(sudokus4);
  36.            
  37.      }
  38.          
  39.      else if(sudokus == 5)
  40.      {
  41.      dibujar_tablero(sudokus5);      
  42.      }
  43.      else
  44.      {
  45.      printf("Opcion icorrecta.");
  46.        }       
  47.    
  48.    
  49. }
  50.  
  51. void practicar_sudoku(int matriz[ALTO][ANCHO])
  52. {
  53.  int op = -1;
  54.  while(finalizar(matriz)!=0){
  55.              dibujar_tablero(matriz);
  56.              metenumeros(matriz);
  57.              printf("Desea seguir introduciendo valores al sudoku? (1)Si (2) No: ");
  58.                                          scanf("%d", &op);
  59.                                          if(op==1)
  60.                                          {
  61.                                          printf("Guardando...\n");
  62.                                          }
  63.                                          else
  64.                                          {
  65.                                          printf("Validando su sudoku:OK\n");
  66.                                          printf("-->>Regresando al menu<<--\n");
  67.                                          main();
  68.                                          }           
  69.              finalizar(matriz);
  70.              }
  71. }
  72.  
  73.  
  74. void llamararchivo ()
  75. {
  76. FILE * Sudoku;
  77.  char palabras[100];
  78.    
  79.    Sudoku = fopen("Sudoku.txt","r");
  80.    
  81.     while (feof(Sudoku)==0)
  82.     {
  83.     fgets(palabras,100,Sudoku);
  84.     printf("%S",palabras);
  85.     }
  86.  fclose(Sudoku);
  87.  return 0;
  88. }
  89.  
  90.  void DaValoresMatriz(int matriz[ALTO][ANCHO])
  91.          {
  92.          int fila, columna, numero;
  93.          int i;
  94.          int e;
  95.          for(i=0;i<ALTO;i++)
  96.          {
  97.  
  98.             for (e=0; e<ANCHO; e++)
  99.                  {
  100.                  matriz[i][e]= (rand() % 9) + 1;
  101.                  }
  102.           }
  103.          }
  104.  
  105.  
  106.          
  107.  
  108.  
  109.      
  110. int coordenadavalida(int fila, int columna)
  111. {
  112.   if(fila>=0 && fila <9 && columna>=0 && columna <9)
  113.           return 1;
  114.    else
  115.           return 0;
  116. }
  117.  
  118. int intenta_poner(int matriz[ALTO][ANCHO],int i,int j,int k) {
  119.  
  120.   int c,l;
  121.  
  122.   for (l = 0; l < 9; l++)
  123.         if (matriz[l][j] == k)
  124.           return 0;
  125.   for (c = 0; c < 9; c++)
  126.         if (matriz[i][c] == k)
  127.           return 0;
  128.   for (l = i - i % 3; l < i - i % 3 +3; l++)
  129.         for (c = j - j % 3; c < j - j % 3 + 3; c++)
  130.           if (matriz[l][c] == k)
  131.         return 0;
  132.   matriz[i][j] = k;
  133.   dibujar_tablero(matriz);
  134.   return 1;
  135. }
  136.  
  137. int finalizar(int matriz[ALTO][ANCHO])
  138. {
  139. int i,j;
  140.         for (i=0;i<9;i++)
  141.                 for (j=0;j<9;j++)
  142.                    if (matriz[i][j]==0)
  143.                          return 1;
  144. }
  145.  
  146.  
  147. void escribir(int matriz[ALTO][ANCHO],int fila, int columna, int numero) {
  148.          matriz[fila][columna]=numero;
  149. }
  150.  
  151.  
  152. int numerovalido(int numero)
  153. {
  154.   if(numero>0 && numero <=9)
  155.          return 1;
  156.    else
  157.           return 0;
  158.  
  159. }
  160. int comprobar(int matriz[ALTO][ANCHO], int fila, int columna, int numero) {
  161.          if (matriz[fila][columna]==0)
  162.                  return 1;
  163.          else
  164.                  return 0;      
  165. }
  166.  
  167. void metenumeros(int matriz[ALTO][ANCHO])
  168. {
  169.              printf("Introduzca la fila: \n");
  170.              scanf("%d", &fila);
  171.              if ((fila < 1) || (fila > 9)) // si el valor de la fila es menor que 1 "||"(or) es mayor que 9, (no se usa && (and))
  172.              {
  173.              printf("Valor invalido para la fila,ingrese un numero entre 1 y 9: \n");
  174.              scanf("%d", &fila);
  175.              }
  176.              printf("\nIntroduzca la columna: \n");
  177.              scanf("%d", &columna);
  178.              if((columna < 1) || (columna > 9))
  179.              {
  180.              printf("Valor invalido para la columna, ingrese un numero entre 1 y 9: \n");
  181.              scanf("%d", &columna);
  182.              }
  183.              printf("Introduzca el numero a insertar: ");
  184.              scanf("%d", &numero);
  185.              if((numero < 1) || (numero > 9))
  186.              {
  187.              printf("Numero no valido, ingrese un numero entre 1 y 9\n");
  188.              scanf("%d", &numero);
  189.              }
  190.              juego(matriz);
  191.              }
  192.  
  193.  
  194. void juego(int matriz[ALTO][ANCHO])
  195. {
  196.       int op =-1;
  197.      
  198.         if (coordenadavalida(fila-1, columna-1)==1)
  199.         {
  200.            printf("Coordenada Valida\n");
  201.            if (numerovalido(numero)==1)
  202.            {
  203.                   printf("Numero valido\n");
  204.                    if (comprobar(matriz, fila-1, columna-1, numero)==1)
  205.                   {  
  206.                           printf("Posicion vacia\n");
  207.                           if (intenta_poner(matriz, fila-1, columna-1, numero)==1)
  208.                           {
  209.                                          printf("Cuadrante OK\n");
  210.                                          escribir(matriz,fila-1,columna-1,numero);  
  211.                            }  
  212.                            else
  213.                            {
  214.                                    printf("No fue posible introducir detrminado numero, ya existe en la fila o en la columna o en el mismo cuadrante\n");
  215.                            }
  216.                    }    
  217.                    else
  218.                    {
  219.                            printf("Pero esta posicion ya esta ocupada\n");
  220.                    }
  221.                 }  
  222.                 else
  223.                 {
  224.                         printf("Numero invalido\n");
  225.                 }      
  226.         }
  227.         else
  228.         {
  229.                 printf("Coordenada invalida\n");
  230.         }                
  231. }
  232.  
  233.              
  234. void dibujar_tablero(int matriz[ALTO][ANCHO]) {
  235.   int i,j;
  236.  
  237.   printf("  1  2  3   4  5  6   7  8  9  \n");
  238.   printf("+---------+---------+---------+\n");
  239.   for (i = 0; i < 9; i++) {
  240.         printf("|");
  241.         for (j = 0; j < 9; j++) {
  242.           if (matriz[i][j] != 0)
  243.         printf(" %d ", matriz[i][j]);
  244.           else
  245.         printf("   ");
  246.           if (j % 3 == 2)
  247.         printf("|");
  248.         }
  249.         if (i % 3 == 2)
  250.           printf("\n+---------+---------+---------+");
  251.         printf("\n");
  252.   }
  #5 (permalink)  
Antiguo 17/06/2012, 14:29
 
Fecha de Ingreso: diciembre-2011
Ubicación: CABA
Mensajes: 433
Antigüedad: 12 años, 4 meses
Puntos: 94
Respuesta: Matrices

guaw no sabia q era tan grande... la verdad si no me das mas info hacerca de las dudas va a ser dificil. Una pregunta: cuando vos ingresas la opcion 2 del submenu1 que dice "Cargar Sudoku desde fichero\n", llamas a la funcion llamararchivo (); ¿¿cual es la finalidad de esa funcion??? por lo q yo veo es que abris un archivo y con fgets recuperas linea a linea y luego la imprimis,¿¿pero no deberias recuperar numeros y guardarlos en una matriiz??? Deberias hacerlo como te marque antes


Lo que mas me impresiono de este programa fue esto:
Código C:
Ver original
  1. else
  2.                                              {
  3.                                              printf("Validando su sudoku:OK\n");
  4.                                              printf("-->>Regresando al menu<<--\n");
  5.                                              main(); // ????????
  6.                                              }
llamas al main?? de donde sacaste eso.. Si bien main es una funcion, y ademas que nunca vi llamar al main, estas alterando terriblemente el orden en q se ejecuta el programa (creo q un buen compilador deberia marcarte un error)

El consejo q te puedo dar es que vayas de a poco, ejemplo basico: hace un par de funciones, ¿se ejecuta correctamente? Sí. ¿hace lo q yo quiero? Sí. Entonces agrega un par de funciones mas y seguis comprobando

Saludos

Saludos
  #6 (permalink)  
Antiguo 17/06/2012, 14:50
 
Fecha de Ingreso: abril-2012
Mensajes: 12
Antigüedad: 12 años
Puntos: 0
Respuesta: Matrices

bueno gracias !!
la funcion "Cargar Sudoku desde fichero\n", llamas a la funcion llamararchivo ();" era para abrir uma matriz desde un fichero txt pero no me abre .....
lo del main () me lo invente al ser incapaz de volver al menu principal jajaja es q ando estresado con ese sudoku porque no me sale y le tengo q entregar mañana ....
si pudirieras exarme una mano con declarar una matriz como por ejemplo la sudokus1? y una ayudita para abrir un archivo txt estaria muy agrecido :P
  #7 (permalink)  
Antiguo 17/06/2012, 15:15
 
Fecha de Ingreso: abril-2012
Mensajes: 12
Antigüedad: 12 años
Puntos: 0
Respuesta: Matrices

mi piden eso :

---> Cargar Sudoku
Presentara un Sudoku preconfigurado de entre varios disponibles. Es decir, que se deberan tener en un fichero auxiliar (Sudokus.txt) o en estructuras de datos dentro del codigo varios sudokus preparados.Deberan ser al menos 5 (por ejemplo numerados 0 al 4). Cuando el usuario seleccione esta opcion se elegira uno de ellos forma aleatoria que sera el que se usara para jugar.
---> Cargar Sudoku desde fichero
Cuando se selecciona habra que abrir y cargar automaticamente un fichero llamado Sudoku.txt que estara situado en el mismo path que se encuentre el ejecutable. Este fichero sera proporcionado por el profesor correspondiente el da de la defensa para realizar pruebas. El formato del chero constara de 9
las de numeros separados por un espacio en blanco, cada una de ellas acaba en un nal de linea.
El chero Sudoku.txt que debera ser capaz de el programa tendra el siguiente formato:
0 2 0 0 0 0 0 0 0
0 0 0 6 0 0 0 0 3
0 7 4 0 8 0 0 0 0
0 0 0 0 0 3 0 0 2
0 8 0 0 4 0 0 1 0
6 0 0 5 0 0 0 0 0
0 0 0 0 1 0 7 8 0
5 0 0 0 0 9 0 0 0
0 0 0 0 0 0 0 4 0



pero no soy capaz de hacer bien ninguna en cargar sudoku, solo me imprime, y en cargar fichero no me abre.....

Etiquetas: matrices, programa
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 15:41.