CB100

Notas, resueltos y tps de la materia Algoritmos y Estructuras de Datos
Index Commits Files Refs README
parciales/2022-2C-1p/4.cpp (3041B)
   1 #include <iostream>
   2 #include <string>
   3 
   4 class Colecta {
   5 private:
   6     double total, maxDonacion, objetivo;
   7     unsigned int cantDonaciones;
   8 
   9 public:
  10     /**
  11      * post: inicializa `Colecta`
  12      */
  13     Colecta() {
  14         this->objetivo = this->total = this->maxDonacion = this->cantDonaciones = 0;
  15     }
  16 
  17     /**
  18      * post: inicializa `Colecta` con los atributos pasados como argumento
  19      *       `objetivo`, `total`, `maxDonacion`, `cantDonaciones`
  20      */
  21     Colecta(double objetivo, double total, double maxDonacion, size_t cantDonaciones) {
  22         this->objetivo = objetivo;
  23         this->total = total;
  24         this->maxDonacion = maxDonacion;
  25         this->cantDonaciones = cantDonaciones;
  26     }
  27 
  28     /**
  29      * post: libera la memoria de Colecta
  30      */
  31     virtual ~Colecta() {}
  32 
  33     /**
  34      * pre: `Colecta` debe estar inicializado
  35      * post: asigna `objetivo` al atributo `objetivo` de la clase
  36      */
  37     void setObjetivo(long objetivo) {
  38         this->objetivo = objetivo;
  39     }
  40 
  41     /**
  42      * pre: `Colecta` debe estar inicializado
  43      * post: devuelve el atributo `objetivo` de la clase
  44      */
  45     double getObjetivo() {
  46         return this->objetivo;
  47     }
  48 
  49     /**
  50      * pre: `Colecta` debe estar inicializado
  51      * post: devuelve el atributo `total` de la clase
  52      */
  53     double calcularRecaudacion() {
  54         return this->total;
  55     }
  56 
  57     /**
  58      * pre: `Colecta` debe estar inicializado
  59      * post: incrementa `total` en `monto` solo si `monto` es mayor a 0,
  60      *       ademas si `monto` es mayor a la donacion maxima lo guarda
  61      *       en `maxDonacion`
  62      */
  63     void donar(double monto) {
  64         if(monto < 0) {
  65             throw "El monto a donar no puede ser negativo";
  66         } else if(monto > maxDonacion) {
  67             maxDonacion = monto;
  68         }
  69 
  70         this->total += monto;
  71         this->cantDonaciones++;
  72     }
  73 
  74     /**
  75      * pre: `Colecta` debe estar inicializado
  76      * post: devuelve el atributo `cantDonaciones` de la clase
  77      */
  78     unsigned int contarDonaciones() {
  79         return this->cantDonaciones;
  80     }
  81 
  82     /**
  83      * pre: `Colecta` debe estar inicializado
  84      * post: devuelve el atributo `maxDonacion` de la clase
  85      */
  86     double calcularDonacionMaxima() {
  87         return this->maxDonacion;
  88     }
  89 
  90     /**
  91      * pre: `Colecta` debe estar inicializado
  92      * post: devuelve el monto faltante para llegar a `objetivo`, devuelve 0
  93      *       si el monto faltante es 0 o menor a cero (en case de excedente)
  94      */
  95     double calcularRecaudacionFaltante() {
  96         double faltante = (this->objetivo - this->total);
  97         return (faltante < 0) ? 0 : faltante;
  98     }
  99 };
 100 
 101 void printStatus(Colecta colecta) {
 102     std::cout << "Total:    `" << colecta.calcularRecaudacion() << "`\n";
 103     std::cout << "Objetivo: `" << colecta.getObjetivo() << "`\n";
 104     std::cout << "Faltante: `" 
 105         << colecta.calcularRecaudacionFaltante() << "`\n";
 106     std::cout << "Maxima donacion: `" 
 107         << colecta.calcularDonacionMaxima() << "`\n";
 108     std::cout << "Cant. de donaciones: `" 
 109         << colecta.contarDonaciones() << "`\n";
 110 }
 111 
 112 int main() {
 113     Colecta c;
 114     c.setObjetivo(100000.0);
 115     printStatus(c);
 116     std::cout << "\n";
 117 
 118     c.donar(91.52);
 119     printStatus(c);
 120     std::cout << "\n";
 121 
 122     c.donar(1020.00);
 123     printStatus(c);
 124     std::cout << "\n";
 125 
 126     c.donar(20.00);
 127     printStatus(c);
 128     std::cout << "\n";
 129     return 0;
 130 }