Autor
|
Tema: No encuentro el error, ayuda o_o (Leído 3,899 veces)
|
|
eferion
Desconectado
Mensajes: 1.248
|
Pretendes que alguien se copie el código a partir de las capturas de imágenes y lo depure por ti?? si es así, suerte.
Esto no suele funcionar así... la cosa es que nos facilites un poco el trabajo. Nos pones la porción de código problemática (si es posible) y nos comentas de paso qué es lo que tendría que suceder... o qué sale mal.
Pero ya te digo yo que no veo muy probable que alguien se ponga a picar código sacado de 3 capturas de pantalla para darte una respuesta.
|
|
|
En línea
|
|
|
|
ivancea96
Desconectado
Mensajes: 3.412
ASMático
|
+1 a eferion. Si quieres que alguien lo vea y compile (la forma más fácil de localizar errores), pon el código así: int main(){ string a="etc etc"; }
|
|
|
En línea
|
|
|
|
|
deserto
Desconectado
Mensajes: 4
|
Ante todo gracias por responder. Y NO, no sabía utilizar el código. Soy nuevo en el foro, y hace tiempo que no me registro en uno. Creí que la forma más fácil era mostrando esas capturas. //caballoLoco// #include <stdio.h> #include <stdlib.h> #define LIMITE 8 #define LONG 100 int ejex(int x);int ejey(int y); int main() { int tablero[LIMITE][LIMITE]={{0},{0}}; int caminos[LONG]; int x, xx, yy, y;int direc= 0;int sepuede;int contador= 1; int i, j;int elegido= 0; int m, n;// para inicializar tablero// scanf("%d",&xx);//elegiendo posicion de arranque// scanf("%d",&yy); tablero[x][y]= 1; srand(time(NULL)); for (j=1; j <= LONG; j++){ for (m= 0; m < LIMITE-1; m++){ //inicializando tablero// for (n= 0; n < LIMITE-1; n++) tablero[m][n]= 0; } tablero[x][y]= 1; sepuede= 0; contador= 0; xx= x; yy= y; while (sepuede != 1) { elegido= rand()%7; x+= ejex(elegido); //moviendose// y+= ejey(elegido); if ((x < 0) || (y > 7)){ printf("Se sale del tablero"); sepuede= 1; } else { if (( x > 7) || ( y < 0)){ printf("Se sale del tablero"); sepuede= 1; } else { if ( tablero[x][y]== 1){ printf("Ya se pasó por acá"); sepuede= 1; } else { tablero[x][y]= 1; contador+= 1; printf("\n\n"); for (i=0; i < 8; i++) { //Viendo el tablero// printf("%d%d%d%d%d%d%d%d\n", tablero[0][i], tablero[1][i], tablero[2][i], tablero[3][i], tablero[4][i], tablero[5][i], tablero[6][i], tablero[7][i]); //graficando lo que pasa// } } } } } printf("\n\n"); printf("Casilleros: %d\n",contador); caminos[j-1]= contador; } printf("INTENTO distancia\n"); for (j=0; j < LONG; j++) //Imprime caminos// printf("%d----%d\n", j, caminos[j]); system("PAUSE"); return 0; } int ejex(int x) { int fila[LIMITE]={2,1,-1,-2,-2,-1,1,2}; return fila[x]; } int ejey(int y) { int columna[LIMITE]={-1,-2,-2,-1,1,2,2,1}; return columna[y]; }
Primero intente hacer el codigo para que el caballo haga un solo recorrido al azar y funciono bien, pero despues, para que haga 100 intentos seguidos utilice un for. for (j=1; j <= LONG; j++){ No me tira errores de sintaxis, pero cuando lo ejecuto, ingreso la posicion de inicio y despues de un par de segundos me tira error.
|
|
« Última modificación: 8 Septiembre 2013, 03:03 am por simorg »
|
En línea
|
|
|
|
do-while
Desconectado
Mensajes: 1.276
¿Habra que sacarla de paseo?
|
¡Buenas!
Con semejante caos de código no se donde puede estar el error. Si tienes un error de ejecución lo mas posible es que en algún momento intentes acceder a una posición de memoria incorrecta (que te salgas de los límites de algún vector).
Tienes un montón de variables. Intenta hacer el código mas limpio utilizando funciones. Por ejemplo:
- Una función que dada la posición del caballo y el movimiento que quieres realizar, te diga si el movimiento es correcto o no.
- Una función que te inicialice el tablero.
- Una función que te imprima el tablero.
- Una función, lo mas sencillo es que sea recursiva, que partiendo de una posición inicial realice los movimientos de forma automática hasta que no haya mas posibilidades.
De esta forma tu código estará separado en tareas mas sencillas en las que encontrar errores te resultará mas fácil y será mucho mas facil de leer, ya que cada una de las funciones tendrá unas pocas líneas de código y sus acciones serán muy concretas.
¡Saludos!
|
|
|
En línea
|
- Doctor, confundo los números y los colores. - Vaya marrón. - ¿Marrón? ¡Por el culo te la hinco!
|
|
|
deserto
Desconectado
Mensajes: 4
|
ok intentare emprolijar el asunto haber si encuentro el error. Gracias por responder!!
|
|
|
En línea
|
|
|
|
ivancea96
Desconectado
Mensajes: 3.412
ASMático
|
1: El error es un Access violatión, al menos en mi máquina, con OllyDBG. 2: A base de system("pause"), encontré el error en tablero[x][y]= 1;
(Después de los scanf()) Las variables "x" e "y" no están inicializadas. Quizás lo hayas confundido con "xx" e "yy". Eso ya es tu código, y no me paré mucho a entender cómo funciona. Tienes un montón de variables
Tiene toda la razón. Suerte
|
|
« Última modificación: 7 Septiembre 2013, 16:24 pm por ivancea96 »
|
En línea
|
|
|
|
deserto
Desconectado
Mensajes: 4
|
muchas gracias ivancea96 , do-while!!. Esas variables estaban un poco alpedo. Ahora modularice un poco y me quedo esto: #include <stdio.h> #include <stdlib.h> #define LIMITE 8 #define LONG 100
void mostrar(int matriz[][LIMITE]); void inicializar(int matriz[][LIMITE]); int ejex(int x);int ejey(int y); int mover(int y, int x, int matriz[][LIMITE]);
int main() { int tablero[LIMITE][LIMITE]; int caminos[LONG]={0}; int x, y, i; srand(time(NULL)); scanf("%d", &x); scanf("%d", &y); for (i= 1; i <= LONG; i++) { inicializar(tablero); tablero[y][x]= 1; caminos[i-1]= mover(y, x, tablero); } printf("Intento distancia\n"); for (i=0; i < LONG; i++) printf("%d\t\t%d\n", i+1, caminos[i]); mostrar(tablero); system("PAUSE"); return 0; }
void inicializar(int matriz[][LIMITE]) { int i, j; for (i= 0; i < LIMITE; i++){ for (j= 0; j < LIMITE; j++) matriz[i][j]= 0; } return; } int ejey(int y) { int fila[LIMITE]={2,1,-1,-2,-2,-1,1,2}; return fila[y]; } int ejex(int x) { int columna[LIMITE]={-1,-2,-2,-1,1,2,2,1}; return columna[x]; } int mover(int y, int x,int matriz[][LIMITE]) { int sepuede= 1; int elegido, fx, fy; int contador= 0; fy= y; fx= x; while (sepuede == 1) { elegido= rand()% 7; fx+= ejex(elegido); fy+= ejey(elegido); if ((fx < 0) || (fx > 7)) sepuede= 0; else { if ((fy < 0) || ( fy > 7)) sepuede= 0; else { matriz[fy][fx]= 1; contador+= 1; } } } return contador; } void mostrar(int matriz[][LIMITE]) { int i,j; for (i= 0; i < LIMITE; i++){ for (j= 0; j < LIMITE; j++) printf("%d ", matriz[i][j]); printf("\n"); } return; }
Se ejecuta bien, pero me llama un poco la atención que ningun intento supere de los 15 o 17 movimientos. No había modularizado antes por que no sabía pasar matrices a la función xD.
|
|
|
En línea
|
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
Error Ejercicio JButton, no encuentro el error[Resuleto, se puede cerrar]
Java
|
MinW
|
0
|
1,953
|
27 Diciembre 2013, 17:59 pm
por MinW
|
|
|
ayuda no encuentro el error!
PHP
|
ediporey2000
|
1
|
1,924
|
23 Febrero 2014, 22:49 pm
por engel lex
|
|
|
[Resuelto] AYUDA esto me esta mantando (CODIGO PHP) no encuentro el error
PHP
|
invdoolca
|
1
|
1,981
|
30 Enero 2015, 22:05 pm
por MinusFour
|
|
|
AYUDA no encuentro error . C++
Programación C/C++
|
seanagu
|
3
|
3,150
|
19 Octubre 2017, 17:03 pm
por srWhiteSkull
|
|
|
No encuentro el error ayuda! C
Programación C/C++
|
Mozzard
|
4
|
2,030
|
14 Noviembre 2018, 18:52 pm
por Beginner Web
|
|