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
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...
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
gracias por explicar ya tengo una idea de como hacerlo
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