domingo, 18 de septiembre de 2011

Números aleatorios en C++.

Números aleatorios en C++.

Categoría: 1. Programación y electrónica.

En este apartado voy a colocar un programa de C++ que despliega primero tres números aleatorios para que el interlocutor/usuario los memorice y los escriba como entradas. Después genera cuatro números aleatorios y pide nuevamente al usuario que los introduzca de memoria. El proceso sigue hasta desplegar y solicitar un máximo de 10 números. Entonces se despiega el número de aciertos, el número de errores y la calificación obtenida.

El ejercicio consiste en utilizar código de procedimientos, luego funciones, después clases y finalmente una aplicación para Windows.
En unos días más les comparto el primer código. Saludos.


El programa en código de procedimientos sería el siguiente:

// el programa asigna genera tres valores aleatorios entre 0 y 9. A
// continuacion evalua expresiones logicas y pregunta al usuario/
// interlocutor la respuesta. Si acumula tres errores vuelve a empezar.
// En un segundo nivel asigna valores a cuatro variables de forma
// aleatoria entre 0 y 9. Realiza el mismo procedimiento hasta llegar a
// diez variables

#include "stdafx.h"
#include <iostream>
#include <iomanip>
#include <cmath>
#include <ctime>

using namespace std;
int main()
{
 int optn = 1;
 do
 {
 const int cont=10;
 const int almacen=10;
 int val_azar;
 int i;
 int j=2;
 int almacen_azar[almacen]={0};
 int almacen_resp[almacen]={0};
 int aciertos=0, errores=0, calificacion=0;

 do
 {
 srand(time(NULL));
 cout << "  ";
 for (i=0; i <= j; i++)
 {
  val_azar=double(rand())*10/RAND_MAX;
  cout << val_azar << "   ";
  almacen_azar[i]=val_azar;
 }
 cout << endl;
 for (i=0; i <= j; i++)
 {
  cout << "Introduce valor seguido de la tecla ENTER " << i+1 << " : ";
  cin >> almacen_resp[i];
 }
 cout << "Los valores mostrados fueron: ";
 for (i=0; i <= j; i++)
 {
  cout << almacen_azar[i] << "   ";
 }
 cout << endl;
 cout << "Tus respuestas fueron: ";
 for (i=0; i <= j; i++)
 {
  cout << almacen_resp[i] << "   ";
 }
 cout << endl << endl;
 for (i=0; i <= j; i++)
 {
 if (almacen_resp[i] == almacen_azar[i])
  aciertos ++;
 else
  errores ++;
 }
 j++;
 if (j < 10)
 cout << "Ahora memoriza " << j+1 << " numeros" << endl;
 }

 while (j < cont);
 if (aciertos+errores > 0)
 {
 calificacion = aciertos*100/(aciertos+errores);
 cout << "Hiciste: " << aciertos << " aciertos de " << aciertos + errores << " numeros memorizados!!" << endl;
 cout << "Tu calificacion fue: " << calificacion << endl;
 }
 else
 {
  cout << "Error en el conteo de aciertos..." << endl;
 }
 cout << "Presiona un numero para continuar. Para salir presiona 0. EXIT ";
 cin >> optn;
 cout << endl;
 }
 while (optn != 0);
 cin.get();
 return 0;
}


En esta versión es necesario generar una pausa para que el usuario memorice los números, después se borre la pantalla y pregunte al usuario los números memorizados. Por lo pronto lo dejo así.


Utilizando programación con funciones, se podría escribir el programa de la siguiente manera:

// el programa genera tres valores aleatorios entre 0 y 9.
// A continuacion evalua expresiones logicas y pregunta al usuario /
// interlocutor la respuesta. Si acumula tres errores el juego vuelve
// a comenzar. En un segundo nivel, asigna valores a cuatro variables
// de forma aleatoria entre 0 y 9. Realiza el mismo procedimiento hasta
// llegar a diez variables.
#include "stdafx.h"
#include <iostream>
#include <iomanip>
#include <cmath>
#include <ctime>
using namespace std;
int generaAleatorio();
void almacenaAleatorio(int);
int despliegaValores();
int despliegaRespuestas();
void introduceRespuestas();
void almacenaPuntuacion();
int despliegaPuntuacion();
int val_azar, i, j=2, k;
const int almacen = 10;
const int cont = 10;
int almacen_azar[almacen]={0};
int almacen_resp[almacen]={0};
int aciertos, errores, calificacion;
int main()
{
 do
 {
  for (k=0; k <= j; k++)
  {
   generaAleatorio();
   almacenaAleatorio(almacen_azar[i]);
  }
  introduceRespuestas();
  despliegaValores();
  despliegaRespuestas();
  almacenaPuntuacion();
  j++;
  cout << "Ahora debes memorizar " << j+1 << " numeros." << endl;
 }
 while (j < cont);
 despliegaPuntuacion();
 return 0;
}
int generaAleatorio()
{
 srand(time(NULL));
 val_azar = double(rand())*10.0/RAND_MAX;
 cout << val_azar << ", ";
 return val_azar;
}
void almacenaAleatorio(int)
{
 almacen_azar[i] = val_azar;
 return;
}
int despliegaValores()
{
 cout << "Los valores mostrados fueron: ";
 for (i=0; i <= j; i++)
  cout << almacen_azar[i] << ", ";
 return almacen_azar[i];
}
int despliegaRespuestas()
{
 cout << "Tus respuestas fueron: ";
 for (i=0; i <= j; i++)
  cout << almacen_resp[i] << ", ";
 return almacen_resp[i];
}
void introduceRespuestas()
{
 for (i=0; i <= j; i++)
 {
  cout << "Introduce el valor y a continuacion presiona la tecla ENTER "
   << i++ << ": ";
  cin >> almacen_resp[i];
 }
 return;
}
void almacenaPuntuacion()
{
 for (i=0; i <= j; i++)
 {
  if (almacen_resp[i] == almacen_azar[i])
   aciertos ++;
  else
   errores ++;
 }
 return;
}
int despliegaPuntuacion()
{
 if (aciertos+errores > 0)  // evita division por cero
 {
  calificacion = aciertos*100.0/(aciertos + errores);
  cout << "Hiciste " << aciertos << " aciertos de "
   << aciertos+errores << " numeros memorizados!!" << endl;
 }
 return calificacion;
}



Este programa no se comporta en la misma forma que el anterior. Lo voy a revisar y en unos días pondré una nueva versión.



No hay comentarios:

Publicar un comentario