Index: branch/duvivier_lea/sp4a12/main.c
===================================================================
--- branch/duvivier_lea/sp4a12/main.c	(revision 380)
+++ branch/duvivier_lea/sp4a12/main.c	(revision 381)
@@ -13,7 +13,7 @@
                     "$GPGSA,A,3,,03,,22,14,,01,,18,,,,3.9,3.4,1.9*39",
                     "$GPVTG,99.4,T,,M,0.4,N,0.7,K*57",
                     "$GPZDA,141914.00,01,02,2006,00,00*69",
-                    0};
+ /* Declaration des structures positions, Zones et du tableau contenant des zones*/                   0};
 typedef struct{
     float latitude;
     float longitude;
@@ -20,7 +20,7 @@
 
 
 }Position;
-Position p1,p2,p3,p4;
+Position p1,p2,p3,p4,p5,p6,p7,p8,p9,p10;
 typedef struct{
     Position rpos;
     float vitmax;
@@ -36,7 +36,7 @@
 };
 
 
-float latitude_nbf(char* c)
+float latitude_nbf(char* c) /* Fonction qui convertit une latitude en latitude mais en nombre flottant*/
 
 {
     int degre;
@@ -46,18 +46,18 @@
     float minute22;
     float degre11;
     float resultat;
-    degre=decode_nombre(&c[0],2);
+    degre=decode_nombre(&c[0],2); /* Ici on recupere les termes qui nous interessent et on separe les degres et les minutes*/
     minute1=decode_nombre(&c[0+2],2);
     minute2=decode_nombre(&c[0+5],4);
-    degre11=(float)degre;
+    degre11=(float)degre; /* On convertit les int en flottant*/
     minute11=(float)minute1;
     minute22=(float)minute2;
-    resultat=degre11+(minute11/60)+(minute22/600000);
+    resultat=degre11+(minute11/60)+(minute22/600000); /* On additionne chaque terme "modifié" pour avoir le resultat en flottant*/
     return resultat;
 }
-float longitude_nbf(char* c)
+float longitude_nbf(char* c) /* Fonction qui convertit une longitude en longitude mais en nombre flottant*/
+
 {
-
     int degre;
     int minute1;
     int minute2;
@@ -65,7 +65,7 @@
     float minute22;
     float degre11;
     float resultat;
-    degre=decode_nombre(&c[0],3);
+    degre=decode_nombre(&c[0],3);      /* Memes operations que pour la latitude_nbf*/
     minute1=decode_nombre(&c[0+3],2);
     minute2=decode_nombre(&c[0+3],4);
     degre11=(float)degre;
@@ -74,10 +74,10 @@
     resultat=degre11+(minute11/60)+(minute22/600000);
     return resultat;
 }
-float lat_lon(char* c)
+float lat_lon(char* c)  /*Fonction qui decode indifferemment une latitude et une longitude*/
 {
     float resultat;
-    if(c[4]==46)
+    if(c[4]==46)        /*On regarde ici si le caractère 5 est un point et si oui on c'est que ça correspond à une latitude*/
     {
        resultat=latitude_nbf(c);
     }
@@ -84,18 +84,18 @@
     else{
 
         resultat=longitude_nbf(c);
-    }
+        }
     return resultat;
 }
-int trame_cmp(char * trame, char * type)
+int trame_cmp(char * trame, char * type) /*Fonction qui regarde si la trame commence par la chaine de caractère type*/
 {
     int i;
     int ok;
     ok=1;
-    for(i=0;i<5;i=i+1)
+    for(i=0;i<5;i=i+1)                /* Ici on parcourt 5 fois car il y a 5 lettres sur les debuts de trames*/
 
     {
-        if(trame[i+1]!=type[i])
+        if(trame[i+1]!=type[i])       /* On compare element par element jusqu'à trouver une difference ou non*/
         {
             ok=0;
         }
@@ -103,12 +103,12 @@
     }
     return ok;
 }
-int decode_int(char c)
+int decode_int(char c) /* Fonction qui renvoie la valeur en decimale d'un caractère*/
 {
     int decode;
-    if(c<='9' && c>='0')
+    if(c<='9' && c>='0') /* on regarde si il est compris entre 0 et 9 dans la table ascii*/
     {
-        decode=c-48;
+        decode=c-48; /* on soustrait 48 ("0") car on veut afficher la bonne correspondance*/
     }
     else
     {
@@ -117,22 +117,22 @@
 return decode;
 
 }
-int decode_nombre(char *ch, int n)
+int decode_nombre(char *ch, int n) /*Fonction qui renvoit la valeur decimale des n premiers caractères de la chaine*/
 {
     int i;
     int resultat=0;
-    for(i=0;i<n;i=i+1)
+    for(i=0;i<n;i=i+1)           /* Parcourt la chaine jusqu'au nombre de caractère souhaité*/
     {
-        resultat=(resultat*10)+decode_int(ch[i]);
+        resultat=(resultat*10)+decode_int(ch[i]); /* On utilise ici *10 pour ne pas perdre le precedent chiffre à chaque iteration*/
     }
     return resultat;
 }
 
-int decode_trame(char* trame,Position* p)
+int decode_trame(char* trame,Position* p) /*Fonction qui permet de verifier si une trame est correcte et qui recupère la latitude et la longitude dans une structure*/
 {
     int ok;
     ok=0;
-    if(trame[16]!=trame[17] && trame[28]!=trame[29])
+    if(trame[16]!=trame[17] && trame[28]!=trame[29]) /* Verifie si la trame est correcte*/
     {
 
 
@@ -145,7 +145,8 @@
     }
     return ok;
 }
-float calcule_distance(Position p1, Position p2)
+
+float calcule_distance(Position p1, Position p2) /*Fonction qui permet d'obtenir la distance entre deux points qui ont comme coordonnées la latitude et la longitude*/
 {
     float distance;
     distance=((2*3.14*6370)/360)*sqrt((p2.latitude-p1.latitude)*(p2.latitude-p1.latitude)+(p2.longitude-p1.longitude)*(p2.longitude-p1.longitude));
@@ -162,9 +163,9 @@
     *d=calcule_distance(p,r[0].rpos);
     float distance;
     int i;
-    int numero_tab;
+    int numero_tab=0;
     if (nb_zones>0) /* regarde si il y a des zones dans la table*/
-        {
+    {
              for(i=0;i<nb_zones;i++)
                 {
                 distance=calcule_distance(p,r[i].rpos);
@@ -178,19 +179,54 @@
 
                 }
                 return numero_tab;
-        }
+    }
     else{
         return (-1);
-   }
+        }
 
 
 }
-
+void test_distance_a_la_plus_proche_zone(void)
+{
+    Position p,p1,p2;
+    p1.latitude=44.7887762;
+    p1.longitude=-3.012;
+    p2.latitude=44.7891220;
+    p2.longitude=-3.013;
+    decode_trame("$GPGGA,141914.00,4545.0000,N,00306.6036,E,1,05,3.4,499.3,M,,M,,*7D", &p);
+    float d1,d2;
+    d1=calcule_distance(p,p1);
+    d2=calcule_distance(p,p2);
+    printf("%f\n", d1);
+    printf("%f\n", d2);
+    int nb_zone;
+    float d;
+    nb_zone=distance_a_la_plus_proche_zone(p,zones,2,&d);
+    if(nb_zone!=0)
+    {
+        printf("Erreur dans la zone la plus proche");
+        exit(-1);
+    }
+}
 /*Fonction à modifier !!!!!*/
 void traitement(char * trame)
-{
-    printf ("> %s\n",trame);
-    /*float lat,lat2,lat3,lat4;
+{
+    int i=0;
+    if(i==0)
+    {
+        test_distance_a_la_plus_proche_zone();
+        i=1;
+        exit(-1);
+    }
+    /*if(trame_cmp(trame,"GPGGA")==1) /* Ici si la trame est correcte  et commence par GPGGA, on l'affiche */
+    /*{
+        printf ("> %s\n",trame);
+
+   /* }
+
+
+
+  /*  float lat,lat2,lat3,lat4;
     float longi,longi2,longi3,longi4;
     int i;
     i=0;
@@ -208,24 +244,38 @@
         longi2=p2.longitude;
         lat=p1.latitude;
         longi=p1.longitude;
-        printf("%f\n%f\n%f\n%f\n%f\n%f\n%f\n%f", lat,lat2,lat3,lat4,longi,longi2,longi3,longi4);
+        printf("%s", "La latitude et la longitude de la premiere trame sont : "); /*Affichage pour chaque trame de la position */
+       /* printf("%f , %f\n", lat, longi);
+        printf("%s", "La latitude et la longitude de la deuxieme trame sont : ");
+        printf("%f , %f\n", lat2, longi2);
+        printf("%s", "La latitude et la longitude de la troisieme trame sont : ");
+        printf("%f , %f\n", lat3, longi3);
+        printf("%s", "La latitude et la longitude de la quatrieme trame sont : ");
+        printf("%f , %f\n", lat4, longi4);
+        p5.latitude=latitude_nbf("4545.0000"); /* Test avec les trames données dans le sujet */
+      /*  p5.longitude=longitude_nbf("00306.6036");
+        p6.latitude=latitude_nbf("4545.0242");
+        p6.longitude=longitude_nbf("00306.6039");
+        printf("%s", "La distance est :");
+        printf("%f%s",  calcule_distance(p5,p6)," km\n");
+        p7.latitude=latitude_nbf("4852.0010"); /* Test distance entre Paris et Toulouse : Paris:p7 et Toulouse:p8*/
+      /*  p7.longitude=longitude_nbf("00219.5999");
+        p8.latitude=latitude_nbf("4335.5999");
+        p8.longitude=longitude_nbf("00125.5999");
+        printf("%s", "La distance entre Paris et Toulouse est :");
+        printf("%f%s",  calcule_distance(p7,p8)," km\n");
+        p9.latitude=latitude_nbf("4317.6000"); /* Test distance entre Marseille et Toulouse : Marseille:p5 et Toulouse:p6*/
+      /*  p9.longitude=longitude_nbf("00524.0000");
+        p10.latitude=latitude_nbf("4335.5999");
+        p10.longitude=longitude_nbf("00125.5999");
+        printf("%s", "La distance entre Marseille et Toulouse est :");
+        printf("%f%s",  calcule_distance(p9,p10)," km\n");
+        printf("%s", "La vitesse est :");
+        printf("%f", calcule_vitesse(p1,p2)); /* Test de calcul Vitesse*/
+/*
         i=1;
         exit(-1);
     }*/
-    p1.latitude=latitude_nbf("4545.0000");
-    p1.longitude=longitude_nbf("00306.6036");
-    p2.latitude=latitude_nbf("4545.0242");
-    p2.longitude=longitude_nbf("00306.6039");
-    printf("%s", "La distance est :");
-    printf("%f",  calcule_distance(p1,p2));
-    printf("\n");
-    printf("%s", "La vitesse est :");
-    printf("%f", calcule_vitesse(p1,p2));
-
-
-
-
-
 
 }
 
