Index: branch/leroy/sp4a12/TP2_SP4/main.c
===================================================================
--- branch/leroy/sp4a12/TP2_SP4/main.c	(revision 227)
+++ branch/leroy/sp4a12/TP2_SP4/main.c	(revision 228)
@@ -2,11 +2,12 @@
 #include <stdlib.h>
 #include <math.h>
 
-struct position {
+struct position { // déclaration structure position contenant la latitude et la longitude
     int latitude;
     int longitude;
 };
 
+// declaration fonctions utilisées dans le programme
 void decode_trame(char trame[1000], int* latitude, int* longitude);
 
 float calcule_distance(struct position p_1,struct position p_2);
@@ -13,26 +14,30 @@
 
 float calcule_vitesse(struct position p_1,struct position p_2);
 
+int distance_a_la_plus_proche_zone(struct position p,float zones[100][3][2],int nb_zones, float *d);
+
 void decode_trame(char trame[1000], int* latitude, int* longitude){
     int i;
 
+    /*stockage de la latitude et de la longitude dans les variables de micro controleurà partir de la trame*/
     for(i = 17; i < 21;i++){
-        *latitude = *latitude*10 + (trame[i]-48);
+        *latitude = *latitude*10 + (trame[i]-48); // récupération de la partie entière de la latitude
     }
 
     for(i = 22; i < 26;i++){
-        *latitude = *latitude*10 + (trame[i]-48);
+        *latitude = *latitude*10 + (trame[i]-48); // récupération de la partie décimale de la latitude
 
     }
     for(i = 29; i < 34;i++){
-        *longitude = *longitude*10 + (trame[i]-48);
+        *longitude = *longitude*10 + (trame[i]-48);// récupération de la partie entière de la latitude
 
+
     }
     for(i = 35; i < 39;i++){
-        *longitude = *longitude*10 + (trame[i]-48);
+        *longitude = *longitude*10 + (trame[i]-48); // récupération de la partie décimale de la longitude
     }
-    *latitude = *latitude - *latitude%1000000 + *latitude%1000000 * 5/3;
-    *longitude = *longitude - *longitude%1000000 + *longitude%1000000 * 5/3;
+    *latitude = *latitude - *latitude%1000000 + *latitude%1000000 * 5/3; //conversion de la latitude en hexadécimal
+    *longitude = *longitude - *longitude%1000000 + *longitude%1000000 * 5/3; //conversion de la longitude en hexadécimal
 }
 
 float calcule_distance(struct position p_1, struct position p_2){
@@ -43,20 +48,23 @@
     float lon1 = p_1.longitude;
     float lon2 = p_2.longitude;
 
-
+    /*conversion de la latitude et de la longitude codée en un entier en décimal*/
     lat1 = lat1/1000000;
     lat2 = lat2/1000000;
     lon1 = lon1/1000000;
     lon2 = lon2/1000000;
 
-    printf("LAT1 = %f\n", lat1);
-    printf("LON1 = %f\n", lon1);
-    printf("LAT2 = %f\n", lat2);
-    printf("LON2 = %f\n", lon2);
+    /*affichage des coordonnées des deux points*/
+    printf("LAT1 = %f deg\n", lat1);
+    printf("LON1 = %f deg\n", lon1);
+    printf("LAT2 = %f deg\n", lat2);
+    printf("LON2 = %f deg\n", lon2);
 
+    /*calcul de la distance entre ces deux points*/
+    distance = acos(sin(lat1*M_PI/180)*sin(lat2*M_PI/180)+cos(lat1*M_PI/180)*cos(lat2*M_PI/180)*cos(lon1*M_PI/180-lon2*M_PI/180))*6371;
 
-    distance = acos(sin(lat1*M_PI/180)*sin(lat2*M_PI/180)+cos(lat1*M_PI/180)*cos(lat2*M_PI/180)*cos(lon1*M_PI/180-lon2*M_PI/180))*6371;
-    printf("D = %f\n", distance);
+    printf("D = %f km \n", distance); //affichage de la distance entre les deux points
+
     return distance;
 
 }
@@ -70,7 +78,7 @@
     float lon1 = p_1.longitude;
     float lon2 = p_2.longitude;
 
-
+    /*idem que pour la fonction decode_trame*/
     lat1 = lat1/1000000;
     lat2 = lat2/1000000;
     lon1 = lon1/1000000;
@@ -78,21 +86,68 @@
 
 
     distance = acos(sin(lat1*M_PI/180)*sin(lat2*M_PI/180)+cos(lat1*M_PI/180)*cos(lat2*M_PI/180)*cos(lon1*M_PI/180-lon2*M_PI/180))*6371;
-    vitesse = distance * 3600;
-    printf("V = %f\n", vitesse);
+
+
+    vitesse = distance * 3600; //calcul de la vitesse sachant qu'il s'écoule 1s 1es entre les deux trames
+    printf("V = %f km/h\n", vitesse); // affichage de la vitesse
+
     return vitesse;
 
 }
 
