Projet

Général

Profil

« Précédent | Suivant » 

Révision 309

Ajouté par Pape Demba AMAR il y a environ 3 ans

implémentation de la fonction decode trame et test

Voir les différences:

main.c
return 0;
}
//....................................SEANCE 2....................................................//
typedef struct { // Structure Position
float latitude;
float longitude;
} Position;
typedef struct { // Structure Zone
Position rpos;
float vitmax;
} Zone;
Zone zones[] = { //Pour nos tests on cree une zone.
{{44.7887762, -3.012}, 50}, // Description de la premiere zone
{{44.7891220, -3,013}, 70},
};
Position decode_trame(char * trame){ //On va decoder la trame et l'afficher
if (trame_cmp(trame, "GPGGA")!= 1){ //On regarde si on est au bon format.
printf("Cette trame n'est pas au bon format.");
}
else{ //Si c'est le cas on continue
//On definit notre structure
Position position_trame; //Initialisation.
char latitude[10];
char longitude[11];
int n = 0;
int i = 0;
int j = 0;
int k = 0;
while (trame[i] != '\0'){ //On veut r?cup?rer les diff?rentes informations suivant le mod?le pr?cis de trame.
if (trame[i] == ','){ //On rep?re les virgules
n = n + 1;
i = i + 1;
}
if (n == 2) { //Apr?s virgule 2 on a la latitude
latitude[j] = trame[i]; //On r?cup?re la latitude
j = j + 1;
}
if (n == 4) { //Apr?s virgule 4 on a la longitude
longitude[k] = trame[i]; //On stocke caract?re par caract?re pour isoler la longitude afin de la convertir.
k = k + 1;
}
i ++;
}
latitude[j] = '\0'; //On ferme bien la chaine
longitude[k] = '\0';
position_trame.latitude = conv_lattitude(latitude);
position_trame.longitude = conv_longitude(longitude); //On stocke la latitude et la longitude convertie dans structure position.
return position_trame;
}
}
float calcule_distance(Position position_trame1, Position position_trame2){
//On utilise la formule en connaissant le rayon de la terre.
float x = (position_trame2.longitude - position_trame1.longitude) * cos( (position_trame1.latitude + position_trame2.latitude) / 2);
float y = position_trame2.latitude - position_trame1.latitude;
float z = sqrt(x*x + y*y);
float k = 1.852 * 60;
float d = k * z;
return d;
}

Formats disponibles : Unified diff