Título: Problema contador en C Publicado por: People95 en 1 Marzo 2014, 18:17 pm Buenas, tengo una matriz de 0 y 1, donde los 0 se convierten en "." y los 1 en "X", pues tengo que dejar caer una bola desde arriba y como si fuera un pinball ir rebotando simulando las X como obstaculos, algo así:
(http://imageshack.com/a/img43/2672/1lnv.jpg) Pero no consigo aplicar el contador que vaya bajando, todo el rato me da error, alguien me puede ayudar? Esto es lo que llevo: #include <stdio.h> void intercambia(int *a, int *b); void dir(char c); int main() { int inicio,i,j,contador; char direccion; 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}, {0,0,0,0,0,0,1,0,0,0}, {0,0,0,0,0,1,0,0,0,0}, {0,0,0,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", &direccion); }while(direccion!='D' && direccion!='d' && direccion!='I' && direccion!='i'); inicio=matriu[0][inicio]; contador=0; while(i++){ contador +=1; } intercambia( &inicio, &contador); for(i=0;i<10;i++) { printf("\t"); for(j=0;j<10;j++) { //if(matriu[j]==matriu[0][inicio]) // printf("%d ",contador); if(matriu[j]==1) printf("X "); if(matriu[j]==0) printf(". "); } printf("\n"); } contador=0; while(i++){ contador +=1; } } void intercambia(int *a,int *b){ //a será el valor de la matriz y b el valor del contador *a=*b; } void dir(char c){ int j; char direccion; if(direccion!='D' && direccion!='d'){ j+=1; } else j-=1; } Título: Re: Problema contador en C Publicado por: ivancea96 en 1 Marzo 2014, 18:38 pm Citar void intercambia(int *a,int *b){ //a será el valor de la matriz y b el valor del contador *a=*b; } Ahí por ejemplo, no intercambias. solo asignas Título: Re: Problema contador en C Publicado por: People95 en 1 Marzo 2014, 19:50 pm Pero sigo sin saber como poder "imprimir" el contador y que vaya bajando, solo llevo un par de semanas programando, he pensado algo así:
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", &direccion); }while(direccion!='D' && direccion!='d' && direccion!='I' && direccion!='i'); inicio=matriu[0][inicio]; contador=0; while(i++){ contador +=1; } intercambia(&inicio, &contador); for(i=0;i<10;i++) { printf("\t"); for(j=0;j<10;j++) { if(matriu[j]==1) printf("X "); else { if(matriu(i)[j] == matriu(i)[inicio]) printf("&d",contador"); else (matriu(i)[j]==0 && matriu(i)[j]==0 != matriu(i)[inicio]) printf(". "); } }printf("\n"); } } El problema es lo que está en negrita, no sé como puedo hacer que imprima el contador por la posición que elija el usuario, solo se me ocurre matriu[inicio] y dudo que esté bien EDITO: Todas las (i) de la matriz estan en parentesis pq al publicarla aqui se me comia si lo ponia en corchetes Título: Re: Problema contador en C Publicado por: leosansan en 1 Marzo 2014, 20:17 pm Cuando postees el código elige las etiquetas GeSHi y toma la C++ y en medio de las etiquetas Code que aparecen "pegas" tu código. Al no hacerlo de esta manera parte del código no sale correcta, especialmente las matrices. ¡¡¡¡ Saluditos! ..... !!!! (http://st.forocoches.com/foro/images/smilies/aaaaa.gif) Título: Re: Problema contador en C Publicado por: People95 en 1 Marzo 2014, 20:21 pm Gracias!!!! A ver ai ahora...
Código
Título: Re: Problema contador en C Publicado por: ivancea96 en 1 Marzo 2014, 20:34 pm Código
Qué quieres que cuente tu contador??? Número de pasos? Título: Re: Problema contador en C Publicado por: People95 en 1 Marzo 2014, 21:10 pm Exacto, por cada paso que da hacia bajo o hacia derecha/izquierda sumar 1
Título: Re: Problema contador en C Publicado por: ivancea96 en 1 Marzo 2014, 21:17 pm En prime lugar:
Código
En ningún momento inicializas i. Igualmente, esas líneas son absurdas. ¿Qué pretendías que hicieran? En segundo lugar: Para poner un contador, simplemente empieza en 0, y ve subiendolo en cada movimiento. Título: Re: Problema contador en C Publicado por: leosansan en 2 Marzo 2014, 01:05 am Exacto, por cada paso que da hacia bajo o hacia derecha/izquierda sumar 1 Pero para eso tiene que dar previamente un paso, no puedes ponerlo como algo suelto. Aunque el código que cuelgas está verde, la verdad es que me ha resultado interesante, o más bien curioso, el ejercicio. Así que he decidido madurarlo un poco. Tal y como está es funcional, pero muy mejorable, vamos que también está verde .... pero funciona. Ya te toca a ti mejorarlo un poco, al menos tienes una referencia de cómo atacarlo, una al menos. Fíjate en el detalle de que el contador lo comienzo en dos, ya luego resto justamente dos. ¿Y porqué ese capricho?. Para que no salgan el cero y el uno y se confundan con los ceros y unos que ya habían en la matriz. Una picardía sin más. Por cierto, no has dejado en la matriz inicial más que un camino, la columna 1, para recorrer el pinball si eliges a la derecha y llegar al final. Creo que deberías cambiar/disminuir los 1 o X. Y una imagen de que furula: (http://i1280.photobucket.com/albums/a497/leosansan/GRAFICOS%202/pinball0_zps8a3f4722.jpg) Código
Mejora lo, es lo que me ha salido a bote pronto y a estas horas ya estoy de retirada. ¡¡¡¡ Saluditos! ..... !!!! (http://st.forocoches.com/foro/images/smilies/aaaaa.gif) Título: Re: Problema contador en C Publicado por: People95 en 2 Marzo 2014, 20:09 pm Muchiiiisimas gracias! No sabes cuanto me has ayudado, ahora tengo otro problema y es que en una matriz de 50x50 haga que el programa pida una fila y columna de algun valor que desea modificar, de forma que si antes habia un 0, se convertirá en un 1 (y por tanto un obstaculo) y viceversa.
Ademas el programa debe comprobar que la bola siempre caerá, y si es legal (que la bola siempre cae) enseñar la nueva tabla. Tengo esto: Código
Pero al compilar me sigue dando la tabla igual, no me cambia los valores, por tanto creo que el fallo está aquí: Código
Como lo puedo solucionar??? Título: Re: Problema contador en C Publicado por: leosansan en 2 Marzo 2014, 20:25 pm ............................................................. Tengo esto: ............................................................................ Pero al compilar me sigue dando la tabla igual, no me cambia los valores, por tanto creo que el fallo está aquí: Código
Como lo puedo solucionar??? Están mal comparados en los if, ya que asignas con un solo =, en lugar de comparar al usar dos ==: Citar if (matriu[i ][j] == 0) matriu[i ][j] = 1; else matriu[i ][j] ==0; <==esta línea sobra, ya era cero De todas formas, cuelga el código que llevas hecho, matriz incluida, si no es difícil ver los errores. ¡¡¡¡ Saluditos! ..... !!!! (http://st.forocoches.com/foro/images/smilies/aaaaa.gif) Título: Re: Problema contador en C Publicado por: People95 en 2 Marzo 2014, 20:32 pm Aún cambiandolo me sigue sin cambiarse :S
Esto es todo el programa entero: Pero el problema es a partir del void cambiartabla Código
De nuevo gracias!!! Título: Re: Problema contador en C Publicado por: leosansan en 2 Marzo 2014, 21:06 pm Aquí está la solución, era como te comenté un problema de comparar en el if, con dos iguales y de asignar después con un solo igual y sobra el "else" que sigue: Código
¡¡¡¡ Saluditos! ..... !!!! (http://st.forocoches.com/foro/images/smilies/aaaaa.gif) Título: Re: Problema contador en C Publicado por: People95 en 2 Marzo 2014, 21:47 pm Me sigue saliendo mal, exactamante...
Si pongo por ejemplo Fila ---> 5 Columna ---> 15 La columna me saldrá bien, cambiará el valor en a columna 15, pero la fila siempre me sale la primera, o directamente no me sale. Mirad, aquí he puesto las coordenadas [50,50]: (http://imageshack.com/a/img18/5295/vc48.jpg) Pero me sale en el [0,50] :S Y otra cosa que me doy cuenta que falla, al poner varios cambios de valor, los antiguos se me borran, solo cambia el ultimo valor que he introducido. Definitivamente, la programación no es lo mio jjaja Título: Re: Problema contador en C Publicado por: leosansan en 2 Marzo 2014, 22:36 pm Era por una mala "colocación" de las instrucciones: Código
Mira lo que sale ahora: (http://i1280.photobucket.com/albums/a497/leosansan/pinball1_zps0b6cefad.jpg) Si hay algún otro problema insiste (http://st.forocoches.com/foro/images/smilies/simba1.gif) ¡¡¡¡ Saluditos! ..... !!!! (http://st.forocoches.com/foro/images/smilies/aaaaa.gif) Título: Re: Problema contador en C Publicado por: lfgmespino en 3 Marzo 2014, 00:03 am #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"); } } Código [/code] Título: Re: Problema contador en C Publicado por: lfgmespino en 3 Marzo 2014, 00:05 am Soy nuevo y no sé todavía como enviar código junto con comentarios. He enviado el código en el mensaje anterior y el comentario ahora.
Bueno, el caso es que he toqueteado el programita y funciona. Saludos Título: Re: Problema contador en C Publicado por: People95 en 3 Marzo 2014, 00:28 am Leosansan, no sabes como te lo agradezco, sin ti aún estaría estancado en el principio ;D
lfgmespino, supongo que eso es el apartado de lanzar una pelota, ese ya lo tengo hecho :D, para poner un codigo donde pone GeSHI tienes que elegir C Por último, ya sólo tengo un fallo más, y con eso ya habré terminado el programa y no os daré más por saco... A la hora de comprobar si la nueva tabla es legal (que siempre caerá la pelota), tengo que mirar si nunca se cumple esto: (http://imageshack.com/a/img37/9678/k05j.jpg) entonces para solucionar esto pongo en el switch: Código
Pero actua como si nada, como si estuviera correcto Error o tengo inicializado en el principio como 0 Título: Re: Problema contador en C Publicado por: leosansan en 3 Marzo 2014, 08:06 am Leosansan, no sabes como te lo agradezco, sin ti aún estaría estancado en el principio ;D .......................................................................... Por último, ya sólo tengo un fallo más, y con eso ya habré terminado el programa y no os daré más por saco... A la hora de comprobar si la nueva tabla es legal (que siempre caerá la pelota), tengo que mirar si nunca se cumple esto: (http://imageshack.com/a/img37/9678/k05j.jpg) entonces para solucionar esto pongo en el switch: .................................................................. Pero actua como si nada, como si estuviera correcto Error o tengo inicializado en el principio como 0 Supongo que partimos de que la matriz inicial es válida y que el problema surge al cambiar un valor de la matriz y aparecer la "trampa" que puede encerrar a la pelota , ¿O.K?. En tal caso habrá que validar el cambio hecho, en el sentido que si ha provocado una "trampa" debe devolver el valor que había, vamos deshacer el cambio introducido. Eso lo consigues así: Código
Introduce 0 y 3 para que veas lo que sucede. Lo que te planteo es una opción. A mí me gustaría más hacer la validación en el case 1, pero respeto tu opción, es igualmente válida. ¡¡¡¡ Saluditos! ..... !!!! (http://st.forocoches.com/foro/images/smilies/aaaaa.gif) Título: Re: Problema contador en C Publicado por: People95 en 3 Marzo 2014, 12:01 pm Pues con esto mi parte del programa ya está acabado!!
Gracias de verdad, sin tu ayuda hubiese sacado un 0 jjaja Título: Re: Problema contador en C Publicado por: leosansan en 3 Marzo 2014, 16:35 pm Pues con esto mi parte del programa ya está acabado!! Gracias de verdad, sin tu ayuda hubiese sacado un 0 jjaja De nada, da gusto ayudar, primero a gente agradecida, y segundo, a quien previamente se lo ha currado. Ánimos y para otra ya sabes donde encontrarnos. ¡¡¡¡ Saluditos! ..... !!!! (http://st.forocoches.com/foro/images/smilies/aaaaa.gif) Título: Re: Problema contador en C Publicado por: dato000 en 4 Marzo 2014, 01:30 am De nada, da gusto ayudar, primero a gente agradecida, y segundo, a quien previamente se lo ha currado. Ánimos y para otra ya sabes donde encontrarnos. ¡¡¡¡ Saluditos! ..... !!!! (http://st.forocoches.com/foro/images/smilies/aaaaa.gif) uds son grandes, hacia rato no venia por aquí por el trabajo (pero ya supe como meterme jejejejeje, aunque lastima que tor no me sirva por lo que se guardan registros...pero no pasa nada ni que fuera porno) y realmente, realmente los admiro, se toman esto muy en serio y al mismo tiempo se lo toman como pasatiempo, hobby y juego, al final todos disfrutamos, vaya, lastima que no pueda nisiquiera instalar un maldito notepad++ para pasar el tiempo programando... (http://media.animevice.com/uploads/3/38050/730261-bro_fist_poster_by_foxpaw_apprentice_d4ps292.jpg) Genial todo lo que han hecho, realmente, queria sacar esto de mi ser, genial todo esto. Título: Re: Problema contador en C Publicado por: leosansan en 4 Marzo 2014, 04:26 am Se te echa de menos por estos lares amigo dato000.
Espero puedas "puentear" las dificultades del trabajo y seguir colaborando activamente por aquí. Hasta entonces, un fuerte saludo y puestos a ser positivos "al menos tienes trabajo". ¡¡¡¡ Saluditos! ..... !!!! (http://st.forocoches.com/foro/images/smilies/aaaaa.gif) |