//--------------------------------------------------- /// <summary> /// Vérifie que les valeurs de l'entête sont compatibles avec la méthode /// demandée /// </summary> private CResultAErreur VerifieEnteteAvecMethode(object[] valeursEntete, MethodeResolutionValeurMatrice methode) { CResultAErreur result = CResultAErreur.True; if (methode == MethodeResolutionValeurMatrice.ExactOuValeurDefaut || valeursEntete.Length == 0) { return(result); } int nSensFixe = 1; double dValPrec = (double)valeursEntete[0]; for (int nIndex = 1; nIndex < valeursEntete.Length; nIndex++) { int nSens = 0; if ((double)valeursEntete[nIndex] < dValPrec) { nSens = -1; } else { nSens = 1; } if (nIndex == 1) { nSensFixe = nSens; } if (nSensFixe != nSens) { string strErr = CUtilSurEnum.GetNomConvivial(methode.ToString()); result.EmpileErreur(I.T("The resolution method '@1' imposes a regulary progression of values|30056", strErr)); } } return(result); }
//--------------------------------------------------- public int GetIndexAPrendreEnCompte( double dValeurCherchee, int nIndexMin, int nIndexMax, int nPosLigne, object[] valeurs, MethodeResolutionValeurMatrice methode) { int nIndex = -1; switch (methode) { case MethodeResolutionValeurMatrice.Inferieur: if (nIndexMin != -1 && nPosLigne <= 0) { nIndex = nIndexMin; } else { nIndex = nIndexMax; } break; case MethodeResolutionValeurMatrice.Superieur: if (nIndexMax != -1 && nPosLigne >= 0) { nIndex = nIndexMax; } else { nIndex = nIndexMin; } break; case MethodeResolutionValeurMatrice.ProcheInferieur: case MethodeResolutionValeurMatrice.ProcheSuperieur: if (nIndexMin == -1) { nIndex = nIndexMax; } if (nIndexMax == -1) { nIndex = nIndexMin; } double dValMin = (double)valeurs[nIndexMin]; double dValMax = (double)valeurs[nIndexMax]; double dEcartMin = Math.Abs(dValeurCherchee - dValMin); double dEcartMax = Math.Abs(dValeurCherchee - dValMax); if (dEcartMin < dEcartMax) { nIndex = nIndexMin; } else if (dEcartMin > dEcartMax) { nIndex = nIndexMax; } else if (methode == MethodeResolutionValeurMatrice.ProcheInferieur) { nIndex = nIndexMin; } else { nIndex = nIndexMax; } break; } return(nIndex); }