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

 

 


Tema destacado: Introducción a Git (Primera Parte)


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Números aleatorios sin repeticion
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Números aleatorios sin repeticion  (Leído 2,834 veces)
samirllorente

Desconectado Desconectado

Mensajes: 20



Ver Perfil
Números aleatorios sin repeticion
« en: 12 Abril 2013, 17:39 pm »

Ayuda con este código, simplemente se me repite los números al azar, y eso es loq no quiero
Código
  1. #include <iostream>
  2. #include <cstdlib>
  3. #include <ctime>
  4. using namespace std;
  5.  
  6. int main()
  7. {
  8. string profe[5];
  9. string materia[5][3];
  10. int salon[5][3];
  11. int rep;
  12. int i=0,j=0,k=0,l=0;
  13. srand(time(NULL));
  14. do{j=0;
  15. cout<<"Ingrese profesor No "<<i+1<<": ";
  16. cin>>profe[i];
  17. while(j!=3){
  18. cout<<"Ingrese materia #"<<j+1<<" del profesor "<<profe[i]<<": ";
  19. cin>>materia[i][j];
  20.  
  21. do{rep=true;
  22. salon[i][j]=rand()%15+301;
  23. if((i>0)||(j>0)){k=0;l=0;
  24. while((k=!i)&&(l!=j)){
  25. if(salon[i][j]==salon[k][l]){
  26. rep=false;}
  27. if(l==2){l=0;k++;}else{
  28. l++;}}}
  29. }while(rep!=true);
  30.  
  31. j++;}i++;
  32. }while(i!=5);
  33. i=0;
  34. cout<<"\n\nMaestro\tMateria\tSalon\n";
  35. while(i!=5){j=0;
  36. cout<<endl<<profe[i];
  37. while(j!=3){
  38. cout<<"\n\t"<<materia[i][j]<<"\t"<<salon[i][j];
  39. j++;}i++;}
  40. return 0;
  41. }

Modificado: es mas fácil leer el código utilizando el coloreado.


« Última modificación: 12 Abril 2013, 17:47 pm por WHK » En línea

SamirLlorente
WHK
Moderador Global
***
Desconectado Desconectado

Mensajes: 6.605


Sin conocimiento no hay espíritu


Ver Perfil WWW
Re: Números aleatorios sin repeticion
« Respuesta #1 en: 12 Abril 2013, 17:45 pm »

Aver si te sirve este algoritmo:

Primero creas un array con todos los números que vas a procesar, por ejemplo del 0 al 500,
Luego mezclas ese array al azar.
Luego creas una función llamada getRand(), esa función retornará el primer valor del array y lo eliminará del stack.
Si no hay valores entonces se acabaron las posibilidades de numeros al azar sin repetición.

Así lo hago yo en php y javascript.

Saludos.


En línea

leosansan


Desconectado Desconectado

Mensajes: 1.314


Ver Perfil
Re: Números aleatorios sin repeticion
« Respuesta #2 en: 12 Abril 2013, 19:32 pm »

Ayuda con este código, simplemente se me repite los números al azar, y eso es loq no quiero


Por lo que entiendo pretendes repartir 15 clases. de la 301 a la 315, de forma aleatoria entre el prefesorado y según materias, de forma que no se repitan las clases asignadas, vamos algo como esto:

