Révision 353
Ajouté par Yaye Oumy NDONG il y a presque 3 ans
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
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