/*
Ejercicio 4
Una tienda, tiene el registro del importe de las ventas mensuales del año 2009 de cada uno de sus 8
departamentos.
Realizar un programa en C, que a través de funciones permita:
a) Mostrar: el departamento que tuvo mayor importe de venta a lo largo de año (suponer único)
b) El mes en que se vendió más en el departamento número 3. (suponer único)
c) Mostrar importe promedio de venta de la tienda.
d) Mostrar el departamento que superó la venta promedio, indicando el importe total vendido a lo largo de
año.
e) Realizar un listado, ordenado en forma ascendente por importe de venta en el año, que muestre
departamento e importe de venta en el año.
*/
#include <stdio.h>
#include <ctype.h>
#define DEP 2
#define MES 3
//La carga se ingresa por esta funcion y depende de las globales DEP y MES
void carga(float venta[DEP][MES])
{
int i,j;
for(i=0;i<DEP;i++)
{
printf("\nIngrese venta del departamento %d para el mes\n", i+1);
for(j=0;j<MES;j++)
{
switch (j)
{
case 0: printf("Enero ->");
break;
case 1: printf("Febrero ->");
break;
case 2: printf("Marzo ->");
break;
case 3: printf("Abril ->");
break;
case 4: printf("Mayo ->");
break;
case 5: printf("Junio ->");
break;
case 6: printf("Julio ->");
break;
case 7: printf("Agosto ->");
break;
case 8: printf("Septiembre ->");
break;
case 9: printf("Octubre ->");
break;
case 10: printf("Noviembre ->");
break;
case 11: printf("Diciembre ->");
break;
default: printf("\nEsto no debería suceder\n");
break;
}
scanf("%f",&venta[i][j]);
fflush(stdin);
}
}
}
//Esta funcion devuelve un entero con el departamento que tuvo mas venta anual
int mayor_venta(float venta[DEP][MES])
{
float acum=0, max=-1;
int i, j, pos;
for(i=0;i<DEP;i++)
{
for(j=0;j<MES;j++)
acum+=venta[DEP][MES];
if(acum>max)
{
max=acum;
pos=i;
}
acum=0;
}
return i;
}
//Para validar el si o no escribiendo s o n con mayusculas o minusculas y dando
// error en caso de ingresar cualquier garcha.-
void validar_booleano(char &son)
{
scanf("%c",&son);
fflush(stdin);
son=tolower(son);
while((son!='s')&&(son!='n'))
{
printf("\nERROR ingrese nuevamente letra S para si y N para no\n");
scanf("%c",&son);
fflush(stdin);
son=tolower(son);
}
}
//esto es equivalente al scanf("%d",&) pero lo valida con un segundo entero como
// maximo que se ingresa en el momento de llamar la funcion
void validar_numero(int &numero, int cuanto)
{
scanf("%d",&numero);
fflush(stdin);
while(numero>cuanto)
{
printf("\nERROR ingrese nuevamente un numero menor a %d\n",cuanto);
scanf("%d",&numero);
fflush(stdin);
}
}
//Devuelve un entero con la posicion del mes que tuvo mas venta el departamento
// a la funcion debe llamarsele con el entero que representa el numero de
// departamento el cual necesitamos saber su maximo de venta mensual
int mayor_venta_mes(int depto,float venta[DEP][MES])
{
int j,pos;
float acum=0,max=-1;
for(j=0;j<MES;j++)
{
if(venta[depto][MES]>max) max=venta[depto][MES];
pos=j;
}
return pos;
}
//promedia todos los valores del arreglo, lo muestra y devuelve por return
float promedio_venta(float venta[DEP][MES])
{
int i,j,cont=0;
float acum=0,promedio;
for(i=0;i<DEP;i++)
{
for(j=0;j<MES;j++)
{
acum+=venta[i][j];
cont++;
}
}
promedio=acum/cont;
printf("\nEl promedio de ventas TOTAL es de %f\n",promedio);
return promedio;
}
//con esto se puede mostrar la matriz en cualquier momento, util para control tambien
void mostrar(float venta[DEP][MES])
{
int i,j;
for(i=0;i<DEP;i++) for(j=0;j<MES;j++) printf("\ni=%d j=%d v=%f\n",i,j,venta[i][j]);
}
//pide un promedio en float y muestra el mes que lo supera y su venta anual
void supera_promedio(float prom, float venta[DEP][MES])
{
int i,j,b=0;
float acum=0;
for(i=0;i<DEP;i++)
{
for(j=0;j<MES;j++) if (venta[i][j]>prom) b=1;
if(b==1)
{
for(j=0;j<MES;j++) acum+=venta[i][j];
printf("El depto %d tuvo meses con mas venta que el promedio con %f anual",i+1,acum);
}
b=0;
acum=0;
}
}
//****************************************************************************El main =)
int main(int argc, char *argv[])
{
int i,j,dep,mes,imp,b;
char sn;
float venta[DEP][MES],prom,acum;
carga(venta);
printf("\nDesea agregar otra venta algun mes?\nRecuerde que si desea puede quitar venta con valores negativos\nS o N->");
validar_booleano(sn);
//Mientras yo escriba S como respuesta puedo seguir acumulando valores en las ventas
while(sn=='s')
{
printf("\nIngrese numero de departamento\n");
validar_numero(dep,DEP);
printf("\nIngrese mes de venta\n");
validar_numero(mes,MES);
printf("\nIngrese monto de venta\n");
validar_numero(imp,9999);
venta[dep-1][mes-1]+=imp;
printf("\nEl monto ha sido agregado, agregar otra venta?\nS o N->");
validar_booleano(sn);
}
//tiro el printf con la funcion para no escribir al pedo
printf("\nEl departamento que tuvo mayor venta en el anio es el n %d\n",mayor_venta(venta));
printf("\nIngrese departamento para saber el mes de mayor venta\n");
//Reutilizo dep para que no quede al pedo
validar_numero(dep,DEP);
j=mayor_venta_mes(dep-1,venta);
//El switch esta reciclado de mas arriba para que muestre un mes y no un numero
// sería mas práctico hacerlo una funcion pero...
printf("\nEl departamento %d tuvo el mes ",dep);
switch (j)
{
case 0: printf("Enero");
break;
case 1: printf("Febrero");
break;
case 2: printf("Marzo");
break;
case 3: printf("Abril");
break;
case 4: printf("Mayo");
break;
case 5: printf("Junio");
break;
case 6: printf("Julio");
break;
case 7: printf("Agosto");
break;
case 8: printf("Septiembre");
break;
case 9: printf("Octubre");
break;
case 10: printf("Noviembre");
break;
case 11: printf("Diciembre");
break;
default: printf("\nEsto no debería suceder\n");
break;
}
printf(" con mas ventas\n");
prom = promedio_venta(venta);
supera_promedio(prom,venta);
printf("\nWilly hacete el e y somo' lo' mejores\n");
/*
WILFREDO FORNES: INGRESE ACA SU CODIGO FUENTE (o hay tabla)
*/
getchar();
}
Manejo de funciones
Esta va dedicado a Willi, dale che! hacele un click a la publi!
Suscribirse a:
Enviar comentarios (Atom)
licencia
Ejercicios de programación by Iván Neira (ae) is licensed under a Creative Commons Attribution-ShareAlike 3.0 Unported License.
Based on a work at paraserlicenciado.blogspot.com.
1 comentarios:
eh p*to solo paso a decir que la tenes toda atroden.... gax, ah y te hize un par de clicks en las publis =S
P/D: te dejo mi exe que me quedo bonito =D
http://www.mediafire.com/?8cqggxqc706g28k
Publicar un comentario