commit d81c65594d1c2855ecdb43ffbca7af44b03a1fed
parent f549adbb0ff5a03a847b8e948d246028822a5cd5
Author: Martin Kloeckner <mjkloeckner@gmail.com>
Date: Tue, 21 May 2024 15:47:43 -0300
add `pre` and `post` conditions
Diffstat:
1 file changed, 52 insertions(+), 10 deletions(-)
diff --git a/parciales/2p2C2022/4.cpp b/parciales/2p2C2022/4.cpp
@@ -7,10 +7,17 @@ private:
unsigned int cantDonaciones;
public:
+ /**
+ * post: inicializa `Colecta`
+ */
Colecta() {
this->objetivo = this->total = this->maxDonacion = this->cantDonaciones = 0;
}
+ /**
+ * post: inicializa `Colecta` con los atributos pasados como argumento
+ * `objetivo`, `total`, `maxDonacion`, `cantDonaciones`
+ */
Colecta(double objetivo, double total, double maxDonacion, size_t cantDonaciones) {
this->objetivo = objetivo;
this->total = total;
@@ -18,53 +25,88 @@ public:
this->cantDonaciones = cantDonaciones;
}
+ /**
+ * post: libera la memoria de Colecta
+ */
virtual ~Colecta() {}
+ /**
+ * pre: `Colecta` debe estar inicializado
+ * post: asigna `objetivo` al atributo `objetivo` de la clase
+ */
void setObjetivo(long objetivo) {
this->objetivo = objetivo;
}
+ /**
+ * pre: `Colecta` debe estar inicializado
+ * post: devuelve el atributo `objetivo` de la clase
+ */
double getObjetivo() {
return this->objetivo;
}
+ /**
+ * pre: `Colecta` debe estar inicializado
+ * post: devuelve el atributo `total` de la clase
+ */
double calcularRecaudacion() {
return this->total;
}
- void donar(double amount) {
- if(amount < 0) {
+ /**
+ * pre: `Colecta` debe estar inicializado
+ * post: incrementa `total` en `monto` solo si `monto` es mayor a 0,
+ * ademas si `monto` es mayor a la donacion maxima lo guarda
+ * en `maxDonacion`
+ */
+ void donar(double monto) {
+ if(monto < 0) {
throw "El monto a donar no puede ser negativo";
- } else if(amount > maxDonacion) {
- maxDonacion = amount;
+ } else if(monto > maxDonacion) {
+ maxDonacion = monto;
}
- this->total += amount;
+ this->total += monto;
this->cantDonaciones++;
}
+ /**
+ * pre: `Colecta` debe estar inicializado
+ * post: devuelve el atributo `cantDonaciones` de la clase
+ */
unsigned int contarDonaciones() {
return this->cantDonaciones;
}
+ /**
+ * pre: `Colecta` debe estar inicializado
+ * post: devuelve el atributo `maxDonacion` de la clase
+ */
double calcularDonacionMaxima() {
return this->maxDonacion;
}
+ /**
+ * pre: `Colecta` debe estar inicializado
+ * post: devuelve el monto faltante para llegar a `objetivo`, devuelve 0
+ * si el monto faltante es 0 o menor a cero (en case de excedente)
+ */
double calcularRecaudacionFaltante() {
- double faltante = (this->objetivo - this->calcularDonacionMaxima());
+ double faltante = (this->objetivo - this->total);
return (faltante < 0) ? 0 : faltante;
}
};
void printStatus(Colecta colecta) {
+ std::cout << "Total: `" << colecta.calcularRecaudacion() << "`\n";
std::cout << "Objetivo: `" << colecta.getObjetivo() << "`\n";
- std::cout << "Cant. de donaciones: `"
- << colecta.contarDonaciones() << "`\n";
- std::cout << "Maxima donacion: `"
- << colecta.calcularDonacionMaxima() << "`\n";
std::cout << "Faltante: `"
<< colecta.calcularRecaudacionFaltante() << "`\n";
+ std::cout << "Maxima donacion: `"
+ << colecta.calcularDonacionMaxima() << "`\n";
+ std::cout << "Cant. de donaciones: `"
+ << colecta.contarDonaciones() << "`\n";
}
int main() {