Hack x Crack - Comunidad de Seguridad informática

Programación => C / C++ => Mensaje iniciado por: CLASH en Mayo 07, 2012, 07:36:17 pm

Título: Ayuda en ejercicio de la facultad
Publicado por: CLASH en Mayo 07, 2012, 07:36:17 pm
Bueno gente primero que nada les queria pedir ayuda en un ejercicio que tengo en la facultad y no se como hacerlo nesesito hacer la tarea para el 15 y con el trabajo no tengo tanto tiempo para estudiar :S
 el ejercicio dice asi

Un administrador de consorcios de edificios , atiende 10 edificios, como todos los edificios fueron realizados por medio de planes de fomento son todos iguales y tienen cada uno 50 departamentos de 3 ambientes
Mensualmente se realizan distintas tareas de mantenimiento en estos edificios debiendo ser las mismas pagadas en forma proporcional en partes iguales por los habitantes de cada uno de ellos.
Cada vez que se realiza un arreglo se obtiene la siguiente informacion

Numero de factura
Numero de Edificio
Codigo de proveedor
Monto de la Factura
fecha de vencimiento

estos datos finalizan con Numero de factura igual a 0

los proveedores son 5, ascensorista, electricista, pintor , plomero y limpieza
Estos Proveedores son los mismos para todos los edificios


Se desea Saber

Monto totall gastado por cada edificio
Mayor gasto efectuado , a que edificio y proveedor pertenece
Valor a pagar en calidad de expensas
Proveedor que no trabajo en ninguno de los edificios
Valor promedio de las facturas



el tema es que en el libro de mi facultad lo explica todo de manera no muy entendible..
otra cosa tambien tengo que hacer el analisis o diagrama de jackson para esto.

Espero que me puedan ayudar!
Gracias de antemano!
Título: Re:Ayuda en ejercicio de la facultad
Publicado por: JAG en Mayo 07, 2012, 08:12:26 pm
Hola clash!!
Mira lo mejor para aprender es que empieces tu a hacer el código y vayas preguntando por aquí las dudas que te surjan... solo así comprenderás el porque de todas las partes de tu ejercicio... no creo que nadie se ponga a hacértelo desde cero... venga inténtalo y nos dices en que dudas!! Ánimo que tampoco se ve tan difícil!!!
Saludos!!
Título: Re:Ayuda en ejercicio de la facultad
Publicado por: CLASH en Mayo 07, 2012, 08:23:25 pm
Hola clash!!
Mira lo mejor para aprender es que empieces tu a hacer el código y vayas preguntando por aquí las dudas que te surjan... solo así comprenderás el porque de todas las partes de tu ejercicio... no creo que nadie se ponga a hacértelo desde cero... venga inténtalo y nos dices en que dudas!! Ánimo que tampoco se ve tan difícil!!!
Saludos!!


se que nadie lo va a hacer por mi, pero nose como se hace si me lo pueden explicar me ayudarian mucho
Título: Re:Ayuda en ejercicio de la facultad
Publicado por: JAG en Mayo 07, 2012, 08:31:50 pm
Hola clash!!
Mira lo mejor para aprender es que empieces tu a hacer el código y vayas preguntando por aquí las dudas que te surjan... solo así comprenderás el porque de todas las partes de tu ejercicio... no creo que nadie se ponga a hacértelo desde cero... venga inténtalo y nos dices en que dudas!! Ánimo que tampoco se ve tan difícil!!!
Saludos!!


se que nadie lo va a hacer por mi, pero nose como se hace si me lo pueden explicar me ayudarian mucho

Pues yo empezaría por crear un struct Factura por ejemplo... para definir una variable factura con todas las cosas que dice que se incluyen en una factura... también crearía una variable de tipo enum de este tipo: enum proveedores{ascensorista, electricista, pintor , plomero, limpieza}
También te aconsejo que hagas una función por cada cosa que te dice que se desea saber... así si lo divides en módulos te resultará más fácil, además viendo los módulos así por separado no se ve tan complicado... ¿llevas ya algo de código o aún no empezaste?
Saludos!!
Título: Re:Ayuda en ejercicio de la facultad
Publicado por: CLASH en Mayo 07, 2012, 08:34:43 pm
Hola clash!!
Mira lo mejor para aprender es que empieces tu a hacer el código y vayas preguntando por aquí las dudas que te surjan... solo así comprenderás el porque de todas las partes de tu ejercicio... no creo que nadie se ponga a hacértelo desde cero... venga inténtalo y nos dices en que dudas!! Ánimo que tampoco se ve tan difícil!!!
Saludos!!


