Index: branch/MBADINGA/sp4a12/main.c
===================================================================
--- branch/MBADINGA/sp4a12/main.c	(revision 656)
+++ branch/MBADINGA/sp4a12/main.c	(revision 657)
@@ -42,10 +42,9 @@
 int decode_int (char c){
 
     int a=0;   /* initialisation de la variable test de notre fonction (la valeur retourné de type entier) */
-
     if (c>=48 && c<=57) /*test de condition sur la valeur décimale  du caractère passer en paramètre */
     {
-        a=c-48; /* conversion de caractère en valeur décimale*/
+        a=c-'0'; /* conversion de caractère en valeur décimale*/
     }
     else
     {
@@ -55,11 +54,12 @@
     return a; /* retourne -1 si le caractère n'est pas entre 0 et 9. sinon retourne la valeur décimale.*/
 }
 
-int decode_nombre(char * ch, int n)
+int decode_nombre(char *ch, int n)
 {
+
     int i,res;
     res = decode_int(ch[0]);
-    for (i=0; i<=n; i++)
+    for (i=1; i<n; i++)
     {
         res = decode_int(ch[i])+res*10;
     }
@@ -69,7 +69,7 @@
 
 /* Fonction à modifier !!!!!*/
 
-void traitement(char * trame)
+void traitement(char* trame)
 {
 
     static int cpt=0;
@@ -81,7 +81,7 @@
 
 void test_decode_int(void)
 {
-        if (decode_int('0')!=0) /* si la valeur retourné par la fonction decode_int est égale -1 alors en affiche l'erreur */
+        if (decode_int('5')!=5) /* si la valeur retourné par la fonction decode_int est égale -1 alors en affiche l'erreur */
             printf("Erreur ecriture fonction decode_int\n");
 }
 
@@ -101,15 +101,40 @@
     }
 }
 
-/* fonction conversion lattitude en flottant*/
 
-float latitude_flottant(char latitude){
 
-    float lat_flot , minutes_flot; /* On définit notre resultat de latitude en flottant et celui de la valeur en minutes*/
-    int degre ; /* La valeur entière du degré de notre latitude*/
-    degre = decode_nombre(latitude,2); /* On ne récupère que les 2 premier chiffres de la latitude pour définir le degré*/
-    minutes_flot = latitude-degre*pow(10,2); /* La valeur du degré multpliée par 10 est soustraite à celle de la latitude*/
-    minutes_flot = minutes_flot/60; /* La valeur en minute est retranscrite en flottant ejn la divisant par 60 qui correspond à 1 degré, elle doit être inférieure à 1*/
+
+float latitude_flottant(char *latitude){/*fonction conversion lattitude en flottant*/
+
+
+    float lat_flot; /* On définit notre resultat de latitude en flottant et celui de la valeur en minutes*/
+    float minutes_flot;
+
+    int degre;/* La valeur entière du degré de notre latitude*/
+    int i,j;
+    float resultat_pe_minute;
+    float resultat_pd_minute;
+    char p_entiere_minute[2];
+    char p_decimal_minute[4];
+
+
+    degre = decode_nombre(latitude,2);/* On ne récupère que les 2 premier chiffres de la latitude pour définir le degré*/
+
+    for (i=0;i<2;i++)
+    {
+        p_entiere_minute[i]=latitude[2+i]; /*affectation des caracteres de longi sauf les 3 premiers*/
+    }
+    for (j=0;j<4;j++)
+    {
+        p_decimal_minute[j]=latitude[5+j]; /*affectation des 4 derniers caracteres de longi à pd_min*/
+    }
+    resultat_pe_minute = decode_nombre(p_entiere_minute,2); /*donne la valeur en décimal des 2 premiers caractères*/
+    resultat_pd_minute = decode_nombre(p_decimal_minute,4); /*donne la valeur en décimal des 4 premiers caractères*/
+
+
+    minutes_flot = resultat_pe_minute/60 + ( resultat_pd_minute/600000); /* La valeur en minute est retranscrite en flottant en la divisant par 60 qui correspond à 1 degré, elle doit être inférieure à 1*/
+                                                                    /* pour la partie decimal les 600000 carespondent a 10^-4*1/60. car on a normalement 0.2475 d'après le test unitaire.*/
+
     lat_flot = degre + minutes_flot; /* La somme du degré et de la valeur minute en flottant donne la valeur de notre latitude*/
 
 return lat_flot;
@@ -116,41 +141,109 @@
 
 }
 
-float longitude_flottant(char longitude){
 
-    float lon_flot,minutes_flot; /* On définit notre resultat de longitude en flottant comme celui de la valeur en minutes*/
-    int degre; /* La valeur entière du degré de notre longitude*/
-    degre= decode_nombre(longitude,3); /* On ne récupère que les 2 premiers chiffres de les 3 premiers chiffres pour définir le degré*/
-    minutes_flot = longitude-degre*pow(10,2); /* La valeur du degré multpliée par 10 est soustraite à celle de la longitude*/
-    minutes_flot = minutes_flot/60; /* La valeur en minute est retranscrite en flottant ejn la divisant par 60 qui correspond à 1 degré, elle doit être inférieure à 1*/
-    lon_flot= degre + minutes_flot; /* La somme du degré et de la valeur minute en flottant donne la valeur de notre latitude*/
+float longitude_flottant(char *longitude){
 
+    /* On définit notre resultat de longitude en flottant comme celui de la valeur en minutes*/
+    float lon_flot, minutes_flot;
+    /* La valeur entière du degré de notre longitude*/
+    int degre;
+    int i,j;
+    float resultat_pe_minute;
+    float resultat_pd_minute;
+    char p_entiere_minute[2];
+    char p_decimal_minute[4];
+
+     /* On ne récupère que les 2 premiers chiffres de les 3 premiers chiffres pour définir le degré*/
+     degre = decode_nombre(longitude,3);
+
+
+    for (i=0;i<2;i++)
+    {
+        p_entiere_minute[i]=longitude[3+i]; /*affectation des caracteres de longi sauf les 3 premiers*/
+    }
+    for (j=0;j<4;j++)
+    {
+        p_decimal_minute[j]=longitude[6+j]; /*affectation des 4 derniers caracteres de longi à pd_min*/
+    }
+    resultat_pe_minute = decode_nombre(p_entiere_minute,2); /*donne la valeur en décimal des 2 premiers caractères*/
+    resultat_pd_minute = decode_nombre(p_decimal_minute,4); /*donne la valeur en décimal des 4 premiers caractères*/
+
+
+
+
+    minutes_flot = resultat_pe_minute/60 + ( resultat_pd_minute/600000); /* La valeur en minute est retranscrite en flottant en la divisant par 60 qui correspond à 1 degré, elle doit être inférieure à 1*/
+
+    lon_flot = degre + minutes_flot;/* La somme du degré et de la valeur minute en flottant donne la valeur de notre longitude*/
+
 return lon_flot;
 
 }
 
+
+
 void test_latitude_flottant (void){
 
     /* On utilisera l'exemple explicité dans le support de TP*/
-    if (latitude_flottant(3723.0475)-37.387458 > 0.0001){ /* 37.3874580- 37.3874580 = 0  si cette condition n'est pas vérifier alors la fonction n'est pas correcte.*/
-        printf("Erreur calcul latitude");
+    if ((latitude_flottant("3723.2475")- 37.387458) > 0.0001){ /* 37.3874580- 37.3874580 = 0  si cette condition n'est pas vérifier alors la fonction n'est pas correcte.*/
+
+        printf("Erreur calcul latitude\n");
         exit(-1);
     }
-
 }
 
+
+
 void test_longitude_flottant(void){
+
     /*On utilisera l'exemple explicité dans le support de TP*/
-    if (longitude_flottant("00306.6036")-3.110060 > 0.0001){ /* 3.110060 - 3.110060=0  si cette condition n'est pas vérifier alors la fonction n'est pas correcte.*/
-        printf("Erreur calcul latitude");
-        exit(-1);
+    if ((longitude_flottant("00306.6036")-3.110060) > 0.0001){ /* 3.110060 - 3.110060=0  si cette condition n'est pas vérifier alors la fonction n'est pas correcte.*/
+      printf("Erreur calcul longitude\n");
+      exit(-1);
     }
 }
 
+
+float lat_long_generique (char * ch){
+    float Res;
+    if(ch[4]== '.'){/* Il s'agit alors d'une latitude comme dans l'exemple 3723.2475,N*/
+        Res=latitude_flottant(ch);
+    }
+    if(ch[5]=='.'){// Il s'agit alors d'une longitude comme dans l'exemple 00306.6036,E
+        Res=longitude_flottant(ch);
+    }
+return Res;
+}
+
+void test_fonction_generique(void){
+    if(lat_long_generique("4545.0484")-45.75080 > 0.0001){ // Calcul préalable fait à la main avec ue donnée d'une trame GPGGA
+        printf("Erreur calcul longitude.1\n");
+        exit(-1);
+
+    }
+    else if(lat_long_generique("3723.2475")-37.387458 > 0.0001){
+        printf("Erreur calcul longitude.2\n");
+        exit(-1);
+    }
+
+    if(lat_long_generique("00306.6037")-3.110006 > 0.0001){ // Calcul préalable fait à la main avec ue donnée d'une trame GPGGA
+        printf("Erreur calcul lattitude.1\n");
+        exit(-1);
+    }
+    else if(lat_long_generique("00306.6036")-3.110060 > 0.0001){
+        printf("Erreur calcul lattitude.2\n");
+        exit(-1);
+    }
+
+
+    }
+
+
 
 /*Ajouter vos tests unitaires dans cette fonction.*/
 
-void tests_unitaires(void){
+void tests_unitaires(void){
+
     if (5!=5){
         printf ("Erreur Test unitaire basique.\n");
         exit(-1);
@@ -173,17 +266,17 @@
         exit(-1);
     }
 
-/*
-     test_decode_int(); //appel de la fonction test decode int pour le test unitaire sur la conversion en decimale
 
-     test_decode_nombre(); //appel de la fonction test decode nombre pour le test unitaire sur la conversion en nombre
+     test_decode_int(); /*appel de la fonction test decode int pour le test unitaire sur la conversion en decimale*/
 
+     test_decode_nombre(); /*appel de la fonction test decode nombre pour le test unitaire sur la conversion en nombre*/
 
-     test_latitude_flottant(); //appel de la fonction test decode int pour le test unitaire sur la conversion en flottant de la latitude
+     test_latitude_flottant (); /*appel de la fonction test latitude  pour le test unitaire sur la conversion de la lattitude en flotant*/
 
+     test_longitude_flottant(); /*appel de la fonction test longitude  pour le test unitaire sur la conversion de la longitude en flotant*/
 
-     test_longitude_flottant(); // appel de la fonction test decode int pour le test unitaire sur la conversion en flottant de la longitude
-*/
+     test_fonction_generique(); /*appel de la fonction test fonction generique   pour le test unitaire sur la conversion de la longitude et la latitude en flotant*/
+
 }
 
 
