Nuevas NORMAS para el foro

Curso Hacker
Bienvenido(a), Visitante. Favor de ingresar o registrarse.
¿Perdiste tu email de activación? - Julio 26, 2008, 11:40:17
Boton Buscar
Inicio Ayuda Ingresar Registrarse
Visita: Articulos - Juegos Gratis - Da Foros

Comunidad Underground Hispana  |  Programacion  |  Programación  |  Carbide C/C#/C++  |  Tema: El sumador 0 Usuarios y 1 Visitante están viendo este tema. « anterior próximo »
Páginas: [1] Ir Abajo Imprimir
Autor Tema: El sumador  (Leído 217 veces)
placa4
Habitual
*****
Desconectado Desconectado

Mensajes: 155



Ver Perfil
« en: Abril 25, 2008, 11:02:38 »

Pues aquí tengo un programa que te plantea "aleatoriamente" operaciones de sumas solamente, está entretenido para jugar un rato, y es bastante configurable, y de paso, en el apartado tecnico, si alguien se le ocurre acortarlo...

Lo que me pasa es que cuando introduzco el mismo numero del que no quiero que pase me plantea siempre las mismas operaciones en el mismo orden. Alguien me puede explicar por qué? Bueno, deberíais probarlo, y entrenar la mente un rato xD

Code:

#include <iostream>
#include <stdlib.h> //Meto esta libreria para la funcion rand(void)

int main(int nOps, int Dif, int c, int Res, int cb, int cm)
{
   c = 0;
   cb = 0;
   cm = 0;
   int s1; int s2;
   std::cout << "Bienvenido al sumador";
   std::cout << "\n" << "Introduce el numero de operaciones: ";
   std::cin >> nOps;

   std::cout << "\n" << "Bien, ahora introduce de que numero no puede pasar: ";
   std::cin >> Dif;


   while (c < nOps)
   {
      s1 = 1 + (rand() % Dif);
      s2 = 1 + (rand() % Dif);
      c++;

      std::cout << "\n" << s1 << " + " << s2 << " = ";
      std::cin >> Res;
      if (Res == s1 + s2)
      {
         std::cout << "\n" << "BIEN" << "\n";
         cb++;
      }
      else
      {
         std::cout << "\n" << "MAL" << "\n";
         cm++;
      }
   }

   std::cout << "\n" << "Has hecho " << cb << " operaciones bien y " << cm << " operaciones mal" << "\n";

   return 0;
}

Salu2 y a sumar! xD

En línea

El futuro está en versión Beta.

La aleatoriedad no existe, sólo una complejidad tan extrema que el ser humano es aún incapaz de comprenderla.
FreakMind
Habitual
*****
Desconectado Desconectado

Mensajes: 181



Ver Perfil
« Respuesta #1 en: Abril 25, 2008, 10:24:06 »

Buenas

Podes usar srand y time() como seed.


Saludos, FreakMind
En línea

Connoisseurs of C semantics find C++ inferior to ++C

placa4
Habitual
*****
Desconectado Desconectado

Mensajes: 155



Ver Perfil
« Respuesta #2 en: Abril 26, 2008, 01:34:01 »

Buenas, me he enterado un poco de lo que es srand(), he visto que solucionaria el hecho de que el programa devuelva siempre la misma secuencia de numeros, pero
he estado buscando por google tambien lo que son los seed, y no me sale ninguna definicion, asi que, qué son los seed? (parece que todavia me queda MUCHO por aprender, aunque me cueste admitirlo xD)

Y que uso le podria dar a time()?

Salu2 y gracias por responder
En línea

El futuro está en versión Beta.

La aleatoriedad no existe, sólo una complejidad tan extrema que el ser humano es aún incapaz de comprenderla.
Kira & Eva :D
Habitual
*****
Desconectado Desconectado

Mensajes: 288


Senior Programmer


Ver Perfil Email
« Respuesta #3 en: Abril 26, 2008, 04:29:23 »