se que nadie lo va a hacer por mi, pero nose como se hace si me lo pueden explicar me ayudarian mucho

Pues yo empezaría por crear un struct Factura por ejemplo... para definir una variable factura con todas las cosas que dice que se incluyen en una factura... también crearía una variable de tipo enum de este tipo: enum proveedores{ascensorista, electricista, pintor , plomero, limpieza}
También te aconsejo que hagas una función por cada cosa que te dice que se desea saber... así si lo divides en módulos te resultará más fácil, además viendo los módulos así por separado no se ve tan complicado... ¿llevas ya algo de código o aún no empezaste?
Saludos!!

no empeze todavia tengo un ejercicio parecido a este, pero este es mas complicado mañana tengo programacion, despejo mis dudas y despues vengo aca te parece??
Título: Re:Ayuda en ejercicio de la facultad
Publicado por: JAG en Mayo 07, 2012, 08:42:58 pm
Ok!! Aquí te esperamos!! ;)
Título: Re:Ayuda en ejercicio de la facultad
Publicado por: CLASH en Mayo 08, 2012, 02:37:45 pm
Ok!! Aquí te esperamos!! ;)

Aca tengo parte de un codigo que era un ejercicio muy parecido ojala me puedan ayudar a terminarlo

#include<stdio.h>
#include<conio.h>
int main()
{
int tc,est;
float nb,ne,cant,imp,cont,tlc1,tlc2,tlc3,tle1,tle2,tle3,tle4,tle5,re1,re2,re3,re4,re5,cbe1,cbe2,cbe3,cbe4,cbe5,max,aux;
printf("ingrese el numero de boleta: ");
scanf("%f",&nb);
while(nb!=90)
        {
        printf("ingrese el numero de estacion: ");
        scanf("%f",&ne);
        printf("ingrese el tipo de combustible: ");
        scanf("%f",&tc);
        printf("ingrese la cantidad de combustible: ");
        scanf("%f",&cant);
        switch(tc)
              {
              case 1:
                   imp=cant*1.5;
                   tlc1=tlc1+cant;
              break;
              case 2:
                   imp=cant*1.3;
                   tlc2=tlc2+cant;
              break;
              case 3:
                   imp=cant*1.1;
                   tlc3=tlc3+cant;
              break;
              }
        switch(est)
             {
             case 1:
                  tle1=tle1+cant;
                  re1=re1+imp;
                  cbe1=cbe1+1;
             break;
             case 2:
                  tle2=tle2+cant;
                  re2=re1+imp;
                  cbe2=cbe2+1;
             break;
             case 3:
                  tle3=tle3+cant;
                  re3=re3+imp;
                  cbe3=cbe3+1;
             break;
             case 4:
                  tle4=tle4+cant;
                  re4=re4+imp;
                  cbe4=cbe4+1;
             break;
             case 5:
                  tle5=tle5+cant;
                  re5=re5+imp;
                  cbe5=cbe5+1;
             break;
             }
        cont=cont+1;
        if(cont==1)                 
                  {
                  max=imp;
                  aux=nb;
                  }
        if(imp>max)
                  {
                  max=imp;
                  aux=nb;
                  }
printf("ingrese el numero de boleta: ");
scanf("%f",&nb);   
              }


printf("el total de litros vendidos por la estacion 1 es: %d\n",tle1);
printf("el total de litros vendidos por la estacion 2 es: %d\n",tle2);
printf("el total de litros vendidos por la estacion 3 es: %d\n",tle3);
printf("el total de litros vendidos por la estacion 4 es: %d\n",tle4);
printf("el total de litros vendidos por la estacion 5 es: %d\n",tle5);
printf("el total recaudado por la estacion 1 es: %d\n",re1);
printf("el total recaudado por la estacion 2 es: %d\n",re2);
printf("el total recaudado por la estacion 3 es: %d\n",re3);
printf("el total recaudado por la estacion 4 es: %d\n",re4);
printf("el total recaudado por la estacion 5 es: %d\n",re5);
printf("el total de boletas emitidas por la estacion 1 es: %d\n",cbe1);
printf("el total de boletas emitidas por la estacion 2 es: %d\n",cbe2);
printf("el total de boletas emitidas por la estacion 3 es: %d\n",cbe3);
printf("el total de boletas emitidas por la estacion 4 es: %d\n",cbe4);
printf("el total de boletas emitidas por la estacion 5 es: %d\n",cbe5);
printf("la cantidad de litros vendidos del tipo de nafta 1 es: %d\n",tlc1);
printf("la cantidad de litros vendidos del tipo de nafta 2 es: %d\n",tlc2);
printf("la cantidad de litros vendidos del tipo de nafta 3 es: %d\n",tlc3);
printf("la boleta con el importe mas alto fue la boleta numero %d con un valor de %d",aux,max);
if(re1>re2 && re1>re3 && re1>re4 && re1>re5)
           {
           printf("la 1 es la que mas recaudo");
           }
else
    {
    printf("la 1 no fue la que mas recaudo");
    }
getch();
}
       
       
       
       
       
