Index: branch/SOUDY/main.c
===================================================================
--- branch/SOUDY/main.c	(revision 494)
+++ branch/SOUDY/main.c	(revision 495)
@@ -2,7 +2,9 @@
 #include <stdlib.h>
 #include <strings.h>
 #include "trame.h"
-#include <math.h>
+#include <math.h>
+
+#define r_Terre 6370
 
 //Trames de tests à modifier si nécessaire.
 char * trames[]=  {"$GPGSV,3,2,10,15,03,077,,18,04,041,42,19,85,271,,20,08,214,*7C",
@@ -21,6 +23,8 @@
         float latitude;
     }position;
 
+position pos,pos1,pos2,pos3,pos4,pos5,pos6; //declaration de position utiles dans la suite des calculs et tests unitaires
+
 //fcts ajoutés
 int trame_cmp(char*trame,char*type)
 {
@@ -64,9 +68,9 @@
 float lat_to_float (char*trame)
 {
     float latd,latm,lats,latdeg;
-    latd=decode_nombre(&trame[17],2);
-    latm=decode_nombre(&trame[19],2);
-    lats=decode_nombre(&trame[21],4);
+    latd=decode_nombre(&trame[17],2); //recupere les degres
+    latm=decode_nombre(&trame[19],2); //recupere les minutes
+    lats=decode_nombre(&trame[21],4); //recupere les secondes
     latdeg=latd+((latm+(lats/10000))/60.0);
     return latdeg; // retourne le résultat de la lattitude en degrès de la trame
 }
@@ -76,21 +80,38 @@
 float long_to_float (char*trame)
 {
     float longd,longm,longs,longdeg;
-    longd=decode_nombre(&trame[29],3);
-    longm=decode_nombre(&trame[32],2);
-    longs=decode_nombre(&trame[35],4);
+    longd=decode_nombre(&trame[29],3); //recupere les degres
+    longm=decode_nombre(&trame[32],2); //recupere les minutes
+    longs=decode_nombre(&trame[35],4); //recupere les secondes
     longdeg=longd+((longm+(longs/10000))/60.0);
     return longdeg; //retourne le résultat de la longitude en degrés de la trame
 }
 
-//void coordonnee_to_float (char*trame,position pos)
-void coordonne_to_float (char*trame,float* lat_position,float* long_position)
+
+decode_trame(char*trame,position *p) //permet de retourner directement la longitude et la lattitude d'une position
 {
-    *lat_position=lat_to_float (trame);
-    *long_position=long_to_float (trame);
+    p->longitude = long_to_float (trame); // '->' permet d'identifier le champ de la structure c'est comme le point sauf ici on est avec des pointeurs
+    p->latitude= lat_to_float(trame);
 }
 
+float calcul_distance(position *pos1, position *pos2)
+{
+    float distance;
+    distance = sqrt(pow((pos2->latitude-pos1->latitude)*M_PI*r_Terre/180.0,2)+pow(((pos2->longitude-pos1->longitude)*
+    (cos(((pos2->latitude+pos1->latitude)/2.0)*M_PI/180.0)*M_PI*r_Terre/180.0)),2)); // calcul de la distance a partir des longitudes et lattitudes des 2 positions
+    return distance; //M_PI vaut pi il appartient a la bibliotheque math.h
+}
 
+
+float calcul_vitesse(position pos1, position pos2)
+{
+    float vitesse;
+    vitesse=calcul_distance(&pos1,&pos2)*3600; // calcul de la vitesse à partir de la distance préalablement calculée
+    return vitesse;
+}
+
+
+
 
 //Fonction à modifier !!!!!754198
 void traitement(char*trame)
@@ -100,39 +121,16 @@
     trame_cmp(trame,"GPGGA");
     if (trame_cmp(trame,"GPGGA")==1)
     {
-        float x,y;
-        coordonne_to_float(trame,&x,&y);
-        printf("lat=%f\nlong=%f\n",x,y);
         printf ("> %s\n",trame);
-        printf("la vitesse est de : %d",calcul_vitesse(pos1,pos2));
     }
 }
 
 
