/
Inicio :: Foros

 F.A.Q.F.A.Q.                  Conéctese para revisar sus mensajesConéctese para revisar sus mensajes   

palabras aleatorias

 
      Índice del Foro elrincondelc.com -> Principiantes C/C++
Ver tema anterior :: Ver siguiente tema  
AutorMensaje
Tram



Registrado: 09 Nov 2006
Mensajes: 7

MensajePublicado: 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

MensajePublicado: 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

MensajePublicado: 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

MensajePublicado: 07/12/2007 5:06 am
Título:

muchas gracias a los dos! Smile
Volver arriba
      Índice del Foro elrincondelc.com -> Principiantes C/C++
Página 1 de 1Todas las horas están en GMT - 8 Horas

 
No puede crear mensajes
No puede responder temas
No puede editar sus mensajes
No puede borrar sus mensajes
No puede votar en encuestas

(c) ElRincondelC.com

Un proyecto de UrlanHeat.com