El deposito de construcción “El Ladrillazo”, necesita automatizar la venta y asignación de materiales para algunos de sus clientes, por ello, es necesario verificar los siguientes requisitos:
Para la venta de ladrillos, hay una cantidad mínima permitida, según el tamaño:
• Ladridos de doble bloque: Cantidad mínima 5
• Ladrillos simples: Cantidad máxima 8
Para la venta de tejas, además de tener un tope de venta, hay que verificar su tamaño:
• Teja de 3x4: Cantidad máxima 10
• Teja de 5x4: Cantidad mínima 4
El programa al final debe de mostrar el total de ladrillos y tejas vendidos, detallando la categoría a la que pertenecen (tamaño de ladrillo o teja). Adicionalmente promedio de ladrillos y tejas vendidas vendidos.
El programa debe de ejecutarse hasta que el usuario encargado de registrar los pedidos marque la opción de salida.
Respuestas
Respuesta:
Explicación:
Como no se especifica la cantidad de ventas que se harán se va a usar una lista simple enlazada, en C++ se la puede implementar con una clase autoreferenciada:
class Nodo{
...
Nodo *sig;
};
Esta clase tendrá un constructor y un destructor que crearán o destruirán los nodos mediante las sentencias new y delete. Cada nodo tendría como datos la cantidad de ladrillos y tejas por pedido. Y el código quedaría:
typedef enum{
LAD_D,
LAD_S,
TEJA_34,
TEJA_54,
}MATERIAL;//Para identificar cada material.
typedef struct{
int ladrillos_db;
int ladrillos_s;
int tejas_34;
int tejas_54;
};ORDEN
Class Nodo{
public:
ORDEN orden;
Nodo();
Nodo(ORDEN);
~Nodo();
Nodo *sig;
Nodo *pri;
};
Nodo::Nodo(void)
{
*pri=NULL;//Consturctor para crear la lista.
}
Nodo::Nodo(ORDEN *Nueva)
{
Nodo *aux=pri;
orden.ladrillos_db=Nueva->ladrillos_db;
orden.ladrillos_s=Nueva->ladrillos_s;
orden.tejas_34=Nueva->tejas_34;
orden.tejas_54=Nueva->tejas_54;
while(aux!=NULL)
aux=aux->sig;
aux=this;//Pone este nodo al final de la lista.
}
int total( MATERIAL);
float promedio( MATERIAL);
void ingreso(ORDEN *);
Nodo *Lista=NULL;//La lista se declara global porque no se permite pasarla como parámetro.
int main()
{
while(1){
int opc;
printf("(I)ngresar nueva venta\n");//Muestro un menú
printf("(S)alir\n");
cin>>opc;
switch(toupper(opc)){//uso toupper para que no distinga mayúscula de minúscula
case 'I':
ORDEN NvoOrd;
Ingreso(&NvoOrd);
Nodo *nuevo=new Nodo(&NvoOrd);
break;//Creo nueva venta
case 'S':break;
}
if(toupper(opc)=='S') break;//Elegí salir;
}
printf("En total vendi %d ladrillos dobles", total (LAD_D));
printf("En total vendi %d ladrillos simples", total (LAD_S));
printf("En total vendi %d tejas 3x4", total (TEJA_34));
printf("En total vendi %d tejas 5x4", total (TEJA_54));
printf("En promedio vendi %f ladrillos dobles", promedio (LAD_D));
printf("En promedio vendi %f ladrillos simples", promedio (LAD_S));
printf("En promedio vendi %f tejas 3x4", promedio (TEJA_34));
printf("En promedio vendi %f tejas 5x4", promedio (TEJA_54));
return 0;
}
void ingreso (ORDEN *Nueva)
{
Nueva ->ladrillos_db=0;
while(Nueva ->ladrillos_db<5)
{
printf("Cuantos ladrillos doble bloque? (min 5) ");
cin>>Nueva ->ladrillos_db;
if(Nueva ->ladrillos_db==0) break;//No lleva doble bloque
}
Nueva ->ladrillos_s=0;
while(Nueva ->ladrillos_s>8)
{
printf("Cuantos ladrillos simples? (max 8) ");
cin>>Nueva ->ladrillos_s;
if(Nueva ->ladrillos_db==0) break;//No lleva simples
}
...//Así con las tejas 3x4 y tejas 5x4.
}
int total( MATERIAL mat)
{
int acum=0;
Nodo *aux=Lista;
while(aux->sig){
switch (mat){
case LAD_D: acum+=aux->orden->ladrillos_db; break;
case LAD_S: acum+=aux->orden->ladrillos_s; break;
...
}
}
return acum;
}
float promedio( MATERIAL mat)
{
int acum=0, n=0;
float prom;
Nodo *aux=Lista;
while(aux->sig){
n++;
switch (mat){
case LAD_D: acum+=aux->orden->ladrillos_db; break;
case LAD_S: acum+=aux->orden->ladrillos_s; break;
...
}
}
prom=acum/n
return prom;
}