//конструктор
 public PracticalDistributionFunction(Sampling sampling)
 {
     Sampling Ranged = sampling.RangedSampling(); //упорядоченная выборка
     double P = (double)1 / Ranged.GetVolume();//частота одной точки
     Values.Add(new Point(Ranged.GetValue(0), P)); //добавляем первую точку к функции
     Ranged.DeletValue(Ranged.GetValue(0)); //удаляем её из выборки
     while (Ranged.GetVolume() != 0) //пока в выборке есть точки
     {
         double TemproraryProbability = Values[Values.Count - 1].GetP + P;
         if (Values[Values.Count - 1].GetX == Ranged.GetValue(0))
             //если точка имеет то же значение что и последняя в функции
         {
             Values[Values.Count - 1] = new Point(Ranged.GetValue(0), TemproraryProbability);
             //увеличиваем значение функции в данной точке
         }
         else
         {
             Values.Add(new Point(Ranged.GetValue(0), TemproraryProbability));
             //иначе добавляем к функции новую точку
         }
         Ranged.DeletValue(Ranged.GetValue(0)); //удаляем текущую точку из выборки
     }
 }
        private int Volume; //объём выборки

        #endregion Fields

        #region Constructors

        //конструктор
        public PirsonCriterion(Sampling sampling,int intervals)
        {
            Intervals = intervals;
            ranged = sampling.RangedSampling();//упорядоченная выборка
        }