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

 

 


Tema destacado: Usando Git para manipular el directorio de trabajo, el índice y commits (segunda parte)


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Problema contador en C
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] 2 3 Ir Abajo Respuesta Imprimir
Autor Tema: Problema contador en C  (Leído 8,619 veces)
People95

Desconectado Desconectado

Mensajes: 10


Ver Perfil
Problema contador en C
« 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í:



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;
}



En línea

ivancea96


Desconectado Desconectado

Mensajes: 3.412


ASMático


Ver Perfil WWW
Re: Problema contador en C
« Respuesta #1 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


En línea

People95

Desconectado Desconectado

Mensajes: 10


Ver Perfil
Re: Problema contador en C
« Respuesta #2 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
« Última modificación: 1 Marzo 2014, 19:57 pm por People95 » En línea

leosansan


Desconectado Desconectado

Mensajes: 1.314


Ver Perfil
Re: Problema contador en C
« Respuesta #3 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! ..... !!!!



En línea

People95

Desconectado Desconectado

Mensajes: 10


Ver Perfil
Re: Problema contador en C
« Respuesta #4 en: 1 Marzo 2014, 20:21 pm »

Gracias!!!! A ver ai ahora...

Código
  1.  do{
  2.  printf("\nIntroducir el numero de columna por el cual desea lanzar la primera bola: ");
  3.  scanf("%d",&inicio);
  4.  }while(inicio>=9);
  5.  
  6.  do{
  7.  printf("\nEn caso de encontrarse con un obstaculo, en que direccion quiere que se dirija la bola, derecha (D) o izquierda (I): ");
  8.  fflush(stdin);
  9.  scanf("%c", &direccion);
  10.  }while(direccion!='D' && direccion!='d' && direccion!='I' && direccion!='i');
  11.  
  12.  inicio=matriu[0][inicio];
  13.  
  14.  contador=0;
  15.  while(i++){
  16.  contador +=1;
  17.  }
  18.  
  19.  for(i=0;i<10;i++)
  20.  {
  21.     printf("\t");
  22.     for(j=0;j<10;j++)
  23.         {
  24.          //if(matriu[i][j]==matriu[0][inicio])
  25.          //  printf("%d ",contador);
  26.         if(matriu[i][j]==1)
  27.            printf("X ");
  28.  else
  29.  {
  30.  if(matriu[i][j] == matriu[i][inicio])
  31.           printf("&d",contador");
  32.          else (matriu[i][j]==0 && matriu[i][j]==0 != matriu[i][inicio])
  33.              printf(". ");
  34.     }}printf("\n");
  35.  }
  36.  
  37.  contador=0;
  38.  while(i++){
  39.    contador +=1;
  40.  }
  41. }
En línea

ivancea96


Desconectado Desconectado

Mensajes: 3.412


ASMático


Ver Perfil WWW
Re: Problema contador en C
« Respuesta #5 en: 1 Marzo 2014, 20:34 pm »

Código
  1.  contador=0;
  2.  while(i++){
  3.    contador +=1;
  4.  }
  5. }
Eso que hace?



Qué quieres que cuente tu contador??? Número de pasos?
En línea

People95

Desconectado Desconectado

Mensajes: 10


Ver Perfil
Re: Problema contador en C
« Respuesta #6 en: 1 Marzo 2014, 21:10 pm »

Exacto, por cada paso que da hacia bajo o hacia derecha/izquierda sumar 1
En línea

ivancea96


Desconectado Desconectado

Mensajes: 3.412


ASMático


Ver Perfil WWW
Re: Problema contador en C
« Respuesta #7 en: 1 Marzo 2014, 21:17 pm »

En prime lugar:

Código
  1.  contador=0;
  2.  while(i++){
  3.  contador +=1;
  4.  }

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.
En línea

leosansan


Desconectado Desconectado

Mensajes: 1.314


Ver Perfil
Re: Problema contador en C
« Respuesta #8 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:



