Algorithmen_Datenstrukturen/Uebung 5/Uebung5_2/Drone.cpp

49 lines
1.8 KiB
C++

#include "Drone.h"
#include <cmath>
#include <iostream>
// #define DEBUG
float Drone::calculateChange(float total, float paid) { return paid - total; }
void Drone::returnChange(float change) {
float restChange = change;
std::cout << "Restbetrag: " << restChange << std::endl;
std::sort(availableCashInstances, availableCashInstances + CashInstanceSize,
std::greater<>());
for (int i = 0; i < CashInstanceSize; i++) {
if (availableCashInstances[i].value >= restChange) {
}
while (restChange >= availableCashInstances[i].value &&
availableCashInstances[i].availableAmount > 0) {
std::cout << availableCashInstances[i].value << " " << std::flush;
#ifdef DEBUG
std::cout << "restChange: " << restChange
<< " Current Coin: " << availableCashInstances[i].value
<< std::flush << std::endl;
#endif
availableCashInstances[i].availableAmount--;
restChange =
std::round((restChange - availableCashInstances[i].value) * 100) /
100;
}
}
std::cout << std::endl;
if (restChange > 0.009) {
for (int i = CashInstanceSize - 1; i >= 0; i--) {
if (availableCashInstances[i].value >= restChange &&
availableCashInstances[i].availableAmount > 0) {
availableCashInstances[i].availableAmount--;
restChange =
std::round((restChange - availableCashInstances[i].value) * 100) /
100;
std::cout << "Warnung: Rückgeld kann nicht genau herausgegeben werden! "
"Ausbezahlter Betrag überschreitet den genauen Wert um "
<< restChange * (-1) << std::endl;
return;
}
}
std::cout << "Nicht genügend Restgeld vorhanden! Fehlender Betrag: "
<< restChange << std::endl;
}
}