Index: branch/Morales/sp4a12/main.c
===================================================================
--- branch/Morales/sp4a12/main.c	(revision 79)
+++ branch/Morales/sp4a12/main.c	(revision 80)
@@ -18,9 +18,9 @@
 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])
         {
@@ -35,28 +35,134 @@
 //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));
     }
 }
 
@@ -83,12 +189,86 @@
         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
