Problemă limbaj de programare C++
Simulați funcționarea unui automat de parcare. Automatul poate primi bancnote de 1, 5, 10 și 50 lei și
poate da restul în bancnote de 1, 5 și 10 lei. Costul parcării unei mașini poate fi între 3 și 120 lei.
Aplicația va citi valoarea datorată pentru parcare și valori numerice reprezentând numărul de bancnote
de fiecare fel introduse de persoana care plătește.
Apoi va afișa numărul de bancnote de fiecare fel din restul datorat.
Exemplu:
Cost parcare: 67 lei;
Bancnote introduse: 0 x 1
0 x 5
2 x 10
1 x 50
Rest calculat: 70 – 67 = 3
Bancnote restituite: x 1.
Răspunsuri la întrebare
Răspuns:
#include <iostream>
using std::cout;
using std::endl;
using std::cin;
static void afisareNumarBacnoteReturnate(int restDePlata) {
// numărul de bacnote pe care trebuie să le restituie aparatul, inițial toate au valoarea 0
int nrBacnote1{}, nrBacnote5{}, nrBacnote10{}, nrBacnote50{};
// cât timp rest de plată este diferit de 0
while (restDePlata) {
// dacă restul de plată este mai mare sau egal decât 50 putem să oferim bacnote de 50 de lei
if (restDePlata >= 50) {
++nrBacnote50;
restDePlata -= 50;
}
// dacă restul de plată este mai mic decât 50 dar mai sau egal cu 10 putem restitui bacnote de 10
else if (restDePlata >= 10) {
++nrBacnote10;
restDePlata -= 10;
}
// ș.a.m.d. până când nu mai trebuie să oferim rest de plată
else if (restDePlata >= 5) {
++nrBacnote5;
restDePlata -= 5;
}
else if (restDePlata >= 1) {
++nrBacnote1;
restDePlata -= 1;
}
}
// la final afișăm câte bacnote a oferit aparatul
cout << "Bacnote restituite:\n"
<< "\t" << nrBacnote1 << " bacnote de 1 leu\n"
<< "\t" << nrBacnote5 << " bacnote de 5 lei\n"
<< "\t" << nrBacnote10 << " bacnote de 10 lei\n"
<< "\t" << nrBacnote50 << " bacnote de 50 lei"
<< endl;
}
int main() {
int costParcare, nrBacnote1, nrBacnote5, nrBacnote10, nrBacnote50, sumaIncasata{}, restDePlata;
// citim costul parcării
cout << "Introdu costul parcarii: "; cin >> costParcare;
// citim numărul de bacnote pe care le introducem de ex. 0 0 3 2
// 0 bacnote de 1 leu, 0 bacnote de 5 lei, 3 bacnote de 10 lei și 2 bacnote de 50 de lei
cout << "Introdu bacnotele introduse (1 leu, 5 lei, 10 lei, 50 lei): ";
cin >> nrBacnote1 >> nrBacnote5 >> nrBacnote10 >> nrBacnote50;
// calculăm suma pe care a încasat-o aparatul
sumaIncasata = 1 * nrBacnote1 + 5 * nrBacnote5 + 10 * nrBacnote10 + 50 * nrBacnote50;
// calculăm restul de plată
restDePlata = sumaIncasata - costParcare;
// afișăm informațiile
cout << "Costul parcarii: " << costParcare << endl;
cout << "Suma incasata: " << sumaIncasata << endl;
cout << "Rest de plata: " << restDePlata << endl;
afisareNumarBacnoteReturnate(restDePlata);
return 0;
}
Output-ul programului:
Introdu costul parcarii: 67
Introdu bacnotele introduse (1 leu, 5 lei, 10 lei, 50 lei): 0 0 2 1
Costul parcarii: 67
Suma incasata: 70
Rest de plata: 3
Bacnote restituite:
3 bacnote de 1 leu
0 bacnote de 5 lei
0 bacnote de 10 lei
0 bacnote de 50 lei
#include <iostream>
using namespace std;
int main() {
int cost;
int n50, n10, n5, n1;
int total, rest;
cout << "Cost parcare: ";
cin >> cost;
cout << "Bancnote (1,5,10,50) : ";
cin >> n1 >> n5 >> n10 >> n50;
total = n1 * 1 + n5 * 5 + n10 * 10 + n50 * 50;
rest = total - cost;
cout << "\n\nCost parcare : " << cost << " lei";
cout << "\nBancnote introduse:\n" << n1 << " x 1\n" << n5 << " x 5\n" << n10 << " x 10\n" << n50 << " x 50\n";
cout << "\nRest calculat : " << total << " - " << cost << " = " << rest;
if (rest != 0) {
n50 = rest / 50;
rest %= 50;
n10 = rest / 10;
rest %= 10;
n5 = rest / 5;
rest %= 5;
n1 = rest;
cout << "\nBancnote restituite: \n";
if (n50) cout << n50 << " x 50\n";
if (n10) cout << n10 << " x 10\n";
if (n5) cout << n5 << " x 5\n";
if (n1) cout << n1 << " x 1\n";
}
}