Bonjour,
En définissant une table ordonnée
static const struct { int finMois; int finJour; const char*nom } Zodiaques[]= {{1,21,"Sagittaire"},{2,20,"Capricorne"},{3,19,"Verseau"},{4,20,"Poissons"},{5,20,"Bélier"},{6,21,"Taureau"},{7,21,"Gémeaux"},{8,22,"Cancer"},{9,22,"Lion"},{10,22,"Vierge"},{11,22,"Balance"},{12,22,"Scorpion"}};
Que l'on parcourt
1 2 3 4 5 6 7 8
| const char* signe_d_apres_date( int jour , int mois )
{
for ( auto& sgn : Zodiaques ) {
if ( mois < sgn.finMois || ( mois == sgn.finMois && jour <= sgn.finJour ) )
return sgn.nom;
}
return Zodiaques[0].nom; // gestion particulière du sagittaire à cheval sur la fin d'année
} |
On évite la recopie de constantes qui ne devraient être testée qu'un fois.
Pour avoir ce code en C, seule la ligne du for est à reprendre.
Partager