Projet

Général

Profil

« Précédent | Suivant » 

Révision 580

Ajouté par albest il y a presque 4 ans

Optimisation du code pour le clavier matricé et des fonctions des premières séances

Voir les différences:

main.c
int decode_int(char c){ //Cette fonction renvoie la valeur decimale associ?e ? un caract?re donn? en param?tre compris entre '0' et '9' et renvoie -1 sinon.
int val = c - '0';
if (val<0 || val>9){
if (val<0 || val>9){ //**En premier faire le test pour ne pas faire op?ration pour rien
val = -1;
}
return val;
......
}
float conv_lat(char * latitude){ //La fonction convertie la latitude en sexa en degr?.
float val = decode_nombre(latitude,4);
float val = decode_nombre(latitude,4); //* bof
float res = 0;
for (int i = 5; i < 9;i++){
val += (decode_int(latitude[i]))*pow(10,-i+4); //On replace chaque chiffre au bonne endroit (unit?, dizaine ...).
}
res = (int)(val/100);
res = (int)(val/100); //****
res += (val - res*100)/60;
return res;}
return res;
}
float conv_long(char * longitude){ //La fonction convertie la longitude en sexa en degr?.
float val = decode_nombre(longitude,5);
float val = decode_nombre(longitude,5); //**
float res = 0;
for (int i = 6; i < 10;i++){
val += (decode_int(longitude[i]))*pow(10,-i+5);
......
float conversion(char * chaine){ //Cette fonction convertie soit une latitude soit une longitude en degr?.
int cpt = 0;
while (chaine[cpt]!='\0'){
while (chaine[cpt]!='\0'){ //***, .
cpt++;
}
if (cpt == 9){
......
}
}
typedef struct {
typedef struct { //*
float latitude;
float longitude;
} Position;
int decode_trame(char * trame, Position *p){
char longi[10];
char longi[10]={'\0'}; //*** trame -> @ lati -> @
char lati[9];
int cpt = 0;
int i = 0;
......
while (trame[i] != '\0'){
if (trame[i] == ','){ //On compte le nombre de virgule.
cpt += 1;
i ++;
i += 1;
}
if (cpt == 2) { //On regarde si le nombre de virgule correspond ? 2, ie la latitude
lati[j] = trame[i]; //On stocke caract?re par caract?re pour isoler la latitude afin de la convertir.
j ++;
}
if (cpt == 4) { //On regarde si le nombre de virgule correspond ? 4, ie la longitude
longi[y] = trame[i]; //On stocke caract?re par caract?re pour isoler la longitude afin de la convertir.
longi[y] = trame[i];
y ++;
}
i ++;
i += 1;
}
p->latitude = conv_lat(lati);
p->latitude = conv_lat(lati); //***************** vous avez de la chance &trame[15], trame+15
p->longitude = conv_long(longi); //On stocke la latitude et la longitude convertie dans structure position.
return 1;
}
......
}
float calcule_vitesse(Position p_1, Position p_2){
return calcule_distance(p_1,p_2)*3600; //On calcul la vitesse avec la formule v=d/t avec t=1s.
return calcule_distance(p_1,p_2)*3600; //On calcul la vitesse (en km) avec la formule v=d/t avec t=1s.
}
typedef struct{
......
int distance_a_la_plus_poche_zone(Position p, Zone r[], int nb_zones, float *d){
int index = 0;
float distance = calcule_distance(p, r[0].rpos); //On initialise une distance pour pouvoir ensuite la comparer et chercher le minimum.
*d = calcule_distance(p, r[0].rpos); //On initialise une distance pour pouvoir ensuite la comparer et chercher le minimum.
for (int i = 1; i<nb_zones; i++){ //On parcours la table de zone dangereuse.
if (calcule_distance(p,r[i].rpos) < distance){
if (calcule_distance(p,r[i].rpos) < *d){
index = i;
distance = calcule_distance(p,r[i].rpos);
*d = calcule_distance(p,r[i].rpos);
}
}
*d = distance;
return index;
}
Position pos_prec;
//Fonction ? modifier !!!!!
void traitement(char * trame){
Position pos;
int alarme;

Formats disponibles : Unified diff