Informatică, întrebare adresată de sui58d, 7 ani în urmă

Dacă suma este mai mică decât 500 lei, atunci în zilele de odihnă reducerea este de 5%, iar în zilele de lucru 3,5%. Dacă suma este mai mare sau egală cu 500 lei atunci reducerile se oferă respectiv: 4% Luni, Marţi 5%, Miercuri 6%, Joi 7%, Vineri, 8% Sâmbătă 9%, Duminică 10%. Elaboraţi un program care în dependenţă de ziua şi suma introdusă va afişa la ecran reducerea oferită, cât şi Suma ce necesită a fi achitată. De exemplu: date de intrare Duminică 1000, date de ieşire reducere 100 lei, suma ce necesită a fi achitată 900 lei.
va rog program in C++ folosing switch case

Răspunsuri la întrebare

Răspuns de VxF
1

Răspuns:

#include <iostream>

#include <string>

#include <vector>

int main()

{

   std::vector<std::string> listaZi = {"Luni", "Marti", "Miercuri", "Joi", "Vineri", "Sambata", "Duminica"};

   std::string zi;

   int ziNumeric;

   float pret, reducere;

       

   do {

       std::cout << "Zi (";

       for (int i = 0; i < listaZi.size(); i++) {

           std::cout << (i ? ", " : "") << listaZi[i];

       }

       std::cout << "): ";

       std::cin >> zi;

       ziNumeric = -1;

       for (int i = 0; i < listaZi.size(); i++) {

           if (listaZi[i] == zi) {

               ziNumeric = i;

           }

       }

   } while (ziNumeric == -1);

   

   std::cout << "Preț: ";

   std::cin >> pret;

       

   switch (pret < 500) {

       case true:

           switch (ziNumeric) {

               case 0: // Luni

               case 1: // Marti

               case 2: // Miercuri

               case 3: // Joi

               case 4: // Vineri

                   reducere = 3.5;

               break;

               case 5: // Sambata

               case 6: // Duminica

                   reducere = 5;

               break;

           }

       break;

       case false:

           switch (ziNumeric) {

               case 0: // Luni

                   reducere = 4;

               break;

               case 1: // Marti

                   reducere = 5;

               break;

               case 2: // Miercuri

                   reducere = 6;

               break;

               case 3: // Joi

                   reducere = 7;

               break;

               case 4: // Vineri

                   reducere = 8;

               break;

               case 5: // Sambata

                   reducere = 9;

               break;

               case 6: // Duminica

                   reducere = 10;

               break;

           }

       break;

   }

       

   std::cout << "Reducere: " << pret / 100 * reducere << " RON (" << reducere << "%)" << std::endl;

   std::cout << "Preț de achitat: " << pret / 100 * (100 - reducere) << " RON" << std::endl;

}

Explicație:

De notat că astfel de structuri switch sunt voluminoase și adeseori dificile de întreţinut. În practică se evită folosirea lor. De exemplu așa:

#include <iostream>

#include <string>

#include <vector>

int main()

{

   struct tipReducere {

       std::string zi;

       float ieftin, scump;

   };

   std::vector<tipReducere> listaReducere = {

       {"Luni", 3.5, 4},

       {"Marti", 3.5, 5},

       {"Miercuri", 3.5, 6},

       {"Joi", 3.5, 7},

       {"Vineri", 3.5, 8},

       {"Sambata", 5, 9},

       {"Duminica", 5, 10},

   };

   std::string zi;

   float pret, reducere;

   std::cout << "Zi (";

   for (int i = 0; i < listaReducere.size(); i++) {

       std::cout << (i ? ", " : "") << listaReducere[i].zi;

   }

   std::cout << "): ";

   std::cin >> zi;

   

   std::cout << "Preț: ";

   std::cin >> pret;

   for (int i = 0; i < listaReducere.size(); i++) {

       if (listaReducere[i].zi == zi) {

           reducere = pret < 500 ? listaReducere[i].ieftin : listaReducere[i].scump;

       }

   }

   std::cout << "Reducere: " << pret / 100 * reducere << " RON (" << reducere << "%)" << std::endl;

   std::cout << "Preț de achitat: " << pret / 100 * (100 - reducere) << " RON" << std::endl;

}

Alte întrebări interesante