CB100

Notas, resueltos y tps de la materia Algoritmos y Estructuras de Datos
Index Commits Files Refs README
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:
Mparciales/2p2C2022/4.cpp | 62++++++++++++++++++++++++++++++++++++++++++++++++++++----------
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() {