Академический Документы
Профессиональный Документы
Культура Документы
Sous programmes
• Définition
Un sous-programme est un traitement particulier appelé à
Partie I s’exécuter à l'intérieur d'un autre programme
• Utilité :
– quand un même traitement doit être réalisé plusieurs fois
Procédures & fonctions dans un programme. On écrit un sous-programme pour ce
traitement et on l'appelle à chaque endroit où l'on en a
besoin
– pour organiser le code , améliorer la conception et la lisibilité
des gros programmes .
1
29/12/2015
2
29/12/2015
L'utilisation d'une fonction ou d’une procédure nécessite trois parties : • Une procédure est un ensemble d'instructions
regroupées sous un nom, qui réalise un traitement
le prototype : c’est la déclaration nécessaire qui se particulier dans un programme lorsqu'on l'appelle
place avant la fonction principale;
l’appel : c’est l’utilisation d’une fonction à l’intérieur d’une • Une procédure est un sous-programme qui exécute
autre fonction (par exemple le programme principal) ;
un certain nombre d’actions sans fournir de valeur de
la déclaration : c’est l’écriture proprement dite de la retour après son exécution.
fonction ou procédure, en-tête et corps.
3
29/12/2015
4
29/12/2015
Syntaxe d’une procédure sans paramètres Appel d’une procédure sans paramètres
5
29/12/2015
6
29/12/2015
7
29/12/2015
8
29/12/2015
9
29/12/2015
• Un paramètre est une variable particulière qui sert à la • Les paramètres formels qui se trouvent dans l'en-tête d'une
communication entre programme appelant et sous-programme procédure ou fonction lors de sa définition
et qui a un nom et un type
• Les paramètres effectifs ou paramètres réels (ou
arguments) désignent les valeurs réellement fournies lors de
l’appel du sous-programme et qui sont placés entre
parenthèses lors de l'appel
10
29/12/2015
placés dans la définition d'une procédure placés dans l'appel d'une procédure
Servent à décrire le traitement à réaliser par la procédure Lors de l'appel, leurs valeurs sont transmises aux
indépendamment des valeurs traitées paramètres formels correspondants
Ce sont des variables locales à la procédure Un paramètre effectif en donnée peut être
soit une variable du programme appelant
Ils sont déclarés dans l'entête de la procédure soit une valeur littérale
soit le résultat d'une expression
11
29/12/2015
Les modes de passage des paramètres définissent comment les La valeur du paramètre effectif est copié dans le paramètre
valeurs sont passées de le programme principal (ou d’un sous- formel. Le paramètre effectif ne subit aucun changement.
programme) au sous-programme appelé.
Le passage par valeur est l’option par défaut dans la
Le mode de passage est précisé à la déclaration de chacun des déclaration des paramètres.
paramètres.
12
29/12/2015
13
29/12/2015
14
29/12/2015
15
29/12/2015
16
29/12/2015
17
29/12/2015
Exercices d’application
Algorithme somme_diagonale
Var i, j, :entier
L :mat
Début
Partie II
Lecture (L)
Ecrire (" la somme de la diagonale de la matrice est ", somme (L)) Récursivité
Fin
18
29/12/2015
19
29/12/2015
20
29/12/2015
21
29/12/2015
22
29/12/2015
23
29/12/2015
24
29/12/2015
Exercices d’application
Solution:
Fonction palindrome(s: chaine):booléen
Var palin: booléen
début
si (longueur(s) = 0 ou longueur(s) =1) Partie III
palin VRAI
sinon
si (caractère(s,0) = caractère(s,longueur(s)-1)
palin palindrome(sousChaine(s,1, longueur(s)-2)
Enregistrements & Fichiers
sinon
palin FAUX
Finsi
Finsi
Retourne palin
finfonction
25
29/12/2015
Fichier Enregistrement
• Définition Définition
Un enregistrement est un bloc de données élémentaires qui
décrit une entité.
Un enregistrement (anglais : record) est composé de plusieurs
Un FICHIER (anglais : file) est un REGROUPEMENT
champs.
LOGIQUE DE DONNEES MEMORISEES SUR UN SUPPORT Un champ est l’une des données élémentaires d’un
PERMANENT (disque dur, par exemple) afin de enregistrement
permettre une réutilisation ultérieure des informations Exemple:
qu’il contient. Dans un fichier « Clients », un enregistrement correspond aux
données relatives à un client.
le numéro de client, le nom, le prénom, l’adresse..., sont
des champs d’un enregistrement du fichier client.
SMI/S3 - Algorithmique 2 2 SMI/S3 - Algorithmique 2
26
29/12/2015
L’organisation des données dans un fichier détermine Dans des fichiers séquentiels, les enregistrements
comment seront placés chacun des enregistrements sont mémorisés consécutivement dans l'ordre de leur
entrée et peuvent seulement être lus dans cet ordre.
On cite trois types d’organisations:
Si on a besoin d'un enregistrement précis dans un
• Organisation séquentielle fichier séquentiel, il faut lire tous les enregistrements qui
• Organisation calculée le précèdent, en commençant par le premier.
• Organisation indexée
27
29/12/2015
Soit donnée comme numéro d’ordre de l’enregistrement le premier fichier contient les données
dans le fichier, le second fichier contient une table d’index qui à
Soit calculée selon un algorithme de placement appliqué à une valeur d’une clef d’un enregistrement conserve la
une clef. (La clef correspond à l’un des champs de position du fichier à laquelle il se trouve.
l’enregistrement permettant l’identification d’un
enregistrement unique au sein du fichier)
28
29/12/2015
29
29/12/2015
L’accès direct permet l’accès individuel à chacun des Le langage algorithmique (et la plupart des langages de
enregistrements d’un fichier, en y accédant directement : programmation) met à la disposition du
programmeur un ensemble d’instructions permettant la
Soit grâce à un numéro d’ordre de placement ; manipulation des fichiers.
Soit grâce à une clef.
30
29/12/2015
31
29/12/2015
Exemple:
VARIABLES
f1, f2 : FICHIER
Ecrire dans un fichier num, nom, prenom, email : CHAINE
ECRIRE(fichier, liste de variables) DEBUT
f1 OUVRIR("fichier1.txt" , LECTURE)
f2 OUVRIR("fichier2.txt" , ECRITURE)
Fermer un fichier // première lecture
LIRE_FICHIER(f1, num, nom, prenom, email)
FERMER(fichier) TANTQUE (NON FF(f1))
ECRIRE_FICHIER(f2, num, nom, prenom, email)
// autres lectures
LIRE_FICHIER( f1, num, nom, prenom, email)
FINTANTQUE
FERMER(f2)
FERMER(f1)
FIN
SMI/S3 - Algorithmique 2 2 SMI/S3 - Algorithmique 2 2
32
29/12/2015
33
29/12/2015
34
29/12/2015
Algorithme personne
Var F1:Fichier
Debut Partie IV
Creation(F1)
Affichage(F1)
Si Recherche("Riadh",F1) Alors La complexité
Ecrire("Riadh est existant dans le fichier")
Sinon
Ecrire("Riadh est non existant dans le fichier")
Fin Si
Fin
35
29/12/2015
le choix de la solution s’impose lorsque le nombre La notion de complexité décrit le temps et la mémoire
d’opérations et la taille des données d’entrée sont nécessaires pour exécuter un algorithme et permet donc
importants. de caractériser son efficacité.
36
29/12/2015
37
29/12/2015
Coût(A1) : 2n additions
SMI/S3 - Algorithmique 2 2 SMI/S3 - Algorithmique 2 2
38
29/12/2015
Exemple: Somme des n premiers entiers Exemple: Somme des n premiers entiers
Calcul à l’aide de la formule mathématique: Comparaison du coût des deux algorithmes en terme
d’opérations arithmétiques :
Entrées: entier naturel n
Sorties: entier naturel somme Coût(A1) : 2n opérations arithmétiques.
Somme n+1 Coût(A2) : 3 opérations arithmétiques.
Somme somme*n
Somme somme/2 Pour n > 1, Coût(A2) < Coût(A1).
retourner somme
L’algorithme A2 est plus efficace que l’algorithme A1.
Coût(A2) : 1 addition + 1 multiplication + 1 division
39
29/12/2015
40
29/12/2015
41
29/12/2015
42
29/12/2015
Complexité dans le pire des cas: Complexité dans le meilleur des cas:
43
29/12/2015
44
29/12/2015
45
29/12/2015
46
29/12/2015
47
29/12/2015
alors
f(n) = O(h(n)).
48
29/12/2015
Si Si
f(n) = O(kg(n)) f1(n) = O(g1(n))
où k > 0 est une constante, et
f2(n) = O(g2(n))
alors
f(n) = O(g(n)).
alors
f1(n)f2(n) = O(g1(n) g2(n))
SMI/S3 - Algorithmique 2 2 SMI/S3 - Algorithmique 2 2
49
29/12/2015
Exemple 1: Exemple 3:
T(n) = c. On écrit T(n) = O(1). Initialiser un tableau d’entiers
Exemple 2: pour i 0 à n-1
Tab[i]=0;
T(n) = c1n2 + c2n . Finpour
c1n2 + c2n <= c1n2 + c2n2 = (c1 + c2)n2 Il y a n itérations
pour tout n >= 1. Chaque itération nécessite un temps ≤c,
T(n) <= cn2 où c = c1 + c2 et n0 = 1. où c est une constante (comparaison + une
Donc, T(n) est en O(n2) affectation).
Le temps est donc T(n) ≤ cn
Donc T(n) = O(n)
SMI/S3 - Algorithmique 2 2 SMI/S3 - Algorithmique 2 2
50
29/12/2015
Exemple 4: Exemple 6:
a = b;
Temps constant: O(1). somme 0
Pour i 1 à n
Exemple 5: j 1
somme 0 tant que (j<=i)
Pour j 1 à n somme somme+1
pour i 1 à n j j+1
somme somme+1 Fin tantque
Finpour Finpour
Pour k 0 à n-1
A[k] = k
Finpour Temps: O (1) + O(n2) = O(n2)
Temps: O (1) + O (n2) + O (n) = O (n2)
SMI/S3 - Algorithmique 2 2 SMI/S3 - Algorithmique 2 2
51
29/12/2015
52
29/12/2015
Grand Omega
Si n = 1, com(n) = c donc la complexité est Soient f et g : N → R+ , f (n) = Ω (g(n)) s'il existe C > 0 et no > 0
d’ordre O (1)
tels que:
On pose une équation de récurrence : appelons com(n) la
complexité 0<Cg(n) ≤f(n) pour tout n ≥ no
com(n) = c + com(n-1) + o si n ≠ 1
com(1) = c (Borne inférieur)
On résoud cette équation de récurrence : Grand Thêta
com(n) = n*c + (n-1)*o = O(n) Soient f et g : N → R+ ,f (n) = Θ(g(n)) s'il existe C1et C2 > 0
Temps: O (n) et no > 0 tels que:
C1g(n) ≤ f (n) ≤ C2g(n) pour tout n ≥ no
SMI/S3 - Algorithmique 2 2 SMI/S3 - Algorithmique 2 2
53
29/12/2015
Introduction
54
29/12/2015
Introduction Méthode
La preuve d’un programme se fait en un ou deux temps : La preuve d’un algorithme se fait en un ou deux temps :
1) s’il s’agit d’une boucle conditionnelle, il faut prouver 1) s’il s’agit d’une boucle conditionnelle, il faut prouver
qu’il se termine (la terminaison) ; qu’il se termine (la terminaison) ;
2) il faut alors prouver qu’il fournit bien le résultat 2) il faut alors prouver qu’il fournit bien le résultat
escompté ( la correction ou validité). escompté ( la correction ou validité).
55
29/12/2015
Méthode Méthode
Terminaison :
De façon plus générale, considérons la boucle suivante:- Pour montrer que la boucle termine, on montre que
ou B désigne une expression booléenne et S une suite l'exécution de S fait décroitre strictement une valeur ce
d'instructions : qui finira par terminer la boucle.
56
29/12/2015
Méthode Méthode
Correction :
lorsqu’une suite d’entiers ui décroît strictement, il existe
un rang N à partir duquel les termes ui sont négatifs. Or Pour démontrer que l’algorithme produit l’effet
dans la boucle ui > 0, l’algorithme termine attendu, on introduit une propriété annexe P appelée
nécessairement. invariant de boucle.
On montre que P est vérifiée avant l'entrée dans la
Cette expression peut être le simple contenu d’une boucle et qu'elle est conservée à chaque passage dans la
variable telle qu’un compteur de boucle. boucle (c'est-a-dire si P est vraie avant l'exécution de S
elle reste vraie après).
Pour Ceci on utilise une preuve par récurrence.
57
29/12/2015
Méthode Méthode
Définition Démarche
Un invariant de boucle est une relation, une propriété 1) On définit une pré-condition qui décrit l’état des
liant les éléments variables d’une boucle qui est vraie variables avant d’entrer dans la boucle ;
avant d’effectuer la première itération de la boucle, qui
reste vraie à chaque itération et qui est vraie en sortie de 2) On prouve que l’invariant de boucle est vrai à chaque
boucle. itération (par un raisonnement par récurrence);
58
29/12/2015
Démarche Exemple 1 :
Soit l’algorithme suivant :
1) On définit une pré-condition qui décrit l’état des
DEBUT
variables avant d’entrer dans la boucle ; Lire a
SI a < 0
2) On prouve que l’invariant de boucle est vrai à chaque a -a
itération (par un raisonnement par récurrence); FINSI
b a
c 0
3) La condition de sortie de boucle en conjonction avec TANT QUE b > 0 FAIRE
l’invariant de boucle permet de trouver une post- c c + a
b b - 1
condition qui prouve la validité de l’algorithme. FIN TANTQUE
SMI/S3 - Algorithmique 2 2 FIN
SMI/S3 - Algorithmique 2 2
59
29/12/2015
La première chose à vérifier est que l'on finira par Une fois que l'on a prouvé que la boucle se termine, il
sortir de la boucle. faut s'assurer que le résultat est celui escompté.
On procède comme suit :
Avant d'entrer dans la boucle, la valeur de b est un Pour ce faire, on considère la propriété (invariant de
entier positif ou nul. boucle) P(n) :a2 = cn + bn x a.
La valeur de b est décrémentée à chaque passage dans
la boucle ; C’est une suite entière positive et Il s'agit donc de vérifier que pour tout entier n, P(n) est
décroissante. vraie.
La valeur de b finira donc par s'annuler et on sortira On procède par récurrence :
alors de la boucle.
On vient de prouver la terminaison de cet algorithme.
SMI/S3 - Algorithmique 2 2 SMI/S3 - Algorithmique 2 2
60
29/12/2015
On a b0 = a et c0 = 0 donc c0 + b0 - a = 0 + a x a = a2 Exemple 2:
donc P(0) est vraie. Fonction(n:entier):entier
x, y:entier
Soit n un entier et supposons P(n) vraie ; Début
On a bn+1 = bn -1 et cn+1 = c n + a ; x=n
Donc: y=n
c n+l + b n+l x a = (c n + a) + (b n - 1) x a = c n + b n x a = a2 tant que (y ≠ 0)
ce qui prouve que P(n + 1) est vraie. x x + 2;
Lorsqu'on sort de la boucle, on a donc b = 0 et par la y y–1
suite a2 = c + 0 x a = c ce qui prouve que le Résultat du fin tantque
programme est a2. Retourne x
SMI/S3 - Algorithmique 2 2 Fin
SMI/S3fonction
- Algorithmique 2 2
61
29/12/2015
62
29/12/2015
63
29/12/2015
Montrons que pour tout n ≥ 0, cette fonction calcule an. Il y a deux cas ou la fonction retourne directement une
valeur :
On considère donc la propriété:
si n = 0, le résultat est alors 1 = a0
P(n) : " pour tout réel a , puissance(a,n) termine et si n = 1, le résultat est alors a = a1
puissance(a,n) = an".
La propriété P est donc vérifiée dans ces deux cas, soit
P(0) et P(1) sont vraies.
64
29/12/2015
65