srand() incluida también en stdlib.h, se utiliza como semilla para la función rand() y acepta como parámetro un número que sea diferente y aleatorio. El concepto de "semilla" lo podemos ver como el número a partir del cual empieza el proceso de aleatoriedad, es decir, se comienzan a generar aleatoriamente números. Si no utilizo
srand() antes de rand() lo que pasará es que siempre se me dará el mismo resultado ya que el número inicial desde el que empiezo a generar números es el mismo.


Para ver los enlaces debes ser usuario Crear Usuario o Hacer Sesion
En línea
lann
Habitual
*****
Desconectado Desconectado

Mensajes: 309


maamamma

migue1990@gmail.com
Ver Perfil Email
« Respuesta #4 en: Abril 26, 2008, 07:44:17 »

time( 0 ) seria el argumento que toma srand(), como el valor de regreso de time( 0 ) estara en constante cambio... asi sera con la semilla que le des a srand() y rand() generara numeros "verdaderamente" aleatorios...

time( 0 ) devolvera el tiempo que a pasado en segundos desde la media noche del primero de enero de 1970...
En línea

am
placa4
Habitual
*****
Desconectado Desconectado

Mensajes: 155



Ver Perfil
« Respuesta #5 en: Abril 27, 2008, 12:29:02 »

Gracias a todos  Grin, ahora creo que sí me he enterado para lo que servían las funciones srand() y time(), pero no se si podré poner el code corregido porque tengo exámenes hasta en la sopa xD

Salu2 y gracias
En línea

El futuro está en versión Beta.

La aleatoriedad no existe, sólo una complejidad tan extrema que el ser humano es aún incapaz de comprenderla.
placa4
Habitual
*****
Desconectado Desconectado

Mensajes: 155



Ver Perfil
« Respuesta #6 en: Abril 27, 2008, 01:00:39 »

Bueno, al final lo he hecho porque vi que era muy corto de hacer.

#include <iostream>
#include <stdlib.h>
#include <time.h>

int main(int nOps, int Dif, int c, int Res, int cb, int cm)
{
   //Inicialización de contadores
   c = 0;
   cb = 0;
   cm = 0;
   int s1; int s2;
   std::cout << "Bienvenido al sumador";
   std::cout << "\n" << "Introduce el numero de operaciones: ";
   std::cin >> nOps;

   std::cout << "\n" << "Bien, ahora introduce de que numero no puede pasar: ";
   std::cin >> Dif;


   while (c < nOps)
   {
      
      srand(time(0));
      s1 = 1 + (rand() % Dif); //"Aleatorizaciones"
      s2 = 1 + (rand() % Dif); //"Aleatorizaciones"
      c++;

      std::cout << "\n" << s1 << " + " << s2 << " = ";
      std::cin >> Res;
      if (Res == s1 + s2)
      {
         std::cout << "\n" << "BIEN" << "\n";
         cb++;
      }
      else
      {
         std::cout << "\n" << "MAL" << "\n";
         cm++;
      }
   }

   std::cout << "\n" << "Has hecho " << cb << " operaciones bien y " << cm << " operaciones mal" << "\n";

   return 0;
}

Gracias a todos, sois unos maquinas Wink

Salu2 y gracias
En línea

El futuro está en versión Beta.

La aleatoriedad no existe, sólo una complejidad tan extrema que el ser humano es aún incapaz de comprenderla.
FreakMind
Habitual
*****
Desconectado Desconectado

Mensajes: 181



Ver Perfil
« Respuesta #7 en: Abril 27, 2008, 09:20:51 »

Buenas

int main(int nOps, int Dif, int c, int Res, int cb, int cm)

De donde sacaste eso??

Hasta donde yo sabia existian 3 prototipos de main
int main(void)
int main(int argc)
int main (int argc, char **argv)



Saludos, FreakMind
En línea

Connoisseurs of C semantics find C++ inferior to ++C

placa4
Habitual
*****
Desconectado Desconectado

Mensajes: 155



Ver Perfil
« Respuesta #8 en: Abril 27, 2008, 12:18:27 »

Pues no se  Grin Grin, qué se supone que va en los paréntesis?, no van los argumentos??. Hombre,  el compilador lo admite, pero bueno, he puesto las variables que uso en el programa, entonces, se supone que no van ahi, aunque el compilador lo admita?

