Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: howaboutno en 25 Abril 2013, 19:29 pm



Título: ayuda en c++
Publicado por: howaboutno en 25 Abril 2013, 19:29 pm
Hola! tengo un pequeño problema de donde no consigo avanzar.
Necesito generar unos datos aleatoriamente y me he tapado con:
tengo un string numero_empleado de dimension 6.
para las 2 primeros digitos tiene que ser 05 o 06 o 08 y  los restantes cualquier numero.
había pensado en ponerlo como numero_empleado[1]='05' y así sucesivamente
pero luego me di cuenta de que eso no me servía.
Alguna idea?ayuda?


Título: Re: ayuda en c++
Publicado por: diskontrol en 25 Abril 2013, 19:50 pm
Una forma rápida de hacerlo es generar números aleatorios sin repetir del 1 al 3; si sale 1 pon un 5, si sale 2 por un 6...


Título: Re: ayuda en c++
Publicado por: howaboutno en 29 Abril 2013, 15:23 pm
habia pensado en algo asi, alguien me puede decir si está bien?
Código:
int filtro (char num_emple[6])
{
if(strlen(num_emple)!=6)
{
return 0; //incorrecto
}
else if (strchr("0",num_emple[0])==NULL)
{
return 0;
}
else if(strchr("123",num_emple[1])==NULL)
{
return 0;
}
return 1; // correcto
}


Título: Re: ayuda en c++
Publicado por: rir3760 en 30 Abril 2013, 14:40 pm
Si se trata de generar un numero como ya te comentaron puedes utilizar las funciones srand para inicializar la semilla y rand para generar el siguiente numero aleatorio, los prototipos de ambas funciones se encuentran en el encabezado <cstdlib>.

En el caso de C basta con utilizar sprintf. Por ejemplo:
Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <time.h>
  4.  
  5. int main(void)
  6. {
  7.   char *pref[] = {
  8.   "05",
  9.   "06",
  10.   "08"
  11.   };
  12.   int num;
  13.   char codigo[7];
  14.  
  15.   srand((unsigned) time(NULL));
  16.  
  17.   sprintf(codigo, "%s%04d", pref[rand() % 3], rand() % 10000);
  18.   printf("%s\n", codigo);
  19.  
  20.   return EXIT_SUCCESS;
  21. }

En el caso de C++ (C++98) hay algunos problemas ya que este no provee una función para la conversión de un entero a cadena
(en su lugar se debe utilizar un objeto de la clase stringstream). Con el nuevo estándar de C++ (C++11) se puede utilizar to_string (http://www.cplusplus.com/reference/string/to_string/).

Un saludo