Pregunta de dudas de ejercicio

Iniciado por RiCo9297, 14 Agosto 2016, 19:51 PM

0 Miembros y 1 Visitante están viendo este tema.

RiCo9297

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.

Código (cpp) [Seleccionar]
#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";
}
}
}

RiCo9297

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.

AlbertoBSD

antes de usar cualquier rand ea necesario Inicializar la semilla random esto es:

srand(time(NULL));

solo una vez al inicio del codigo.
Donaciones
1Coffee1jV4gB5gaXfHgSHDz9xx9QSECVW

RiCo9297


ivancea96

Es un código algo complicado, con muchas variables. Algunas sobran, o no las suas correctamente, como "opcion" y "otravez".

Luego:
Código (cpp) [Seleccionar]
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.

RiCo9297

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:
Código (cpp) [Seleccionar]
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