-" Si esto le parece japonés adivine que dice acá: あなたのお母さんは私のガールフレンドです =D "

Manejo de funciones

| miércoles, 8 de septiembre de 2010
Esta va dedicado a Willi, dale che! hacele un click a la publi!



/*
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();
}

Practica de funciones (ejercicio 1 practico 2)

| lunes, 6 de septiembre de 2010
Actualizando en caliente desde el gabinete de computacion!



/*

Realizar en C, un programa que incluya las siguientes funciones:
a)una funcion que lea numeros enteros y cargue un arreglo de 30 componentes
enteros positivos validando la entrada de datos. Cuando el arreglo se completa se termina la escritura
b) Una funcion que retorne los valores 0, -1 o 1 segun el arreglo antes cargado este desordenado
ordenado ascendentemente o descendentemente
c) Una funcion que devuelva el promedio de los valores de las componentes del arreglo que ocupan posiciones
pares y el promedio valores de las componentes del arreglo que ocupan posiciones impares. En el programa
principal indicar el mayor de los promedios.

*/
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>

#define N 3

// validar numeros solamente enteros y practica de paso de valores por return
int validar_entero(int V)
{
scanf("%d",&V);
fflush(stdin);

while(V<0)
{
printf("\nERROR ingrese nuevamente un numero entero\n");
scanf("%d",&V);
fflush(stdin);
}

return V;
}

//para practicar traspaso por referencias
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);
}

}

void carga(int A[])
{
int i=0, v;

for(i=0;i<N;i++)
{
printf("\nIngrese valor %d para arreglo de %d componentes\n",i+1,N);
A[i]=validar_entero(v);
}

}

void mostrar(int A[])
{
int i;
printf("\n");
for(i=0;i<N;i++) printf(" %d ",A[i]);
printf("\n");
}

int orden(int A[])
{
int i,j;

//comprobando ascendentemente
for(i=0;(i<N-1)&&(A[i]<=A[i+1]);i++);

//Comprobando descendentemente
for(j=N-1;(j>0)&&(A[j]<=A[j-1]);j--);

if(i==N-1) return 1;
if(j==0) return -1;

//Comprobar si esta desordenado
if((i!=N-1)&&(j!=0)) return 0;

}

float promedio(int cual, int A[])
{
int i,contador=0;
float que=0;

for(i=cual;i<N;i++)
{

que+=A[i];
contador++;
i++;
}

que=que/contador;

return que;
}

int main(int argc, char *argv[])
{
int A[N];
char c;
float PEPE;

do
{
carga(A);
printf("\nEl arreglo que usted a ingresado es el siguiente\n");
mostrar(A);
printf("\nDesea usted cambiarlo? S o N ?\nS o N->");
validar_booleano(c);
}while(c=='s');

switch(orden(A))
{
case -1: printf("\nEl arreglo esta ordenado descendentemente\n");
break;

case 0: printf("\nEl arreglo esta desordenado\n");
break;

case 1: printf("\nEl arreglo esta ordenado ascendentemente\n");
break;

default:printf("\nEsto no deberia suceder\n");
exit(-1);
getchar();
break;

}


if((promedio(0,A))>(promedio(1,A)))
{
printf("\nEs mayor el promedio de los pares con %f\n",promedio(0,A));
}
else
{
if ((promedio(0,A))<(promedio(1,A)))
{
printf("\nEs mayor el promedio de los impares con %f\n",promedio(1,A));
}
else
{
printf("\nSon iguales con promedio %f\n",promedio(0,A));
}
}

getchar();
}

licencia

Licencia de Creative Commons
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.