Título: Re:Ayuda en ejercicio de la facultad
Publicado por: piou en Mayo 08, 2012, 03:14:36 pm
Por lo pronto, puedes hacerlo mucho más elegante usando un array para ahorrate el switch(est)

Todos los casos son iguales:

Código: [Seleccionar]
case 1:
                  tle1=tle1+cant;
                  re1=re1+imp;
                  cbe1=cbe1+1;

Así que si en vez de crear variables int tle1, tle2..., creas los arrays: int tle[6]; int re[6]; int cbe[6];, en vez del switch enorme pones simplemente:

tle[est]=tle[est]+cant;
re[est]=re[est]+imp;
cbe[est]=cbe[est]+1;

Con el otro switch puedes hacer lo mismo.
Título: Re:Ayuda en ejercicio de la facultad
Publicado por: CLASH en Mayo 08, 2012, 03:55:45 pm
Por lo pronto, puedes hacerlo mucho más elegante usando un array para ahorrate el switch(est)

Todos los casos son iguales:

Código: [Seleccionar]
case 1:
                  tle1=tle1+cant;
                  re1=re1+imp;
                  cbe1=cbe1+1;

Así que si en vez de crear variables int tle1, tle2..., creas los arrays: int tle[6]; int re[6]; int cbe[6];, en vez del switch enorme pones simplemente:

tle[est]=tle[est]+cant;
re[est]=re[est]+imp;
cbe[est]=cbe[est]+1;

Con el otro switch puedes hacer lo mismo.


Como como? como quedaria el codigo?? no entendi
Título: Re:Ayuda en ejercicio de la facultad
Publicado por: JAG en Mayo 08, 2012, 05:04:21 pm
Por lo pronto, puedes hacerlo mucho más elegante usando un array para ahorrate el switch(est)

Todos los casos son iguales:

Código: [Seleccionar]
case 1:
                  tle1=tle1+cant;
                  re1=re1+imp;
                  cbe1=cbe1+1;

Así que si en vez de crear variables int tle1, tle2..., creas los arrays: int tle[6]; int re[6]; int cbe[6];, en vez del switch enorme pones simplemente:

tle[est]=tle[est]+cant;
re[est]=re[est]+imp;
cbe[est]=cbe[est]+1;

Con el otro switch puedes hacer lo mismo.


Como como? como quedaria el codigo?? no entendi

Claro tio... lo suyo es que uses arrays y algún bucle para recorrerlo... así haces más claro el código y te ahorras el declarar tantas variables y escribir tanto código... ¿Al final en cual de los dos ejercicios que has posteado tienes dudas?
Lo que te ha querido comentar piou es eso... que declares 3 arrays y los recorras con un bucle... Algo así:
Código: [Seleccionar]
for(est=0;est<5;est++){
   tle[est]=tle[est]+cant;
   re[est]=re[est]+imp;
   cbe[est]=cbe[est]+1;
}

De esta manera te ahorras tanto switch... también te sirve esto para los printf...
Título: Re:Ayuda en ejercicio de la facultad
Publicado por: CLASH en Mayo 08, 2012, 06:01:00 pm
Por lo pronto, puedes hacerlo mucho más elegante usando un array para ahorrate el switch(est)

Todos los casos son iguales:

Código: [Seleccionar]
case 1:
                  tle1=tle1+cant;
                  re1=re1+imp;
                  cbe1=cbe1+1;

Así que si en vez de crear variables int tle1, tle2..., creas los arrays: int tle[6]; int re[6]; int cbe[6];, en vez del switch enorme pones simplemente:

tle[est]=tle[est]+cant;
re[est]=re[est]+imp;
cbe[est]=cbe[est]+1;

