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:
#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;
}