Laurent Dupont -
Université de Lorraine
avec ajout I. Iordanov (année 2017-18)
Algorithme : abstrait, démarche indépendante de l'ordinateur, du système d'exploitation
Programme : spécifique, version d'un algorithme liée à un langage de programmation, souvent dépendant du compilateur ou de l'interpréteur utilisé, de l'ordinateur et du système d'exploitation sur lesquels il est exécuté.
On distingue différents types de langages informatiques :
Autre classification des langages
Ce qui est possible :
Notre choix : javascript et php
Processus automatique
Algorithme : Hello world !
Début
afficher("bonjour le monde !")
Fin
Mots-cles :
• Algorithme
• Début
• Fin
Instructions :
• Afficher
qui prend un paramètre (ou argument) noté entre parenthèses
Constante litérales (ici du texte, une «chaîne de caractère») :
• "bonjour le monde !"
Algorithme : On essaie de calculer
Début
afficher("5 + 2 = 7")
Fin
Algorithme : On essaie de calculer
Début
5 + 2
afficher("Résultat ?")
Fin
Solution : les variables
Quelques exemples
toto | ok |
a25 | ok |
5a | invalide (commence par numéro) |
toto 2 | invalide (espace) |
toTo | ok |
toto! | invalide (caractère special) |
a | ok |
4 | invalide (commence par numéro) |
entier | invalide (nom d'un type prédéfini) |
Cela ne veut pas dire que ces variables n'ont pas de type ou qu'elles ne sont pas déclarées ! L'interpréteur est suffisamment intelligent pour deviner leur type. Pourtant, il est possible avoir des erreurs liées au type durant l'exécution.
Sans la notion de variable
Algorithme : Produit de deux entiers
Entrée : deux entiers
Sortie : un entier
Commentaire : algorithme de calcul du produit de deux entiers
Début
retourner(la multiplication du premier entier donné
en entrée par le deuxième)
Fin
Avec la notion de variable
Algorithme : Produit de deux entiers
Entrée : entier a, entier b
Sortie : entier
Commentaire : algorithme de calcul du produit de deux entiers
Début
retourner(a * b)
Fin
Algorithme : Produit de deux entiers
Entree : entier a, entier b
Sortie : entier
Commentaire : algorithme de calcul du produit de deux entiers
Début
entier c
c ← a * b
retourner(c)
fin
a | 5 |
b | 6 |
toto | "des caractères" |
|
|
|
|
chaîne question
question ← 'Qu\'est-ce que c\'est que ça ?'
a | ¬a |
v | f |
f | v |
Conjonction AND ∧
|
Disjonction OR ∨
|
Disjonction exclusive XOR ⊕
|
|||||||||||||||||||||||||||||||||||||||||||||
|
|
|
Plus précisément, elles permettent
Pas exactement la même chose que la gestion d'évènemments :
Si (condition) Alors
Partie instructions 1
Sinon
Partie instructions 2
Fsi
Algorithme : conditionnelle 1
Entrée :
Sortie :
Début
entier a
a ← lireEntier()
Si (a % 2 == 0) Alors
Afficher("la valeur de la variable a est paire")
Sinon
Afficher("la valeur de la variable a est impaire")
fsi
fin
Algorithme : conditionnelle 2
Entrée :
Sortie :
Début
entier a,b
a ← lireEntier()
b ← lireEntier()
Si (a >b) Alors
Afficher("le maximum est la première valeur lue : "+a)
Sinon
Afficher("le maximum est la seconde valeur lue : "+b)
fsi
fin
Algorithme : conditionnelle 3
Entrée :
Sortie :
Début
booleen a
a ← lireBooleen()
Si (a) Alors
Afficher("on est dans le vrai")
Sinon
Afficher("On a tout faux")
Fsi
Fin
Algorithme : conditionnelle 4
Entrée : chaine s
Sortie :
Début
Si (s=="bonjour") Alors
Afficher("merci")
Fsi
Fin
n != p
: évaluée à p == p + 3
: évaluée à a == b et
n != p
: évaluée à (a == b) et
(n!=p)
(a>b et n!=p) ou
(a<b et n==p)
Algorithme : ordre début
Entrée :
Sortie
Début
entier a, b;
a ← lireEntier();
b ← lireEntier();
Si (a < b) alors
afficher("a plus petit que b");
Sinon
Si (a > b) Alors
afficher("a plus grand que b");
Sinon
afficher("a et b sont égaux");
Fsi
Fsi
Pour compteur de m à n pas de p faire
Partie instructions
Fpour
Pour fois de 1 à 500 pas de 1 faire
afficher("Bonjour !")
Fpour
Exemples
Algorithme
Entrée :
Sortie :
Début
Entier compteur
Pour compteur de 1 à 500 faire
Afficher("*")
fpour
fin
Algorithme
Entrée :
Sortie :
Début
entier res,compteur
Pour compteur de 1 à 10 faire
res ← 7 * compteur
Afficher("7 * "+compteur+" = "+res)
Fpour
Fin
Exemples
Algorithme
Entrée :
Sortie :
Début
entier dernier,compteur
dernier ← lireEntier()
Pour compteur de 1 à dernier pas de 2 faire
Afficher(compteur)
fpour
fin
Algorithme
Entrée :
Sortie :
Début
entier dernier,compteur
dernier ← lireEntier()
Pour compteur de dernier à 1 pas de -2 faire
Afficher(compteur)
Fpour
Fin
Algorithme
Entrée :
Sortie :
Début
Entier compteur
Pour compteur de 1 à 10 pas de -2 faire
Afficher(compteur)
Fpour
Fin
Tant que (condition) Faire
Partie instructions
Fintantque
Un exemple qui ressemble à la boucle inconditionnelle
Algorithme
Entrée :
Sortie :
Début
entier dernier
dernier ← lireEntier()
Pour compteur de 1 à 10 pas de 1 faire
Afficher(compteur)
Fpour
Fin
Algorithme
Entrée :
Sortie :
Début
entier compteur
compteur ← 1
Tant que (compteur<=10) Faire
Afficher(compteur)
compteur ← compteur + 1
Fintantque
Fin
Chaine s
s ← "bonjour"
afficher(charAt(s,3))
Chaine s
s ← "bonjour"
afficher(longueur(s))
Chaine s
s ← "bonjour"
afficher(sousChaine(s,1,3))
On se donne une chaîne de caractères...
⇒ parcours de chaîne de caractères à l'aide de boucles...
Dans ce cas, la partie instruction est répétée indéfiniment
Faire
Partie instruction
Tant que (condition)
entier carte1, ... carte13
Pour i de 1 a 13 Faire
utiliser la carte i ?
fpour
5 | 7 | 8 |
t[0] | t[1] | t[2] |
type t[n]
où n est soit un entier, soit
une expression dont le résultat
est un entier
entier t[n]
t[0] ← 17
t[1] ← 2*3
t[2] ← t[0] + t[1]
entier t[10],i
Pour i de 0 à 9 Faire
t[i] ← (i+1)*(i+1)
fpour
Elles permettent
Fonction NomFonction(type_1 param_1,...type_n param_n)
Sortie : type retour
DébutFonction
instructions
FinFonction
Exemple :
Fonction NombreDeE(chaîne str)
Sortie : entier
DébutFonction
entier nbe,i
nbe ← 0
Pour i de 0 à longueur(str)-1 Faire
Si (charAt(str,i)=="e") Alors
nbe ← nbe + 1
Fsi
Fpour
Retourner nbe
FinFonction
Appel (utilisation) de la fonction au sein d'un algorithme
Algorithme :
Entrée : chaîne s
Sortie :
Début
entier nbe
nbe ← NombreDeE(s)
Si (nbe==0) Alors
Afficher("Votre chaine de caractères ne contient
pas de e")
Sinon
Afficher("Il y a "+nbe+" lettres e dans votre
chaine de caractères")
Fsi
Fin
Algorithme :
Entrée : chaîne s
Sortie :
Début
entier nbe
nbe ← 17
nbe ← NombreDeE(s)
Si (nbe==0) Alors
Afficher("Votre chaine de caractères ne contient
pas de e")
Sinon
Afficher("Il y a "+nbe+" lettres e dans votre
chaine de caractères")
Fsi
Fin
Fonction : FactorielleIterative(entier n)
Sortie : entier
Début
entier f,i
f ← 1
Pour i de 1 à n faire
f ← f * i
Fpour
retourner f
FinFonction
Fonction : FactorielleRecursive(entier n)
Sortie : entier
Début
Si (n<2) Alors
Retourner 1
Sinon
Retourner FactorielleRec(n-1)*n
Fsi
FinFonction
Autres exemples
Conclusion :