Пример #1
0
        //---------------------------------------------------
        /// <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);
        }
Пример #2
0
        //---------------------------------------------------
        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);
        }