Ayuda con error en programa calculo de poligonal
Aquà está el código, gracias de antemano.
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <alloc.h>
#include <math.h>
typedef struct {
double lhf,lhe,lv,dg,af; /*Estructura de observacion con frente y espalda*/
}Tobs;
typedef struct {
double x,y;
}Tcoor;
void carga_obs (int n,Tobs *obs); /*Aqui llamamos al la funcion para cargar observaciones*/
double calc_acimut (int n,Tobs *obs,double desori0);
void calc_coor (int n,Tobs *obs,Tcoor *coor);
void main (void) /*Aqui definimos el bloque principal del programa*/
{
int i,n;
double desori0, cierre;
char tira[10];
Tobs *obs;
Tcoor *coor;
clrscr();
printf ("nn Introduzca el nº de estaciones de la poligonal: ");
gets (tira); n=atoi(tira);
obs = (Tobs *) malloc (sizeof(Tobs) * n);
coor = (Tcoor *) malloc (sizeof(Tcoor) * n);
printf ("nn Datos de la Primera la estacion: ");
printf ("n Coordenada x: ");
gets (tira); coor[0].x = atof(tira);
printf ("n Coordenada y: ");
gets (tira); coor[0].y = atof(tira);
printf ("n Introduzca la desorientacion: ");
gets (tira); desori0 = atof(tira);
clrscr();
carga_obs (n,obs); /* LLamada de la funcion de lectura de observaciones*/
cierre = calc_acimut (n,obs,desori0);
printf ("n El error de cierre angular es: %fn",cierre);
calc_coor (n,obs,coor);
for (i=0,i<n,i++)
{
printf ("n Estacion %d: x=%10.2f y=%10.2fn",i,coor[i].x,coor[i].y);
}
free (obs);
free (coor);
}
void carga_obs (int n,Tobs *obs)
{
int i;
char tira[15];
for (i=0;i<n;i++)
{
printf ("nEstacion %d:n",i);
printf ("nLectura Horizontal al frente: ");
gets (tira); obs[i].lhf = atof(tira);
printf ("nLectura Horizontal de espalda: ");
gets (tira); obs[i].lhe = atof(tira);
printf ("nLectura Vertical: ");
gets (tira); obs[i].lv = atof(tira);
printf ("nLectura Geometrica: ");
gets (tira); obs[i].dg = atof(tira);
}
}
double calc_acimut (int n, Tobs *obs, double desori0)
{
int i;
double az_inv, desori, error;
obs[0].af = obs[0].lhf + desori0; /*Calculo del primer azimut*/
for (i=1;i<n;i++)
{
az_inv = obs[i-1].af + 200; /*Calculo del primer acimut inverso*/
if(az_inv > 400) /*Condicionamiento a los 400 grados*/
az_inv -= 400;
desori = az_inv - obs[i].lhe; /*Calculo de la desorientacion de la siguiente estacion*/
obs[i].af = obs[i].lhf + desori; /*Calculo del siguiente acimut con la desorientacion calculada*/
}
az_inv = obs[3].af + 200; /*Calculo del primer acimut inverso*/
if(az_inv > 400) /*Condicionamiento a los 400 grados*/
az_inv -= 400;
desori = az_inv - obs[0].lhe;
error = desori - desori0;
return (error);
}
void calc_coor (int n, Tobs *obs, Tcoor *coor)
{
int i, norte;
double maxima_y, dr;
for (i=1, norte=0, maxima_y = coor[0].y; i<n; i++)
{
obs[i-1].af *= M_PI/200;
obs[i-1].lv *= M_PI/200;
dr = obs[i-1].dg * sin (obs[i-1].af);
coor[i].x = coor[i-1].x + dr * sin (obs[i-1].af);
coor[i].y = coor[i-1].y + dr * cos (obs[i-1].af);
if (coor[i].y > maxima_y)
{
maxima_y = coor[i].y;
norte = i;
}
}
printf ("n la estacion situada mas al norte es la %dn", norte);
}
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <alloc.h>
#include <math.h>
typedef struct {
double lhf,lhe,lv,dg,af; /*Estructura de observacion con frente y espalda*/
}Tobs;
typedef struct {
double x,y;
}Tcoor;
void carga_obs (int n,Tobs *obs); /*Aqui llamamos al la funcion para cargar observaciones*/
double calc_acimut (int n,Tobs *obs,double desori0);
void calc_coor (int n,Tobs *obs,Tcoor *coor);
void main (void) /*Aqui definimos el bloque principal del programa*/
{
int i,n;
double desori0, cierre;
char tira[10];
Tobs *obs;
Tcoor *coor;
clrscr();
printf ("nn Introduzca el nº de estaciones de la poligonal: ");
gets (tira); n=atoi(tira);
obs = (Tobs *) malloc (sizeof(Tobs) * n);
coor = (Tcoor *) malloc (sizeof(Tcoor) * n);
printf ("nn Datos de la Primera la estacion: ");
printf ("n Coordenada x: ");
gets (tira); coor[0].x = atof(tira);
printf ("n Coordenada y: ");
gets (tira); coor[0].y = atof(tira);
printf ("n Introduzca la desorientacion: ");
gets (tira); desori0 = atof(tira);
clrscr();
carga_obs (n,obs); /* LLamada de la funcion de lectura de observaciones*/
cierre = calc_acimut (n,obs,desori0);
printf ("n El error de cierre angular es: %fn",cierre);
calc_coor (n,obs,coor);
for (i=0,i<n,i++)
{
printf ("n Estacion %d: x=%10.2f y=%10.2fn",i,coor[i].x,coor[i].y);
}
free (obs);
free (coor);
}
void carga_obs (int n,Tobs *obs)
{
int i;
char tira[15];
for (i=0;i<n;i++)
{
printf ("nEstacion %d:n",i);
printf ("nLectura Horizontal al frente: ");
gets (tira); obs[i].lhf = atof(tira);
printf ("nLectura Horizontal de espalda: ");
gets (tira); obs[i].lhe = atof(tira);
printf ("nLectura Vertical: ");
gets (tira); obs[i].lv = atof(tira);
printf ("nLectura Geometrica: ");
gets (tira); obs[i].dg = atof(tira);
}
}
double calc_acimut (int n, Tobs *obs, double desori0)
{
int i;
double az_inv, desori, error;
obs[0].af = obs[0].lhf + desori0; /*Calculo del primer azimut*/
for (i=1;i<n;i++)
{
az_inv = obs[i-1].af + 200; /*Calculo del primer acimut inverso*/
if(az_inv > 400) /*Condicionamiento a los 400 grados*/
az_inv -= 400;
desori = az_inv - obs[i].lhe; /*Calculo de la desorientacion de la siguiente estacion*/
obs[i].af = obs[i].lhf + desori; /*Calculo del siguiente acimut con la desorientacion calculada*/
}
az_inv = obs[3].af + 200; /*Calculo del primer acimut inverso*/
if(az_inv > 400) /*Condicionamiento a los 400 grados*/
az_inv -= 400;
desori = az_inv - obs[0].lhe;
error = desori - desori0;
return (error);
}
void calc_coor (int n, Tobs *obs, Tcoor *coor)
{
int i, norte;
double maxima_y, dr;
for (i=1, norte=0, maxima_y = coor[0].y; i<n; i++)
{
obs[i-1].af *= M_PI/200;
obs[i-1].lv *= M_PI/200;
dr = obs[i-1].dg * sin (obs[i-1].af);
coor[i].x = coor[i-1].x + dr * sin (obs[i-1].af);
coor[i].y = coor[i-1].y + dr * cos (obs[i-1].af);
if (coor[i].y > maxima_y)
{
maxima_y = coor[i].y;
norte = i;
}
}
printf ("n la estacion situada mas al norte es la %dn", norte);
}
