Ver Mensaje Individual
  #3 (permalink)  
Antiguo 05/06/2012, 11:25
starfix
 
Fecha de Ingreso: diciembre-2011
Ubicación: Crespo - Entre Rios
Mensajes: 155
Antigüedad: 13 años, 3 meses
Puntos: 25
Respuesta: Problema Funciones

a parte de haber muchas variable, los nombres difieren el algunas letras nomas, es facil confundirse de variable


se me ocurre que todas las variables que terminan en numeros las podes agrupar dentro de un struct y luego crear un arreglo del struct creado

Código C++:
Ver original
  1. struct{
  2.  
  3. float total; //anteriormente tots#
  4. float promedio; //proms#
  5. float ganancia; //gsuc#
  6. float recaudado; //recs#
  7.  
  8. //los # dicen que anteriormente habia un numero ahi
  9. }Sucursal[5]; //utilizamos un arreglo como dijo cesar_calsa


podemos modificar un poco el codigo asi:

Código C++:
Ver original
  1. #include <stdio.h>
  2. #include <conio.h>
  3.  
  4. //Void
  5. void Cantavend (int, int, int);
  6. void sucmax (int, float);
  7. void sucrecmenos (int, float);
  8. void gansuc(float, float, float, float, float);
  9. void porrec(float, float, float, float);
  10. void tickme(int, float);
  11. void Imprimir (int);
  12. void procav (float, float, float, float, float);
  13.  
  14. //podes declarar una misma funcion varias veces
  15. //todas las declaraciones de la misma funcion deben de diferir en al menos 1 parametro
  16. void Suma (int*, int);
  17. void Suma (float*, float);
  18. //cuando declares la implementacion de la funcion, vas a tener que hacerlo para
  19. //cada declaracion de la funcion
  20.  
  21. //lo anterior se llama POLIMORFISMO
  22.  
  23. void maximo(int, float*, float, int*, float, float*, float, int*, int, int*, int, float*);
  24. //Float
  25. float descuento (float a);
  26. float gsuca (float);
  27. float promedio (float, float);
  28.  
  29. /* elimine la funcion
  30. float promediotot (float, float);
  31. porque es identica a la anterior*/
  32.  
  33. //se declaran las variables globales
  34. struct{
  35.         float total;
  36.         float promedio;
  37.         float recaudado;
  38.         float ganancia;
  39.     }Sucursal[5];
  40.  
  41. float recp1, recp2, recp3, recp4;
  42. //se termina de declarar las variables globales
  43. int main ()
  44. {
  45.    
  46.    
  47.     /*
  48.     con el struct anterior se eliminaron las siguientes variables:
  49.    
  50.     tots1, tots2, tots3, tots4, tots5 se sustituyen por total.
  51.     recs1, recs2, recs3, recs4, recs5 se sustituyen por recaudado.
  52.     gsuc1, gsuc2, gsuc3, gsuc4, gsuc5 se sustituyen por ganancia.
  53.     proms1, proms2, proms3, proms4 se sustituyen por promedio.
  54.    
  55.     */
  56.    
  57.     /*las inicializaciones en 0 que hiciste a todas las variables que elimine,
  58.     ahora la poder realizar con un for*/
  59.    
  60.     for (int i=0; i<5; i++){
  61.         Sucursal[i].total=0;
  62.         Sucursal[i].promedio=0;
  63.         Sucursal[i].recaudado=0;
  64.         Sucursal[i].ganancia=0;
  65.     }
  66.    
  67.     /*con lo anterior se elimina:
  68.    
  69.     tots1?tots2=tots3=tots4=tots5=0;
  70.     recs1=recs2=recs3=recs4=recs5=gsuc1=gsuc2=gsuc3=gsuc4=gsuc5=0:
  71.     proms1=proms2=proms3=proms4=proms5=0;
  72.     */
  73.    
  74.    
  75.     int tick,ca,npel,nsuc,turno,catm,catn,catt,cont,pg,aux,aux2,aux3; //Variables Enteras
  76.     float pr,tickmin,totrecp,totfinal,pmaxr,sucminr,  prom1, prom2, prom3, prom4; //Variables Flotantes
  77.    
  78.     tick=ca=npel=nsuc=turno=catm=catn=catt=cont=pg=aux=aux2=aux3=recp1=recp2=recp3=recp4=0;
  79.     prom1=prom2=prom3=prom4=0;
  80.    
  81.     pr=tickmin=totrecp=totfinal=pmaxr=sucminr=0;
  82.  
  83.     printf("Ingrese numero de ticket ");
  84.     scanf("%d",&tick);
  85.     while (tick!=0) //Comienzo del ciclo
  86.     {
  87.         printf("\nIngrese numero de sucursal ");
  88.         scanf("%d",&nsuc);
  89.         printf("\nIngrese cantidad de asientos ");
  90.         scanf("%d",&ca);
  91.         printf("\n1=Belleza americana \n2=El informante \n3=La hija del general \n4=Al filo de la muerte \n\nIngrese numero de pelicula ");
  92.         scanf("%d",&npel);
  93.         printf("\n1=Turno Mañana \n2=Turno Tarde \n3=Turno Noche \n\nIngrese numero de turno  ");
  94.         scanf("%d",&turno);
  95.        
  96.         if (ca > 8) //Verificar descuento
  97.         {
  98.             pr=descuento(ca);
  99.         }
  100.         if (ca<=8)
  101.         {
  102.             pr=ca*7;           
  103.         }
  104.  
  105.         //el sguiente switch no lo entiendo
  106.         switch (turno) //Categoría Turno
  107.         {
  108.         case 1:Suma(&catm,ca);
  109.             break;
  110.         case 2:Suma(&catt, ca);
  111.             break;
  112.         case 3:Suma(&catn,ca);
  113.             break;  
  114.         }
  115.    
  116.         switch (npel) //Categoría pelicula
  117.         {
  118.         case 1:Suma(&recp1,pr);
  119.             break;
  120.         case 2:Suma(&recp2,pr);
  121.             break;
  122.         case 3:Suma(&recp3,pr);
  123.             break;
  124.         case 4:Suma(&recp4,pr);
  125.             break;
  126.         }
  127.        
  128.         /*switch (nsuc) //Categoría numero de sucursal
  129.         {
  130.         case 1:Suma(&recs1,pr);
  131.             Suma(&tots1,ca);
  132.             break;  
  133.         case 2:Suma(&recs2,pr);
  134.             Suma(&tots2,ca);
  135.             break;
  136.         case 3:Suma(&recs3,pr);
  137.             Suma(&tots3,ca);
  138.             break;
  139.         case 4:Suma(&recs4,pr);
  140.             Suma(&tots4,ca);
  141.             break;
  142.         case 5:Suma(&recs5,pr);
  143.             Suma(&tots5,ca);
  144.             break;
  145.         }*/
  146.        
  147.         //el switch que comente lo podes reemplazar por las siguiente
  148.         //2 lineas
  149.        
  150.         Suma(&Sucursal[nsuc].recaudado, pr);
  151.         Suma(&Sucursal[nsuc].total, ca);
  152.        
  153.        
  154.        
  155.         cont=cont+1;
  156.         maximo(cont, &pmaxr, recp1, &aux, npel, &tickmin, pr, &aux2, tick, &aux3, nsuc, &sucminr);
  157.        
  158.         if (turno == 2 && nsuc == 3 && npel == 2) //Pelicula 2, Sucursal 3, Turno Tarde
  159.         {
  160.             Suma(&pg,ca);
  161.         }
  162.         printf("\nIngrese numero de ticket ");
  163.         scanf("%d",&tick);
  164.     }// Fin del ciclo
  165.    
  166.     //Operaciones
  167.     for (int i=0; i<5; i++)
  168.     Sucursal[i].ganancia=gsuca(Sucursal[i].recaudado);
  169.     /*el for anterior reemplaza lo siguiente:
  170.    
  171.     gsuc1=gsuca(recs1);
  172.     gsuc2=gsuca(recs2);
  173.     gsuc3=gsuca(recs3);
  174.     gsuc4=gsuca(recs4);
  175.     gsuc5=gsuca(recs5);*/
  176.    
  177.     totrecp=recp1+recp2+recp3+recp4;
  178.    
  179.     prom1=promedio(recp1,totrecp);
  180.     prom2=promedio(recp2,totrecp);
  181.     prom3=promedio(recp3,totrecp);
  182.     prom4=promedio(recp4,totrecp);
  183.    
  184.     for (int i=0; i<5; i++)
  185.         totfinal= Sucursal[i].total;
  186.    
  187.     /*el for anterior reemplaza lo siguiente:
  188.    
  189.     totfinal= tots1+tots2+tots3+tots4+tots5;*/
  190.    
  191.     for (int i=0; i<5; i++)
  192.         Sucursal[i].promedio= promedio(Sucursal[i].total, totfinal);
  193.    
  194.     /*el for anterior reemplaza lo siguiente:
  195.    
  196.     proms1=promediotot(tots1,totfinal);
  197.     proms2=promediotot(tots2,totfinal);
  198.     proms3=promediotot(tots3,totfinal);
  199.     proms4=promediotot(tots4,totfinal);
  200.     proms5=promediotot(tots5,totfinal);
  201.     */
  202.    
  203.     //Resultados
  204.     Cantavend(catm,catt,catn);
  205.     sucmax(aux,pmaxr);
  206.     sucrecmenos(aux3,sucminr);
  207.    
  208.     //cambiamos los parametros de la funcion por los correspondientes
  209.     gansuc(Sucursal[0].ganancia,
  210.            Sucursal[1].ganancia,
  211.            Sucursal[2].ganancia,
  212.            Sucursal[3].ganancia,
  213.            Sucursal[4].ganancia);
  214.    
  215.     porrec(prom1,prom2,prom3,prom4);
  216.     tickme(aux2,tickmin);
  217.     Imprimir(pg);
  218.    
  219.     //cambiamos los parametros de la funcion por los correspondientes
  220.     procav(Sucursal[0].promedio,
  221.            Sucursal[1].promedio,
  222.            Sucursal[2].promedio,
  223.            Sucursal[3].promedio,
  224.            Sucursal[4].promedio);
  225.    
  226.     getch();
  227.     return 0;
  228. }
  229.  
  230. float descuento(float a)   
  231. {
  232.     float b;
  233.     b=(a*7)*0.9;
  234.     return b;
  235. }
  236.  
  237. float gsuca(float a)   
  238. {
  239.     float b;
  240.     b=a*0.2;
  241.     return b;  
  242. }
  243.  
  244. float promedio(float a, float b)   
  245. {
  246.     float c;
  247.     c=(a*100)/b;
  248.     return c;  
  249. }
  250.  
  251.  
  252. void Cantavend (int a, int b, int c)   
  253. {
  254.     printf("La cantidad de asientos vendidos en el turno mañana es %d,en el turno tarde %d, y en el noche %d \n\n",a,b,c); 
  255. }
  256.  
  257. void sucmax (int a, float b)   
  258. {
  259.     printf("La pelicula de mayor recaudacion es la nro %d, que recaudo %5.2f \n\n",a,b);   
  260. }
  261.  
  262. void sucrecmenos (int a, float b)  
  263. {
  264.     printf("La sucursal que recaudo menos fue la numero %d, con un total de %5.2f \n\n",a,b);  
  265. }
  266.  
  267. void gansuc (float a, float b, float c, float d, float e)  
  268. {
  269.     printf("Lo que gano cada sucursal es: \n1.%5.2f  \n2. %5.2f \n3.%5.2f \n4.%5.2f \n5.%5.2f \n\n",a,b,c,d,e);
  270. }
  271.  
  272. void porrec(float a, float b, float c, float d)
  273. {
  274.     printf("El porcentaje recaudado de cada pelicula sobre el total es: \n1. %5.2f \n2. %5.2f \n3. %5.2f \n4. %5.2f \n\n",a,b,c,d);
  275. }
  276.  
  277. void tickme (int a, float b)   
  278. {
  279.     printf("El ticket de menor valor es el nro %d, con un valor de %5.2f \n\n",a,b);   
  280. }
  281.  
  282. void Imprimir (int a)  
  283. {
  284.     printf("La cantidad de asientos vendidos para la pelicula 2, la sucursal 3 y turno tarde es %d \n\n",a);
  285. }
  286.  
  287. void procav (float a, float b, float c, float d, float e)  
  288. {
  289.     printf("El promedio de asiento vendidos para cada sucursal es: \n1. %5.2f \n2. %5.2f \n3. %5.2f \n4. %5.2f \n5. %5.2f \n\n",a,b,c,d,e);
  290. }
  291.  
  292. void Suma (int*a, int b)   
  293. {
  294.     *a=*a+b;
  295. }
  296.  
  297. //se le saca el 2 al nombre de la funcion
  298. void Suma (float*a, float b)   
  299. {
  300.     *a=*a+b;   
  301. }
  302.  
  303. void maximo(int cont, float *pmaxr, float recp1, int *aux, float npel, float *tickmin, float pr, int *aux2, int tick, int *aux3, int nsuc, float *sucminr) 
  304. {
  305.     if (cont==1)
  306.     {
  307.         *tickmin=pr;
  308.         *aux2=tick;
  309.         *aux3=nsuc;
  310.         *pmaxr=0;
  311.         *sucminr=pr;
  312.     }
  313.    
  314.     if (recp1>*pmaxr)
  315.     {
  316.         *pmaxr=recp1;
  317.         *aux=npel;     
  318.     }
  319.    
  320.     if (recp2>pmaxr)
  321.     {
  322.         *pmaxr=recp2;
  323.         *aux=npel;
  324.     }
  325.    
  326.     if (recp3>pmaxr)
  327.     {
  328.         *pmaxr=recp3;
  329.         *aux=npel;
  330.     }
  331.    
  332.     if (recp4>pmaxr)
  333.     {
  334.         *pmaxr=recp4;
  335.         *aux=npel;
  336.     }
  337.    
  338.     if (pr < tickmin)
  339.     {
  340.         *tickmin=pr;
  341.         *aux2=tick;
  342.     }
  343.    
  344.     if(Sucursal[1].recaudado<sucminr&&Sucursal[1].recaudado>0||Sucursal[1].recaudado==sucminr+pr)
  345.     {
  346.         *sucminr=Sucursañ[1].recaudado;
  347.         *aux3=nsuc;
  348.     }
  349.    
  350.     if(Sucursal[2].recaudado<sucminr&&Sucursal[2].recaudado>0||Sucursal[2].recaudado==sucminr+pr)
  351.     {
  352.         *sucminr=Sucursal[2].recaudado;
  353.         *aux3=nsuc;
  354.     }
  355.     if(Sucursal[3].recaudado<sucminr&&Sucursal[3].recaudado>0||Sucursal[3].recaudado==sucminr+pr)
  356.        
  357.     {
  358.         *sucminr=Sucursal[3].recaudado;
  359.         *aux3=nsuc;
  360.        
  361.     }
  362.    
  363.     if(Sucursal[4].recaudado<sucminr&&Sucursal[4].recaudado>0||Sucursal[4].recaudao==sucminr+pr)
  364.        
  365.     {  
  366.         *sucminr=Sucursal[4].recaudado;
  367.         *aux3=nsuc;
  368.     }
  369.    
  370.     if(Sucursal[5].recaudado<sucminr&&Sucursal[5].recaudado>0||Sucursal[5].recaudado==sucminr+pr)
  371.        
  372.     {
  373.         *sucminr=Sucursal[5].recaudado;
  374.         *aux3=nsuc;
  375.     }
  376. }

todo lo anterior lo hice para que el codigo sea un poco mas facil de enteder, por lo menos para mi lo es.... tambien se podria declarar un arreglo para las peliculas, y el arreglo sea de un struct donde almacene todas las caracteristicas que tengan en comun las peliculas