Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: ryukay en 31 Enero 2018, 21:35 pm



Título: no entiendo como hacerlo en c++ me podrian ayudar
Publicado por: ryukay en 31 Enero 2018, 21:35 pm
 Elabora un programa que determine como es el puntaje obtenido tras lanzar tres monedas al aire en función de la cantidad de caras obtenidas, de acuerdo
   a lo siguiente:
      • Tres caras, excelente
      • Dos caras, muy bien
      • Una cara, regular
      • Ninguna cara, pésimo


Título: Re: no entiendo como hacerlo en c++ me podrian ayudar
Publicado por: Serapis en 1 Febrero 2018, 01:51 am
Por mal camino vas, si no sabes ni por donde empezar...
Deja por un momento de pensar en que tienes que programar... esencialmente lo primero es pensar, discurrir, buscar una solución incluso mecánica, luego es cuetión de traducirlo a código...

Imagina eso, 3 monedas... las lanzas al aire (al gusto, las 3 ala vez o una tras otra), luego cuentas el resultado y replicas: han salido 3 caras, dos caras, 1 cara, ninguna cara... luego cuando eso  sucede, en vez de decir eso, lo cambias por el adejtivo que te reclaman...

Esto mismo se plasma aquí:
Código:
constante c_MONEDAS = 3, c_FACETAS = 2, c_SOLUCION = 1

funcion Lanzamiento3Monedas
    entero caras
    string respuesta

    Hacer
        caras = LanzarMonedas(c_MONEDAS, c_FACETAS, c_SOLUCION)
        Seleccionar casos para caras
            caso 3; respuesta = "excelente"
            caso 2; respuesta = "muy bien"
            caso 1; respuesta = "regular"
            caso 0; respuesta = "pésima"
        fin seleccion
        MostrarMensaje ("Tu tirada ha sido " + respuesta)
        respuesta = PreguntarAlJugador("Desea jugar otra vez? (S/N).")
    Repetir mientras Respuesta = "s" o respuesta ="S"
fin funcion

Se lanzan 3 monedas. Cada moneda tiene 2 facetas. la que se da por buena es la 1 (cara, la 2 sería cruz) // ó 0 y 1...
Interesa usar el parámetro facetas, porque si nos piden tirar un dado de 6 caras, o de 12, ó de 3, 5, etc... no requiere modificar la función, solo cambiar los valores  asignados a las constantes.
Código:
entero = funcion LanzarMonedas(entero cantidad, entero facetas, entero facetaEsperada)
    entero k, cuenta, valor

    bucle para k desde 1 hasta cantidad
        valor = random(entre 1 y facetas) // ó entre 0 y facetas-1
        si (valor = facetaesperada) luego
            cuenta +=1
        fin si
    fin bucle
    devolver cuenta
fin funcion

Hale, a tu esfuerzo queda entenderlo y pasarlo desde pseudocódigo a código...


Título: Re: no entiendo como hacerlo en c++ me podrian ayudar
Publicado por: ryukay en 1 Febrero 2018, 02:06 am
lo que sucde que el profesor que me estaba enseñando programacion en c++ no explicaba nada y mas bien cuando el explicaba los ejercicios se equivocaba a cada rato, nosostros lo teniamos que corregir a el en las clases y lo unico que decia era que lo hacia a drede para que uno buscara el error por eso pedi ayuda del ejercicio de esa forma


Título: Re: no entiendo como hacerlo en c++ me podrian ayudar
Publicado por: ryukay en 1 Febrero 2018, 02:07 am
gracias por explicar ya tengo una idea de como hacerlo


Título: Re: no entiendo como hacerlo en c++ me podrian ayudar
Publicado por: dijsktra en 1 Febrero 2018, 16:34 pm
A ver si puede valerte esto...


Código
  1.  
  2. #include <stdio.h>
  3. #include <assert.h>
  4.  
  5. /*
  6.    P : \forall i : 0 <= i < 3 : w[i]='c' or w[i]='+'
  7.    Q : #i : 0 <= i < 3 : w[i]='c'
  8.    O(1)
  9.    I : P[3/n] and 0 <= n <= 3
  10.    C(n) = 3 - n
  11. */
  12. int eval(const char w[])
  13. {
  14.  int n,s;
  15.  for(n=s=0;n<3;n++)
  16.      s+=(w[n]=='c');
  17.  return s;
  18. }
  19.  
  20. /* Mapping int -> const char[]  */
  21. const char *banner[] = {"bad", "medium","very good","excellent"};
  22.  
  23. int main(int argc, char *args[])
  24. {
  25.  char w[512];
  26.  char *c;
  27.  while (scanf("%s",w)!=EOF)
  28.    {
  29.      /* check protocol  O(1) */
  30.      int n,l;
  31.      for(n=l=0,c=w ; (n<3) && *c; n++,c++)
  32.       l+=(*c=='+' ||*c=='c');
  33.      assert((*c==0) && (n==3) && (l==3));
  34.      /* P */
  35.      printf("%s : %s \n",banner[eval(w)], w);
  36.    }
  37.  return 0;
  38. }

Si estás empezando, fíjate solo en la funcion eval()... El resto (comentarios) se entiende en cursos más avanzados.
El programa lee resultados de lanzamientos de 3 monedas. no se exige que estos sean generados por el programa, pero SI que sean resultados de lanzamientos de 3 monedas. En otro caso, se aborta el programa.
Se acaba el programa con Ctr-D sobre un terminal Linux, o Ctr-Z + Intro en Windows. esto es es la salida,

Código:
ccc
excellent : ccc
cc+
very good : cc+
+cc
very good : +cc
++c
medium : ++c
c+c
very good : c+c
c++
medium : c++
+++
bad : +++
+-+
main: main.c:33: main: Assertion `(*c==0) && (n==3) && (l==3)' failed.
Aborted