Ilumíname porque la verdad no estoy demasiado seguro xD

Salu2
En línea

El futuro está en versión Beta.

La aleatoriedad no existe, sólo una complejidad tan extrema que el ser humano es aún incapaz de comprenderla.
FreakMind
Habitual
*****
Desconectado Desconectado

Mensajes: 181



Ver Perfil
« Respuesta #9 en: Abril 27, 2008, 05:41:43 »

Pues no se  Grin Grin, qué se supone que va en los paréntesis?, no van los argumentos??. Hombre,  el compilador lo admite, pero bueno, he puesto las variables que uso en el programa, entonces, se supone que no van ahi, aunque el compilador lo admita?

Ilumíname porque la verdad no estoy demasiado seguro xD

Salu2

La verdad nunca lo vi asi.  Los prototipos eran los que te dije.

int main(int argc, char **argv) donde
    argc: entero que representa el numero de parametros pasados a la app (incluido el nombre de la app)
    argv: vector de cadenas terminado en NULL que contiene los parametros que se le pasaron a la app.
        argv[0] es el nombre de la app y argv[argc - 1] es NULL


Pero si el compilador lo permite debe ser que se puede (el compilador sabe mas que yo seguramente jeje)

Saludos, FreakMind
En línea

Connoisseurs of C semantics find C++ inferior to ++C

lann
Habitual
*****
Desconectado Desconectado

Mensajes: 309


maamamma

migue1990@gmail.com
Ver Perfil Email
« Respuesta #10 en: Abril 27, 2008, 09:45:06 »

placa4 te recomiendo que uses

int main() 
{}
osea que main no tome argumentos, y ya con el tiempo lo comprenderas, no son temas tan "avanzados" pero dada la sencilles del programa que haces, ese prototipo esta bien...

como cuando aprendes a programar y usas los objetos cout y cin y no sabes muy bien que son pero los usas y despues aprendes en realidad lo que son, sobrecargarlos... etc, igual usar los namespaces, variables string (usas esto sin saber muy bien lo que en verdad es, claro exagerando esto pues sucederia hasta con tipos int, pero bueno no llevemos las cosas al extremo por que llegariamos a estar discutiendo fisica cuantica), puedes usarlas por el momento para practicar y despues aprender lo que en verdad significa... solo una opinion en caso de que seas newbie

saludos

pd.
habia escrito se significa jaj....
« Última modificación: Abril 28, 2008, 10:25:45 por lann » En línea

am
placa4
Habitual
*****
Desconectado Desconectado

Mensajes: 155



Ver Perfil
« Respuesta #11 en: Abril 28, 2008, 08:40:45 »

Aunque ya no tanto, sigo siendo newbie lann, asi que te hare caso.
Gracias por la "luz" freakmind xD

Salu2 y gracias por responder
En línea

El futuro está en versión Beta.

La aleatoriedad no existe, sólo una complejidad tan extrema que el ser humano es aún incapaz de comprenderla.
lann
Habitual
*****
Desconectado Desconectado

Mensajes: 309


maamamma

migue1990@gmail.com
Ver Perfil Email
« Respuesta #12 en: Abril 28, 2008, 10:27:14 »

bueno placa4 yo pense que lo eras, por estas publicaciones, pero no es ofensa, personalmente yo me concidero newbie...
En línea

am
placa4
Habitual
*****
Desconectado Desconectado

Mensajes: 155



Ver Perfil
« Respuesta #13 en: Abril 29, 2008, 08:06:37 »

no, si no te preocupes lann, no ofendes, yo tambien sigo siendo newbie, y no me duele saberlo  Grin, seguiré esforzandome y alguna vez ya no sere newbie

Salu2
En línea

El futuro está en versión Beta.

La aleatoriedad no existe, sólo una complejidad tan extrema que el ser humano es aún incapaz de comprenderla.
Páginas: [1] Ir Arriba Imprimir 
Comunidad Underground Hispana  |  Programacion  |  Programación  |  Carbide C/C#/C++  |  Tema: El sumador « anterior próximo »
Ir a:  


Ranking-Hits
Powered by SMF 1.1.5 | SMF © 2006-2007, Simple Machines LLC