Académique Documents
Professionnel Documents
Culture Documents
I. Résolution de problèmes.
Exemple :
On nomme « troisième » le problème suivant :
Entrée : Une suite de caractères A
Sortie : Le troisième caractère de A
Ici une suite de caractères A est appelée une instance du problème Troisième.
. La description du problème est appelée une spécification du problème.
Il peut exister plusieurs (ou même aucune) manière de résoudre le problème. On utilise des
algorithmes pour résoudre ces problèmes
Un algorithme possède également une spécification, que l’on donne généralement sous la
forme : . Entrée(s) (décrit le format attendu en entrée)
. Précondition(s) (ce que doivent respecter les entrées pour que l’algorithme ft°nne)
. Sortie(s) (décrit le format du résultat)
. Postcondition(s) (décrit les propriétés à respecter sur le résultat, et l’état de la
mémoire à la fin de l’exécution de l’algorithme)
Spécifications de Divise :
. Entrée : un entier n
. Précondition : n
. Sortie : un entier k
. Postcondition : 2k = n
: ici on indique un nom de variable pour identifier et stocker des données, lors d’une
affectation, les données précédentes sont écrasées.
Rq : Dans certains langages il est nécessaire de déclarer les variables avant de les affecter.
Lors de la déclaration, on précise le type de la variable, notamment pour connaitre l’espace
mémoire nécessitant à réserver.
Quelques types :
. Entiers signés : permettant de représenter Z/. On les appelle également « intger » » ou encore
« int »
. Entiers non signés : /N, « unsignet int »
. Booléens Vrais et Faux « bool »
. Flottants : Nombres à virgule flottante, « float »
. Caractère : « char »
Exemple : Syntaxe C
A la fin du programme on a x = 5 et y = 5
2. Affichage
3. Structure de contrôle.
a. For/Pour
Une boucle « for », sert à répéter une portion de code un nombre définie de fois.
Exemple :
For i allant de 1 à 5
…
Afficher i
…
b. While/Tant que
Une boucle « while » permet de répéter une portion de code tant qu’une certaine condition est
vérifiée.
Exemple :
n = 100
while (n > 50)
n = n - 10 (calcul dont le résultat est un booléen)
afficher n
c. If/si, else/alors
Exemple
Algo (n)
si n est pair (condition)
afficher « n est pair »
sinon
afficher « n est impair »
4. Les fonctions
Si on a besoin d’exécuter un même code à différents endroits d’un programme, il est judicieux
d’écrire ce code dans une fonction. Ce code peux dépendre de données d’entrée appelées
arguments.
Exemple :
plus2(n)
renvoyer(n+2)
main()
x=5
y = plus2(x)
x = plus2(y)
3. Programmes :
gcc
Exécution
Binaire
Cela est valable pour les langages dit compilés en opposition avec les langages dit interprétés.
C, C++, Ocamel langage compilé et Python, Javascript interprété.
L’interprétation consiste à compiler et exécuter ligne par ligne « à la volée » le code écrit.
Points fort :
Compilé Interprété
Vitesse Usage
Interactivité
Débuggage
Exemple :
3. Un langage peut également ne pas être de « programmation », mais par exemple « de
requête ». SQL est par exemple un langage obéissant au paradigme logique, on décrit
ce que l’on veut obtenir plutôt que des actions à réaliser.
On dit qu’un programme termine sur son exécution se fait en un nombre fini d’étapes. Pour
montrer qu’une boucle n’est pas infinie, il faut identifier un variant de boucle : quantité
calculée à partir de l’état du programme qui appartient à un ensemble bien fondé, qui décroit
strictement à chaque itération.
Un ensemble bien fondé est un ensemble (munie d’une relation d’ordre) dans lequel toute
suite strictement décroissante est fini. (/N,<) est un ensemble bien fondé
Exemple :
2. Correction de programme
Exemple :
. Entrée : un entier x
. Pré - condition : x >= 0
. Sortie : un entier res
. Post condition : res = 2x
Pour montrer la correction du programme, on utilise souvent un invariant de boucle (eq a une
hypothèse de récurrence), une propriété sur l’état du programme qui est vraie en début du
programme et qui reste vraie d’une itération sur l’autre.
Un bon invariant de boucle est tel que l’on peut déduire la post – condition de spécification à
partir de l’invariant en fin de programme.
Supposons I vraie au début d’un itération, montrons que I reste vraie à la fin de l’itération (et
donc au début de l’itération suivante s’il y en a une).
On indice les variables avec i pour identifier les valeurs au début de l’itération et avec f à la
fin de l’itération. Ici, grâce à I vraie en début d’itération on a 2x – yi = resi , res n’est modifié
qu’à la ligne 5 donc resf = 2resi de même pour y et la ligne (6), yf = yi – 1
2x – y = 2 x – (yi – 1) = 2x – yi + 1 = 2 * 2x – yi =2 * resi = resf
D’où I vraie en fin d’itération on a la conservation de I.
Conclusion :
On a donc I vraie à la fin de la dernière itération. On a cet instant y vaut 0 de manière évidente
(en prenant en colpte la précondition)
On a donc 2x – 0, ce qui est bien notre post – condition.
Vocabulaire :
Algorithme : Séquence d’instructions que l’on peut suivre de manière déterministe, à partir de
données d’entrées et fournissant un résultat.