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