@@ -253,41 +303,58 @@
     }
     if(decode_int('5')!=5)
     {
-        printf("Erreur du test decode int");
+        printf("Erreur du test decode int\n");
         exit(-1);
     }
+    if((decode_int('9'))!=9)
+    {
+        printf("Erreur du test decode int\n");
+        exit(-1);
+    }
     if(decode_nombre("9555",2)!=95)
     {
-        printf("Erreur du test decode nombre");
+        printf("Erreur du test decode nombre\n");
         exit(-1);
     }
-    if((latitude_nbf("3723.2475")-37.38)>0.01)
+    if((latitude_nbf("3723.2475")-37.38)>0.01) /* On regarde combien ca nous donne à l'aide d'une calculatrice et on met une marge d'erreur pour savoir si le nombre retourné correspond car on ne peut pas faire très precis */
     {
-        printf("Erreur du test pour la latitude");
+        printf("Erreur du test pour la latitude\n");
         exit(-1);
 
     }
     if((longitude_nbf("00306.6036")-3.11)>0.01)
     {
-        printf("Erreur du test pour la latitude");
+        printf("Erreur du test pour la latitude\n");
         exit(-1);
 
     }
     if ((lat_lon("00306.6036")-3.11)>0.01)
     {
-        printf("Erreur de test pour la combinaison des deux fonctions");
+        printf("Erreur de test pour la combinaison des deux fonctions\n");
         exit(-1);
     }
-     if (lat_lon("3723.2475")==37.387458)
+     if ((lat_lon("3723.2475")-37.38)>0.01)
     {
-        printf("Erreur de test pour la combinaison des deux fonctions");
+        printf("Erreur de test pour la combinaison des deux fonctions\n");
         exit(-1);
     }
-    if(decode_trame("$GPGGA,141914.00,4545.0000,N,00306.6036,E,1,05,3.4,499.3,M,,M,,*7D", &p1)!=1)
+    if((lat_lon("2526.4536")-25.44)>0.01)
+    {
+        printf("Erreur de test pour la combinaison de deux fonctions\n");
+        exit(-1);
+    }
+    if ((lat_lon("01304,6025")-13.07)>0.01)
+    {
+        printf("Erreur de test pour la combinaison de deux fonctions\n");
+        exit(-1);
+    }
+
+
+    /*if(decode_trame("$GPGPA,141914.00,4545.0000,N,00306.6036,E,1,05,3.4,499.3,M,,M,,*7D", &p1)!=1)
         {
             printf("Erreur de test pour decode trame");
             exit(-1);
-        }
+        }*/ /*Trame incorrect car differente de GPGPA donc on quitte le programme*/
 
     if(decode_trame("$GPGGA,141914.00,5078.0000,N,00306.6036,E,1,05,3.4,499.3,M,,M,,*7D", &p2)!=1)
         {
@@ -294,11 +361,11 @@
             printf("Erreur de test pour decode trame");
             exit(-1);
         }
-    if(decode_trame("$GPGGA,141915.00,4545.0242,N,00306.6039,E,1,05,3.4,499.5,M,,M,,*72", &p3)!=1)
+    /*if(decode_trame("$XPGGA,141915.00,4545.0242,N,00306.6039,E,1,05,3.4,499.5,M,,M,,*72", &p3)!=1)
         {
             printf("Erreur de test pour decode trame");
             exit(-1);
-        }
+        }*/ /*Trame incorrect car commence par X donc quitte le programme*/
     if(decode_trame("$GPGGA,141915.00,4554.0242,N,00306.8039,E,1,05,3.4,499.5,M,,M,,*72", &p4)!=1)
         {
             printf("Erreur de test pour decode trame");
