Home
Browsez les 647 exemples
Téléchargez les 647 exemples
Téléchargez des chapitres
Achetez sur amazon.fr

Niveau: Débutant/Intermédiaire
ISBN-2-84177-339-6
50 Euros

Exemple 14-50 extrait du chapitre Les mécanismes utilisables dans C#


Exemple 14-49<     > Exemple 15-1


Cet exemple peut être compilé avec la ligne de commande:
csc.exe /target:exe Exemple_14_50.cs
Erreurs: 0 Avertissements: 0
Remarque:


Exemple_14_50.cs
using System;
using System.Collections.Generic;
class Program {
   static public IEnumerable<int> PipelineIntRange(int begin, int end){
      System.Diagnostics.Debug.Assert(begin < end);
      for (int = begin; i <= end; i++)
         yield return i;
   }
   static public IEnumerable<int> PipelinePrime(IEnumerable<int> input){
      using (IEnumerator<int> e = input.GetEnumerator()){
         e.MoveNext();
         int premier = e.Current;
         // Le premier nombre obtenu est forcément un premier.
         Console.WriteLine(premier);
         if (premier != 0){
            while (e.MoveNext()){
               // Elimine tous les multiples de premier.
               if (e.Current % premier != 0)
                  yield return e.Current;
            }
         }
      }
   }
   const int = 100;
   static void Main() {
      // Applique la formule de Gauss/de la Vallée Poussin 
      // pour obtenir le nombre d'itérateur.
      int N_PREMIER = (int)Math.Floor( ((double)N)/Math.Log(N) );

      // Produit un pipeline de N_PREMIER PipelinePrime 
      // chainé avec un PipelineIntegerRange.
      // Chaque appel à PipelinePrime produit un itérateur.
      List<IEnumerable<int>> list = new List<IEnumerable<int>>();
      list.Add(PipelinePrime( PipelineIntRange(2, N)) );
      forint i=1 ; i<N_PREMIER ; i++ )
         list.Add( PipelinePrime(list[i-1]) );

      // Traverse toutes les valeurs du dernier itérateur dans la chaine
      // afin de provoquer la cascade des calculs.
      foreach int in list[N_PREMIER-1]);
   }
}	
Copyright Patrick Smacchia 2006 2007