-// declaration des positions servant dans la suite de l'exercice
-position pos1;
-position pos2;
-
-
-
-decode_trame(char*trame,position *p)
-{
-p->longitude =long_to_float (trame); // -> permet d'identifier le champ de la structure c'est comme le point sauf ici on est avec des pointeurs
-p->latitude=lat_to_float(trame);
-}
-
-float calcul _vitesse(position pos1, position pos2)
-{
-    int r_Terre=6371;
-    float D,vitesse;
-    D=sqrt(pow((pos2.Longitude-pos1.Longitude)*r_Terre,2)+pow((pos2.Latitude-pos1.Latitude)*r_Terre,2)); // calcul de la distance à partir des longitudes et lattitudes des 2 positions
-    vitesse=(D*r_Terre)/3600; // calcul de la vitesse à partir de la distance préalablement calculée
-    return vitesse;
-}
 
 //Ajouter vos tests unitaires dans cette fonction.
 void tests_unitaires(void)
-{
+{
+    // test trivial pour verifier que tout va bien
  if (5!=5)
     {
         printf ("Erreur Test unitaire basique.\n");
@@ -250,20 +248,61 @@
        printf("Erreur test unitaire longitude\n");
        exit(-1);
     }
-//-------------------------//
+//-----------------------------------------------------------//
 //test unitaire decode_trame
-    decode_trame("$GPGGA,141914.00,4545.0000,N,00306.6036,E,1,05,3.4,499.3,M,,M,,*7D",&pos1);
-    if (pos1.latitude==45.75)
-    {
-        printf("decode_trame OK!\n");
+    decode_trame("$GPGGA,141914.00,4645.5624,N,00306.0000,E,1,05,3.4,499.3,M,,M,,*7D",&pos);
+    if(fabs(fabs(pos.latitude)-46.759373 >10-6)){
+        printf ("Erreur Test unitaire decode_trame \n");
         exit(-1);
     }
-     if (pos1.longitude==4.77)
-    {
-        printf("decode_trame OK!\n");
+    if(fabs(fabs(pos.longitude)-3.100000 >10-6)){
+        printf ("Erreur Test unitaire decode_trame\n");
         exit(-1);
     }
+//-----------------------------------------------------------//
+//test unitaire calcul_distance
 
+/*    //declaration coordonnees de 3 villes pour les tests unitaires de calcul_distance
+
+    //Paris
+    pos2.latitude = 48.8588897;
+    pos2.longitude = 2.320041;
+    //Lyon
+    pos3.latitude = 45.7578137;
+    pos3.longitude = 4.8320114;
+    //Bordeaux
+    pos4.latitude = 44.841225;
+    pos4.longitude = -0.5800364;
+
+    //test_1 de calcul_distance entre Paris et Bordeaux permettant de voir si la distance est dans l'intervalle donne sur internet
+    if((calcul_distance(&pos2,&pos4)>498) & (calcul_distance(&pos1,&pos2)<499)){}
+    else{
+        printf ("Erreur Test_1 unitaire calcul_distance \n");
+        exit(-1);
+    }
+    //test_2 de calcul_distance entre Paris et Lyon permettant de voir si la distance est dans l'intervalle donne sur internet
+    if((calcul_distance(&pos2,&pos3)>393) & (calcul_distance(&pos1,&pos2)<394)){}
+    else{
+        printf ("Erreur Test_2 unitaire calcul_distance \n");
+        exit(-1);
+    }
+*/ // ces é tests ne semblent pas fonctionner je ne vois pas pourquoi ...
+//-----------------------------------------------------------//
+//test unitaire calcul_vitesse
+
+    //declaration de 2 points de latitude et de longitude proche afin de simuler une difference de position d'une seconde
+    pos5.latitude = 45.752911;
+    pos5.longitude = 3.110066;
+    pos6.latitude = 45.75298;
+    pos6.longitude = 3.11007;
+
+    //la vitesse etant un floattant on verifie donc la precision de la mesure
+    if((calcul_vitesse(pos5,pos6)-27.51)>1e-2){
+        printf ("Erreur Test unitaire calcul vitesse.\n");
+        exit(-1);
+    }
+
+
 }
 
 