Código
  1. #include <stdio.h>
  2.  
  3. int main()
  4. {
  5.  int inicio,i,j,cont=0,flag=0;
  6.  char direccion;
  7.  int matriu[10][10]={
  8.  {0,0,0,0,0,0,0,0,0,0},
  9.  {0,1,0,0,1,0,0,0,1,0},
  10.  {0,1,0,1,0,0,0,1,0,0},
  11.  {0,1,0,0,0,0,1,0,0,0},
  12.  {0,0,0,0,0,0,0,0,0,1},
  13.  {0,1,1,1,1,0,0,0,1,0},
  14.  {0,0,0,0,0,0,0,1,0,0},
  15.  {0,0,0,0,0,0,1,0,0,0},
  16.  {0,0,0,0,0,1,0,0,0,0},
  17.  {0,0,0,0,0,0,0,0,0,0},
  18.  };
  19.  
  20.  do{
  21.    printf("\nIntroducir el numero de columna por el cual desea lanzar la primera bola (1-10): ");
  22.    scanf("%d",&inicio);
  23.  }while(inicio>=11);
  24.  inicio--;
  25.  
  26.  do{
  27.    printf("\nEn caso de encontrarse con un obstaculo, en que direccion\n quiere que se dirija la bola, derecha (D-d) o izquierda (I-i): ");
  28.    scanf(" %c", &direccion);
  29.  }while(direccion!='D' && direccion!='d' && direccion!='I' && direccion!='i');
  30.  for(i=0;i<10;i++)
  31.  {
  32.     printf("\t\t");
  33.     for(j=0;j<10;j++)
  34.      {
  35.         if(matriu[i][j]==1)
  36.            printf("X ");
  37.          else
  38.            printf(". ");
  39.     }
  40.     printf("\n");
  41.  }
  42.  i=0,j=inicio,cont=2;
  43.  matriu[i][j]=cont++;
  44.  while(i<9){
  45.    if ((j==-1 ||  j==10) ){
  46.      puts("FIN ANTES DE TIEMPO");
  47.      flag=1;
  48.      break;
  49.    }
  50.    else if (matriu[i+1][j]==0)
  51.      matriu[++i][j]=cont++;
  52.    else if (direccion=='D' || direccion=='d'&& matriu[i][j+1]==0 )
  53.      matriu[i][++j]=cont++;
  54.    else if (direccion=='D' || direccion=='d'&& matriu[i][j+1]==1 ){
  55.      puts("FIN ANTES DE TIEMPO");
  56.      flag=1;
  57.      break;
  58.    }
  59.    else if (direccion=='I' || direccion=='i' && matriu[i][j-1]==0)
  60.      matriu[i][--j]=cont++;
  61.    else if (direccion=='I' || direccion=='i' && matriu[i][j-1]==1){
  62.      puts("FIN ANTES DE TIEMPO");
  63.      flag=1;
  64.      break;
  65.    }
  66.  }
  67.  if (flag==0)
  68.    puts("FINAL EXITOSO");
  69.  for(i=0;i<10;i++)
  70.  {
  71.     printf("\t\t");
  72.     for(j=0;j<10;j++)
  73.      {
  74.         if(matriu[i][j]==1)
  75.            printf("X ");
  76.         else if(matriu[i][j]==0 )
  77.            printf(". ");
  78.         else
  79.            printf("%d ",matriu[i][j]-2);
  80.     }
  81.     printf("\n");
  82.  }
  83.  return 0;
  84. }
  85.  

Mejora lo, es lo que me ha salido a bote pronto y a estas horas ya estoy de retirada.

¡¡¡¡ Saluditos! ..... !!!!




En línea

People95

Desconectado Desconectado

Mensajes: 10


Ver Perfil
Re: Problema contador en C
« Respuesta #9 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
  1. void cambiartabla (int matriu[50][50]){
  2.  
  3. int i,j,fila,columna,error=0;
  4. char seguir;
  5.  
  6. while(seguir!=2)
  7. {
  8. printf("\n");
  9.        printf("Presiona 1 si quieres seguir cambiando valores.\n");
  10. printf("Presiona 2 si quieres ver la tabla.\n");
  11.  
  12. scanf("%d",&seguir);
  13.  
  14. switch(seguir)
  15. {
  16. case 1:
  17.  
  18. do{
  19.   printf("\nIntroducir la fila del valor que quieres cambiar (1-50): ");
  20.     scanf("%d",&columna);
  21.   printf("\nIntroducir la columna del valor que quieres cambiar (1-50): ");
  22.   scanf("%d",&fila);
  23. }while(columna>=51 && fila>=51);
  24. break;
  25.  
  26. default:
  27. printf("El numero introducido es incorrecto.\n");
  28.  
  29. }
  30. }
  31.  
  32.  
  33.  i=columna,j=fila;  
  34.  
  35.   if (matriu[i][j] = 0)
  36.     matriu[i][j] = 1;
  37.    else matriu[i][j] = 0;
  38.  
  39.  
  40.  while(i<49){
  41.  
  42.    if (matriu[i+1][j]==1 && matriu[i-1][j]==1 && matriu[i][j-1]==1)
  43. printf("ERROR");
  44. error=1;
  45. break;
  46.  }
  47.  
  48.  for(i=0;i<50;i++)
  49.  {
  50.     printf("\t\t");
  51.     for(j=0;j<50;j++)
  52.      {
  53.         if(matriu[i][j]==1)
  54.            printf("X");
  55.         else if(matriu[i][j]==0 )
  56.            printf(".");
  57.     }
  58.     printf("\n");
  59.  }
  60. }

Pero al compilar me sigue dando la tabla igual, no me cambia los valores, por tanto creo que el fallo está aquí:

Código
  1.  i=columna,j=fila;  
  2.  
  3.   if (matriu[i][j] = 0)
  4.     matriu[i][j] = 1;
  5.    else matriu[i][j] = 0;
  6.  

Como lo puedo solucionar???
« Última modificación: 2 Marzo 2014, 20:10 pm por People95 » En línea

Páginas: [1] 2 3 Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Problema con contador en C « 1 2 »
Programación C/C++
-/lnkx/- 12 20,192 Último mensaje 7 Diciembre 2011, 18:53 pm
por A.ABAENA
Problema con contador, displays de 7 segmentos
ASM
dragonlady 0 2,133 Último mensaje 21 Junio 2015, 20:07 pm
por dragonlady
Problema contador python
Scripting
runas3 6 4,471 Último mensaje 1 Junio 2017, 12:53 pm
por runas3
Problema con contador en batch.
Scripting
Ezko 2 4,030 Último mensaje 11 Mayo 2018, 18:58 pm
por Ezko
problema con contador que toma segundos del sistema
ASM
FERNIIIIN 3 2,061 Último mensaje 28 Mayo 2019, 23:39 pm
por xv0
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines