Projet

Général

Profil

« Précédent | Suivant » 

Révision 197

Ajouté par mamorales il y a presque 4 ans

Correction des programme de longitude et latitude. On a désormais un programme capable de faire la conversion de n'importe quelle valeur sexagésimale (longitude ou latitude), puis deux autres programmes qui récupèrent la valeur de la latitude et de la latitude dans la chaine de caractère et utilisent le premier programme pour renvoyer les valeurs en réels.

Voir les différences:

main.c
return nbr_return;
}
//fonction covertissant des sexagesimal en reel
//fonction covertissant des sexagesimal (latitude ou longitude) en reel
float sexagesimal_to_float(float lat)
{
int dec_val=lat;
int i=0;
int float_deg=lat/100;
float float_minutes=0;
float value = 0;
while (dec_val>360)
{
dec_val=dec_val/10;
i=i+1;
}
float float_val;
float_val = (lat-dec_val*pow(10,i))/60;
printf("%f",dec_val+float_val);
float_minutes = (lat-float_deg*100)/60;
value = float_deg + float_minutes;
return dec_val+float_val;
return value;
}
//fonction convertissant la cha?ne de caract?re contenant la latitude en nombre flottant
......
{
int i=0;
int j=0;
int val_entiere_taille = 0;
int val_decimale_taille = 0;
int nbr_virgule=0;
float lat=0;
char val[4];
char val_decimal[4];
char val_entiere[6];
char val_decimal[6];
while (nbr_virgule<2) // on compte jusqu? la deuxi?me virgule
while (nbr_virgule<2) // on compte jusqu? la deuxi?me virgule (3?me champs)
{
if (trame[i]==',')
{
......
}
i++;
}
for (j=0;j<4;j++)
// on ne peux pas passer directement d'un caract?re avec des virgule ? un flottant, du coup on passe par deux cha?ne de caract?res
// intermediares pour avoir ce qui correspond ? la partie enti?re et ce qui correspond ? la partie decimale
while (trame[i]!='.')
{
val[j]=trame[i]; // stock ce qui est sup?rieur ? 1
val_entiere[j]=trame[i];
j++; // stock la partie entiere
i++;
}
i++;
for (j=0;j<4;j++)
val_entiere_taille = j;
j=0;
i++; // on ne stock pas le point dans les chaines
while (trame[i]!=',')
{
val_decimal[j]=trame[i]; // stock ce qui est sup?rieur ? 1
val_decimal[j]=trame[i]; // stock la partie decimale
j++;
i++;
}
val_decimale_taille = j;
lat = decode_nombre(val,4) + 0.0001* decode_nombre(val_decimal,4); //on stock la valeur de la latitude
lat = sexagesimal_to_float(lat);
lat = decode_nombre(val_entiere,val_entiere_taille) + 0.0001* decode_nombre(val_decimal,val_decimale_taille); //on stock la valeur de la latitude
lat = sexagesimal_to_float(lat); // transformation en flottant
return lat;
}
......
{
int i=0;
int j=0;
int val_entiere_taille = 0; // taille de la partie entiere de la longitude
int val_decimale_taille = 0; // taille de la partie d?cimal de la longitude
int nbr_virgule=0;
float longitude=0;
char val[4];
char val_decimal[4];
char val_entiere[6]; //valeur entiere de la longitude, on reserve 6 cases par s?curit?.
char val_decimal[6];
while (nbr_virgule<4) // on compte jusqu? la deuxi?me virgule
while (nbr_virgule<4) // on compte jusqu? la quatri?me virgule (5?me champs)
{
if (trame[i]==',')
{
......
}
i++;
}
for (j=0;j<5;j++)
// on ne peux pas passer directement d'un caract?re avec des virgule ? un flottant, du coup on passe par deux cha?ne de caract?res
// intermediares pour avoir ce qui correspond ? la partie enti?re et ce qui correspond ? la partie decimale
while (trame[i]!='.')
{
val[j]=trame[i]; // stock ce qui est sup?rieur ? 1
val_entiere[j]=trame[i];
j++; // stock la partie entiere
i++;
}
i++;
for (j=0;j<4;j++)
val_entiere_taille = j;
j=0;
i++; // on ne stock pas le point dans les chaines
while (trame[i]!=',')
{
val_decimal[j]=trame[i]; // stock ce qui est sup?rieur ? 1
val_decimal[j]=trame[i]; // stock la partie decimale
j++;
i++;
}
val_decimale_taille = j;
longitude = decode_nombre(val,4) + 0.0001* decode_nombre(val_decimal,4); //on stock la valeur de la longitude
longitude = decode_nombre(val_entiere,val_entiere_taille) + 0.0001* decode_nombre(val_decimal,val_decimale_taille); //on stock la valeur de la longitude
longitude = sexagesimal_to_float(longitude);
return longitude;
......
printf ("Erreur Test unitaire decode_nombre.\n");
exit(-1);
}
if ((sexagesimal_to_float (3723.2475)<=37,387458)||(sexagesimal_to_float (3723.2475)>=37,387460))
/*if ((sexagesimal_to_float (3723.2475)<=37,387458)||(sexagesimal_to_float (3723.2475)>=37,387460))
{
printf ("Erreur Test unitaire sexagesimal_to_float.\n");
exit(-1);
}
}*/
}
// Ne pas modifier cette fonction

Formats disponibles : Unified diff