Código
  1. Ingrese profesor No 1: 1
  2. Ingrese materia #1 del profesor 1: 11
  3. Ingrese materia #2 del profesor 1: 12
  4. Ingrese materia #3 del profesor 1: 13
  5.  
  6. Ingrese profesor No 2: 2
  7. Ingrese materia #1 del profesor 2: 21
  8. Ingrese materia #2 del profesor 2: 22
  9. Ingrese materia #3 del profesor 2: 23
  10.  
  11. Ingrese profesor No 3: 3
  12. Ingrese materia #1 del profesor 3: 31
  13. Ingrese materia #2 del profesor 3: 32
  14. Ingrese materia #3 del profesor 3: 33
  15.  
  16. Ingrese profesor No 4: 4
  17. Ingrese materia #1 del profesor 4: 41
  18. Ingrese materia #2 del profesor 4: 42
  19. Ingrese materia #3 del profesor 4: 43
  20.  
  21. Ingrese profesor No 5: 5
  22. Ingrese materia #1 del profesor 5: 51
  23. Ingrese materia #2 del profesor 5: 52
  24. Ingrese materia #3 del profesor 5: 53
  25.  
  26.  
  27. Maestro Materia Salon
  28.  
  29. 1
  30.        11      315
  31.        12      314
  32.        13      307
  33. 2
  34.        21      306
  35.        22      305
  36.        23      308
  37. 3
  38.        31      301
  39.        32      312
  40.        33      310
  41. 4
  42.        41      302
  43.        42      304
  44.        43      313
  45. 5
  46.        51      309
  47.        52      311
  48.        53      303
  49.  

Otra forma, aunque básicamente es la misma que la sugerida por WHK,  es usar las posibilidades de las librerías algorithm y vector, generando un vector con las clases de la 301 a la 315 y "desordenándolo" para posteriormente elegirlos en "orden", que es desordenado:

Código
  1. #include <algorithm>
  2. #include <vector>
  3. #include <iostream>
  4. #include <cstdlib>
  5. #include <ctime>
  6. using namespace std;
  7.  
  8. int main()
  9. {
  10. string profe[5];
  11. string materia[5][3];
  12. int salon[5][3];
  13. int rep;
  14. int i=0,j=0,k=0,l=0,m=0;
  15. srand(time(NULL));
  16.  
  17. vector<int> myvector;
  18.        for (int i=301; i<=315; ++i) myvector.push_back(i);
  19.        random_shuffle ( myvector.begin(), myvector.end() );
  20.  
  21.  
  22.  
  23. do{j=0;
  24. cout<<"Ingrese profesor No "<<i+1<<": ";
  25. cin>>profe[i];
  26. while(j!=3){
  27. cout<<"Ingrese materia #"<<j+1<<" del profesor "<<profe[i]<<": ";
  28. cin>>materia[i][j];
  29.  
  30.  
  31. do{rep=true;
  32. salon[i][j]=myvector[m];
  33. if((i>0)||(j>0)){k=0;l=0;
  34. while((k=!i)&&(l!=j)){
  35. if(salon[i][j]==salon[k][l]){
  36. rep=false;}
  37. if(l==2){l=0;k++;}else{
  38. l++;}}}m++;
  39. }while(rep!=true);
  40.  
  41. j++;}i++;
  42. }while(i!=5);
  43. i=0;
  44. cout<<"\n\nMaestro\tMateria\tSalon\n";
  45. while(i!=5){j=0;
  46. cout<<endl<<profe[i];
  47. while(j!=3){
  48. cout<<"\n\t"<<materia[i][j]<<"\t"<<salon[i][j];
  49. j++;}i++;}
  50. return 0;
  51. }
  52.  

Saluditos!. .....
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
NUMEROS ALEATORIOS EN VB
Programación Visual Basic
WCIETE 3 4,206 Último mensaje 30 Agosto 2005, 01:19 am
por Slasher-K
Generar numeros aleatorios sin repeticion[C]
Programación C/C++
HRSLASH 2 25,335 Último mensaje 28 Diciembre 2010, 06:58 am
por von Newman
¿Números aleatorios sin repetición?
Programación Visual Basic
theluigy13etv 7 19,129 Último mensaje 5 Marzo 2012, 18:27 pm
por MCKSys Argentina
Problema repetición de números
Java
piete2 7 3,422 Último mensaje 21 Febrero 2015, 17:34 pm
por 3n31ch
for y repetición de numeros en c
Programación C/C++
diegoecw 2 2,414 Último mensaje 29 Marzo 2017, 05:35 am
por diegoecw
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines