Генерация последовательности с IEnumerator - C#

Узнай цену своей работы

Формулировка задачи:

Приветствую! Необходимо реализовать генерацию последовательности xn=1/yn до тех пор, пока |x|> e(задается заранее). Сделать это с реализацией интерфейсов IEnumerable/IEnumerator. При реализации программ запрещено использовать стандартные классы коллекций библиотеки .NET. Я сделал класс для реализации интерфейсов, но не могу сообразить, как сделать реализацию рассчета - у меня х подается как массив, а количество элементов изначально неизвестно, тк зависит от параметра е. Помогите реализовать функцию для рассчета хn, пожалуйста! Кусок кода с классом:
Листинг программы
  1. class RowEnumerator : IEnumerator,IEnumerable
  2. {
  3. public double[] x;
  4. int pos = -1;
  5. public RowEnumerator(double[] xo)
  6. {
  7. x = new double[xo.Length];
  8. for (int i = 0; i < xo.Length; i++)
  9. {
  10. x[i] = xo[i];
  11. }
  12. }
  13. public bool MoveNext()
  14. {
  15. pos++;
  16. return (pos < x.Length);
  17. }
  18. public void Reset()
  19. {
  20. pos = -1;
  21. }
  22. public double Current
  23. {
  24. get
  25. {
  26. try
  27. {
  28. return x[pos];
  29. }
  30. catch (IndexOutOfRangeException)
  31. {
  32. throw new InvalidOperationException();
  33. }
  34. }
  35. }
  36. object IEnumerator.Current
  37. {
  38. get { return Current; }
  39. }
  40. public IEnumerator GetEnumerator()
  41. {
  42. return GetEnumerator();
  43. }
  44. }

Решение задачи: «Генерация последовательности с IEnumerator»

textual
Листинг программы
  1. class FuncEnumerable : IEnumerable<double>
  2. {
  3.     private readonly double _y, _e;
  4.     public FuncEnumerable(double y, double e)
  5.     {
  6.         _y = y;
  7.         _e = e;
  8.     }
  9.    
  10.     public IEnumerator<double> GetEnumerator()
  11.     {
  12.         return new FuncEnumerator(_y, _e);
  13.     }
  14.    
  15.     IEnumerator IEnumerable.GetEnumerator()
  16.     {
  17.         return GetEnumerator();
  18.     }
  19.    
  20.     class FuncEnumerator : IEnumerator<double>
  21.     {
  22.         private int _n;
  23.         private readonly double _y, _e;
  24.         public double Current { get; private set; }
  25.        
  26.         public FuncEnumerator(double y, double e)
  27.         {
  28.             _y = y;
  29.             _e = e;
  30.             Current = double.MaxValue;
  31.         }
  32.        
  33.         object IEnumerator.Current
  34.         {
  35.             get { return Current; }
  36.         }
  37.        
  38.         public void Reset()
  39.         {
  40.             _n = 0;
  41.             Current = double.MaxValue;
  42.         }
  43.        
  44.         public bool MoveNext()
  45.         {
  46.             if (Math.Abs(Current) < _e) return false;
  47.            
  48.             _n++;
  49.             Current = 1/Math.Pow(_y, _n);
  50.             return !(Math.Abs(Current) < _e);
  51.         }
  52.        
  53.         void IDisposable.Dispose()
  54.         {
  55.         }
  56.     }
  57. }

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

5   голосов , оценка 3.6 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы