• Viernes 8 de Noviembre de 2024, 20:42

Autor Tema:  Laberinto de letras  (Leído 1106 veces)

ermiguel1979

  • Miembro activo
  • **
  • Mensajes: 45
    • Ver Perfil
Laberinto de letras
« en: Martes 26 de Enero de 2010, 09:58 »
0
Buenos días a todos, os mando un ejercicio que no me sale...
... tengo que hacer una matriz 5x5 de caracteres (B, A, D e I son las letras permitidas). Un algoritmo debe recorrer dicha matriz según unas indicaciones y decir por que columna se sale de dicha matriz.

El algoritmo tiene como entradas, la susodicha matriz y una posición 'n' de columna en la primera fila.
Las letras de la matriz tienen las siguientes órdenes:
I: se desplaza desde la posición actual a la casilla de la izquierda
D: se desplaza a la casilla de la derecha
A: se desplaza a la casilla de arriba
B: se desplaza a la casilla de abajo

El camino no puede salirse de la matriz ni por los lados ni por arriba, así que hay que tener cuidado de no colocar letras que hagan que eso ocurra.

Mi código es el siguiente (me dá problemas al comprobar, mediante funciones, lo correcto de las letras introducidas en la matriz):

Código: C
  1.  
  2. #include <stdio.h>
  3. #include <stdlib.h>
  4.  
  5. /*---FUNCIÓN-confima-letra------------------------------------------------*/
  6. /*Evita que el camino se salga del tablero*/
  7. int confirmaletra (int i, int j, char letra){
  8.    
  9.     int a=1;            //tipo lógico inicializada en VERDADERO (1)
  10.        
  11.     if(i==0 && letra=='A'){         //comprueba que no haya A en la fila 1
  12.         a=0;
  13.     }else{
  14.         if(j==0 && letra=='I'){     //que no haya I en la columna 1
  15.             a=0;
  16.         }else{
  17.             if(j==4 && letra=='D'){     //que no haya D en la columna 4
  18.                 a=0;
  19.             }
  20.         }
  21.     }
  22.     return (a);
  23. }
  24. /*-------------------------------------------------------------------------*/
  25.  
  26. /*-------------FUNCIÓN-comprueba-letra-------------------------------------*/
  27. int compruebaletra (char letra){
  28.    
  29.     int a=1;
  30.    
  31.     if(letra!='A' || letra!='B' || letra!='D' || letra!='I'){
  32.             a=0;
  33.     }
  34.     return (a);
  35. }
  36. /*------------------------------------------------------------------------*/
  37.  
  38.  
  39. /*Algoritmo--> LABERINTO*/
  40. int main (void){
  41.    
  42.     char tablero[5][5];
  43.     int columna;
  44.     int fila=0;
  45.     char letra;
  46.     int i, j;                   //i--> contador fila; j--> contador columna
  47.    
  48.     printf("Rellene la matriz laberinto; introduzca letras A, B, D o In");
  49.     for(i=0; i<5; i++){
  50.         for(j=0; j<5; j++){
  51.             printf("letra[%i][%i]: ", i, j);
  52.             scanf("%c", &letra);            
  53.             while(!compruebaletra(letra)){
  54.                 printf("La letra NO es correcta, introduzca A, B, D o In");
  55.                 scanf("%c", &letra);
  56.             }
  57.             while(!confirmaletra(i,j,letra)){
  58.                 printf("La letra %c no puede ir en esa posicionn", letra);
  59.                 printf("Introduzca otra letra de las validas: ");
  60.                 scanf("%c", &letra);
  61.             }
  62.             tablero[i][j]=letra;
  63.         }
  64.     }
  65.     /*muestra el tablero*/
  66.     for(i=0; i<5; i++){
  67.         for(j=0; j<5; j++){
  68.             printf("%c ", tablero[i][j]);
  69.         }
  70.         printf("n");
  71.     }
  72.     printf("n");
  73.     /*se declara la columna de entrada y se comienza el laberinto*/
  74.     printf("Indique el numero de la columna inicial (de 1 a 5): ");
  75.     scanf("%i", &columna);
  76.     while(columna<1 || columna>5){
  77.         printf("columna no valida. Introduzca numero del 1 al 5n");
  78.         scanf("%i", &columna);
  79.     }
  80.     do{
  81.         switch(tablero[fila][columna-1]){
  82.             case 'I':
  83.                 columna=columna+1;
  84.                 break;
  85.             case 'D':
  86.                 columna=columna-1;
  87.                 break;
  88.             case 'A':
  89.                 fila=fila-1;
  90.                 break;
  91.             case 'B':
  92.                 fila=fila+1;
  93.                 break;
  94.         }
  95.     }while(!(fila==4));
  96.     printf("Usted ha salido por la columna %in", columna);
  97. }
  98.  
  99.  


Gracias por vuestra ayuda.

Un saludo!!