[C con Clase] necesito corregir este programa en dev c++

Steven Davidson srd4121 en njit.edu
Mie Jun 9 20:02:00 CEST 2010


Hola José,

Jose hernandez wrote:
> hola pues la verdad este programa no quiere ejecutar no quiere
> compilar me vota error que dice '' diciembre undeclared (first use
> the function) necesito que este programa este funcionando al 100%.
> gracias de antemano.
> 

Esto significa que estás usando "algo" que se llama 'diciembre' como si 
fuese una función, pero no declaraste 'diciembre' previamente. Recuerda 
que en C, todas las entidades (tipos de datos, variables, funciones, y 
constantes), que vayas a usar, deben ser creadas con anterioridad.

> #include<stdio.h>
> #include<stdlib.h>
> #include<conio.h>
> 
> main()
> {
> printf(":::::::::::::::\n:::::::::::::::… DE VENTAS!!!\n:::::::::::::::::::::'''''''\… 
> printf("\n______________________________…
> void llenar(long ventas [12][5]);
> void anual(long ventas [12][5]);

Aunque es correcto declarar las funciones localmente, no lo aconsejo. 
Típicamente, se declaran las funciones globalmente, pero las variables 
localmente.

> long ventas [12][5];
> llenar(ventas);
> anual(ventas);
> diciembre(ventas);
> mayo(ventas);
> menor(ventas);

Estas tres últimas funciones no han sido declaradas previamente y por 
tanto el compilador te marca errores. Debes declarar las funciones antes 
de usarlas.

En este caso, sugiero que tengas todas las declaraciones globalmente 
antes de 'main()'. Por ejemplo,

/* Prototipos: Declaraciones de Funciones */

void llenar( long ventas [12][5] );
void anual( long ventas [12][5] );
void diciembre( long ventas [12][5] );
void mayo( long ventas [12][5] );
void menor( long ventas [12][5] );

/* main: Programa Principal */

int main()
{
   ...
}

/* Definiciones de Funciones */

void llenar( long ventas [12][5] )
{
   ...
}

void anual( long ventas [12][5] )
{
   ...
}

...

> 
> getch()
> }
> 
> void llenar(long ventas [12][5])
> {
> int i,j;
> for (i=0;i<12;i++)
> {
> for (j=0;j<5;j++)
> {
> printf("DIGITE LA GANANCIA DEL MES %d DE LA AGENCIA %d:\t",i,j);
> scanf("%ld",& ventas[i][j]);
> }
> }
> }
> 
> void anual(long ventas [12][5]);

Esto es un error: agregas un punto y coma al final de la "firma" de la 
función. Al definir una función, no se escribe el punto y coma, sino que 
se usan las llaves {}. Esto es,

void anual( long ventas [12][5] )
{
   long i,j,acu;
   ...
}

> {
> long i,j,acu;
> for (i=0;i<12;i++)
> {
> for (j=0;j<5;j++)
> {
> acu=ventas[i][j]; 

Esta variable es un acumulador. Deberías usar alguna operación de suma 
para ir sumando (valga la redundancia) parcialmente y así acumular las 
cantidades hasta terminar, obteniendo el total.

Sugiero que te acostumbres a usar el oeprador += para este tipo de 
operaciones. Esto es,

acu += ventas[i][j];



> }
> }
> printf("EL TOTAL DE VENTAS ANUALES FUE:\t%d",acu);
> }
> 
> void diciembre(long ventas [12][5]);

Aquí tienes el mismo error. Elimina este punto y coma.

> {
> long j,acu=0;
> {
> for (j=0;j<5;j++)
> {
> acu=ventas[12][j]+acu; 

Esto no es correcto. Ten presente que 'ventas' es un array de 12 arrays 
de 5 enteros. Como el índice de un array de N elementos SIEMPRE empieza 
por 0 (cero), entonces el índice del último elemento será N-1. Por lo 
tanto, no podemos usar 12 como un índice.

Seguramente, querías indicar el último elemento, que en este caso es 11. 
Esto es,

acu += ventas[11][j];

> }
> }
> printf("EL PROMEDIO DE VENTAS EN DICIEMBRE FUE:\t%d",acu);
> }
> 
> void mayo(long ventas [12][5]);

Nuevamente, elimina este punto y coma.

> {
> long j,a,b,c,d,e;
> {
> a=ventas[5][0]+acu;
> b=ventas[5][1]+acu;
> c=ventas[5][2]+acu;
> d=ventas[5][3]+acu;
> e=ventas[5][4]+acu; 

Esto no es correcto. No has definido 'acu'.

> if (a>b)&&(a>c)&&(a>d)&&(a>e)

Te falta abrir y cerrar los paréntesis de 'if'. La sintaxis es:

if ( <expresión_condicional> ) <sentencia>


Espero que esto te aclare las dudas.

Steven





Más información sobre la lista de distribución Cconclase