Révision 197
Ajouté par mamorales il y a presque 4 ans
branch/Morales/sp4a12/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
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.