#include <stdio.h> #include <conio.h> void dibuja_tabla(int tabla[10][10]); enum sentido {izquierda, derecha }; int main() { int inicio,i,j, sinsalida; sentido direccion; char ch; int matriu[10][10]={ {0,0,0,0,0,0,0,0,0,0}, {0,1,0,0,1,0,0,0,1,0}, {0,1,0,1,0,0,0,1,0,0}, {0,1,0,0,0,0,1,0,0,0}, {0,0,0,0,0,0,0,0,0,1}, {0,1,1,1,1,0,0,0,1,0}, {0,0,0,0,0,0,0,1,0,0}, {1,0,0,0,0,0,1,0,0,0}, {0,1,0,0,0,1,0,0,0,0}, {0,0,1,0,0,0,0,0,0,0}, }; do{ printf("\nIntroducir el numero de columna por el cual desea lanzar la primera bola: "); scanf("%d",&inicio); }while(inicio>9); do{ printf("\nEn caso de encontrarse con un obstaculo, en que direccion quiere que se dirija la bola, derecha (D) o izquierda (I): "); fflush(stdin); scanf("%c", &ch); }while(ch!='D' && ch!='d' && ch!='I' && ch!='i'); if (ch == 'D' || ch == 'd') direccion = derecha; else direccion = izquierda; i = 0; j = inicio; sinsalida = 0; matriu [j]=25; while ((i<9)&& (!sinsalida)) { //bucle mientras que no llegue abajo if (matriu[i+1][j]==1) { // si hay obstaculo debajo de la bola switch (direccion) { case derecha: if ((j<9)&& (matriu[j+1]!=1)){ j++; //si puede ir a la derecha y esta libre matriu[j]= 26; //marcar el camino } else { sinsalida = 1; //si no puede ir a la derecha } break; case izquierda: if ((j>0) && (matriu[j-1]!=1)){ j--; //si puede ir a la izquierda y esta libre matriu[j]= 27; //marcar el camino } else { sinsalida = 1; //si no puede ir a la izquierda } break; } } else { //si llega aqui es porque puede bajar i++; // baja un nivel matriu[j]=25; // marca el descenso de un nivel }
}
if (i==9) { //sale con exito printf("\nExito. Bola llega al final en posicion %d, %d \n\n", i, j); } else printf("\nFracaso. Bola atrapada en posicion %d, %d \n\n", i, j);
dibuja_tabla(matriu);
getch(); return 0; }
void dibuja_tabla(int tabla[10][10]) // Imprime tabla { int i, j;
for(i=0;i<10;i++) { printf("\t%d- ", i); for(j=0;j<10;j++) { if(tabla[j]==1) printf("X "); else if(tabla[j]==0) printf(". "); else printf("%c ", tabla[j]); } printf("\n"); }
}[code=cpp]
[/code]
|