Tecnología y Electrónica, pregunta formulada por jandres70, hace 1 año

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.


jandres70: en c++

Respuestas a la pregunta

Contestado por LeonardoDY
1

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;

}


jandres70: MIL Y MIL GRACIAS
sebastianamorocho: No corre, sale que tiene algunos errores podria ayudarme?
diablorojo1231pcaptk: no corre porque esta elaborado en varios tipos de archivo, para ello se deben ajustar
Otras preguntas