Index: branch/DEMAGALHAES/sp4a12/main.c
===================================================================
--- branch/DEMAGALHAES/sp4a12/main.c	(revision 184)
+++ branch/DEMAGALHAES/sp4a12/main.c	(revision 185)
@@ -14,9 +14,160 @@
                     "$GPZDA,141914.00,01,02,2006,00,00*69",
                     0};
 
-int trame_cmp(char* a,char* b){
-    return 0;
+int trame_cmp(char * trame, char * type)
+{
+    int indice=1;
+    char mot[10]="";
+    //Extraction du mot entre le symbole $ et la virgule
+    do
+    {
+        mot[indice-1]=trame[indice];
+        indice++;
+    }
+    while (trame[indice]!=',');
+
+    int longueurMot=0;
+    int longueurType=0;
+    char caratereCourrant=0;
+    //Obtention de la longueur du Mot extrait entre le symbole $ et la virgule
+    do
+    {
+        caratereCourrant=mot[longueurMot];
+        longueurMot++;
+    }
+    while (caratereCourrant != '\0');
+    longueurMot--;
+
+    caratereCourrant=0;
+    ////Obtention de la longueur du type
+    do
+    {
+        caratereCourrant=type[longueurType];
+        longueurType++;
+    }
+    while (caratereCourrant != '\0');
+    longueurType--;
+
+    if (longueurType==longueurMot) //Verification si le type est de même taille que le mot extrait
+    {
+        int verificateur=0; //varaiable de validation
+        for (int i = 0; i < longueurMot; i++)
+        {
+            if (mot[i]==type[i])
+            {
+                verificateur=1; // Valide la comparaison entre deux lettres identiques
+            }
+            else
+            {
+                verificateur=0; // Si la comparaison n'est pas bonne, on arrête la comparaison
+                break;
+            }
+        }
+        if (verificateur==1 && type=="GPGGA")
+        {
+            // Condition de renvoie si le type est bien GPGGA
+            return 1;
+        }
+        else
+        {
+            // return 0 pour tout les test qui ne seraient pas du type GPGGA
+            return 0;
+        }
+    }
+    else
+    {
+        // return 0 si aucune comparaison n'est bonne
+        return 0;
+    }
 }
+
+int decode_int(char c)
+{
+    int code;
+    char i;
+    if(c >= '0' && c <= '9')
+        // Verification que le caractère 'c' est un caractère entre 0 et 9 dans la table ascii
+    {
+        for (i= '0'; i <='9'; i++)
+            //Parcourir la table ascii à la recherche du carac. c
+        {
+            if (i==c)
+                // Identification du carac. c dans la table ascii
+            {
+                code=i-48; // On ramène le code ascii de c entre 0 et 9
+                return code;
+            }
+        }
+    }
+    else
+    {
+        // le caractère 'c' n'est pas entre '0' et '9' dans la table ascii donc on renvoie -1
+        return -1;
+    }
+}
+
+int decode_nombre(char * ch, int n)
+{
+    int longueurMot=0;
+    char caratereCourrant=0;
+    //Obtention de la longueur du Mot extrait entre le symbole $ et la virgule
+    do
+    {
+        caratereCourrant=ch[longueurMot];
+        longueurMot++;
+    }
+    while (caratereCourrant != '\0');
+    longueurMot--;
+    if (longueurMot < n ||n==0){
+        return 0;
+    }
+    else{
+        int j=0,sum=0;
+        char nb[n];
+        for(j=0; j<n; j++)
+        {
+            if(ch[j] < 48 || ch[j] > 57)
+            {
+                return 0;
+            }
+            else
+            {
+                sum = sum*10 + (ch[j] - 48);
+            }
+        }
+        return sum;
+    }
+}
+
+double conversionChaineFlottante(char* ch)
+{
+    double res = 0, fact = 1;
+    if (*ch == '-')
+    {
+        ch++;
+        fact = -1;
+    }
+    for (int virguleVu = 0; *ch; ch++)
+    {
+        if (*ch == '.')
+        {
+            virguleVu = 1;
+            continue;
+        }
+        int d = *ch - '0';
+        if (d >= 0 && d <= 9)
+        {
+            if (virguleVu) fact /= 10.0;
+            res = res * 10.0 + (double)d;
+        }
+        if (*ch == ',')
+        {
+            break;
+        }
+    }
+    return res * fact;
+}
+
 
 //Fonction à modifier !!!!!
 void traitement(char * trame)
@@ -27,34 +178,116 @@
 }
 
 //Ajouter vos tests unitaires dans cette fonction.
