Ayuda con programa en C.
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);
}
}
}
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);
}
}
}
-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;
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;
