Révision 80
Ajouté par mamorales il y a environ 4 ans
main.c | ||
---|---|---|
int trame_cmp(char* trame,char* type)
|
||
{
|
||
int i=1;
|
||
int comp=1; // comparateur
|
||
int end_comp=1; //permet de savoir quand arreter la comparaison
|
||
while (end_comp!='\0') // comparaison
|
||
int comp=1; // comparateur
|
||
int end_comp=1; //permet de savoir quand arreter la comparaison
|
||
while (end_comp!='\0') // comparaison
|
||
{
|
||
if (trame[i]!=type[i-1])
|
||
{
|
||
... | ... | |
//fonction qui retourne l'entier correspondant au caractere mis en argument. (le caract?re '1' retourne l'entier 1)
|
||
int decode_int (char c)
|
||
{
|
||
int i=0;
|
||
int return_var=0; // variable de retour
|
||
if ((c>=48)&&(c<=57))
|
||
{
|
||
i=c-48;
|
||
return_var=c-48;
|
||
}
|
||
else
|
||
{
|
||
(i=-1);
|
||
(return_var=-1);
|
||
}
|
||
return i;
|
||
return return_var;
|
||
}
|
||
|
||
//fonction retournant uniquement les n premier chiffres dans un nombre.
|
||
int decode_nombre(char * ch,int n)
|
||
{
|
||
int i=0;
|
||
int nbr_return=0;
|
||
while (i<n)
|
||
{
|
||
nbr_return = nbr_return*10 + decode_int(ch[i]);
|
||
i=i+1;
|
||
}
|
||
return nbr_return;
|
||
}
|
||
|
||
//fonction covertissant des sexagesimal en reel
|
||
float sexagesimal_to_float(float lat)
|
||
{
|
||
int dec_val=lat;
|
||
int i=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);
|
||
|
||
return dec_val+float_val;
|
||
}
|
||
|
||
//fonction convertissant la cha?ne de caract?re contenant la latitude en nombre flottant
|
||
float lat_sexagesimal(char* trame)
|
||
{
|
||
int i=0;
|
||
int j=0;
|
||
int nbr_virgule=0;
|
||
float lat=0;
|
||
char val[4];
|
||
char val_decimal[4];
|
||
|
||
while (nbr_virgule<2) // on compte jusqu? la deuxi?me virgule
|
||
{
|
||
if (trame[i]==',')
|
||
{
|
||
nbr_virgule = nbr_virgule+1;
|
||
}
|
||
i++;
|
||
}
|
||
for (j=0;j<4;j++)
|
||
{
|
||
val[j]=trame[i]; // stock ce qui est sup?rieur ? 1
|
||
i++;
|
||
}
|
||
i++;
|
||
for (j=0;j<4;j++)
|
||
{
|
||
val_decimal[j]=trame[i]; // stock ce qui est sup?rieur ? 1
|
||
i++;
|
||
}
|
||
|
||
lat = decode_nombre(val,4) + 0.0001* decode_nombre(val_decimal,4); //on stock la valeur de la latitude
|
||
lat = sexagesimal_to_float(lat);
|
||
return lat;
|
||
}
|
||
|
||
//fonction convertissant la cha?ne de caract?re contenant la longitude en nombre flottant
|
||
float longitude_sexagesimal(char* trame)
|
||
{
|
||
int i=0;
|
||
int j=0;
|
||
int nbr_virgule=0;
|
||
float longitude=0;
|
||
char val[4];
|
||
char val_decimal[4];
|
||
|
||
while (nbr_virgule<4) // on compte jusqu? la deuxi?me virgule
|
||
{
|
||
if (trame[i]==',')
|
||
{
|
||
nbr_virgule = nbr_virgule+1;
|
||
}
|
||
i++;
|
||
}
|
||
for (j=0;j<5;j++)
|
||
{
|
||
val[j]=trame[i]; // stock ce qui est sup?rieur ? 1
|
||
i++;
|
||
}
|
||
i++;
|
||
for (j=0;j<4;j++)
|
||
{
|
||
val_decimal[j]=trame[i]; // stock ce qui est sup?rieur ? 1
|
||
i++;
|
||
}
|
||
|
||
longitude = decode_nombre(val,4) + 0.0001* decode_nombre(val_decimal,4); //on stock la valeur de la longitude
|
||
longitude = sexagesimal_to_float(longitude);
|
||
|
||
return longitude;
|
||
}
|
||
|
||
|
||
|
||
//Fonction ? modifier !!!!!
|
||
void traitement(char * trame)
|
||
{
|
||
|
||
|
||
static int cpt = 0;
|
||
cpt++;
|
||
if (trame_cmp(trame,"GPGGA"))
|
||
{
|
||
printf ("> %s\n",trame);
|
||
printf("latitude en reel : %f\n",lat_sexagesimal(trame));
|
||
printf("longitude en reel : %f\n\n",longitude_sexagesimal(trame));
|
||
}
|
||
}
|
||
|
||
... | ... | |
printf ("Erreur Test unitaire trame_cmp.\n");
|
||
exit(-1);
|
||
}
|
||
if ((decode_int('0')!=0)||(decode_int('9')!=9)||(decode_int('A')!=-1))
|
||
if (decode_int('0')!=0)
|
||
{
|
||
printf ("Erreur Test unitaire decode_int.\n");
|
||
exit(-1);
|
||
}
|
||
if (decode_int('1')!=1)
|
||
{
|
||
printf ("Erreur Test unitaire decode_int.\n");
|
||
exit(-1);
|
||
}
|
||
if (decode_int('2')!=2)
|
||
{
|
||
printf ("Erreur Test unitaire decode_int.\n");
|
||
exit(-1);
|
||
}
|
||
if (decode_int('3')!=3)
|
||
{
|
||
printf ("Erreur Test unitaire decode_int.\n");
|
||
exit(-1);
|
||
}
|
||
if (decode_int('4')!=4)
|
||
{
|
||
printf ("Erreur Test unitaire decode_int.\n");
|
||
exit(-1);
|
||
}
|
||
if (decode_int('5')!=5)
|
||
{
|
||
printf ("Erreur Test unitaire decode_int.\n");
|
||
exit(-1);
|
||
}
|
||
if (decode_int('6')!=6)
|
||
{
|
||
printf ("Erreur Test unitaire decode_int.\n");
|
||
exit(-1);
|
||
}
|
||
if (decode_int('7')!=7)
|
||
{
|
||
printf ("Erreur Test unitaire decode_int.\n");
|
||
exit(-1);
|
||
}
|
||
if (decode_int('8')!=8)
|
||
{
|
||
printf ("Erreur Test unitaire decode_int.\n");
|
||
exit(-1);
|
||
}
|
||
if (decode_int('9')!=9)
|
||
{
|
||
printf ("Erreur Test unitaire decode_int.\n");
|
||
exit(-1);
|
||
}
|
||
if (decode_int('A')!=-1)
|
||
{
|
||
printf ("Erreur Test unitaire decode_int.\n");
|
||
exit(-1);
|
||
}
|
||
if (decode_nombre("7541",2)!=75)
|
||
{
|
||
printf ("Erreur Test unitaire decode_nombre.\n");
|
||
exit(-1);
|
||
}
|
||
if (decode_nombre("7541",3)!=754)
|
||
{
|
||
printf ("Erreur Test unitaire decode_nombre.\n");
|
||
exit(-1);
|
||
}
|
||
if (decode_nombre("123",3)!=123)
|
||
{
|
||
printf ("Erreur Test unitaire decode_nombre.\n");
|
||
exit(-1);
|
||
}
|
||
if (decode_nombre("987654321",2)!=98)
|
||
{
|
||
printf ("Erreur Test unitaire decode_nombre.\n");
|
||
exit(-1);
|
||
}
|
||
|
||
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
Ajout d'une fonction pas encore terminée permettant de transformer une valeur sexagesimal en reel.
Ajout de deux fonction pour la latitude et la longitude.
Ajout de nouveaux test unitaire donc un non fonctionnel (le dernier).