/// <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; }
/// <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); }
/// <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); }
/// <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); }
/// <summary> /// Constructor for TimeGCDAlgorithmDecorator class /// </summary> /// <param name="decoratee"></param> public TimeGCDAlgorithmDecorator(IGcdAlgorithm decoratee) : base(decoratee) { }
protected GcdAlgorithmDecorator(IGcdAlgorithm decoratee) { _decoratee = decoratee; }
/// <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)); }