no entiendo como hacerlo en c++ me podrian ayudar

Iniciado por ryukay, 31 Enero 2018, 21:35 PM

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

ryukay

 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

Serapis

#1
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í:

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.
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...

ryukay

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

ryukay

gracias por explicar ya tengo una idea de como hacerlo

dijsktra

#4
A ver si puede valerte esto...




#include <stdio.h>
#include <assert.h>

/*
  P : \forall i : 0 <= i < 3 : w[i]='c' or w[i]='+'
  Q : #i : 0 <= i < 3 : w[i]='c'
  O(1)
  I : P[3/n] and 0 <= n <= 3
  C(n) = 3 - n
*/
int eval(const char w[])
{
 int n,s;
 for(n=s=0;n<3;n++)
     s+=(w[n]=='c');
 return s;
}

/* Mapping int -> const char[]  */
const char *banner[] = {"bad", "medium","very good","excellent"};

int main(int argc, char *args[])
{
 char w[512];
 char *c;
 while (scanf("%s",w)!=EOF)
   {
     /* check protocol  O(1) */
     int n,l;
     for(n=l=0,c=w ; (n<3) && *c; n++,c++)
      l+=(*c=='+' ||*c=='c');
     assert((*c==0) && (n==3) && (l==3));
     /* P */
     printf("%s : %s \n",banner[eval(w)], w);
   }
 return 0;
}


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,


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



Si la depuración es el proceso de eliminar fallos en el software, entonces programar debe ser el proceso de ponerlos dentro. (Edsger Dijsktra)