Projet

Général

Profil

« Précédent | Suivant » 

Révision 270

Ajouté par mamoisan il y a presque 4 ans

SP TP2 plus que la fonction zone dangereuse et réctifier certaines fonctions

Voir les différences:

main.c
#include <stdlib.h>
#include <strings.h>
#include <math.h>
#include "trame.h"
#include "trame.h"
#define M_PI 3.14159265358979323846
//Trames de tests ? modifier si n?cessaire.
char * trames[]= {"$GPGSV,3,2,10,15,03,077,,18,04,041,42,19,85,271,,20,08,214,*7C",
......
return res;
}
int decode_nombre2(char * ch,int n)
{
int i;
int res=0;
for (i=0;i<n;i++)
{
res = 10*res + decode_int(ch[i]);
}
return res;
}
void test_decode_nombre(void)
{
if (decode_nombre("7541",2)!=75){
......
}
}
void test_decode_nombre2(void)
{
if (decode_nombre2("7541",2)!=75){
printf ("Erreur Test decode_nombre.\n");
exit(-1);
}
if (decode_nombre2("7541",3)!=754){
printf ("Erreur Test decode_nombre.\n");
exit(-1);
}
if (decode_nombre2("123",3)!=123){
printf ("Erreur Test decode_nombre.\n");
exit(-1);
}
if (decode_nombre2("987654321",2)!=98){
printf ("Erreur Test decode_nombre.\n");
exit(-1);
}
}
float latDMStoDec(char * lat_DMS)
{
float deg = decode_nombre(lat_DMS,2);
......
void test_latDMStoDec(void)
{
if (latDMStoDec("3723.2475")!= 37.387458){
printf ("Erreur Test decode_nombre.\n");
printf ("%f Erreur Test latDMStoDec.\n", latDMStoDec("3723.2475"));
exit(-1);
}
}
......
return latDMStoDec(coord);
}
}
typedef struct
{
float latitude;
float longitude;
} Position;
int decode_trame(char *trame, Position *p)
{
if(trame_cmp(trame,"GPGGA")==1)
{
char *lon;
char *lat;
int i;
for(i=0;i<=7;i++){
lat[i]=trame[i+17];
}
for(i=0;i<=8;i++){
lon[i]=trame[i+29];
}
p->latitude = latDMStoDec(*lat);
p->longitude = lonDMStoDec(*lon);
if((p->latitude>=0)&&(p->latitude<=90)){
if((p->longitude>=0)&&(p->longitude<=180)){
return 1;
} else{
return 0;
}
} else{
return 0;
}
} else {
return 0;
}
}
void test_decode_trame(void)
{
struct Position *p1;
if (decode_trame("$GPGLL,4545.6419,N,00306.6043,E,141921.00,A*04",p1)!= 0){
printf ("Erreur Test decode_trame.\n");
exit(-1);
}
struct Position *p2;
if (decode_trame("$GPGGA,141922.00,4545.1810,N,00306.6046,E,1,05,3.4,500.6,M,,M,,*74",p2)!= 1){
printf ("Erreur Test decode_trame.\n");
exit(-1);
} else {
struct Position *p3;
decode_trame("$GPGGA,141922.00,4545.1810,N,00306.6046,E,1,05,3.4,500.6,M,,M,,*74",p3);
//printf("longitude : %f \n latitude : %f \n",p3->latitude, p3->longitude);
}
}
float deg2rad(deg)
{
return deg * (M_PI/180);
}
float calcule_distance(Position p_1, Position p_2){
float lonP1 = deg2rad(p_1.longitude);
float lonP2 = deg2rad(p_2.longitude);
float latP1 = deg2rad(p_1.latitude);
float latP2 = deg2rad(p_2.latitude);
float r=6371;
float d = r * acos(sin(latP1)*sin(latP2)+cos(latP1)*cos(latP2)*cos(lonP1-lonP2));
return d;
}
float calcule_vitesse(Position p_1, Position p_2)
{
float d = calcule_distance(p_1, p_2);
return d*3600;
}
//Fonction ? modifier !!!!!
void traitement(char * trame)
......
test_decode_nombre();
test_decode_int();
test_latDMStoDec();
test_decode_nombre2();
}
// Ne pas modifier cette fonction

Formats disponibles : Unified diff