Ayuda con programa en C.

Irtchi
31 de Marzo del 2010
Compilado con turbo c++ 4.5. Gracias por la ayuda.

El error es:

linea 51: Can not convert "PROPI" to "PARCE" in function main ()
linea 51: Call to undefined function calc_impuestos in function main ()

#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <alloc.h>
#include <math.h>

typedef struct
{
long dni;
int nver;
float pm, sup;
float *x, *y;
}PARCE;

typedef struct
{
long dni;
char nom[80];
char dir[80];
}PROPI;

void carga_pro (PROPI *propi, int npro);
void carga_par (PARCE *parce, int npar);
void calc_impuesstos (PROPI *propi, int npro, PARCE *parce, int npar);

void main (void) /*Aqui definimos el bloque principal del programa*/

{
int i,npar,npro;
PROPI *propi;
PARCE *parce;
char tira[15];

clrscr();

printf ("nn Introduzca el nº de propietarios de parcelas: ");
gets (tira); npro=atoi(tira);

printf ("nn Introduzca el nº de parcelas total: ");
gets (tira); npar=atoi(tira);

propi = (PROPI *) malloc (sizeof(PROPI) * npro);
parce = (PARCE *) malloc (sizeof(PARCE) * npar);

if (propi == NULL || parce == NULL)
{
printf("ERROR: No hay memoria suficienten");
exit(1);
}
carga_pro (propi,npro);
carga_par (propi,npar);
calc_impuestos(propi,npro,parce,npar);


for (i=0;i<npar;i++)
{
free (parce[i].x);
free (parce[i].y);
}
free (parce);
free (propi);
}

void carga_pro (PROPI *propi, int npro)

{
int i;
char tira[15];
for (i=0;i<npro;i++)
{
printf ("nPropietario %d:n",i+1);
printf ("nNombre: ");
gets (propi[i].nom);
printf ("nDireccion: ");
gets (propi[i].dir);
printf ("nD.N.I.: ");
gets (tira); propi[i].dni=atol(tira);
}
}

void carga_par (PARCE *parce, int npar)

{
int i,j;
char tira [15];

for (i=0;i<npar;i++)
{
printf("nParcela %d:n",i+1);
printf ("nD.N.I. del Propietario: ");
gets (tira); parce[i].dni=atol(tira);
printf ("nPrecio del metro cuadrado: ");
gets (tira); parce[i].pm=atof(tira);
printf ("nNumero de vertices de la parcela: ");
gets (tira); parce[i].nver=atoi(tira);

parce[i].x = (float *)malloc(sizeof(float) * parce[i].nver);
parce[i].y = (float *)malloc(sizeof(float) * parce[i].nver);

if (parce[i].x == NULL || parce[i].y == NULL)
{
printf("ERROR: No hay memoria suficienten");
exit(1);
}
for (j=0;j<parce[i].nver;j++)

{
printf ("nCoordenada x del vertice %d: ",j+1);
gets (tira); parce[i].x[j] = atof(tira);
printf ("nCoordenada y del vertice %d: ",j+1);
gets (tira); parce[i].y[j] = atof(tira);
}
}
}

void calc_impuestos (PROPI *propi, int npro, PARCE *parce, int npar)

{
int i,j,k;
float temp,impuesto;
char tira[80];

printf ("Introduzca el porcentaje del impuesto: ");
gets (tira); impuesto=atof(tira)/100;

for (i=0;i<npar;i++)
{
for (j=0,temp=0;j<parce[i].nver-1;j++)
{
temp += ((parce[i].x[j+1]-parce[i].x[j])*(parce[i].y[j+1]+parce[i].y[j]))/2;
}
temp += ((parce[i].x[0]-parce[i].x[parce[i].nver])*(parce[i].y[0]+parce[i].y[parce[i].nver]))/2;
parce[i].sup = temp;

}

for (i=0;i<npro;i++)
{
temp = 0;

printf("Propietario:%snDomicilio: %sn Parcelas:n",propi[i].nom,propi[i].dir);

for (j=0;j<npar;j++)
{
if (propi[i].dni == parce[j].dni)
{
temp += (parce[j].sup * parce[j].pm);
printf("Superficie = %f, Valor = %fn", parce[j].sup,parce[j].sup * parce[j].pm);
}
temp *= impuesto;
printf("El impuesto a pagar es = %f",temp);

}
}
}


trasgu
31 de Marzo del 2010
-Hacia la línea 22, en la declaración de la función "calc_impuesstos" hay una "s" que sobra, esta es la línea corregida:
void calc_impuestos (PROPI *propi, int npro, PARCE *parce, int npar);

-Hacia la línea 50, en la llamada a la función "carga_par" se pasa como primer argumento una variable de tipo "PROPI" cuando tenía que ser de tipo "PARCE", esta es la línea corregida:
carga_par (parce,npar);

-Hacia la línea 119, en la función "calc_impuestos" se declara una variable "k" que no se utiliza, esta es la línea corregida:
int i,j;