Cardinal d’un ensemble

L’algorithme cardinal prend un ensemble en entrée et renvoie le nombre d’éléments. Plusieurs versions de cet algorithme sont proposées en fonction du modèle de parcours de choisi.

Parcours dans un ensemble avec itération conditionnelle

cardinal -> Entier
   ensemble >- [1 2 3]
   somme <- 0
   Premier(ensemble)
   Enumerer ensemble
      somme <- somme + 1
      Suivant(ensemble)
   Fin
   <- somme
Fin

Algorithme générique, on compte les éléments d’un ensemble quelque soit le type des éléments de l’ensemble

Schema

cardinal element Ensemble -> Entier 
   somme <- 0
   Premier(ensemble)
   Enumerer ensemble
      somme <- somme + 1
      Suivant(ensemble)
   Fin
   <- somme
Fin

Swift

func cardinal<Element>(_ ensemble: Ensemble<Element>) -> Int {
   var somme = 0
   Premier(ensemble)
   while Enumeration(ensemble) {
      somme = somme + 1
      Suivant(ensemble)
   }
   return somme
}

Parcours sur ensemble itérable

Une autre version de cet algorithme est rendue possible par le fait que le type Ensemble est itérable ce qui permet une écriture plus simple. Un itérable est une séquence d’éléments que l’on va parcourir sans expression conditionnelle. La boucle de parcours de l’ensemble est une instruction itérative sur un ensemble dit itérable.

Schema

cardinal ensemble Ensemble -> Entier
   somme <- 0
   ensemble
      somme <- somme + 1
   Fin 
   <- somme
Fin

Syntaxe sur une ligne et parcours indexé. PremierIndex et DernierIndex sont des primitives du langage Schema.

cardinal ensemble Ensemble -> Entier
   somme <- 0
   PremierIndex(ensemble) -> DernierIndex(ensemble) somme <- somme + 1
   <- somme
Fin

Swift

func cardinal <Element>(_ ensemble: Ensemble<Element>) -> Int {
   var somme = 0
   for _ in ensemble {
      somme = somme + 1
   }
   return somme
}
func cardinal <Element>(_ ensemble: Ensemble<Element>) -> Int {
   var somme = 0
   for _ in PremierIndex(ensemble)...DernierIndex(ensemble) { somme = somme + 1 }
   return somme
}

Parcours par intervalle sur ensemble indexé

Schema

cardinal ensemble Ensemble -> Entier
   somme <- 0
   PremierIndex(ensemble) -> DernierIndex(ensemble)
      somme <- somme + 1
   Fin
   <- somme 
Fin

Swift

func cardinal <Element>(_ ensemble: Ensemble<Element>) -> Int {
   var somme = 0
   for _ in PremierIndex(ensemble)...DernierIndex(ensemble) {
      somme = somme + 1
   }
   return somme
}

func cardinal <Element>(_ ensemble: Ensemble<Element>) -> Int {
   var somme = 0
   for _ in PremierIndex(ensemble)...DernierIndex(ensemble) { somme = somme + 1 }
   return somme
}

Parcours récursif

Schema

cardinal ensemble Ensemble -> Entier
   Si Dernier(ensemble)
      <- 0
   Sinon
      Suivant(ensemble)
      <- 1 + cardinal(ensemble)
   Fin
Fin

Swift

func cardinal <Element>(_ ensemble: Ensemble<Element>) -> Int {
   if Dernier(ensemble) { 
      return 0
   } else { 
      Suivant(ensemble)
      return 1 + cardinal(ensemble)
   }
}

copyright A rchitectures A pplicatives A vancées A3-Soft

mathAlgo