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)
| | |-+  [C++][Opiniones] Qué os parece esta forma de generar números aleatorios?
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: 1 2 [3] 4 Ir Abajo Respuesta Imprimir
Autor Tema: [C++][Opiniones] Qué os parece esta forma de generar números aleatorios?  (Leído 18,458 veces)
anonimo12121


Desconectado Desconectado

Mensajes: 1.813


Ver Perfil WWW
Re: [C++][Opiniones] Qué os parece esta forma de generar números aleatorios?
« Respuesta #20 en: 21 Marzo 2012, 21:04 pm »

haber ponlo aquí no te preocupes por el tamaño del post. Ahora mismo estoy haciendo un diseño que valga para el sudoku :) y estoy usando un método  bas de unos cuantos if que comprueba en el cuadrante que esta Y.X cada vez para que no haya ningun número similar ni el fila ni el la columna ni en el cuadrante.


En línea

Página para ganar Bitcoins y Dinero: http://earnbit.hol.es/
Video de YouTube con Hack para el LoL: http://adf.ly/5033746/youtube-lolemuhack
Si quieres ganar dinero con adfly entra y registrate aquí -> http://adf.ly/?id=5033746
Xandrete

Desconectado Desconectado

Mensajes: 210



Ver Perfil
Re: [C++][Opiniones] Qué os parece esta forma de generar números aleatorios?
« Respuesta #21 en: 21 Marzo 2012, 22:57 pm »

Bien. Aquí la implementación:

Código
  1. #include <cstdlib>
  2. #include <ctime>
  3. using namespace std;
  4.  
  5. template <class T>
  6. clist<T>::clist() {
  7. srand(time(NULL));
  8. act = NULL;
  9. s = 0;
  10. }
  11.  
  12. template <class T>
  13. clist<T>::~clist() {
  14. while (act != NULL) erase();
  15. }
  16.  
  17. template <class T>
  18. T clist<T>::elem() const {
  19. return act->info;
  20. }
  21.  
  22. template <class T>
  23. int clist<T>::size() const {
  24. return s;
  25. }
  26.  
  27. template <class T>
  28. bool clist<T>::empty() const {
  29. return s == 0;
  30. }
  31.  
  32. template <class T>
  33. clist<T> &clist<T>::operator=(const clist& cl) {
  34. while (act != NULL) erase();
  35. if (cl.act != NULL) {
  36. insert(cl.act->info);
  37. Node* aux = cl.act->next;
  38. while (aux != cl.act) {
  39. insert(aux->info);
  40. aux = aux->next;
  41. }
  42. s = cl.s;
  43. }
  44. return *this;
  45. }
  46.  
  47. template <class T>
  48. void clist<T>::insert(const T& inf) {
  49. Node* n = new Node;
  50. n->info = inf;
  51. if (act != NULL) {
  52. n->next = act;
  53. n->prev = act->prev;
  54. act->prev->next = n;
  55. act->prev = n;
  56. }
  57. else {
  58. n->next = n;
  59. n->prev = n;
  60. act = n;
  61. }
  62. ++s;
  63. }
  64.  
  65. template <class T>
  66. void clist<T>::erase() {
  67. if (act != NULL) {
  68. if (act == act->next) {
  69. delete act;
  70. act = NULL;
  71. }
  72. else {
  73. act->next->prev = act->prev;
  74. act->prev->next = act->next;
  75. Node* aux = act->prev;
  76. delete act;
  77. act = aux;
  78. }
  79. --s;
  80. }
  81. }
  82.  
  83. template <class T>
  84. void clist<T>::operator++() {
  85. if (act != NULL) act = act->next;
  86. }
  87.  
  88. template <class T>
  89. void clist<T>::operator--() {
  90. if (act != NULL) act = act->prev;
  91. }
  92.  
  93. template <class T>
  94. void clist<T>::rand_sel() {
  95. if (s > 0) {
  96. int r = rand()%s;
  97. while (r--) act = act->next;
  98. }
  99. }
  100.  

Quiero aclarar que esta clase no la he hecho sólo para esto.

¡Saludos!


En línea

anonimo12121


Desconectado Desconectado

Mensajes: 1.813


Ver Perfil WWW
Re: [C++][Opiniones] Qué os parece esta forma de generar números aleatorios?
« Respuesta #22 en: 21 Marzo 2012, 23:53 pm »

Gran código has puesto desde luego le voy a echar mi tiempo para verlo y aprenderlo puesto que he visto mientras bajaba la pantalla para darle a responder clases XD.

