Révision 185
Ajouté par rademagalh il y a presque 4 ans
branch/DEMAGALHAES/sp4a12/main.c | ||
---|---|---|
"$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)
|
||
... | ... | |
}
|
||
|
||
//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");
|
Formats disponibles : Unified diff
main.c contenant les fonctions :
trame_cmp;decode_int;decode_nombre;conversionChaineFlottante;
avec les tests_unitaires validés de chaque.