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 originalstruct{ float total; //anteriormente tots# float promedio; //proms# float ganancia; //gsuc# float recaudado; //recs# //los # dicen que anteriormente habia un numero ahi }Sucursal[5]; //utilizamos un arreglo como dijo cesar_calsa
podemos modificar un poco el codigo asi:
Código C++:
Ver original#include <stdio.h> #include <conio.h> //Void void Cantavend (int, int, int); void sucmax (int, float); void sucrecmenos (int, float); void gansuc(float, float, float, float, float); void porrec(float, float, float, float); void tickme(int, float); void Imprimir (int); void procav (float, float, float, float, float); //podes declarar una misma funcion varias veces //todas las declaraciones de la misma funcion deben de diferir en al menos 1 parametro void Suma (int*, int); void Suma (float*, float); //cuando declares la implementacion de la funcion, vas a tener que hacerlo para //cada declaracion de la funcion //lo anterior se llama POLIMORFISMO void maximo(int, float*, float, int*, float, float*, float, int*, int, int*, int, float*); //Float float descuento (float a); float gsuca (float); float promedio (float, float); /* elimine la funcion float promediotot (float, float); porque es identica a la anterior*/ //se declaran las variables globales struct{ float total; float promedio; float recaudado; float ganancia; }Sucursal[5]; float recp1, recp2, recp3, recp4; //se termina de declarar las variables globales int main () { /* con el struct anterior se eliminaron las siguientes variables: tots1, tots2, tots3, tots4, tots5 se sustituyen por total. recs1, recs2, recs3, recs4, recs5 se sustituyen por recaudado. gsuc1, gsuc2, gsuc3, gsuc4, gsuc5 se sustituyen por ganancia. proms1, proms2, proms3, proms4 se sustituyen por promedio. */ /*las inicializaciones en 0 que hiciste a todas las variables que elimine, ahora la poder realizar con un for*/ for (int i=0; i<5; i++){ Sucursal[i].total=0; Sucursal[i].promedio=0; Sucursal[i].recaudado=0; Sucursal[i].ganancia=0; } /*con lo anterior se elimina: tots1?tots2=tots3=tots4=tots5=0; recs1=recs2=recs3=recs4=recs5=gsuc1=gsuc2=gsuc3=gsuc4=gsuc5=0: proms1=proms2=proms3=proms4=proms5=0; */ int tick,ca,npel,nsuc,turno,catm,catn,catt,cont,pg,aux,aux2,aux3; //Variables Enteras float pr,tickmin,totrecp,totfinal,pmaxr,sucminr, prom1, prom2, prom3, prom4; //Variables Flotantes tick=ca=npel=nsuc=turno=catm=catn=catt=cont=pg=aux=aux2=aux3=recp1=recp2=recp3=recp4=0; prom1=prom2=prom3=prom4=0; pr=tickmin=totrecp=totfinal=pmaxr=sucminr=0; printf("Ingrese numero de ticket "); while (tick!=0) //Comienzo del ciclo { printf("\nIngrese numero de sucursal "); printf("\nIngrese cantidad de asientos "); printf("\n1=Belleza americana \n2=El informante \n3=La hija del general \n4=Al filo de la muerte \n\nIngrese numero de pelicula "); printf("\n1=Turno Mañana \n2=Turno Tarde \n3=Turno Noche \n\nIngrese numero de turno "); if (ca > 8) //Verificar descuento { pr=descuento(ca); } if (ca<=8) { pr=ca*7; } //el sguiente switch no lo entiendo switch (turno) //Categoría Turno { case 1:Suma(&catm,ca); break; case 2:Suma(&catt, ca); break; case 3:Suma(&catn,ca); break; } switch (npel) //Categoría pelicula { case 1:Suma(&recp1,pr); break; case 2:Suma(&recp2,pr); break; case 3:Suma(&recp3,pr); break; case 4:Suma(&recp4,pr); break; } /*switch (nsuc) //Categoría numero de sucursal { case 1:Suma(&recs1,pr); Suma(&tots1,ca); break; case 2:Suma(&recs2,pr); Suma(&tots2,ca); break; case 3:Suma(&recs3,pr); Suma(&tots3,ca); break; case 4:Suma(&recs4,pr); Suma(&tots4,ca); break; case 5:Suma(&recs5,pr); Suma(&tots5,ca); break; }*/ //el switch que comente lo podes reemplazar por las siguiente //2 lineas Suma(&Sucursal[nsuc].recaudado, pr); Suma(&Sucursal[nsuc].total, ca); cont=cont+1; maximo(cont, &pmaxr, recp1, &aux, npel, &tickmin, pr, &aux2, tick, &aux3, nsuc, &sucminr); if (turno == 2 && nsuc == 3 && npel == 2) //Pelicula 2, Sucursal 3, Turno Tarde { Suma(&pg,ca); } printf("\nIngrese numero de ticket "); }// Fin del ciclo //Operaciones for (int i=0; i<5; i++) Sucursal[i].ganancia=gsuca(Sucursal[i].recaudado); /*el for anterior reemplaza lo siguiente: gsuc1=gsuca(recs1); gsuc2=gsuca(recs2); gsuc3=gsuca(recs3); gsuc4=gsuca(recs4); gsuc5=gsuca(recs5);*/ totrecp=recp1+recp2+recp3+recp4; prom1=promedio(recp1,totrecp); prom2=promedio(recp2,totrecp); prom3=promedio(recp3,totrecp); prom4=promedio(recp4,totrecp); for (int i=0; i<5; i++) totfinal= Sucursal[i].total; /*el for anterior reemplaza lo siguiente: totfinal= tots1+tots2+tots3+tots4+tots5;*/ for (int i=0; i<5; i++) Sucursal[i].promedio= promedio(Sucursal[i].total, totfinal); /*el for anterior reemplaza lo siguiente: proms1=promediotot(tots1,totfinal); proms2=promediotot(tots2,totfinal); proms3=promediotot(tots3,totfinal); proms4=promediotot(tots4,totfinal); proms5=promediotot(tots5,totfinal); */ //Resultados Cantavend(catm,catt,catn); sucmax(aux,pmaxr); sucrecmenos(aux3,sucminr); //cambiamos los parametros de la funcion por los correspondientes gansuc(Sucursal[0].ganancia, Sucursal[1].ganancia, Sucursal[2].ganancia, Sucursal[3].ganancia, Sucursal[4].ganancia); porrec(prom1,prom2,prom3,prom4); tickme(aux2,tickmin); Imprimir(pg); //cambiamos los parametros de la funcion por los correspondientes procav(Sucursal[0].promedio, Sucursal[1].promedio, Sucursal[2].promedio, Sucursal[3].promedio, Sucursal[4].promedio); return 0; } float descuento(float a) { float b; b=(a*7)*0.9; return b; } float gsuca(float a) { float b; b=a*0.2; return b; } float promedio(float a, float b) { float c; c=(a*100)/b; return c; } void Cantavend (int a, int b, int c) { 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 ); } void sucmax (int a, float b) { printf("La pelicula de mayor recaudacion es la nro %d, que recaudo %5.2f \n\n",a ,b ); } void sucrecmenos (int a, float b) { printf("La sucursal que recaudo menos fue la numero %d, con un total de %5.2f \n\n",a ,b ); } void gansuc (float a, float b, float c, float d, float e) { 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 ); } void porrec(float a, float b, float c, float d) { 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 ); } void tickme (int a, float b) { printf("El ticket de menor valor es el nro %d, con un valor de %5.2f \n\n",a ,b ); } void Imprimir (int a) { printf("La cantidad de asientos vendidos para la pelicula 2, la sucursal 3 y turno tarde es %d \n\n",a ); } void procav (float a, float b, float c, float d, float e) { 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 ); } void Suma (int*a, int b) { *a=*a+b; } //se le saca el 2 al nombre de la funcion void Suma (float*a, float b) { *a=*a+b; } 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) { if (cont==1) { *tickmin=pr; *aux2=tick; *aux3=nsuc; *pmaxr=0; *sucminr=pr; } if (recp1>*pmaxr) { *pmaxr=recp1; *aux=npel; } if (recp2>pmaxr) { *pmaxr=recp2; *aux=npel; } if (recp3>pmaxr) { *pmaxr=recp3; *aux=npel; } if (recp4>pmaxr) { *pmaxr=recp4; *aux=npel; } if (pr < tickmin) { *tickmin=pr; *aux2=tick; } if(Sucursal[1].recaudado<sucminr&&Sucursal[1].recaudado>0||Sucursal[1].recaudado==sucminr+pr) { *sucminr=Sucursañ[1].recaudado; *aux3=nsuc; } if(Sucursal[2].recaudado<sucminr&&Sucursal[2].recaudado>0||Sucursal[2].recaudado==sucminr+pr) { *sucminr=Sucursal[2].recaudado; *aux3=nsuc; } if(Sucursal[3].recaudado<sucminr&&Sucursal[3].recaudado>0||Sucursal[3].recaudado==sucminr+pr) { *sucminr=Sucursal[3].recaudado; *aux3=nsuc; } if(Sucursal[4].recaudado<sucminr&&Sucursal[4].recaudado>0||Sucursal[4].recaudao==sucminr+pr) { *sucminr=Sucursal[4].recaudado; *aux3=nsuc; } if(Sucursal[5].recaudado<sucminr&&Sucursal[5].recaudado>0||Sucursal[5].recaudado==sucminr+pr) { *sucminr=Sucursal[5].recaudado; *aux3=nsuc; } }
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 |