Aquí pongo el código que buscaba terminado, aunque me decepciona puesto que Xeracker, ya lo había echo antes  y con 14 años xD.
Es para generar sudoku

Código
  1. #include <iostream>
  2. #include <stdlib.h>
  3. #include <time.h>
  4. using namespace std;
  5. int lista[10][10];
  6. int num=0;
  7. void Generator(){;
  8.    srand(time(0));
  9.    for(int y=1;y<10;y++){
  10.        for(int x=1;x<10;x++){
  11.            int c=0;
  12.            for(bool ok=false ;ok==false;c++){
  13.                num=0;ok=true;
  14.                while(num==0)num=rand()%10;
  15.                for(int i=x;i>0;i--)if(lista[y][i]==num)ok=false;
  16.                for(int i=y;i>0;i--)if(lista[i][x]==num)ok=false;
  17.                if((y%3==2) && (x%3==1) && ((num==lista[y-1][x+1]) || (num==lista[y-1][x+2]) ))ok=false;
  18.                if((y%3==2) && (x%3==2) && ((num==lista[y-1][x-1]) || (num==lista[y-1][x+1]) ))ok=false;
  19.                if((y%3==2) && (x%3==0) && ((num==lista[y-1][x-2]) || (num==lista[y-1][x-1]) ))ok=false;
  20.                if((y%3==0) && (x%3==1) && ((num==lista[y-2][x+1]) || (num==lista[y-2][x+2]) || (num==lista[y-1][x+1]) || (num==lista[y-1][x+2])))ok=false;
  21.                if((y%3==0) && (x%3==2) && ((num==lista[y-2][x-1]) || (num==lista[y-2][x+1]) || (num==lista[y-1][x-1]) || (num==lista[y-1][x+1])))ok=false;
  22.                if((y%3==0) && (x%3==0) && ((num==lista[y-2][x-2]) || (num==lista[y-2][x-1]) || (num==lista[y-1][x-2]) || (num==lista[y-1][x-1])))ok=false;
  23.  
  24.                if(c==50){
  25.                    x=1;
  26.                    y=1;
  27.                }
  28.            }
  29.            lista[y][x]=num;
  30.        }
  31.    }
  32. }
  33. int main(int argc,char *argv[]){
  34.    Generator();
  35.    //////////////////////////////////////
  36.    //// IMPRIMIR /////////////////////////
  37.    for(int y=1;y<10;y++){
  38.        cout << "\nLine -> ";
  39.        for(int x=1;x<10;x++){
  40.            cout << lista[y][x] << "-";
  41.        }
  42.    }
  43.    return 0;
  44. };

Que !! bonito queda .


Haber si mañana ya termino este proyecto :) .
« Última modificación: 22 Marzo 2012, 02:28 am por Dr.Hacker++ » En línea

Página para ganar Bitcoins y Dinero: http://earnbit.hol.es/
Video de YouTube con Hack para el LoL: http://adf.ly/5033746/youtube-lolemuhack
Si quieres ganar dinero con adfly entra y registrate aquí -> http://adf.ly/?id=5033746
Xandrete

Desconectado Desconectado

Mensajes: 210



Ver Perfil
Re: [C++][Opiniones] Qué os parece esta forma de generar números aleatorios?
« Respuesta #23 en: 22 Marzo 2012, 10:47 am »

Claro, es bastante código. Pero ten en cuenta que es la implementación completa de una lista circular. Cuando usas los vectores o las listas de la STL es verdad que tu programa queda muy bonito y tal, pero detrás está la implementación de esas clases que es mucho más grande y compleja que ésta (que, en comparación, es bastante simplona).

Suerte con el proyecto  ;D

¡Saludos, jefe!
En línea

maxim_o

Desconectado Desconectado

Mensajes: 186


Ver Perfil
Re: [C++][Opiniones] Qué os parece esta forma de generar números aleatorios?
« Respuesta #24 en: 24 Marzo 2012, 01:24 am »

Estaba viendo el post, e intente generar los numeros aleatorios, estilo como el sudoku en una matriz que no se repitan en filas y columnas para ir cogiendo practica otra vez pero puff algo no funciona, se mete en un bucle infinito o algo y no se por que :(


Código:
#include <iostream>
#include <stdlib.h>
#include <time.h>
#define TAM 9
using namespace std;
bool repite (int aleatorio , int matriz[TAM][TAM] , int i , int j );
int main(int argc , char *argv[]){
srand((unsigned)time(NULL));
int aleatorio,matriz[TAM][TAM];
bool norepite=false;
for (int i=0;i<TAM;i++)
{
for(int j=0;j<TAM;j++){
do{
aleatorio=rand()%9+1;
norepite=repite(aleatorio , matriz , i , j);
}while(norepite!=true);
matriz[i][j]=aleatorio;
}

}
for (int i=0;i<TAM;i++){
for(int j=0;j<TAM;j++)
cout << " " << matriz[i][j];
cout << "\n";
}
return 0;
}

bool repite (int aleatorio , int matriz[TAM][TAM] , int i, int j){

int cont=0;


for(int p=0;p<TAM;p++)
if(matriz[p][j]!=aleatorio){
cont++;
}
for(int p=0;p<TAM;p++)
if(matriz[i][p]!=aleatorio)
cont++;

if(cont==18)
return true;

return false;


}

Por cierto, como añadir las librerias estandar de c/c++ en qt creator, cuando escribo el código ahi, me dice que no estan en el directorio, como puedo añadirlas (el g++ si compila)? Gracias de Antemano
« Última modificación: 24 Marzo 2012, 13:31 pm por maxim_o » En línea

anonimo12121


Desconectado Desconectado

Mensajes: 1.813


Ver Perfil WWW
Re: [C++][Opiniones] Qué os parece esta forma de generar números aleatorios?
« Respuesta #25 en: 25 Marzo 2012, 01:43 am »

El problema se deberá a que en un punto del bucle se genera siempre el mismo numero entonces no puede pasar por que ya existe en la array el número. eso creo yo, no he mirado tu código pero me paso muchas veces :)
En línea

Página para ganar Bitcoins y Dinero: http://earnbit.hol.es/
Video de YouTube con Hack para el LoL: http://adf.ly/5033746/youtube-lolemuhack
Si quieres ganar dinero con adfly entra y registrate aquí -> http://adf.ly/?id=5033746
maxim_o

Desconectado Desconectado

Mensajes: 186


Ver Perfil
Re: [C++][Opiniones] Qué os parece esta forma de generar números aleatorios?
« Respuesta #26 en: 25 Marzo 2012, 06:58 am »

Si, algo de eso tiene que ser pero pufff no se por que  :(
No encuentro la solucion por mas que le doy vueltas , sigo viendo "lógico" el codigo aunque igual esté mal implementado o mal echo y no "haga" lo que pienso....
En línea

$Edu$


Desconectado Desconectado

Mensajes: 1.842



Ver Perfil
Re: [C++][Opiniones] Qué os parece esta forma de generar números aleatorios?
« Respuesta #27 en: 25 Marzo 2012, 16:51 pm »

No se C++ pero desde hace tiempo he visto codigos aca en el foro y nunca vi que pongan como pusiste vos:

bool repite (int aleatorio , int matriz[TAM][TAM] , int i , int j );

Asi, como declarando la funcion y luego la dejas abajo con su cuerpo. Si fue esa linea la que hiciste mal entonces es que te esta tomando esa linea como la funcion "repite" y entonces devolvera falso siempre, lo que entonces no terminara mas el bucle do-while que hiciste luego.

Si estoy equivocado quiero que me expliquen el porque de "declarar" la funcion antes.
En línea

maxim_o

Desconectado Desconectado

Mensajes: 186


Ver Perfil
Re: [C++][Opiniones] Qué os parece esta forma de generar números aleatorios?
« Respuesta #28 en: 25 Marzo 2012, 21:04 pm »

Pues esa linea creo que está bien (la declaracion)
En C/C++ las funciones deben estar declaradas antes del main.
Esto se debe a que el compilador entra en el main y llega a la funcion y no la conoce entonces da error.
Al estar declarada le estás diciendo al compilador que esa función está.
Si la funcion la pones antes del main no hace falta declararla....

Creo que esto es así, si me equivoco, retifiquenme please!
En línea

$Edu$


Desconectado Desconectado

Mensajes: 1.842



Ver Perfil
Re: [C++][Opiniones] Qué os parece esta forma de generar números aleatorios?
« Respuesta #29 en: 25 Marzo 2012, 22:58 pm »

Esque si, eso lo he visto a lo que dices, pero hace la prueba, quita esa linea que dije y copia tu funcion "repite" con todo el cuerpo y ponela antes del main y ahi si compila y corre la aplicacion a ver si por lo menos deja de entrar en un bucle infinito, si es asi, tengo razon.
En línea

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

Ir a:  

WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines