Ver Mensaje Individual
  #2 (permalink)  
Antiguo 03/04/2016, 23:27
eferion
 
Fecha de Ingreso: octubre-2014
Ubicación: Madrid
Mensajes: 1.212
Antigüedad: 9 años, 7 meses
Puntos: 204
Respuesta: Tengo este algoritmo: Duda con condicional

Lo primero antes de nada. Si Bola únicamente almacena enteros debería ser int en vez de float. Si no quieres errores raros en tu código acostúmbrate a usar el tipo correcto para cada variable.

Y otro detalle más, std::cout no necesita paréntesis para sacar el contenido por la pantalla.

Lo que pretendes puedes hacerlo de varias formas, pero básicamente todas pasan por comparar números o cadenas.

Para hacer la versión sencilla, es decir, comparando palabras, tienes que tener en cuenta que no es posible comparar dos char* usando el operador de comparación ==, sino que has una función del tipo strcmp. Una opción más sencilla es usar la clase std::string:

Código C++:
Ver original
  1. std::string bola;
  2. cout<<("\nCual es el color de la bolita: ");
  3.  
  4. cin>> bola;
  5.  
  6. if(Bola==" negro") {
  7.   cout<<("\nNo posee descuento") << endl;
  8. }
  9.  
  10. else if (Bola=="rojo") {
  11.   cout<<("\nPosee un descuento de 10%") << endl;
  12. }

Por cierto, nota que el código es sensible al uso de mayúsculas.

Otra opción pasa por comparar códigos. En este caso recuperamos un string y calculamos el código que tiene asociado. En este caso, por claridad, se puede usar la clase std::map para guardar la relación entre un color y su código:

Código C++:
Ver original
  1. std::map<std::string,int> mapa;
  2. mapa["negro"]=1;
  3. mapa["rojo"]=2;
  4.  
  5. std::string bola;
  6. cout<<("\nCual es el color de la bolita: ");
  7.  
  8. cin>> bola;
  9. int codigo=mapa[bola];
  10.  
  11.  
  12. if(codigo==1) {
  13.   cout<<("\nNo posee descuento") << endl;
  14. }
  15.  
  16. else if (codigo==2) {
  17.   cout<<("\nPosee un descuento de 10%") << endl;
  18. }

Aunque quizás, ya puestos, lo suyo sería que el mapa almacenase directamente el descuento, lo que nos permitiría ahorrarnos código repetido:


Código C++:
Ver original
  1. std::map<std::string,int> mapa;
  2. mapa["negro"]=0;
  3. mapa["rojo"]=10;
  4. // ...
  5.  
  6. cout<<("\nCual es el color de la bolita: ");
  7.  
  8. std::string bola;
  9. cin>> bola;
  10. int descuento=mapa[bola];
  11.  
  12. if(descuento==0)
  13.   cout< ("\nNo posee descuento" << endl;
  14. else if (descuento==100)
  15.   cout<< "\nLa compra es gratis" << endl;
  16. else
  17. {
  18.   cout<<"\nPosee un descuento de " << descuento << "%" << endl;
  19.  
  20.   float PrecioDes=(CantidadAP-((CantidadAP*descuento)/100));
  21.  
  22.   cout <<"\nTotal a pagar es: " << PrecioDes << endl;
  23. }

Hay más formas de hacerlo pero las expuestas bastan para darte una idea sobre cómo resolver el problema.

Por cierto, copiar y pegar el código no te va a servir de mucho a la hora del examen. Es recomendable que entiendas lo que estás poniendo aunque la solución propuesta no sea la mejor de todas.

Un saludo.
__________________
La ayuda se paga con esfuerzo o con dinero. Si no estás dispuesto a esforzarte y quieres que te hagan los deberes pide presupuesto, al menos así ahorrarás tiempo.