Ejercicios de Clases
Completion requirements
6. Ejercicio Molinos de Café
6.1. ejemplo de solución
/*
* Germán Andrés Xander 2021 *
*/
#include <iostream>
#define capacidad 200
#define molinos 20
using namespace std;
class molino{
public:
char ID=0;
static float disponible;
float molido=0;
void moler(float cantidad){
if (disponible >= cantidad){
disponible -= cantidad;
molido+=cantidad;
cout<<endl<<"se molieron "<<cantidad<<" kg."<<endl<<"quedan disponibles "<<disponible<<" kg en el silo"<<endl;
}else{
cout<<endl<<"no hay suficiente café disponible"<<endl;
}
}
void recargar(float cantidad){
if ((disponible + cantidad)<= capacidad){
disponible += cantidad;
cout<<endl<<"se agregaron "<<cantidad<<" kg."<<endl<<"el silo ahora tiene "<<disponible<<" kg de café"<<endl;
}else{
cout<<endl<<"No fue posible cargar. Se excede la capacidad del silo"<<endl;
}
}
molino * proximo;
};
float molino::disponible = capacidad;
void agregar(molino *&lista);
void reporte(molino *lista);
void operar(char id, molino *lista);
void eliminar(molino *&lista);
int main(int argc, char **argv){
char opcion;
molino * planta=NULL;
do{
cout<<endl<<endl<<endl<<"1 agregar molino"<<endl<<"2 reporte"<<endl<<"(a,b,c...) operar molino "<<endl<<"0 salir"<<endl;
cin>>opcion;
switch (opcion){
case '1':{
agregar(planta);
break;
}
case '2': {
reporte(planta);
break;
}
case '0': {
cout<<endl<<"saliendo";
break;
}
default:{
if (opcion < 'a' or opcion >= 'a'+ molinos){
cout<<endl<<"opción no valida";
}else{
operar(opcion,planta);
}
}
}
}while(opcion!='0');
eliminar(planta);
return 0;
}
void agregar(molino *&lista){
int cantidad=1;
molino *lista2=lista;
char id='a';
if (!lista){ //el primero
lista=new molino;
lista->ID=id;
lista->proximo=NULL;
}else{
while(lista2->proximo!=NULL){
lista2=lista2->proximo;
cantidad++;
}
if(cantidad < molinos){
id=lista2->ID;
lista2->proximo=new molino;
lista2->proximo->ID=id+1;
lista2->proximo->proximo=NULL;
}else{
cout<<endl<<"se alcanzo el limite de molinos";
}
}
}
void reporte(molino *lista){
float total=0;
cout<<endl<<endl<<"======== Reporte ==========";
while(lista!=NULL){
cout<<endl<<"Planta id: "<<lista->ID;
cout<<endl<<"Molido: "<<lista->molido<<endl;
total+=lista->molido;
lista=lista->proximo;
}
cout<<endl<<"===========================";
cout<<endl<<"Total molido: "<<total<<" kg";
cout<<endl<<"Disponible: "<<lista->disponible<<" kg";
}
void operar(char id, molino *lista){
char opcion;
float cantidad;
while(lista!=NULL){
if(id==lista->ID){
do{
cout<<endl<<endl<<endl<<"1 Moler"<<endl<<"2 Recargar"<<endl<<"0 Volver"<<endl;
cin>>opcion;
switch (opcion){
case '1':{
cout<<endl<<"ingrese cantidad a moler"<<endl;
cin>>cantidad;
lista->moler(cantidad);
break;
}
case '2': {
cout<<endl<<"ingrese cantidad a recargar"<<endl;
cin>>cantidad;
lista->recargar(cantidad);
break;
}
}
}while(opcion!='0');
break;
}
lista=lista->proximo;
}
cout<<endl<<"no existe el molino solicitado";
}
void eliminar(molino *&lista){
molino *lista2;
while(lista){
lista2=lista;
lista=lista->proximo;
delete lista2;
}
}