Le rôle de l’algorithme est avant tout de présenter la logique aboutissant au résultat final du problème proposé. Il est généralement présenté en pseudo langage, nous utiliserons ici le langage algorithmique Schema. Schema n’est pas ce que l’on appelle communément un pseudo-langage, mais au contraire un langage formel pour exprimer un algorithme de façon précise et non ambiguë et pouvant être traduit de façon systématique sans modifications dans un langage de programmation.
Pourquoi apprendre l’algorithmique
- Acquérir de bons réflexes face à un problème à résoudre.
- Spécifier un problème précisément et a priori
- Exprimer et décrire un algorithme
- Apprendre les bonnes pratiques pour commencer la programmation
Le langage algorithmique Schema
Pour représenter les étapes nécessaires à la résolution d’un problème devant être exécuté sur un calculateur, on utilisera le langage Schema qui a été conçu pour écrire des algorithmes dont la syntaxe, la grammaire et le vocabulaire ne font pas référence à un langage de programmation particulier.
Ci-après en aperçu en d’un algorithme Schema et ses traductions en Swift et Python, de calcul de la factorielle d’un nombre entier, sous une forme impérative( les instructions sont exécutées en séquence ) et récursive ( pour exécuter les instructionss, un algorithme récursif s’appelle lui-même).
On notera que dans la traduction de l’algorithme factorielle certaines instructions ou mots réservés ne font pas partie du vocabulaire de Swift, ainsi la fonction SuperOuEgal, Mul, MoinsUn sont des fonction définies dans une l’infrastructure dédiée au langage Schema. On remarquera que la version en Swift est optimisée pour produire un programme purement Swift indépendant du vocabulaire de Schema
Schema algorithme
factorielle n Entier -> Entier
resultat <- 1
nombre <- n
SuperOuEgal(nombre , 1)
resultat <- Mul(resultat, nombre )
nombre <- MoinsUn(nombre)
Fin
<- resultat
Fin
Fonction Swift
func factorielle (_ n: Int) -> Int { var resultat = 1 var nombre = n while SuperOuEgal(nombre,1) { resultat = Mul(resultat,nombre) nombre = MoinsUn(nombre) } return resultat }
Fonction optimisée Swift
func factorielle (_ n: Int) -> Int { var resultat = 1 var nombre = n while nombre > 1 { resultat = resultat * nombre nombre -= 1 } return resultat }
Fonction Python
def factorielle (n): resultat = 1 while n > 1 : resultat *= n n -= 1 return resultat
Algorithme Schema récursif
factorielle nombre Entier -> Entier nombre = 1 Alors <- 1 Sinon <- nombre * factorielle(nombre - 1 ) Fin Fin
Traduction Swift
func factorielle (_ nombre: Int) -> Int { if nombre == 1 { return 1 } else { return nombre * factorielle(nombre - 1) } }
Traduction Python
def factorielle(nombre): if nombre == 1: return nombre else: return nombre * factorielle(nombre - 1)
Processus de création d’un programme
Il se résume en 3 étapes:
- Conception de l’algorithme avec un langage algorithmique
- Traduction dans le langage de programmation choisi, manuellement ou à l’aide d’un traducteur
- Revue et optimisation du programme généré en tenant compte des spécificités du langage de programmation.
En Résumé
Le langage algorithmique Schema permet de décrire un algorithme comme une étape préalable à l’écriture d’un programme informatique. Il décrit le résultat de l’analyse d’un problème (énoncé en français) dans un langage formel.
Le langage algorithmique Schéma proposé n’est pas un compromis entre un langage naturel et un langage de programmation. Il permet la génération rigoureuse du code Swift, d’un schéma d’algorithme à l’aide d’un traducteur écrit en langage Swift.
copyright A rchitectures A pplicatives A vancées A3-Soft