-void tests_unitaires(void){
+void tests_unitaires(void){
+    printf("Test de la fonction trame_cmp \n");
     if (5!=5){
         printf ("Erreur Test unitaire basique.\n");
         exit(-1);
     }
-    /*if (trame_cmp("$GPGGA suite chaine","GPGGA")!=1){
-        printf ("Erreur Test unitaire trame_cmp.\n");
+    if (trame_cmp("$GPGGA,141914.00,4545.0000,N,00306.6036,E,1,05,3.4,499.3,M,,M,,*7D","GPGGA")!=1){
+        printf ("Erreur Test unitaire trame_cmp. 1\n");
         exit(-1);
     }
-    if (trame_cmp("$GPRMC suite chaine","GPGGA")!=0){
-        printf ("Erreur Test unitaire trame_cmp.\n");
+    if (trame_cmp("$GPRMC,141914.00,A,4545.6424,N,00306.6036,E,0.4,99.4,010206,,*0C","GPGGA")!=0){
+        printf ("Erreur Test unitaire trame_cmp. 2\n");
         exit(-1);
+    }
+    // Teste de la spécificité : modifier votre programme pour qu'il n'affiche que les trames GPGGA
+    if (trame_cmp("$GPRMC,141914.00,A,4545.6424,N,00306.6036,E,0.4,99.4,010206,,*0C", "GPRMC" )!=0){
+        printf ("Erreur Test unitaire trame_cmp. 3\n");
+        exit(-1);
     }
-    if (trame_cmp("$GPRMC... ", "GPRMC" )!=1){
-        printf ("Erreur Test unitaire trame_cmp.\n");
+    if (trame_cmp("$APRMC,141914.00,A,4545.6424,N,00306.6036,E,0.4,99.4,010206,,*0C", "GPGGA")!=0){
+        printf ("Erreur Test unitaire trame_cmp. 4\n");
         exit(-1);
+    }
+    else
+    {
+        printf("Pas d'erreur fonction potentiellement valide !\n");
     }
-    if (trame_cmp("$APRMC...", "GPGGA")!=0){
-        printf ("Erreur Test unitaire trame_cmp.\n");
-        exit(-1);
-    }*/
 }
-
+
+//Fonction de tests unitaires pour decode_int
+void test_decode_int(void){
+    printf("Test de la fonction decode_int \n");
+    if (5!=5){
+        printf ("Erreur test_decode_int basique. n°=1 \n");
+        exit(-1);
+    }
+    if (decode_int('5')==-1){
+        printf("Erreur test_decode_int. n°=2 \n");
+    }
+    if (decode_int('A')!=-1){
+        printf("Erreur test_decode_int. n°=3 \n");
+    }
+    else
+    {
+        printf("Pas d'erreur fonction potentiellement valide ! \n");
+    }
+}
+
+//Fonction de tests unitaires pour decode_nombre
+void test_decode_nombre(void){
+   printf("Test de la fonction decode_nombre \n");
+    if (5!=5){
+        printf ("Erreur test_decode_int basique. n°=1 \n");
+        exit(-1);
+    }
+    if(decode_nombre("7541",2)!=75){
+        printf("Erreur test_decode_nombre n°=2 \n");
+        exit(-1);
+    }
+    if(decode_nombre("7541",5)!=0){
+        printf("Erreur test_decode_nombre n°=2 \n");
+        exit(-1);
+    }
+    else
+    {
+        printf("Pas d'erreur fonction potentiellement valide ! \n");
+    }
+}
+
+//Fonction de tests unitaires pour conversionChaineFlottante
+void test_conversionChaineFlottante()
+{
+    printf("Test de la fonction test_conversionChaineFlottante \n");
+    if (5!=5){
+        printf ("Erreur Test conversionChaineFlottante basique. n°1\n");
+        exit(-1);
+    }
+    if ((conversionChaineFlottante("3723.2475,N")/723.247500)<1)
+    {
+        printf ("Erreur Test conversionChaineFlottante. n°2\n");
+        exit(-1);
+    }
+    if ((conversionChaineFlottante("00306.6036,E")/00306.603600)<1)
+    {
+        printf ("Erreur Test conversionChaineFlottante. n°3\n");
+        exit(-1);
+    }
+    if ((conversionChaineFlottante("4545.0000,N")/4545.000000)<1)
+    {
+        printf ("Erreur Test conversionChaineFlottante. n°4\n");
+        exit(-1);
+    }
+    if ((conversionChaineFlottante("00752.726,E")/00752.726000)<1)
+    {
+        printf ("Erreur Test conversionChaineFlottante. n°5\n");
+        exit(-1);
+    }
+     else
+    {
+        printf("Pas d'erreur fonction potentiellement valide ! \n");
+    }
+}
 // Ne pas modifier cette fonction
 int main(int argc,char ** argv)
 {
 
-    tests_unitaires();
+    tests_unitaires();
+    test_decode_int();
+    test_decode_nombre();
+    test_conversionChaineFlottante();
 
     // Affichage des trames definies dans la table trames.
     printf ("Trames de tests tableau trames:\n");
