Hola buenas me gustaría que alguien me explicase, por que en el tercer modulo comprobarResultado, el número de aciertos no aumenta en el recuento final y el motivo de por que los números aleatorios no son aleatorios realmente por que siempre se me repiten los mismo números.
#include <iostream>
#include <cstdlib>
using namespace std;
char aQueJugar(char &opcion){
cout << "¿Qué quieres practicar: sumas (+), restas (-) o " <<
" multiplicaciones(*)?: ";
cin >> opcion;
}
int generarOperacion(char opcion, bool acertada, int numpregunta, int &resultado, int &total){
int valor1 = rand() % 20 + 10;
int valor2 = rand() % 20 + 10;
numpregunta = 1;
int numaciertos = 0;
int numfallos = 0;
acertada = true;
aQueJugar(opcion);
do{
if(opcion == '+'){
cout << "Pregunta" << numpregunta << ":" << endl;
cout << " " << valor1 << endl;
cout << "+" << valor2 << endl;
cout << "------" << endl;
total = valor1 + valor2;
cin >> resultado;
if(resultado == total){
acertada = true;
cout << "Muy bien! Eres un genio!" << endl;
}
else{
acertada = false;
cout << "Oh! Esta no la has acertado" << endl;
}
}
if(opcion == '-'){
cout << "Pregunta" << numpregunta << ":" << endl;
cout << " " << valor1 << endl;
cout << "-" << valor2 << endl;
cout << "------" << endl;
total = valor1 - valor2;
cin >> resultado;
if(resultado == total){
acertada = true;
cout << "Muy bien! Eres un genio!" << endl;
}
else{
acertada = false;
cout << "Oh! Esta no la has acertado" << endl;
}
}
if(opcion == '*'){
cout << "Pregunta" << numpregunta << ":" << endl;
cout << " " <<valor1 << endl;
cout << "*" << valor2 << endl;
cout << "-------" << endl;
total = valor1 * valor2;
cin >> resultado;
if(resultado == total){
acertada = true;
cout << "Muy bien! Eres un genio!" << endl;
}
else{
acertada = false;
cout << "oh! Esta no la has acertado" << endl;
}
}
numpregunta++;
}while(numpregunta <= 5);
}
int comprobarResultado(bool acertada){
acertada = true;
int resultado = 0;
char opcion;
int numpregunta = 1;
int i = 0;
char otravez;
int total = 0;
generarOperacion(opcion, acertada, numpregunta, resultado, total);
cout << "** HAS TERMINADP! **" << endl;
do{
if(resultado == total){
acertada == true;
i++;
}
numpregunta++;
}while(numpregunta <= 5);
cout << "Has acertado " << i << " de " << numpregunta - 1 << " preguntas";
}
int main(){
char sino;
char opcion;
bool acertada;
char otravez;
cout << "***************************************" << endl;
cout << "***** BIENVENIDO A LA GINKAMÁTICA *****" << endl;
cout << "***************************************" << endl;
cout << endl;
cout << "¿Quieres jugar conmigo? (s,n): ";
cin >> sino;
if(sino == 's'){
comprobarResultado(acertada);
}
else{
if(sino == 'n'){
cout << "Adios";
}
}
}
Por cierto soy bastante nuevo en el mundo de la programación lamento mucho si el código esta lleno de desorden y errores de sangrado, gracias por la ayuda.
antes de usar cualquier rand ea necesario Inicializar la semilla random esto es:
srand(time(NULL));
solo una vez al inicio del codigo.
Gracias la ayuda. :)
Es un código algo complicado, con muchas variables. Algunas sobran, o no las suas correctamente, como "opcion" y "otravez".
Luego:
do{
if(resultado == total){
acertada == true;
i++;
}
numpregunta++;
}while(numpregunta <= 5);
resultado y total en ese bucle serán siempre los mismos valores, así que "numpregunta" saldrá siempre siendo o 1 o 5.
Cita de: ivancea96 en 14 Agosto 2016, 20:06 PM
Es un código algo complicado, con muchas variables. Algunas sobran, o no las suas correctamente, como "opcion" y "otravez".
Luego:
do{
if(resultado == total){
acertada == true;
i++;
}
numpregunta++;
}while(numpregunta <= 5);
resultado y total en ese bucle serán siempre los mismos valores, así que "numpregunta" saldrá siempre siendo o 1 o 5.
Vale muchas gracias, voy a ver si consigo arreglar el error