Eviter des "if" répétitifs
Veillard
Membre
Bonjour à tous
Existe-t-il une méthode permettant d'éviter une série de if / else if répétitifs comme ceci :
Je trouve ça un peu lourd.
Existe-t-il une méthode permettant d'éviter une série de if / else if répétitifs comme ceci :
if (ppO2 <= 0.62)<br /> sncClock = 0.14 * time;<br /> else if (ppO2 > 0.62 && ppO2 <= 0.64)<br /> sncClock = 0.15 * time;<br /> else if (ppO2 > 0.64 && ppO2 <= 0.66)<br /> sncClock = 0.16 * time;<br /> else if (ppO2 > 0.66 && ppO2 <= 0.68)<br /> sncClock = 0.17 * time;<br /> else if (ppO2 > 0.68 && ppO2 <= 0.72)<br /> sncClock = 0.18 * time;<br /> else if (ppO2 > 0.72 && ppO2 <= 0.74)<br /> sncClock = 0.19 * time;<br /> else if (ppO2 > 0.74 && ppO2 <= 0.76)<br /> sncClock = 0.20 * time;<br /> else if (ppO2 > 0.76 && ppO2 <= 0.78)<br /> sncClock = 0.21 * time;<br /> else if (ppO2 > 0.78 && ppO2 <= 0.80)<br /> sncClock = 0.22 * time;<br /> else if (ppO2 > 0.80 && ppO2 <= 0.82)<br /> sncClock = 0.23 * time;<br /> else if (ppO2 > 0.82 && ppO2 <= 0.84)<br /> sncClock = 0.24 * time;<br /> else if (ppO2 > 0.84 && ppO2 <= 0.86)<br /> sncClock = 0.25 * time;<br />etc...<br />
Je trouve ça un peu lourd.
Connectez-vous ou Inscrivez-vous pour répondre.
Réponses
switch (ppO2Int) {
case 63:
case 64:
..../....
break;
case 65:
case 66:
..../....
etc ? ???
[Fichier joint supprimé par l'administrateur]
Sinon autre possibilité, tu décomposes ta fonction en plusieurs 'sous fonctions", par exemple une partie horizontale dans un premier temps (pp02<0.62), puis du linéaire, puis...
[Fichier joint supprimé par l'administrateur]
C'est vrai que ça aurait été domage de signer une bétise ici qui aurait gâché ta brillante intervention
j'interviens un peu comme un chacha sur la soupe, mais un détail me chiffonne.
Apparemment, Favouille, tu veux faire de l'interpolation, et un polynôme de degré élevé te convient. Parce que oui, c'est vrai, un polynôme de degré assez élevé peux passer par tous les points de contrôle; par contre, plus le degré augmente, et plus le polynôme fait n'importe quoi entre les points (grandes variations). Il faudrait donc que tu vérifies si ton polynôme est bon, en le traçant avec une subdivision plus fine que celle de tes points de contrôle.
Vu la tête de la courbe, j'aurais pensé, comme Renaud, à une exponentielle, mais un polynôme devrait suffire avec une "minimisation des moindres carrés". La "minimisation des moindres carrés" est une méthode qui te donnerait les coefficients d'un polynôme qui passerait "à peu près" par les points, mais pas exactement. D'un côté, il y a donc une erreur, mais elle est bien minimisée sur un certain critère. L'avantage, c'est que la courbe obtenue est bien lisse.
+
Chacha
Merci à tous
[tt]
b=0.14;
c=0.0;
for (a=0.62;a<1.0;a=a+0.02)
{
if (ppO2>a && pp02<=a+0.02)
{
sncClock=(b+c)*time;
a=1.0;
}
c=c+0.01;
}
[/tt]
Seulement ici, il n'y a qu'une partie de la courbe qui est linéaire.