| Ver tema anterior :: Ver siguiente tema |
| Autor | Mensaje |
|---|
Tram
Registrado: 09 Nov 2006 Mensajes: 7
| Publicado: 04/12/2007 4:29 am | | | Título: palabras aleatorias |
| Hola,
necesito crear una funcion que haga lo siguiente: crear nombres aleatorios formados por de 3 a 5 sílabas, donde cada sílaba está formada por 2 caracteres (consonante+vocal).
He hecho la función que genera los caracteres aleatorios
| Código: | char Participante::generarCaracter() const{ srand(rand() % 27); char carac; carac = 'a'+rand()%26; return carac; } |
Pero ahora no soy capaz de hacer una función que saque 2 caracteres usando esa función y que luego compruebe si los 2 caracteres creados son consonante y vocal, y si lo son juntarlos formando una sílaba. Alguien podría echarme una mano? Gracias |
|
| Volver arriba | |
 |
rir3760

Registrado: 01 Oct 2004 Mensajes: 3837 Ubicación: Mexico
| Publicado: 04/12/2007 8:36 am | | | Título: |
| En el caso de C cuando se llama a la funcion rand sin antes llamar a la funcion srand (o llamando esta con el argumento 1) la seria generada es la misma:
| Código: | /* no hay llamada a srand */
rand();
/* o tambien (es equivalente) */ srand(1)
rand(); |
Supongo que en el caso de C++ el comportamiento es el mismo, habria que revisar el estandar para estar seguros.
Esto sucede en tu fragmento de codigo:
| Código: | srand(rand() % 27); |
Donde la llamada a rand sucede antes de la llamada a srand.
Para obtener al azar una consonante y una vocal lo mas sencillo es separar estas en dos arrays:
| Código: | char consonante[] = "bcdfghjklmnpqrstvwxyz"; char vocal[] = "aeiou";
char c; char v;
c = consonante[rand() % (sizeof consonante - 1)]; v = vocal[rand() % (sizeof vocal - 1)]; |
Un saludo _________________ The capacity to learn is a gift; The ability to learn is a skill; The willingness to learn is a choice. -- Rebec of Ginaz |
|
| Volver arriba | |
 |
david_celta
Registrado: 02 Jun 2005 Mensajes: 151
| Publicado: 04/12/2007 11:32 am | | | Título: |
| //verifica si es vocal int Participante::esVocal(char c) { if(c=='a'||c=='e'||c=='i'||c=='o'||c=='u') return 1; else return 0; } //crea una silaba de dos letras de la forma consonante+vocal char* Participante::crearSilaba() { char s[3],c; int i=0; while(i<2) { c=generarCaracter(); if(i==0 && !esVocal()) s[i++]=c; else if(i==1 && esVocal()) s[i++]=c; } s[2]='\0'; return s; } //crea una palabra de 3,4 o 5 silabas char*Participante::crearPalabra() { int n=generaNumAleatorio(3,5);//un numero entre 3 y 5 char *pal=new char[n*2+1]; strcpy(pal,"");
for (int i=0;i<n;i++) strcat(pal,crearSilaba());
return pal; } //es una idea ._. _________________ In all your fantasies, you always knew that man and mystery...
...were both in you... |
|
| Volver arriba | |
 |
|
Tram
Registrado: 09 Nov 2006 Mensajes: 7
| Publicado: 07/12/2007 5:06 am | | | Título: |
| muchas gracias a los dos!  |
|
| Volver arriba | |
 |
|
|