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

 

 


Tema destacado: Rompecabezas de Bitcoin, Medio millón USD en premios


  Mostrar Mensajes
Páginas: [1] 2
1  Programación / Programación C/C++ / Re: Generar números aleatorios sin repeticiones. en: 2 Diciembre 2016, 05:13 am
Bueno entonces te corrijo el código:  ;-)

Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <time.h>
  4. #include <ctype.h>
  5. #include <windows.h>
  6.  
  7. int tableroNumerico[6][6];// aqui va a estar el tablero numerico original
  8. int tableroNumerico2[6][6];//aqui va a estar el tablero desordenado
  9. char tableroFigura[6][6];//aqui va a estar el tablero con la figura original
  10. char tableroFigura2[6][6];//aqui va a estar el tablero desordenado
  11. int repetidos[36];//este vector es para revisar los numeros repetidos en el rand
  12.  
  13. int generarNumero(int *c)
  14. {
  15. int numero;
  16. bool distinto=false;
  17.  
  18.    while(distinto==false)
  19.    {  
  20.  
  21.        int cont=0;
  22.        numero=rand()%35+1;
  23.  
  24.        for(int i=0; i<36; i++)
  25.        {
  26.            if(repetidos[i]==numero)
  27.                cont++;
  28.        }
  29.        if(cont==0)
  30.        {
  31.            distinto=true;
  32.            repetidos[*c]=numero;
  33.        }
  34.  
  35.    }  
  36. return numero;  
  37. }
  38.  
  39. void llenarTablero(char t)
  40. {
  41.  
  42.    int cont=0;
  43.    int aux=0;  
  44.    if(t=='f')
  45.    {
  46.  
  47.    }
  48.    else
  49.    {
  50.        for(int i=0; i<6; i++)
  51.            {
  52.             for(int j=0; j<6; j++)
  53.             {
  54.                if(i==0 && j==5){
  55.  
  56.                    tableroNumerico2[i][j]=0;
  57.                    repetidos[i*j] = 0;
  58.                }
  59.                else
  60.                    {
  61.                     aux=generarNumero(&cont);
  62.                     tableroNumerico2[i][j]=aux;
  63.                    }
  64.                cont++;        
  65.              }
  66.            }    
  67.    }  
  68. }
  69.  
  70. void mostrarTablero(char t) //Aqui imprimo el tablero despues de cada movimiento
  71. {
  72.    if(t=='f')
  73.    {
  74.  
  75.    }
  76.    else
  77.    {
  78.        for(int i=0; i<6; i++)
  79.            {
  80.             for(int j=0; j<6; j++)
  81.                {
  82.                 if(tableroNumerico2[i][j]==0)
  83.                    printf("[  ]");
  84.                  else
  85.                    printf("[ %i ]", tableroNumerico2[i][j]);  
  86.                }  
  87.                printf(" \n");    
  88.            }
  89.    }
  90. }
  91. main()
  92. {
  93.  
  94. srand(time(NULL));//Cambio el seed con el tiempo de ese momento.
  95.  for (int i=0; i<36; i++)
  96.    repetidos[i] = 999;    //cualquier numero que este fuera del intervalo  [0 - 35]
  97.  
  98.  char tipoTablero='n';
  99.  llenarTablero(tipoTablero) ;
  100.  mostrarTablero(tipoTablero);
  101.  system("pause");
  102. }
  103.  
Mil gracias, no lograba salir de este problemita jajaja :D :D ;-)
2  Programación / Programación C/C++ / Re: Generar números aleatorios sin repeticiones. en: 2 Diciembre 2016, 04:52 am
Debes hacer que el método srand se ejecute solo una vez al principio del programa en el método main, ahí en dónde lo pusiste hace que el número aleatorio generado se repita varias veces; 23 23 23 23 23 11 11 11 11 33 33 33 33.

Otro detalles es que generas un número aleatorio de 34 posibles, y como tienes una matriz de 36 elementos es normal que falte 2 números más para que se pueda llenar la matriz sin que ninguno se repita.

Cuidado con esto:

Código
  1. for (int i=0; i<35; i++)
  2.    repetidos[i]=0;

Te estás pasando del tamaño del vector  :silbar:


Ok, cambie el srand al main, lleno manualmente uno de los espacios con 0(necesito que este en ese espacio especifico) entonces me quedan 35 números por arreglar, cambie el vector repetidos a uno de 35 espacios y aun me da un bucle  :( :( .
3  Programación / Programación C/C++ / Re: Generar números aleatorios sin repeticiones. en: 2 Diciembre 2016, 02:50 am
Entonces genera una matriz ordenada y luego desordenala. Será mas fácil.

Edito:
Crea un vector de tamaño 36 con valores de 0 a 35, desordenalo y luego lo transformas a la matriz.

Ok, gracias! Intentare eso.
4  Programación / Programación C/C++ / Re: Generar números aleatorios sin repeticiones. en: 2 Diciembre 2016, 02:39 am
No se exactamente que es lo que quieres, pero ... ¿Por que no inicias la matriz con los números ordenados y luego la desordenas?

Lo que quiero es tener los números del 1 al 35 ordenados en la matriz, necesito que sea random ya que es para un juego y cada ves que se juegue debe empezar de manera distinta, no se si eso lo pueda hacer desordenando la matriz.
5  Programación / Programación C/C++ / Generar números aleatorios sin repeticiones. en: 2 Diciembre 2016, 02:22 am
tengo este código para generar números aleatorios sin que se repitan y guardarlos en una matriz, creo que se me queda en un loop infinito y no logro ver porque, he tratado de generar los números sin que se repitan de varias maneras y no lo logro, ayuda!!
(el codigo esta incompleto, extraje la parte en la que necesito ayuda)
Gracias :D

Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <time.h>
  4. #include <ctype.h>
  5. #include <windows.h>
  6.  
  7. int tableroNumerico[6][6];// aqui va a estar el tablero numerico original
  8. int tableroNumerico2[6][6];//aqui va a estar el tablero desordenado
  9. char tableroFigura[6][6];//aqui va a estar el tablero con la figura original
  10. char tableroFigura2[6][6];//aqui va a estar el tablero desordenado
  11. int repetidos[34];//este vector es para revisar los numeros repetidos en el rand
  12.  
  13. int generarNumero(int *c)
  14. {
  15. int numero;
  16. bool distinto=false;
  17.  
  18.    while(distinto==false)
  19.    {  
  20.        srand(time(NULL));//Cambio el seed con el tiempo de ese momento.
  21.        int cont=0;
  22.        numero=rand()%34+1;
  23.        for(int i=0; i<34; i++)
  24.        {
  25.            if(repetidos[i]==numero)
  26.                cont++;
  27.        }
  28.        if(cont==0)
  29.        {
  30.            distinto=true;
  31.            repetidos[*c]=numero;
  32.        }
  33.  
  34.    }  
  35. return numero;  
  36. }
  37.  
  38. void llenarTablero(char t)
  39. {
  40.  
  41.    int cont=0;
  42.    int aux=0;  
  43.    if(t=='f')
  44.    {
  45.  
  46.    }
  47.    else
  48.    {
  49.        for(int i=0; i<6; i++)
  50.            {
  51.             for(int j=0; j<6; j++)
  52.             {
  53.                if(i==0 && j==5)
  54.                    tableroNumerico2[i][j]=0;
  55.                else
  56.                    {
  57.                     aux=generarNumero(&cont);
  58.                     tableroNumerico2[i][j]=aux;
  59.                     cont++;  
  60.                    }      
  61.              }
  62.            }    
  63.    }  
  64. }
  65.  
  66. void mostrarTablero(char t) //Aqui imprimo el tablero despues de cada movimiento
  67. {
  68.    if(t=='f')
  69.    {
  70.  
  71.    }
  72.    else
  73.    {
  74.        for(int i=0; i<6; i++)
  75.            {
  76.             for(int j=0; j<6; j++)
  77.                {
  78.                 if(tableroNumerico2[i][j]==0)
  79.                    printf("[  ]");
  80.                  else
  81.                    printf("[ %i ]", tableroNumerico2[i][j]);  
  82.                }  
  83.                printf(" \n");    
  84.            }
  85.    }
  86. }
  87. main()
  88. {
  89.  for (int i=0; i<35; i++)
  90.    repetidos[i]=0;
  91.  char tipoTablero='n';
  92.  llenarTablero(tipoTablero) ;
  93.  mostrarTablero(tipoTablero);
  94.  system("pause");
  95. }
6  Programación / Programación C/C++ / Re: Ayuda con rellenar una matriz con rand() en: 2 Julio 2016, 04:53 am
ya vi el error el segundo for dentro de la funcion llenar no  tiene incremento en el contador y el segundo for dentro del main no tiene llaves.

Saludos
Gracias!, ahora si sirve jajaja se me pasaron esos detalles.
7  Programación / Programación C/C++ / Re: Ayuda con rellenar una matriz con rand() en: 2 Julio 2016, 04:22 am
Hola no se como estes llamando a la funcion pero el main deberia de quedar asi:

Código
  1. main()
  2. {
  3. char nombre[20];
  4. printf("Candy Crush!\n");
  5. system("pause");
  6. printf("Ingrese su nombre: \n");
  7. scanf("%s", nombre);
  8. printf("REGLAS:\n -Bienvenido al juego Candy Crush! a continuacion se explicaran las regalas del juego \n-Juego e un jugador\n-Se cuenta con un tablero de 9x9 con cada espacio relleno con gelatina\n-El tablero estara repleto de 6 tipos distintos de caramelos\n-El objetivo del juego es unir los caramelos en filas de 3 o 4 para eliminar las gelatinas en los espacios en los que se unan los caramelos\n-Si se unen 4 caramelos del mismo color se creara un caramelo rayado que al usarse elimina una fila o columna de gelatina\n-Tienes 40 movimientos para eliminar todas las gelatinas\n-Suerte!\n");
  9. //Aqui llama a la funcion
  10. for(int i=0; i<9; i++)
  11. {
  12.  for(int j=0; j<9; j++)
  13.   printf("       %i ", tablero[i][j]);
  14.   printf("\n");
  15. }
  16.  
  17.  
  18. }

Saludos!
Si ahi donde pones que llame a la funcion es donde pongo llamartablero();, pero por alguna razon no imprime nada antes por lo menos me imprimia los 0s jajaja
8  Programación / Programación C/C++ / Re: Ayuda con rellenar una matriz con rand() en: 2 Julio 2016, 04:03 am
Hola.

Segun veo en ningun momento llamas a la funcion llenartablero()

La otra es que hubieras continuado el tema en el post que abristes hace algunos días.

Saludos
Cuando llamo a la funcion ahora no se imprime nada  :-\, la verdad no tengo ni idea de cual podria ser el problema
9  Programación / Programación C/C++ / Re: Ayuda con rellenar una matriz con rand() en: 2 Julio 2016, 03:01 am
Ah ok ok, pensaba que como tablero era una variable global no habia que llamarla en el main, gracias! la proxima sigo el tema en un solo post, capaz tenga otras dudas epara este codigo!
10  Programación / Programación C/C++ / Ayuda con rellenar una matriz con rand() en: 2 Julio 2016, 02:52 am
Buenas necesito ayuda con este codigo lo que quiero hacer es rellenar una matriz con numeros del 1 al 5 lo que se me ocurrio fue usar la funcion rand() pero me dan todos los espacios de la matriz 0, no se si este implementando bien la funcion o sea un error pasando los datos. Gracias de antemano!
Código:
#include <stdio.h>
#include <stdlib.h>
int tablero[9][9];

void llenartablero()
{
for (int i=0; i<9; i++)
{
for(int j=0; j<9;)
{
int X=0;
X = rand() % 6;
tablero[i][j]=X;
}
}
}


main()
{
char nombre[20];
printf("Candy Crush!\n");
system("pause");
printf("Ingrese su nombre: \n");
scanf("%s", nombre);
printf("REGLAS:\n -Bienvenido al juego Candy Crush! a continuacion se explicaran las regalas del juego \n-Juego e un jugador\n-Se cuenta con un tablero de 9x9 con cada espacio relleno con gelatina\n-El tablero estara repleto de 6 tipos distintos de caramelos\n-El objetivo del juego es unir los caramelos en filas de 3 o 4 para eliminar las gelatinas en los espacios en los que se unan los caramelos\n-Si se unen 4 caramelos del mismo color se creara un caramelo rayado que al usarse elimina una fila o columna de gelatina\n-Tienes 40 movimientos para eliminar todas las gelatinas\n-Suerte!\n");
for(int i=0; i<9; i++)
{
for(int j=0; j<9; j++)
printf("       %i ", tablero[i][j]);
printf("\n");
}


}



Páginas: [1] 2
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines