/// <summary>
 /// Initializes a new instance of the <see cref="GcdAlgorithmWithTimePerformance"/> class.
 /// </summary>
 /// <param name="algorithm">Selected gcd algorithm.</param>
 /// <param name="timeCalculator">Util for calculating time.</param>
 public GcdAlgorithmWithTimePerformance(IGcdAlgorithm algorithm, ITimeCalculator timeCalculator)
 {
     algorithm.CheckOnNull();
     timeCalculator.CheckOnNull();
     this.timeCalculator = timeCalculator;
     this.algorithm      = algorithm;
 }
Exemple #2
0
        /// <summary>
        /// Вычисляет НОД целых чисел из массива numbers, по заданному алгоритму. Измеряет время выполнения операции.
        /// </summary>
        /// <param name="algorithm">Задает алгоритм вычисления НОД.</param>
        /// <param name="time">Время выполнения операции.</param>
        /// <param name="numbers">Массив чисел для вычисления НОД.</param>
        /// <returns>Значение НОД для заданных чисел.</returns>
        public static int Calculate(IGcdAlgorithm algorithm, out long time, params int[] numbers)
        {
            if (numbers.Length < 2)
            {
                throw new ArgumentException("Входных чисел должно быть 2 или больше.");
            }

            Timer timer = new Timer();

            timer.Start();
            int result = algorithm.Calculate(numbers[0], numbers[1]);

            if (numbers.Length > 2)
            {
                for (int i = 2; i < numbers.Length; i++)
                {
                    result = algorithm.Calculate(result, numbers[i]);
                }
            }

            timer.Stop();
            time = timer.GetTime();

            return(result);
        }
Exemple #3
0
        /// <summary>
        /// Вычисляет НОД двух целых чисел, по заданному алгоритму. Измеряет время выполнения операции.
        /// </summary>
        /// <param name="algorithm">Задает алгоритм вычисления НОД</param>
        /// <param name="time">Время выполнения операции.</param>
        /// <param name="first">Первое число для вычисления</param>
        /// <param name="second">Второе число для вычисления</param>
        /// <returns>Значение НОД для заданных чисел</returns>
        public static int Calculate(IGcdAlgorithm algorithm, out long time, int first, int second)
        {
            Timer timer = new Timer();

            timer.Start();
            int result = algorithm.Calculate(first, second);

            timer.Stop();
            time = timer.GetTime();
            return(result);
        }
        /// <summary>
        /// Calculates gcd and time of algorithm's execution.
        /// </summary>
        /// <param name="gcdAlgorithm">Gcd algorithm.</param>
        /// <param name="first">First number.</param>
        /// <param name="second">Second number.</param>
        /// <param name="timeCalculator">Util for time calculation.</param>
        /// <param name="timeForCalculations">Result time of algorithm's execution.</param>
        /// <returns></returns>
        public static int CalculateGcdWithTime(this IGcdAlgorithm gcdAlgorithm, int first, int second,
                                               ITimeCalculator timeCalculator, out long timeForCalculations)
        {
            gcdAlgorithm.CheckOnNull();
            timeCalculator.CheckOnNull();
            timeCalculator.Start();
            int gcd = gcdAlgorithm.Calculate(first, second);

            timeCalculator.Stop();
            timeForCalculations = timeCalculator.TimeInMilliseconds;
            return(gcd);
        }
Exemple #5
0
        /// <summary>
        /// Вычисляет НОД целых чисел из массива numbers, по заданному алгоритму.
        /// </summary>
        /// <param name="algorithm">Задает алгоритм вычисления НОД</param>
        /// <param name="numbers">Массив чисел для вычисления НОД</param>
        /// <returns>Значение НОД для заданных чисел</returns>
        public static int Calculate(IGcdAlgorithm algorithm, params int[] numbers)
        {
            if (numbers.Length < 2)
            {
                throw new ArgumentException("Входных чисел должно быть 2 или больше.");
            }

            int result = algorithm.Calculate(numbers[0], numbers[1]);

            if (numbers.Length > 2)
            {
                for (int i = 2; i < numbers.Length; i++)
                {
                    result = algorithm.Calculate(result, numbers[i]);
                }
            }

            return(result);
        }
Exemple #6
0
 /// <summary>
 /// Constructor for TimeGCDAlgorithmDecorator class
 /// </summary>
 /// <param name="decoratee"></param>
 public TimeGCDAlgorithmDecorator(IGcdAlgorithm decoratee) : base(decoratee)
 {
 }
Exemple #7
0
 protected GcdAlgorithmDecorator(IGcdAlgorithm decoratee)
 {
     _decoratee = decoratee;
 }
Exemple #8
0
 /// <summary>
 /// Вычисляет НОД двух целых чисел, по заданному алгоритму.
 /// </summary>
 /// <param name="algorithm">Задает алгоритм вычисления НОД</param>
 /// <param name="first">Первое число для вычисления</param>
 /// <param name="second">Второе число для вычисления</param>
 /// <returns>Значение НОД для заданных чисел</returns>
 public static int Calculate(IGcdAlgorithm algorithm, int first, int second)
 {
     return(algorithm.Calculate(first, second));
 }