
Envoyé par
GuJman
Je ne suis toujours pas sure de comprendre ton probleme mais je dirais Case ...
Une petite fonction qui transforme d'abord l'age en une categorie (<20 ans : cat=0 ; 20 a 25 : cat=1 etc ...) et tu peut faire un case sur le resultat ...
Attention, on n'est pas loin d'une bourde...
- Le switch .. case est très limité en C. Pas d'intervalle, juste un empilement de quelques case, et pas d'intevalle ouvert du tout. En fait, c'est parfait pour fonctionner conjointement à une enum, que la liste des cas porte ou non ce nom. En revanche, dans ce cas, ce sera toujours un peu plus performant que les suites if .. else if ..else. Et le temps ne dépendra peut-être pas du résultat du test, à cause de l'adressage paramétré vers les case et default (ce sont des label). Il y a contrôle de cohérence (pas deux fois le même case) par le compilateur.
- La séquence bien rigoureuse "if -- else if -- else if ...... else" est facile et sûre à écrire, et à lire. A condition d'indenter par exemple:
1 2 3 4 5 6 7 8 9 10 11
| if condition1{
/* ... */
} else if condition2{
/* ... */
} else if condition3{
/* ... */
} else if condition4{
/* ... */
} else {
/* ... */
} |
et en espérant que l'éditeur ou l'outil de formatage respectera.
En revanche, même dans les mêmes conditions, avec les mêmes "cas", ce n'est pas le même algorithme que le switch .. case. Le traitement des conditions est séquentiel. Dans le cas où on tombe sur default / else final "presque toujours", ce sera peu performant. Mais ça permettra tous les intervalles et autres comparaisons évoluées, avec des % (modulo) par exemple.
A titre personnel, j'évite le switch .. case sauf de façon presque automatique lié à une enum, et encore.
Ah, la bourde: c'est de bien montrer les limitations du switch .. case en le faisant précéder par une "catégorisation" qui se fera à base de ... if -- else if ... 
Sinon une methode avec un tableau peut etre avantageuse ... Les colonnes representent des tranches d'ages et les lignes des destinations ...
Il y a plusieurs methodes ...
Ou un truc bien crade genre:
reduc = 5.0 * (age <= 20) + 5.0 * (age <=25) + 10 * (age <= 30);
20% jusqu'à 20ans, 15% entre 20 et 25 ans et 10% entre 25 et 30 ans
Partager