Con el otro switch puedes hacer lo mismo.


Como como? como quedaria el codigo?? no entendi

Claro tio... lo suyo es que uses arrays y algún bucle para recorrerlo... así haces más claro el código y te ahorras el declarar tantas variables y escribir tanto código... ¿Al final en cual de los dos ejercicios que has posteado tienes dudas?
Lo que te ha querido comentar piou es eso... que declares 3 arrays y los recorras con un bucle... Algo así:
Código: [Seleccionar]
for(est=0;est<5;est++){
   tle[est]=tle[est]+cant;
   re[est]=re[est]+imp;
   cbe[est]=cbe[est]+1;
}

De esta manera te ahorras tanto switch... también te sirve esto para los printf...


nesesito ayuda en el que postie el 1ro de todos
aca tengo algo echo
Código: [Seleccionar]
#include <stdio.h>

#define Departamentos 500 // cantidad de departamentos
int ValidarInt (int, int, int); // prototipo de la funcion ValidarInt

int main()
{
   float Edificio[10]={0};  // inicializamos el array edificio que va a contener el monto gastado por cada edificio
   int Proveedor[5]={0}; // inicializamos el array proveedor que va a contener la cantidad de veces que trabajó cada proveedor
   char * NombresProveedores [5]={"ascensorista", "electricista", "pintor" , "plomero" ,"de limpieza"};
   float MayorGasto =0;
   float MonFc, Expensas ;
   int NroFc, dia, mes, ano, NroEdi, CodPro, MayorGEdi, MayorGProv;
   int ContFc=0;
   float GastoTotal=0;


   printf("\n\n Ingrese Nro de Factura: ");
   scanf("%d",&NroFc);

   while ( NroFc != 0 )
   {
     ContFc ++;

     printf("\nn Ingrese Nro de Edificio (1-10) : ");
     scanf("%d",&NroEdi);
     NroEdi= ValidarInt ( NroEdi, 1, 10 );

     printf("\n Ingrese Cod. Proveedor");
     printf("\n 1-ascensorista, 2-electricista, 3-pintor , 4-plomero 5-de limpieza : ");
     scanf("%d",&CodPro);
     CodPro= ValidarInt ( CodPro, 1, 5 );

     printf("\n Ingrese Monto de Factura : ");
     scanf("%f",&MonFc);

     Edificio [NroEdi-1] = Edificio[NroEdi-1] + MonFc;
     Proveedor [CodPro-1] ++;
     GastoTotal += MonFc;

     if (MonFc > MayorGasto)
     {
        MayorGasto = MonFc;
        MayorGEdi  = NroEdi;
        MayorGProv = CodPro;
     }

         
     printf("\n Ingrese Fecha de Vencimiento (dd/mm/aa): ");
      scanf("%d/%d/%d", &dia, &mes, &ano);

     printf("\n\n Ingrese Nro de Factura: ");
     scanf("%d",&NroFc);

   }

   for (int i=0; i<10 ; i++)
   {
      printf("\n Total Gastado por Edificio %d : %.2f", i+1, Edificio);
     
   }
   printf ("\n Mayor Gasto: ");
   printf("\n Monto \t Edificio \t Proveedor");
   printf("\n %.2f \t %d \t %s", MayorGasto, MayorGEdi, NombresProveedores [MayorGProv-1]);
   Expensas = GastoTotal / Departamentos;
   printf ("\n Expensas: %.2f", Expensas);
    int flag =0;
   for (int i=0; i<5; i++)
   {
     if (Proveedor==0)
     {   
        printf("\n El %s no ha trabajado nunca", NombresProveedores);
        flag=1;
     }

   
   }

   if (flag==0)
      printf ("\n Trabajaron todos los proveedores");


   printf ("\n Promedio de todas las Facturas: %.2f ", GastoTotal / ContFc);

   getchar();getchar();


 return 0;
}

// Unica funcion que uso para validar (valida un numero entero, pasandole los dos extremos posibles)

int ValidarInt (int dato , int min , int max)
{
   while (dato <min || dato>max)
   {
      printf ("\n ERROR, Reingrese un valor entre (%d-%d) : ",min,max);
      scanf("%d",&dato);
   }

   return dato;

}



que le falta???

Editado por piou: Por favor mete el código en etiquetas code
Título: Re:Ayuda en ejercicio de la facultad
Publicado por: CLASH en Mayo 10, 2012, 12:51:20 am
alguien???