Projet

Général

Profil

« Précédent | Suivant » 

Révision 353

Ajouté par Yaye Oumy NDONG il y a presque 3 ans

implantation de la fonction distance_a_la_plus proche zone,de son test unitaire ; validation sur les trames tests en affichant l'état de l'alarme

Voir les différences:

branch/Ndong_Yaye_Oumy/sp4a12/main.c
int trame_cmp(char* trame,char *type){ // fonction qui renvoie 1 si la trame commence par la cha?ne de caract?re type et z?ro dans les autres cas
int i, ok =1 ;
for(i=0 ;i<=4 ;i=i+1){
if (trame[i+1] !=type[i]){ //comparaison de la premi?re chaine (sans le '$') et de la deuxi?me chaine pass?es en param?tre
for(i=0 ;i<=4 ;i=i+1)
{
if (trame[i+1] !=type[i])
{ //comparaison de la premi?re chaine (sans le '$') et de la deuxi?me chaine pass?es en param?tre
ok=0; // si des caract?res diff?rent lors de la comparaison ok=0 et on en conclut que les deux chaines compar?es ne sont pas pareils
}
}
return ok;
}
int decode_int(char car){ //qui renvoie la valeur d?cimale associ?e ? un caract?re donn? en param?tre
int decode_int(char car)
{ //qui renvoie la valeur d?cimale associ?e ? un caract?re donn? en param?tre
int entier;
if(car<='9' && car>='0'){
if(car<='9' && car>='0')
{
entier= car-48; // on soustrait au code ascii du caract?re le code ascii du caract?re '0'
}else{
entier=-1; // si le caractere entr? ne correspond pas ? un chiffre on renvoie -1
......
int decode_nombre (char *ch,int n){ // fonction qui renvoie qui renvoie la valeur d?cimale des n premiers caract?res de la cha?ne ch
int i,s=0;
for(i=0;i<n;i++){
for(i=0;i<n;i++)
{
s=s + decode_int(ch[i])*pow(10,n-1-i);
}
return s;
......
float distance;
int perimetre=40000; // perimetre de la terre
distance= sqrt((pos_prec.longitude-pos.longitude)*(pos_prec.longitude-pos.longitude)+(pos_prec.latitude-pos.latitude)*(pos_prec.latitude-pos.latitude)) *( perimetre/360);
return distance;
return distance; // on renvoie la distance en km
}
float calcul_vitesse(Position pos, Position pos_prec)
......
int a=0,i;
*d=calcul_distance(p, r[0].rpos); // on calcule la distance entre la position actuelle et la premiere zone dangereuse du tableau
if(nb_zones==0)a=-1;
for(i=1;i<nb_zones;++i)
for(i=1;i<nb_zones;i++)
{
d1=calcul_vitesse(p, r[i].rpos); // a chaque it?ration on calcule la distance entre la position actuelle et une zone dangeureuse
d1=calcul_distance(p, r[i].rpos); // a chaque it?ration on calcule la distance entre la position actuelle et une zone dangeureuse
if(d1<(*d)){ // si cette distance est inf?rieure ? la distance d calcul?e,on remplace d par cette nouvelle distance
(*d)=d1;
a=i; // a prend la valeur de l'indice correspondant ? cette zone dangereuse
......
{
/*// Position a={0.0,0.0};
//int a;
Position p;
//p=&a;
static int cpt=0;
cpt++;
......
if(decode_trame(trame,&p))
{
printf("latitude:%f longitude:%f \n", p.latitude,p.longitude);
}
Position p1={45.750000,3.11006};
float d;
int a;
}*/
//Position p1={45.750000,3.11006};
float d,vitesse; //d=distance
int a,b;
int nb_zones=4;
a=distance_a_la_plus_proche_zone(p1,zones,nb_zones,&d);
printf("%d",a); */
Position p;
b=decode_trame(trame,&p);
if(b==1){ // si la trame est valide
printf("%s\n", trame); // on affiche juste pour v?rifier que la trame est valide
a=distance_a_la_plus_proche_zone(p,zones,nb_zones,&d); // on recupere l'indice de la zone dangereuse et la distance entre la zone et la position actuelle
vitesse=calcul_vitesse(p,zones[a].rpos); // on calcule la vitesse
if(d>680 && vitesse>2464.89){ // 680=seuil de la distance et 2464.89=seuil dela vitesse
printf("alarme=on\n"); // si les conditions sont respect?es alarme=on
printf("distance: %f ", d);
printf("vitesse;%f\n",vitesse);
}else{
printf("alarme=off\n"); // sinon alarme=off
}
}
}
//Ajouter vos tests unitaires dans cette fonction.
......
printf ("Erreur Test unitaire calcul_vitesse.\n");
exit(-1);
}
if(distance_a_la_plus_proche_zone(p1,zones,nb_zones,&d)!=0){ //test distance_a_la_plus_proche (prise en compte de l'erreur)
if(distance_a_la_plus_proche_zone(p1,zones,nb_zones,&d)!=2){ //test distance_a_la_plus_proche (prise en compte de l'erreur)
printf ("Erreur Test unitaire calcul_distance_plus_proche.\n");
exit(-1);
}

Formats disponibles : Unified diff