Menú

Mostrar Mensajes

Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.

Mostrar Mensajes Menú

Mensajes - deserto

#1
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.
#2
ok intentare emprolijar el asunto haber si encuentro el error. Gracias por responder!!
#3
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 (cpp) [Seleccionar]
//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.
Citarfor (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.
#4
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