Título: PROGRAMA DADOS LOCOS Publicado por: Pentix05 en 11 Noviembre 2021, 12:59 pm QUE ALGUIEN ME AYUDE!!!!! Tengo que hacer un programa para clase y es de dados locos. el titulo es este: El juego de los dados locos funciona así: se lanzan dos dados y se suman sus puntuaciones; cuando el
resultado es 8 o 9 se gana y cuando es 2, 7 o 12 se pierde. En los demás casos se repite el lanzamiento de la pareja de dados, hasta que sale un 8 o 9 (con la que se pierde) o de nuevo obtenemos la suma inicial (con la que se gana). Escribe un programa que simule tantas partidas como el usuario desee al final del programa y calcule la probabilidad de ganar (es decir, la frecuencia relativa que se obtiene al dividir el número de partidas ganadas entre el total de las partidas jugadas). HASTA AHÍ BIEN, HE HECHO TODO EL PROGRAMA Y ESTA BIEN PERO CUANDO LLEVO MAS DE DOS PARTIDAS Y LA SUMA TOCA UN 5 O 6 O 4 SE PARA Y NO ME CUENTA COMO PARTIDA GANADA O PERDIDA YA QUE SOLO PUEDE HABER DOS OPCIONES. ALGUN ALMA CARITATIVA QUE PUEDA AYUDARME PORFAVOR. #include<iostream> #include<stdlib.h> #include<time.h> using namespace std; int main() { srand(time(NULL)); int numDado1, numDado2,numSumaI=0,numSuma=0,partidas,iteracion=0; double probP=0,probG=0,ganar=0, perder=0; char res; do { numDado1=1+rand()%(6-1+1); numDado2=1+rand()%(6-1+1); cout<<"Numero 1: "<<numDado1<<endl; cout<<"Numero 2: "<<numDado2<<endl; numSumaI=numDado1+numDado2; cout<<"La Suma: "<<numSumaI<<endl; if(numSumaI==8||numSumaI==9) { cout<<"Enorabuena, has ganado"<<endl; ganar++; } else { if(numSumaI==2||numSumaI==7||numSumaI==12) { cout<<"Pringao, has perdido"<<endl; perder++; } else { if(numSumaI==3||numSumaI==4||numSumaI==5||numSumaI==6||numSumaI==10||numSumaI==11) { while(iteracion==0) { cout<<"Tiro otra vez los dados"<<endl; numDado1=1+rand()%(6-1+1); numDado2=1+rand()%(6-1+1); cout<<"Numero 1: "<<numDado1<<endl; cout<<"Numero 2: "<<numDado2<<endl; numSuma=numDado1+numDado2; cout<<"La Suma: "<<numSuma<<endl; if(numSuma==8||numSuma==9) { cout<<"Pringao, has perdido"<<endl; perder++; iteracion++; } if(numSuma==numSumaI) { cout<<"Enorabuena, has ganado"<<endl; ganar++; iteracion++; } } } } } cout<<"Quieres volver a jugar. Pulsa s para continuar "; cin>>res; partidas++; }while(res=='s'); probG=ganar/partidas*100; probP=perder/partidas*100; cout<<"Partidas ganadas = "<<ganar<<endl; cout<<"Partidas perdidas = "<<perder<<endl; cout<<"Partidas totales = "<<partidas<<endl; cout<<"Tu probabilidad de ganar es: "<<probG<<"%"<<endl; cout<<"Tu probabilidad de perder es: "<<probP<<"%"; return 0; } Título: Re: PROGRAMA DADOS LOCOS Publicado por: fzp en 12 Noviembre 2021, 12:19 pm Probablemente el problema esté relacionado con el búffer del teclado y el carácter "\n". Creo que una forma de solucionarlo (aunque sea un apaño un poco pastelero) es declarar res como un arreglo y después quedarte con el 1º de los caracteres para comparar:
Código
Aparte de éso me parece que no funciona bien. Creo que hay un fallo cuando comparas numSuma con numSumaI y lo das como combinación ganadora: Código
Ya que, las sumas ganadoras son 8 y 9, y en cambio, en esa zona del programa: numSumaI = 3 / 4 / 5 / 6 / 10 / 11; combinación que ni gana ni pierde. También creo que el if: Código es supérfluo, ya que al llegar a esa zona, puesto que los if...else anteriores han descartado los 8 / 9 / 2 / 7 / 12 por ganadores/perdedores, numSumaI sólo puede tener los valores que van dentro del if y sería redundante. Sobre la forma de colocar el código, las reglas del foro indican que hay que hacerlo entre etiquetas GeSHi. |