Advertisement
Layvu

PracticeSeminar

Feb 20th, 2023 (edited)
33
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 2.50 KB | None | 0 0
  1. using System;
  2. using System.Collections;
  3. using System.Collections.Generic;
  4. using System.Linq;
  5.  
  6. namespace ConsoleApplication1
  7. {
  8.     internal class Program
  9.     {
  10.         public static void Main()
  11.         {
  12.             Console.WriteLine("- Exponential -");
  13.             foreach (var item in new Exponential().Take(4))
  14.             {
  15.                 Console.WriteLine(item);
  16.             }
  17.             Console.WriteLine("ElementGenerationsCount: " + Exponential.ElementGenerationsCount);
  18.            
  19.             Console.WriteLine("- Exponential with changes -");
  20.             foreach (var item in Test( new Exponential().Take(4)))
  21.             {
  22.                 Console.WriteLine(item);
  23.             }
  24.             Console.WriteLine("ElementGenerationsCount: " + Exponential.ElementGenerationsCount);
  25.         }
  26.  
  27.         static IEnumerable<int> Test(IEnumerable<int> sequence)
  28.         {
  29.             // генерация новых элеменов не происходит
  30.             var enumerator = sequence.GetEnumerator();
  31.             while (enumerator.MoveNext())
  32.             {
  33.                 var item = enumerator.Current;
  34.                 item += 1; // изменяем значение последовательности
  35.                 yield return item;
  36.             }
  37.         }
  38.     }
  39.  
  40.     public class Exponential : IEnumerable<int>
  41.     {
  42.         public Exponential() { ElementGenerationsCount = 0; }
  43.        
  44.         public static int ElementGenerationsCount { get; private set; }
  45.  
  46.         public IEnumerator<int> GetEnumerator()
  47.         {
  48.             var value = 1;
  49.             while (true)
  50.             {
  51.                 ElementGenerationsCount++;
  52.                 yield return value;
  53.                 value *= 2;
  54.             }
  55.         }
  56.  
  57.         IEnumerator IEnumerable.GetEnumerator()
  58.         {
  59.             return GetEnumerator();
  60.         }
  61.     }
  62.    
  63.     public class Fibonacci : IEnumerable<int>
  64.     {
  65.         public IEnumerator<int> GetEnumerator()
  66.         {
  67.             var currentValue = 1;
  68.             var previousValue = 1;
  69.             yield return currentValue;
  70.             yield return previousValue;
  71.             while (true)
  72.             {
  73.                 var newValue = currentValue + previousValue;
  74.                 previousValue = currentValue;
  75.                 currentValue = newValue;
  76.                 yield return currentValue;
  77.             }
  78.         }
  79.  
  80.         IEnumerator IEnumerable.GetEnumerator()
  81.         {
  82.             return GetEnumerator();
  83.         }
  84.     }
  85. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement