elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Trabajando con las ramas de git (tercera parte)


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  No encuentro el error, ayuda o_o
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: No encuentro el error, ayuda o_o  (Leído 3,604 veces)
deserto

Desconectado Desconectado

Mensajes: 4


Ver Perfil
No encuentro el error, ayuda o_o
« en: 6 Septiembre 2013, 17:36 pm »

Hola a todos, estoy tratando de hacer un programita en c, pero al ejecutarlo me tira error. Alguien me puede decir en lo que me equivoque¿?.
  Se supone que es un tablero de ajedrez en el que el caballo se tiene que mover de manera aleatoria logrando el mayor recorrido posible, sin pasar por el mismo lugar. Tiene 100 intentos. Voy registrando en un vector la cantidad de movimientos de cada intento.

http://imageshack.us/a/img40/6745/x1nu.png
http://imageshack.us/a/img407/9054/p085.png
http://img580.imageshack.us/img580/4497/oqek.png



En línea

eferion


Desconectado Desconectado

Mensajes: 1.248


Ver Perfil
Re: No encuentro el error, ayuda o_o
« Respuesta #1 en: 6 Septiembre 2013, 23:14 pm »

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 Desconectado

Mensajes: 3.412


ASMático


Ver Perfil WWW
Re: No encuentro el error, ayuda o_o
« Respuesta #2 en: 7 Septiembre 2013, 00:21 am »

+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í:

Código
  1. int main(){
  2. string a="etc etc";
  3. }
En línea

flony


Desconectado Desconectado

Mensajes: 583



Ver Perfil
Re: No encuentro el error, ayuda o_o
« Respuesta #3 en: 7 Septiembre 2013, 00:35 am »

bue ya que estamos con fotos la respuesta sera con fotos
http://subefotos.com/ver/?c9026e139b7c28b544d74e8b1344558eo.jpg


aprovecho y te enseño a ingresar el code y los errores en la pagina
http://subefotos.com/ver/?97996c051c410dd194522c7ca2cd013do.jpg

aclaro esta interesante el desafio

buscando en google...es largo para pensarlo

http://hitmontop-ejerciciosresueltos.blogspot.com.ar/2011/01/deitelc425ccircuito-del-caballo.html

« Última modificación: 7 Septiembre 2013, 02:12 am por flony » En línea

si un problema no tiene solucion entonces no es un problema...es algo inevitable
deserto

Desconectado Desconectado

Mensajes: 4


