Projet

Général

Profil

« Précédent | Suivant » 

Révision 434

Ajouté par Hatim EL MAADI il y a presque 3 ans

Indentation du programe + Commentaires

Voir les différences:

branch/ELMAADI/sp4a12/main.c
"$GPVTG,99.4,T,,M,0.4,N,0.7,K*57",
"$GPZDA,141914.00,01,02,2006,00,00*69",
0};
/*D?claration des structure*/
typedef struct
{
float latitude;
......
Position rpos;
float vitmax;
}Zone;
/*D?finition des zone dangereuses*/
Zone zones[]=
{
{{44.788762, -3.012},50},
......
};
/*Fonction qui renvoie 1 si la trame commence par la cha?ne de caract?re type et z?ro dans les autres cas*/
int trame_cmp(char *trame,char *type)
{
int i;
int res=1;
for (i=0;i<5;i++)
{
if(trame[i+1]!=type[i])
if(trame[i+1]!=type[i]) /*V?rification si la trame commence par GPGGA */
{
res=0;
}
......
return res;
}
/*Fonction qui renvoie la valeur d?cimale associ?e ? un caract?re donn? en param?tre.*/
int decode_int(char c)
{
int val;
val = c-48;
val = c-48;/* Convertir caract?re ASCII en entier*/
if (val>9)
{
val=-1;
......
return val;
}
/*Fonction qui renvoie la valeur d?cimale des n premiers caract?res de la cha?ne ch en utilisant decode_int()*/
int decode_nombre(char *ch, int n)
{
int i;
......
}
return S;
}
/*Fonction qui permet de convertir la cha?ne de caract?re contenant la latitude en nombre flottant*/
float latitude (char *ch)
{
float degre, min1, min2, result;
degre=(float)decode_nombre(&ch[0],2);
degre=(float)decode_nombre(&ch[0],2); /* acc?der au caract?re qui nous int?resse*/
min1=(float)decode_nombre(&ch[0+2],2);
min2=(float)decode_nombre(&ch[0+5],4);
result=degre+(min1/60)+(min2/600000);
result=degre+(min1/60)+(min2/600000);/* Additionner tout apr?s avoir tout converti en degr?*/
return result;
}
/* Fonction qui permet de convertir la cha?ne de caract?re contenant la longitude en nombre flottant */
float longitude (char *ch)
{
float degre, min1, min2, result;
degre=(float)decode_nombre(&ch[0],3);
degre=(float)decode_nombre(&ch[0],3);/*Idem*/
min1=(float)decode_nombre(&ch[0+3],2);
min2=(float)decode_nombre(&ch[0+6],4);
result=degre+(min1/60)+(min2/600000);
result=degre+(min1/60)+(min2/600000);/*Idem*/
return result;
}
/* Fonction g?n?rique qui d?code indiff?remment une latitude ou une longitude*/
float latitude_longitude (char * ch)
{
float result;
if(ch[4]==46)
if(ch[4]==46)/*On determine la nature du carat?re 5 pour choisir la bonne op?ration ? faire*/
{
result=latitude(ch);
}
......
return result;
}
/*Fonction qui d?termine la latitude et la lonngitude de la position*/
float decode_trame(char *trame, Position *p)
{
p->latitude=latitude(trame);
p->longitude=longitude(trame);
}
float calcule_distance(Position p_1, Position p_2)
float calcule_distance(Position p_1, Position p_2) /*Calcul de la distance entre deux positions*/
{
float dist;
dist=((2*3.14*6370)/360)*sqrt(pow((p_2.latitude-p_1.latitude),2)+pow((p_2.longitude-p_1.longitude),2));
dist=((2*3.14*6370)/360)*sqrt(pow((p_2.latitude-p_1.latitude),2)+pow((p_2.longitude-p_1.longitude),2));/* 6370 est le rayon de la terre*/
return dist;
}
float calcule_vitesse(Position p_1, Position p_2)
float calcule_vitesse(Position p_1, Position p_2)/*calcul de la vitesse ? l'aide de la distance entre deux positions */
{
float vit;
vit=(calcule_distance(p_1,p_2)*3600);
return vit;
}
/*Fonction qui renvoie le num?ro de la zone la plus proche du point p ainsi que sa distance.*/
int distance_a_la_plus_proche_zone(Position p, Zone r[], int nb_zones, float *d)
{
int i,j;
float D0;
D0=calcule_distance(p, r[0].rpos);
D0=calcule_distance(p, r[0].rpos); /*Initialisation d'une distance de r?f?rence qui est la distnace initiale*/
if (nb_zones>0)
{
for(i=1;i>nb_zones;i++)
......
*d=calcule_distance(p,r[i].rpos);
if(*d<D0)
{
j=i;
D0=*d;
j=i; /* changement de l'indice */
D0=*d; /* changement de la r?f?rence*/
}
}
return j;
......
cpt++;
if (trame_cmp(trame,"GPGGA"))
{
printf ("> %s\n",trame);
printf ("> %s\n",trame); /*Afficher que les trames GPGGA*/
}*/
Position P,P0;
float vit, dist;
int zone_nb, trameOK, alarme=0, Dmax=1;
int zone_nb, trameOK, alarme=0, Dmax=1;/*Dmax:distance maximale pour d?clencher l'alarme*/
trameOK=1;
if (trame_cmp(trame,"GPGGA")==1)
{
......
/*Ajouter vos tests unitaires dans cette fonction.*/
void tests_unitaires(void){
/*Test de v?rification du bon fonctionnement*/
if (5!=5)
{
printf ("Erreur Test unitaire basique.\n");
exit(-1);
}
/*Tests de la fonction tram_cmp*/
if (trame_cmp("$GPGGA suite chaine","GPGGA")!=1)
{
printf ("Erreur Test unitaire trame_cmp.\n");
......
printf ("Erreur Test unitaire trame_cmp.\n");
exit(-1);
}
/*Test de la fonction decode_int*/
if (decode_int('2')!=2)
{
printf ("Erreur Test unitaire decode_int.\n");
exit(-1);
}
/*Test de la fonction decode_nombre*/
if (decode_nombre("1234",2)!=12)
{
printf ("Erreur Test unitaire decode_nombre.\n");
exit(-1);
}
/*Test de la fonction latitude*/
if (latitude("3723.2475")-37.387458>0.0001)
{
printf ("Erreur Test unitaire latitude.\n");
exit(-1);
}
/*Test de la fonction longitude */
if (longitude("00306.6043")-3.110071667>0.01)
{
printf ("Erreur Test unitaire longitude.\n");
exit(-1);
}
/*Tests de la fonction latitude_longitude*/
if (latitude_longitude("00306.6043")-3.110071667>0.01)
{
printf ("Erreur Test unitaire latitude_longitude.\n");
......
printf ("Erreur Test unitaire latitude_longitude.\n");
exit(-1);
}
/*Position p;
if (decode_trame("$GPGGA,141914.00,4545.0000,N,00306.6036,E,1,05,3.4,499.3,M,,M,,*7D",&p)!=1)
/*Position p;*/ /*Tests de la fonction decode_trame*/
/*if (decode_trame("$GPGGA,141914.00,4545.0000,N,00306.6036,E,1,05,3.4,499.3,M,,M,,*7D",&p)!=1)
{
printf ("Erreur Test unitaire decode_trame.\n");
exit(-1);
......
p_3.longitude = 1.2877314;
printf("distance Paris-Lyon : %f\n",calcule_distance(p_1,p_2));
printf("distance Lyon-Toulouse : %f\n",calcule_distance(p_2,p_3));*/
int nb_zone;
int nb_zone; /*Test de la fonction distance_a_la_plus_proche_zone*/
float *d;
Position p,p1,p2;
nb_zone=distance_a_la_plus_proche_zone(p,zones,2,&d);

Formats disponibles : Unified diff