+int distance_a_la_plus_proche_zone(struct position p,float zones[100][3][2],int nb_zones, float *d){
+    float distance, distance_precedente;
+    int i;
+
+    float lat1 = p.latitude;
+    float lon1 = p.longitude;
+
+    /*conversion de la latitude et de la longitude codée en un entier en décimal*/
+    lat1 = lat1/1000000;
+    lon1 = lon1/1000000;
+
+        /*Calcul de la distance entre la première zone et l'endroit où le point de référence*/
+        distance_precedente = acos(sin(lat1*M_PI/180)*sin(zones[0][0][0]*M_PI/180)+cos(lat1*M_PI/180)*cos(zones[0][0][0]*M_PI/180)*cos(lon1*M_PI/180-zones[0][0][1]*M_PI/180))*6371-zones[0][1][0];
+
+        for(i=0; i < nb_zones; i++){
+
+        printf("LAT zone %d : %f deg\n",i+1, zones[i][0][0]);
+        printf("LON zone %d : %f deg\n",i+1, zones[i][0][1]);
+        printf("Rayon zone %d : %f\n",i+1, zones[i][1][0]);
+
+        /*Calcul de la distance entre les zones suivantes et le point de référence*/
+        distance = acos(sin(lat1*M_PI/180)*sin(zones[i][0][0]*M_PI/180)+cos(lat1*M_PI/180)*cos(zones[i][0][0]*M_PI/180)*cos(lon1*M_PI/180-zones[i][0][1]*M_PI/180))*6371-zones[i][1][0];
+
+        /*Comparaison entre la distance entre la zone précédente  et le point de réference et celle entre la zone actuelle et ce même point*/
+        if(distance_precedente < distance){
+        *d = distance_precedente;
+        }else{
+        *d = distance;
+        }
+
+        /*Conservation de la distance calculée entre la zone actuelle et le point de référence pour ensuite la recomparer à la distance entre ce même point et la zone suivante*/
+        distance_precedente = distance;
+
+
+        printf("Distance %d zone : %f km\n",i+1, *d); // Affichage du numéro de la zone la plus proche ainsi que sa distance la séparant du point de référence
+
+
+    }
+    return i;
+
+}
+
 int main()
 {
-    char trame1[] = {"$GPGGA,141914.00,4545.0000,N,00306.6036,E,1,05,3.4,499.3,M,,M,,*7D"};
-    char trame2[] = {"$GPGGA,141915.00,4545.0242,N,00306.6039,E,1,05,3.4,499.5,M,,M,,*72"};
+    char trame1[] = {"$GPGGA,141914.00,4545.0000,N,00306.6036,E,1,05,3.4,499.3,M,,M,,*7D"}; //Première trame
+    char trame2[] = {"$GPGGA,141915.00,4545.0242,N,00306.6039,E,1,05,3.4,499.5,M,,M,,*72"}; //Deuxième trame
+    float zones[100][3][2] = {{{44.7887762, -3.012}, {50}}, {{44.7891220, -3.013}, {70}}}; //Tableau contenant les coordonnées du centre du cercle et son rayon de chacune des zones
 
+    int nb_zones = 2; // Nombre de zones (ici le tableau en contient 2)
+    float d = 0;
+    struct position p_1,p_2, p;
 
-
-    struct position p_1,p_2;
-
+    /*Initailisation de la longitude et de la latitude des points à 0* (ces variables contiendront ensuite les coordonées des points p1 et p2 après exécution de la fonction decode_trame*/
     p_1.longitude = 0;
     p_1.latitude = 0;
 
@@ -99,19 +154,17 @@
     p_2.longitude = 0;
     p_2.latitude = 0;
 
-
+    /*Exécution de chacunes des fonctions*/
     decode_trame(trame1, &p_1.latitude, &p_1.longitude);
     decode_trame(trame2, &p_2.latitude, &p_2.longitude);
-
     calcule_distance(p_1, p_2);
     calcule_vitesse(p_1, p_2);
 
+    /*Affichage du numéro de la zone la plus proche ainsi que la distance séparant cette zone au point de référence (ici p_1) (données renvoyés par la fonction distance_a_la_plus_proche_zone)*/
+    printf("Numero de la zone la plus proche : %d\n", distance_a_la_plus_proche_zone(p_1,zones,nb_zones, &d)); //test unitaire pour la fonction distance_a_la_plus_proche_zone
+    printf("Distance a la zone la plus proche : %f km\n", d);
 
-    printf("%d\n", p_1.latitude);
-    printf("%d\n", p_1.longitude);
 
-    printf("%d\n", p_2.latitude);
-    printf("%d\n", p_2.longitude);
 
     return 0;
 }
Index: branch/leroy/sp4a12/TP2_SP4/TP2_SP4.depend
===================================================================
--- branch/leroy/sp4a12/TP2_SP4/TP2_SP4.depend	(revision 227)
+++ branch/leroy/sp4a12/TP2_SP4/TP2_SP4.depend	(revision 228)
@@ -4,3 +4,8 @@
 	<stdlib.h>
 	<math.h>
 
+1620302174 source:c:\tp_sp4_2021_leroy\sp4a12\tp2_sp4\main.c
+	<stdio.h>
+	<stdlib.h>
+	<math.h>
+