Ver Perfil
Re: No encuentro el error, ayuda o_o
« Respuesta #4 en: 7 Septiembre 2013, 05:35 am »

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.
algo
Código
  1. //caballoLoco//
  2. #include <stdio.h>
  3. #include <stdlib.h>
  4. #define LIMITE 8
  5. #define LONG 100
  6. int ejex(int x);int ejey(int y);
  7. int main()
  8. {
  9.    int tablero[LIMITE][LIMITE]={{0},{0}};
  10.    int caminos[LONG];
  11.    int x, xx, yy, y;int direc= 0;int sepuede;int contador= 1;
  12.    int i, j;int elegido= 0;
  13.    int m, n;// para inicializar tablero//
  14.    scanf("%d",&xx);//elegiendo posicion de arranque//
  15.    scanf("%d",&yy);
  16.    tablero[x][y]= 1;
  17.    srand(time(NULL));
  18.    for (j=1; j <= LONG; j++){
  19.       for (m= 0; m < LIMITE-1; m++){ //inicializando tablero//
  20.           for (n= 0; n <  LIMITE-1; n++)
  21.              tablero[m][n]= 0;
  22.       }        
  23.       tablero[x][y]= 1;
  24.       sepuede= 0;
  25.       contador= 0;
  26.       xx= x;
  27.       yy= y;
  28.       while (sepuede != 1) {
  29.             elegido= rand()%7;
  30.             x+= ejex(elegido); //moviendose//
  31.             y+= ejey(elegido);
  32.             if ((x < 0) ||  (y > 7)){
  33.                 printf("Se sale del tablero");
  34.                 sepuede= 1;    
  35.             }
  36.             else {
  37.                  if (( x > 7) || ( y < 0)){
  38.                      printf("Se sale del tablero");
  39.                      sepuede= 1;
  40.                  }
  41.                  else {
  42.                       if ( tablero[x][y]== 1){    
  43.                           printf("Ya se pasó por acá");
  44.                           sepuede= 1;
  45.                       }
  46.                       else {    
  47.                           tablero[x][y]= 1;
  48.                           contador+= 1;
  49.                           printf("\n\n");
  50.                           for (i=0; i < 8; i++) { //Viendo el tablero//
  51.                                printf("%d%d%d%d%d%d%d%d\n", tablero[0][i], tablero[1][i], tablero[2][i], tablero[3][i],
  52.                                                             tablero[4][i], tablero[5][i], tablero[6][i], tablero[7][i]);                               //graficando lo que pasa//            
  53.                           }
  54.                       }
  55.                  }  
  56.             }  
  57.       }  
  58.       printf("\n\n");
  59.       printf("Casilleros: %d\n",contador);
  60.       caminos[j-1]= contador;
  61.    }
  62.    printf("INTENTO  distancia\n");
  63.    for (j=0; j < LONG; j++) //Imprime caminos//
  64.        printf("%d----%d\n", j, caminos[j]);
  65.    system("PAUSE");
  66.    return 0;
  67. }
  68. int ejex(int x)
  69. {
  70.    int fila[LIMITE]={2,1,-1,-2,-2,-1,1,2};
  71.    return fila[x];
  72. }
  73. int ejey(int y)
  74. {
  75.    int columna[LIMITE]={-1,-2,-2,-1,1,2,2,1};
  76.    return columna[y];
  77. }

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.
Citar
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 Desconectado

Mensajes: 1.276


¿Habra que sacarla de paseo?


Ver Perfil
Re: No encuentro el error, ayuda o_o
« Respuesta #5 en: 7 Septiembre 2013, 10:04 am »

¡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 Desconectado

Mensajes: 4


Ver Perfil
Re: No encuentro el error, ayuda o_o
« Respuesta #6 en: 7 Septiembre 2013, 13:33 pm »

ok intentare emprolijar el asunto haber si encuentro el error. Gracias por responder!!
En línea

ivancea96


Desconectado Desconectado

Mensajes: 3.412


ASMático


Ver Perfil WWW
Re: No encuentro el error, ayuda o_o
« Respuesta #7 en: 7 Septiembre 2013, 16:15 pm »

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
Código
  1. 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 :D
« Última modificación: 7 Septiembre 2013, 16:24 pm por ivancea96 » En línea

deserto

Desconectado Desconectado

Mensajes: 4


Ver Perfil
Re: No encuentro el error, ayuda o_o
« Respuesta #8 en: 15 Septiembre 2013, 19:38 pm »

muchas gracias ivancea96 , do-while!!. Esas variables estaban un poco alpedo. Ahora modularice un poco y me quedo esto:

Código:
#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

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Error Ejercicio JButton, no encuentro el error[Resuleto, se puede cerrar]
Java
MinW 0 1,813 Último mensaje 27 Diciembre 2013, 17:59 pm
por MinW
ayuda no encuentro el error!
PHP
ediporey2000 1 1,694 Último mensaje 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,760 Último mensaje 30 Enero 2015, 22:05 pm
por MinusFour
AYUDA no encuentro error . C++
Programación C/C++
seanagu 3 2,885 Último mensaje 19 Octubre 2017, 17:03 pm
por srWhiteSkull
No encuentro el error ayuda! C
Programación C/C++
Mozzard 4 1,742 Último mensaje 14 Noviembre 2018, 18:52 pm
por Beginner Web
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines