Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: Pentix05 en 11 Noviembre 2021, 12:59 pm



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
  1. char res[2];
  2. .
  3. .
  4. .
  5. }while ( res [0] == 's')

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
  1. if(numSuma==numSumaI)
  2.                  {
  3.                     cout<<"Enorabuena, has ganado"<<endl;
  4.                     ganar++;
  5.                     iteracion++;

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
  1. if(numSumaI==3||numSumaI==4||numSumaI==5||numSumaI==6||numSumaI==10||numSumaI==11)
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.