Upload
fatita-bouamri
View
76
Download
2
Embed Size (px)
Citation preview
2007/2008 Info2, 1re anne SM/SMI 1
Langage CLangage CLangage CLangage C
Prsentation gnrale
et instructions de base
2007/2008 Info2, 1re anne SM/SMI 2
Langage CLangage CLangage CLangage C
Cr en 1972 (D. Ritchie et K. Thompson), est un langage rapide et trs populaire et largement utilis.
Le C++ est un langage orient objet cr partir du C en 1983.
Le langage C a inspir de nombreux langages : C++, Java, PHP, ... leurs syntaxes sont proches de celle de C
Le Langage C est un bon acquis pour apprendre dautres langages
2007/2008 Info2, 1re anne SM/SMI 3
Premier programme en CPremier programme en CPremier programme en CPremier programme en C
#include
void main(){
printf(Mon programme !\n");}
bibliothque
Point d'entr du programme
Instruction
2007/2008 Info2, 1re anne SM/SMI 4
Langage C : GLangage C : GLangage C : GLangage C : Gnnnnralitralitralitralitssss
Chaque instruction en C doit se terminer par ;
Pour introduire un texte en tant que commentaire, il suffit de prcder la ligne par // ( le texte est alors ignorpar le compilateur de C)
Il est aussi possible d'crire des commentaires sur plusieurs lignes en utilisant les symboles (/* ..*/)
/* exemple sur ligne 1exemple sur ligne 2 */
2007/2008 Info2, 1re anne SM/SMI 5
Langage C : nom et type des variablesLangage C : nom et type des variablesLangage C : nom et type des variablesLangage C : nom et type des variables
Le nom d'une variable peut tre une combinaison de lettres et de chiffres, mais qui commence par une lettre, qui ne contient pas d'espaces et qui est diffrente des mots rservs du langage C
Les principaux types dfinis en C sont : char (caractres), int (entier), short (entiers courts), long (entiers longs), float (rel), double (rel grande prcision), long double (rel avec plus de prcision), unsigned int (entier non sign)
2007/2008 Info2, 1re anne SM/SMI 6
Langage C : nom et type des variablesLangage C : nom et type des variablesLangage C : nom et type des variablesLangage C : nom et type des variables
Dclaration d'une variable Type nom_de_la_variable [= valeur] ;
Exemple: int nb; float pi = 3.14;//dclaration et initialisation char c = x'; long a, b, c; double r = 7.1974851592;
2007/2008 Info2, 1re anne SM/SMI 7
Langage C: l'affectationLangage C: l'affectationLangage C: l'affectationLangage C: l'affectation
Le symbole d'affectation se note en C avec =
exemple : i= 1; j= i+1; Attention : en C, le test de lgalit est
effectue par loprateur ==a==b ; est une expression de type logique
(boolean) qui est vrai si les deux valeurs a et b sont gales et fausse sinon
2007/2008 Info2, 1re anne SM/SMI 8
Langage C : affichage dLangage C : affichage dLangage C : affichage dLangage C : affichage dune variableune variableune variableune variable
printf("format de laffichage", var) permet d'afficher la valeur de la variable var (c'est l'quivalent de crire en pseudo code).
printf("chaine") permet d'afficher la chane de caractres qui est entre guimets " "
int a=1, b=2; printf("a vaut :%d et b vaut:%d \n ", a, b);a vaut 1 et b vaut 2
float r= 7.45; printf(" le rayon =%f \n ",r); Autres formats :
%c : caractre %lf : double %s : chaine de caractres %e : rel en notation scientifique
2007/2008 Info2, 1re anne SM/SMI 9
Langage C : affichage dLangage C : affichage dLangage C : affichage dLangage C : affichage dune variableune variableune variableune variable
Affichage de la valeur d'une variable en C++
cout
2007/2008 Info2, 1re anne SM/SMI 10
Langage C : lecture dLangage C : lecture dLangage C : lecture dLangage C : lecture dune variableune variableune variableune variable
Lecture dune variable n de type entier: Syntaxe : scanf("%d ",&n); lit la valeur tap par lutilisateur
au clavier et elle la stocke dans la variable n. Comme pour printf, le premier argument est une chaine de
caractres qui donne le format de la lecture. Cette chainene peut contenir que des formats, pas de messages.
Attention : notez la prsence du caractre & devant n (adresse associe la variable n) et ce nest pas quivaut scanf("%d", n);
2007/2008 Info2, 1re anne SM/SMI 11
Langage C : lecture dLangage C : lecture dLangage C : lecture dLangage C : lecture dune variableune variableune variableune variable
lecture d'une variable en C++ cin>>var; Exemple
int i ; cout
2007/2008 Info2, 1re anne SM/SMI 12
Langage C : oprateurs
Instructions de base oprateurs de base
+, -, *, / oprateurs arithmtique de base % reste d'une division entire == test d'galit != test de diffrence , = test de comparaison ! ngation || ouou logique pour valuer une expression && etet logique pour valuer une expression
2007/2008 Info2, 1re anne SM/SMI 13
Langage C : syntaxe des tests
criture en pseudo code Traduction en C
Si condition alors if (condition) {instructions instructions;
Finsi }
Si condition alors if (condition) {instructions1 instructions1;
Sinon } else {instructions2 instructions2;
Finsi }
2007/2008 Info2, 1re anne SM/SMI 14
Langage C : syntaxe des tests
criture en pseudo code Traduction en Ccas o v vaut switch(v){
v1 : action1 case v1 : action1; break;v2 : action2 case v2 : action2; break;. . .
vn : actionn case vn: actionn ;break;autre : action autre default : action autre; break;
Fincas }
2007/2008 Info2, 1re anne SM/SMI 15
Langage C : syntaxe des boucles
criture en pseudo code Traduction en CTantQue condition while( condition) {
Instructions instructions;FinTantQue }
Pour i allant de v1 v2 par pas p for( i=v1;i
2007/2008 Info2, 1re anne SM/SMI 16
Fonctions et procFonctions et procFonctions et procFonctions et procduresduresduresdures
2007/2008 Info2, 1re anne SM/SMI 17
Les procdures et les fonctions
Par exemple, pour rsoudre le problme suivant :crire un programme qui affiche en ordre croissant les notes dune classe suivies de la note la plus faible, de la note la plus leve et de la moyenne.revient rsoudre les sous problmes suivants :
- Remplir un tableau de naturels avec des notes saisies par lutilisateur- Afficher un tableau de naturels- Trier un tableau de naturel en ordre croissant- Trouver le plus petit naturel dun tableau- Trouver le plus grand naturel dun tableau- Calculer la moyenne dun tableau de naturels
2007/2008 Info2, 1re anne SM/SMI 18
Les procdures et les fonctions
Chacun de ces sous-problmes devient un nouveau problme rsoudre.
Si on considre que lon sait rsoudre ces sous-problmes, alors on sait quasiment rsoudre le problme initial.
Donc crire un programme qui rsout un problme revient toujours crire des sous-programmes qui rsolvent des sous parties du problme initial.
En algorithmique il existe deux types de sous-programmes :- Les fonctions- Les procdures
2007/2008 Info2, 1re anne SM/SMI 19
Fonctions et procFonctions et procFonctions et procFonctions et procduresduresduresdures
Un programme long est souvent difficile crire et comprendre. Cest pourquoi, il est prfrable de le dcomposer en des parties appelessous-programmes ou modules
Les fonctions et les procdures sont des modules (groupe d'instructions) indpendants dsigns par un nom. Elles ont plusieurs avantages : permettent dviter de rcrire un mme traitement plusieurs fois. En effet,
on fait appelle la procdure ou la fonction aux endroits spcifis. permettent dorganiser le code et amliorent la lisibilit des programmes facilitent la maintenance du code (il suffit de modifier une seule fois) ces procdures et fonctions peuvent ventuellement tre rutilises dans
d'autres programmes
2007/2008 Info2, 1re anne SM/SMI 20
Fonctions
Le rle d'une fonction en programmation est similaire celui d'une fonction en mathmatique : elle retourne un rsultat au programme appelant
Une fonction s'crit en dehors du programme principal sous la forme:Fonction nom_fonction (paramtres et leurs types) : type_fonctionVariables // variables localesDbut
Instructions constituant le corps de la fonctionretourne //la valeur retourner
FinFonction Le nom_fonction est un identificateur type_fonction est le type du rsultat retourn L'instruction retourne sert retourner la valeur du rsultat
2007/2008 Info2, 1re anne SM/SMI 21
CaractCaractCaractCaractristiques des fonctionsristiques des fonctionsristiques des fonctionsristiques des fonctions
Une fonction ne modifie pas les valeurs de ses arguments en entre
Elle se termine par une instruction de retour qui rend un rsultat et un seul
Une fonction est toujours utilise dans une expression (affectation, affichage,)
2007/2008 Info2, 1re anne SM/SMI 22
Fonctions : exemples
La fonction max suivante retourne le plus grand des deux rels x et y fournis en arguments :
Fonction max (x : rel, y: rel ) : relvariable z : relDbut z y
si (x>y) alors z x finsiretourne (z)
FinFonction
La fonction Pair suivante dtermine si un nombre est pair :Fonction Pair (n : entier ) : boolenDebut retourne (n%2=0)FinFonction
2007/2008 Info2, 1re anne SM/SMI 23
Utilisation des fonctions
L'utilisation d'une fonction se fera par simple criture de son nom dans le programme principale. Le rsultat tant une valeur, devra tre affect ou tre utilis dans une expression, une criture, ...
Exepmle: Algorithme exepmleAppelFonctionvariables c : rel, b : boolenDbut
b Pair(3)c 5*max(7,2)+1crire("max(3,5*c+1)= ", max(3,5*c+1))
Fin Lors de l'appel Pair(3) le paramtre formel n est remplac par le
paramtre effectif 3
2007/2008 Info2, 1re anne SM/SMI 24
Procdures
Dans le cas o une tche se rpte dans plusieurs endroits du programme et elle ne calcule pas de rsultats ou quelle calcule plusieurs rsultats la fois alors on utilise une procdure au lieu dune fonction
Une procdure est un sous-programme semblable une fonction mais qui ne retourne rien
Une procdure s'crit en dehors du programme principal sous la forme :Procdure nom_procdure (paramtres et leurs types)Variables //localesDbut
Instructions constituant le corps de la procdureFinProcdure
Remarque : une procdure peut ne pas avoir de paramtres
2007/2008 Info2, 1re anne SM/SMI 25
Appel d'une procdure
Pour appeler une procdure dans un programme principale ou dans une autre procdure, il suffit dcrire une instruction indiquant le nom de la procdure :
Procdure exempleProcedure ()
FinProcdure
Algorithme exepmleAppelProcdureDbut
exempleProcedure ()
Fin Remarque : contrairement l'appel d'une fonction, on ne peut pas
affecter la procdure appele ou l'utiliser dans une expression. L'appel d'une procdure est une instruction autonome
2007/2008 Info2, 1re anne SM/SMI 26
Paramtres d'une procdure
Les paramtres servent changer des donnes entre le programme principale (ou la procdure appelante) et la procdure appele
Les paramtres placs dans la dclaration d'une procdure sont appels paramtres formels. Ils sont des variables locales la procdure.
Les paramtres placs dans l'appel d'une procdure sont appelsparamtres effectifs. ils contiennent les valeurs pour effectuer le traitement
Le nombre de paramtres effectifs doit tre gal au nombre de paramtres formels. L'ordre et le type des paramtres doivent correspondre
2007/2008 Info2, 1re anne SM/SMI 27
Transmission des paramtres
Il existe deux modes de transmission de paramtres dans les langages de programmation :
La transmission par valeur : les valeurs des paramtres effectifs sont affectes aux paramtres formels correspondants au moment de l'appel de la procdure. Dans ce mode le paramtre effectif ne subit aucune modification
La transmission par adresse (ou par rfrence) : les adresses des paramtres effectifs sont transmises la procdure appelante. Dans ce mode, le paramtre effectif subit les mmes modifications que le paramtre formel lors de l'excution de la procdure Remarque : le paramtre effectif doit tre une variable (et non une
valeur) lorsqu'il s'agit d'une transmission par adresse En pseudo-code, on va prciser explicitement le mode de transmission
dans la dclaration de la procdure
2007/2008 Info2, 1re anne SM/SMI 28
Transmission des paramtres :
exemples
Procdure incrementer1 (x : entier par valeur, y : entier par adresse)x x+1y y+1
FinProcdure
Algorithme Test_incrementer1variables n, m : entierDbut
n 3m 3incrementer1(n, m) rsultat :crire (" n= ", n, " et m= ", m) n=3 et m=4
FinRemarque : l'instruction x x+1 n'a pas de sens avec un passage par
valeur
2007/2008 Info2, 1re anne SM/SMI 29
Transmission par valeur, par
adresse : exemples
Procdure qui calcule la somme et le produit de deux entiers :Procdure SommeProduit (x, y: entier par valeur, som, prod : entier par
adresse)som x+yprod x*y
FinProcdure
Procdure qui change le contenu de deux variables :Procdure Echange (x : rel par adresse, y : rel par adresse)variables z : rel
z xx yy z
FinProcdure
2007/2008 Info2, 1re anne SM/SMI 30
Variables locales et globales
On peut manipuler 2 types de variables dans un module (procdure ou fonction) : des variables locales et des variables globales. Elles se distinguent par ce qu'on appelle leur porte (leur "champ de dfinition", leur "dure de vie")
Une variable locale n'est connue qu' l'intrieur du module ou elle a t dfinie. Elle est cre l'appel du module et dtruite la fin de son excution
Une variable globale est connue par l'ensemble des modules et le programme principale. Elle est dfinie durant toute lapplication et peut tre utilise et modifie par les diffrents modules du programme
2007/2008 Info2, 1re anne SM/SMI 31
Variables locales et globales
La manire de distinguer la dclaration des variables locales et globales diffre selon le langage
En gnral, les variables dclares l'intrieur d'une fonction ou procdure sont considres comme variables locales
En pseudo-code, on va adopter cette rgle pour les variables locales et on dclarera les variables globales dans le programme principale
Conseil : Il faut utiliser autant que possible des variables locales plutt que des variables globales. Ceci permet d'conomiser la mmoire et d'assurer l'indpendance de la procdure ou de la fonction
2007/2008 Info2, 1re anne SM/SMI 32
Fonctions et procdures en langage C
En C, une fonction prends N arguments et retourne une valeur de type.Syntaxe : type arg_ret nom_f(type arg1, type arg2, type argn){ ensemble instructions}- arg_ret est l'argument renvoy par la fonction (instruction return)- nom_f est le nom de la fonction- arg1 argn sont les arguments envoys la fonction.
Une procdure est une fonction renvoyant void, dans ce cas return est appel sans paramtre.
2007/2008 Info2, 1re anne SM/SMI 33
Fonctions et procdures en C
L'ordre, le type et le nombre des arguments doivent tre respects lors de l'appel de la fonction
L'appel d'une fonction doit tre situe aprs sa dclaration ou celle de son prototype
Si la fonction ne renvoie rien alors prciser le type voidvoid(cette fonction est consid(cette fonction est considrre comme une proce comme une procdure)dure)
2007/2008 Info2, 1re anne SM/SMI 34
Fonctions en C : exemple
int min(int a, int b);void main(){ int c;/* entrez les valeurs de a et b */
c= min(a, b) ;printf("le min de %d et %d est : %d \n", a, b, c);
}int min(int a, int b){
if (a
2007/2008 Info2, 1re anne SM/SMI 35
Rcursivit
Un module (fonction ou procdure) peut s'appeler lui-mme: on dit que c'est un module rcursif
Tout module rcursif doit possder un cas limite (cas trivial) qui arrte la rcursivit
Exemple : Calcul du factorielleFonction fact (n : entier ) : entier
Si (n=0) alorsretourne (1)
Sinonretourne (n*fact(n-1))
FinsiFinFonction
2007/2008 Info2, 1re anne SM/SMI 36
Fonctions rcursives : exercice
crivez une fonction rcursive (puis itrative) qui calcule le terme n de la suite de Fibonacci dfinie par : U(0)=U(1)=1
U(n)=U(n-1)+U(n-2)
Fonction Fib (n : entier ) : entierVariable res : entierSi (n=1 OU n=0) alors
res 1Sinon
res Fib(n-1)+Fib(n-2)Finsiretourne (res)
FinFonction
2007/2008 Info2, 1re anne SM/SMI 37
Fonctions rcursives : exercice
Une fonction itrative pour le calcul de la suite de Fibonacci :Fonction Fib (n : entier ) : entierVariables i, AvantDernier, Dernier, Nouveau : entier
Si (n=1 OU n=0) alors retourne (1)FinsiAvantDernier 1, Dernier 1Pour i allant de 2 n
Nouveau Dernier+ AvantDernierAvantDernier DernierDernier Nouveau
FinPourretourne (Nouveau)
FinFonctionRemarque: la solution rcursive est plus facile crire
2007/2008 Info2, 1re anne SM/SMI 38
Procdures rcursives : exemple
Une procdure rcursive qui permet d'afficher la valeur binaire d'un entier n
Procdure binaire (n : entier )Si (n0) alors
binaire (n/2)crire (n mod 2)
FinsiFinProcdure
2007/2008 Info2, 1re anne SM/SMI 39
Les fonctions rcursives
Le processus rcursif remplace en quelque sorte la boucle, cest--dire un processus itratif.
Il est noter que l'on traite le problme lenvers : on part du nombre, et on remonte rebours jusqu 1, pour pouvoir calculer la factorielle par exemple.
Cet effet de rebours est caractristique de la programmation rcursive.
2007/2008 Info2, 1re anne SM/SMI 40
Les fonctions rcursives : remarques
la programmation rcursive, pour traiter certains problmes, peut tre trs conomique, elle permet de faire les choses correctement, en trs peu de lignes de programmation.
en revanche, elle est trs coteuse de ressources machine. Car il faut crer autant de variable temporaires que de "tours" de fonction en attente.
toute fonction rcursive peut galement tre formule en termes itratifs ! Donc, si elles facilitent la vie du programmeur, elle ne sont pas indispensable.
2007/2008 Info2, 1re anne SM/SMI 41
Les tableauxLes tableauxLes tableauxLes tableaux
2007/2008 Info2, 1re anne SM/SMI 42
Tableaux : introduction
Supposons que l'on veut calculer le nombre dtudiants ayant une note suprieure 10 pour une classe de 20 tudiants.
Jusqu prsent, le seul moyen pour le faire, cest de dclarer 20 variables dsignant les notes N1, , N20: La saisie de ces notes ncessite 20 instructions lire. Le calcul du nombre des notes>10 se fait par une suite de tests de 20
instructions Si : nbre 0Si (N1 >10) alors nbre nbre+1 FinSi
Si (N20>10) alors nbre nbre+1 FinSicette faon nest pas trs pratique
Cest pourquoi, les langages de programmation offrent la possibilit de rassembler toutes ces variables dans une seule structure de donneappele tableau qui est facile manipuler
2007/2008 Info2, 1re anne SM/SMI 43
Tableaux
Un tableau est un ensemble d'lments de mme type dsigns par un identificateur unique
Une variable entire nomme indice permet d'indiquer la position d'un lment donn au sein du tableau et de dterminer sa valeur
La dclaration d'un tableau s'effectue en prcisant le type de ses lments et sa dimension (le nombre de ses lments) En pseudo code :
variable tableau identificateur[dimension] : type Exemple :
variable tableau notes[20] : rel On peut dfinir des tableaux de tous types : tableaux d'entiers, de
rels, de caractres, de boolens, de chanes de caractres,
2007/2008 Info2, 1re anne SM/SMI 44
Les tableaux
Les tableaux une dimension ou vecteurs :variable tableau tab[10] : entier
Ce tableau est de longueur 10, car il contient 10 emplacements. Chacun des dix nombres du tableau est repr par son rang, appel
indice Pour accder un lment du tableau, il suffit de prciser entre
crochets l'indice de la case contenant cet lment. Pour accder au 5me lment (22), on crit : tab[4]Pour accder au ime lment, on crit tab[i-1] (avec 0
2007/2008 Info2, 1re anne SM/SMI 45
Tableaux : remarques
Selon les langages, le premier indice du tableau est soit 0, soit 1. Le plus souvent c'est 0 (c'est ce qu'on va utiliser en pseudo-code). Dans ce cas, tab[i] dsigne l'lment i+1 du tableau notes
Il est possible de dclarer un tableau sans prciser au dpart sa dimension. Cette prcision est faite ultrieurement. Par exemple, quand on dclare un tableau comme paramtre d'une
procdure, on peut ne prciser sa dimension qu'au moment de l'appel En tous cas, un tableau est inutilisable tant quon na pas prcis le
nombre de ses lments
Un grand avantage des tableaux est qu'on peut traiter les donnes qui y sont stockes de faon simple en utilisant des boucles
Les lments dun tableau sutilisent comme des variables
2007/2008 Info2, 1re anne SM/SMI 46
Tableaux : accs et modification
Les instructions de lecture, criture et affectation s'appliquent aux tableaux comme aux variables.
Exemples :x tab[0]
La variable x prend la valeur du premier lment du tableau (45 selon le tableau prcdent)
tab[6] 43Cette instruction a modifie le contenu du 7me lment du tableau (43 au lieu de 49)
2007/2008 Info2, 1re anne SM/SMI 47
Tableaux : exemple 1
Pour le calcul du nombre d'tudiants ayant une note suprieure 12 avec les tableaux, on peut crire :
Constante N=20 : entierVariables i ,nbre : entier
tableau notes[N] : relDbut
nbre 0Pour i allant de 0 N-1
Si (notes[i] >12) alorsnbre nbre+1
FinSiFinPourcrire ("le nombre de notes suprieures 12 est : ", nbre)
Fin
2007/2008 Info2, 1re anne SM/SMI 48
Tableaux : exemple 2
Le programme suivant comporte la dclaration dun tableau de 20 rels (les notes dune classe), on commence par effectuer la saisie des notes, et en suite on calcul la moyenne des 20 notes et on affiche la moyenne :
Constante Max =200 : entiervariables tableau Notes[Max],i,somme,n : entier
moyenne : rel dbut
ecrire("entrer le nombre de notes :") lire(n)/* saisir les notes */
pour i allant de 0 n-1 faireecrire("entrer une note :")lire(Notes[i])
finpour/* effectuer la moyenne des notes */
somme 0 pour i allant de 0 n-1 faire
somme somme + Notes[i] finPourmoyenne = somme / n
/* affichage de la moyenne */ecrire("la moyenne des notes est :",moyenne)
fin
2007/2008 Info2, 1re anne SM/SMI 49
Tableaux : saisie et affichage
Saisie et affichage des lments d'un tableau :Constante Max=200 : entiervariables i, n : entier
tableau Notes[max] : relecrire("entrer la taille du tableau :") lire(n)/* saisie */
Pour i allant de 0 n-1crire ("Saisie de l'lment ", i + 1)lire (T[i] )
FinPour
/* affichage */Pour i allant de 0 n-1
crire ("T[",i, "] =", T[i])FinPour
2007/2008 Info2, 1re anne SM/SMI 50
Les tableaux : Initialisation
Le bloc dinstructions suivant initialise un un tous les lments d'un tableau de n lments :
InitTableaudbut
pour i de 0 n-1 fairetab[i] 0
fpourfin
2007/2008 Info2, 1re anne SM/SMI 51
Tableaux : ExerciceTableaux : ExerciceTableaux : ExerciceTableaux : Exercice
Que produit lalgorithme suivant ?Variable Tableau F[10], i : entier
dbutF[0] 1F[1] 1crire(F[0],F[1])pour i allant de 2 9 faireF[i] F[i-1]+F[i-2]
crire(F[i])finpour
fin
2007/2008 Info2, 1re anne SM/SMI 52
Tableaux : syntaxe en C
En langage C, un tableau se dclare comme suit :type nom_tableau[dimension];dimension : doit tre une constante
Exemple : int t[100] ; La taille nest pas obligatoire si le tableau est initialis sa cration.
Exemple : int dixPuissance[ ] = { 0, 1, 10, 100, 1000, 10000 } ;
Dclaration dun tableau de plusieurs dimensions type nom_tableau[dim1][dim2][dimn]; Exemple: char buffer[20][80];
2007/2008 Info2, 1re anne SM/SMI 53
Tableaux deux dimensions
Les langages de programmation permettent de dclarer des tableaux dans lesquels les valeurs sont repres par deux indices. Ceci est utile par exemple pour reprsenter des matrices
En pseudo code, un tableau deux dimensions se dclare ainsi :variable tableau identificateur[dimension1] [dimension2] : type Exemple : une matrice A de 3 linges et 4 colonnes dont les lments sont
rels
variable tableau A[3][4] : rel A[i][j] permet d'accder llment de la matrice qui se trouve
lintersection de la ligne i et de la colonne j Les tableaux peuvent avoir n dimensions.
2007/2008 Info2, 1re anne SM/SMI 54
Les tableaux deux dimensions
La matrice A dans la dclaration suivante : variable tableau A[3][7] : relpeut tre explicite comme suit : les lments sont ranges dans un tableau deux entres.
Ce tableau a 3 lignes et 7 colonnes. Les lments du tableau sont reprs par leur numro de ligne et leur numro de colonne dsigns en bleu. Par exemple A[1][4] vaut 38.
694183675521432255438115136231327776244281206543210
2007/2008 Info2, 1re anne SM/SMI 55
Exemples : lecture d'une matrice
La saisie des lments d'une matrice : Constante N=100 :entier
Variable i, j, n, m : entiertableau A[N][N] : rel
Dbutecrire("entrer le nombre de lignes et le nombre de colonnes :") lire(n, m)Pour i allant de 0 n-1
crire ("saisie de la ligne ", i + 1)Pour j allant de 0 m-1
crire ("Entrez l'lment de la ligne ", i + 1, " et de la colonne ", j+1)lire (A[i][j])
FinPourFinPour
Fin
2007/2008 Info2, 1re anne SM/SMI 56
Exemples : affichage d'une matrice
Affichages des lments d'une matrice : Constante N=100 : entier
Variable i, j, n,m : entiertableau A[N][N], B[N][N], C[N][N] : rel
Dbutecrire("entrer le nombre de lignes et le nombre de colonnes :") lire(n, m)Pour i allant de 0 n-1
Pour j allant de 0 m-1crire ("A[",i, "] [",j,"]=", A[i][j])
FinPourFinPour
Fin
2007/2008 Info2, 1re anne SM/SMI 57
Initialisation de matriceInitialisation de matriceInitialisation de matriceInitialisation de matrice
Pour initialiser une matrice on peut utiliser par exemple les instructions suivantes :
T1[3][3] = {{1,2,3}, {4,5,6}, {7,8,9}};T2[3][3] = { 1, 2, 3, 4, 5, 6, 7, 8, 9 };T3[4][4] = {{1,2,3}, {4,5,6}, {7,8,9}};T4[4][4] = { 1, 2, 3, 4, 5, 6, 7, 8, 9 };
2007/2008 Info2, 1re anne SM/SMI 58
Exemples : somme de deux matrices
Procdure qui calcule la somme de deux matrices :Constante N =100 :entierVariable i, j, n : entier
tableau A[N][N], B[N][N], C[N][N] : relDbutecrire("entrer la taille des matrices :") lire(n)Pour i allant de 0 n-1
Pour j allant de 0 m-1C[i][j] A[i][j]+B[i][j]
FinPourFinPour
Fin
2007/2008 Info2, 1re anne SM/SMI 59
Exemples : produit de deux Exemples : produit de deux Exemples : produit de deux Exemples : produit de deux
matricesmatricesmatricesmatrices
constante N=20 : entiervariables Tableau A[N][N],B[N][N],C[N][N],i,j,k,n,S : entier dbut
crire("donner la taille des matrices(
2007/2008 Info2, 1re anne SM/SMI 60
Exemples : produit de deux Exemples : produit de deux Exemples : produit de deux Exemples : produit de deux
matrices (suite)matrices (suite)matrices (suite)matrices (suite)
/* le produit de C = A * B */pour i allant de 0 n-1 faire
pour j allant de 0 n-1 faireS 0pour k allant de 0 n-1 faire
S S + A[i][k]*B[k][j] finpourC[i][j] S
finpourfipour
/* affichage de la matrice de C */pour i allant de 0 n-1 faire
pour j allant de 0 n-1 faire crire(C[i][j]," ")
finpourcrire("\n") /* retour la ligne */
finpourfin
2007/2008 Info2, 1re anne SM/SMI 61
Notion de complexit
Lexcution dun algorithme sur un ordinateur consomme des ressources: en temps de calcul : complexit temporelle en espace-mmoire occup : complexit en espace
Seule la complexit temporelle sera considre pour valuer lefficacit de nos programmes.
Le temps dexcution dpend de plusieurs facteurs : Les donnes (trier 4 nombre ce nest pas trier 1000) Le code gnr par le compilateur La nature de la machine utilise La complexit de lalgorithme.
Si T(n) dnote le temps dexcution dun programme sur un ensemble des donnes de taille n alors :
2007/2008 Info2, 1re anne SM/SMI 62
Complexit dun algorithme
T(n)=c.n2 (c est une constante) signifie que lon estime c.n2 le nombre dunits de temps ncessaires un ordinateur pour excuter le programme.
Un algorithme "hors du possible" a une complexittemporelle et/ou en espace qui rend son excution impossibleexemple: jeu dchec par recherche exhaustive de tous les coups possibles
1019 possibilits, 1 msec/poss. = 300 millions dannes
2007/2008 Info2, 1re anne SM/SMI 63
Complexit : exemple
crire une fonction qui permet de retourner le plus grand diviseur dun entier.
Fonction PGD1( n: entier) : entier Fonction PGD2( n: entier) : entierVariables i :entier Variables i :entierDebut Debutin-1 i2Tantque (n%i !=0) Tantque ((i
2007/2008 Info2, 1re anne SM/SMI 64
Complexit : notation en O
La complexit est souvent dfinie en se basant sur le pire des cas ou sur la complexit moyenne. Cependant, cette dernire est plus dlicate calculer que celle dans le pire des cas.
De faon gnral, on dit que T(n) est O(f(n)) si c et n0 telles que nn0, T(n) c.f(n). Lalgorithme ayant T(n) comme temps dexcution a une complexit O(f(n))
La complexit croit en fonction de la taille du problme Lordre utilis est lordre de grandeur asymptotique Les complexits n et 2n+5 sont du mme ordre de grandeur n et n2 sont dordres diffrents
lim T(n)/ f(n) +
2007/2008 Info2, 1re anne SM/SMI 65
Complexit : rgles
1- Dans un polynme, seul le terme de plus haut degrcompte. Exemple : n3+1006n2+555n est O(n3)
2- Une exponentielle lemporte sur une puissance, et cette dernire sur un log. Exemple: 2n+n100 est O(2n) et 300lg(n)+2n est O(n)
3- Si T1(n) est O(f(n)) et T2(n) est O(g(n)) alors T1(n)+T2(n) est O(Max(f(n),g(n))) et T1(n).T2(n) est O(f(n).g(n))
Les ordres de grandeur les plus utilises : O(log n), O(n), O(n log n), O(nk), O(2n)
2007/2008 Info2, 1re anne SM/SMI 66
La complexitLa complexit asymptotiqueasymptotiqueSupposons que lSupposons que lon dispose de 7 algorithmes dont les complexiton dispose de 7 algorithmes dont les complexits dans le s dans le pire des cas sont dpire des cas sont dordre de grandeur 1, logordre de grandeur 1, log22n, n, nlgn, n, nlg22n, nn, n22, n, n33, 2, 2nn et un et un ordinateur capable dordinateur capable deffectuer 10effectuer 1066 opoprations par seconde. Le tableau suivant rations par seconde. Le tableau suivant montre lmontre lcart entre ces algorithmes lorsque la taille des donncart entre ces algorithmes lorsque la taille des donnes croit :es croit :
!31.7103a11.5j19.9s1s19.9s1sN= 106!31.7a2.7h1.6s0.1s16.6s1sN= 105
!11.5j100s0.1s10ms13.3s1sN=104! (>10100)16.6mn1s9.9ms1ms9.9s1sN= 1034.1016a1s10ms0.6ms0.1ms6.6s1sN=102
2nn3n2n log2n
nlog2n1Complexit
2007/2008 Info2, 1re anne SM/SMI 67
Tableaux : recherche dun lment
Pour effectuer la recherche dun lment dans un tableau, deux mthodes de recherche sont considres selon que le tableau est triou non :
La recherche squentielle pour un tableau non tri La recherche dichotomique pour un tableau tri
La recherche squentielle Consiste parcourir un tableau non tri partir du dbut et
sarrter ds quune premire occurrence de llment sera trouve. Le tableau sera parcouru du dbut la fin si llment ny figure pas.
2007/2008 Info2, 1re anne SM/SMI 68
Recherche squentielle : algorithme
Recherche de la valeur x dans un tableau T de N lments :Variables i: entier, Trouve : boolen
i0 , Trouve FauxTantQue (i < N) ET (not Trouve)
Si (T[i]=x) alorsTrouve Vrai
Sinonii+1
FinSiFinTantQueSi Trouve alors // c'est quivalent crire Si Trouve=Vrai alors
crire ("x est situ dans la "+i+ "eme position du tableau ")Sinon crire ("x n'appartient pas au tableau")FinSi
2007/2008 Info2, 1re anne SM/SMI 69
Recherche squentielle : complexit
Dans le pire des cas on doit parcourir tout le tableau. Ainsi, la complexit est de lordre de O(n).
Si le te tableau est tri la recherche squentielle peut sarrter ds quon rencontre un lment du tableau strictement suprieur llment recherch.
Si tous les lments sont plus petits que llment recherch lensemble du tableau est parcouru. Ainsi la complexit reste dordre O(n)
2007/2008 Info2, 1re anne SM/SMI 70
Recherche dichotomique
Dans le cas o le tableau est tri (ordonn), on peut amliorer l'efficacit de la recherche en utilisant la mthode de recherche dichotomique
Principe : diviser par 2 le nombre d'lments dans lesquels on cherche la valeur x chaque tape de la recherche. Pour cela on compare x avec T[milieu] :
Si x < T[milieu], il suffit de chercher x dans la 1re moiti du tableau entre (T[0] et T[milieu-1])
Si x > T[milieu], il suffit de chercher x dans la 2me moiti du tableau entre (T[milieu+1] et T[N-1])
On continue le dcoupage jusqu un sous tableau de taille 1
2007/2008 Info2, 1re anne SM/SMI 71
Recherche dichotomique
On utilise lordre pour anticiper labandon dans une recherche linaire, guider la recherche : recherche par dichotomie.
petitpetit grandgrandmoyenmoyen00 nn--11(n(n--1)/21)/2
XX
X < moyenX < moyenOui !Oui !
Chercher X dansChercher X dans[ 0 .. (n[ 0 .. (n--1)/21)/2-- 1 ]1 ]
Non !Non !Chercher X dansChercher X dans[ (n[ (n--1)/2 .. n1)/2 .. n--1 ]1 ]
2007/2008 Info2, 1re anne SM/SMI 72
Recherche dichotomique :
algorithme
inf0 , supN-1, Trouve FauxTantQue (inf
2007/2008 Info2, 1re anne SM/SMI 73
Recherche dichotomique : exemple
Considrons le tableau T :
Si la valeur cherch est 16 alors les indices inf, sup et milieu vont voluer comme suit :
Si la valeur cherch est 9 alors les indices inf, sup et milieu vont voluer comme suit :
372927171512973
564milieu5588sup6550inf
214milieu338sup200inf
2007/2008 Info2, 1re anne SM/SMI 74
Recherche dichotomique : complexit
A chaque itration, on divise les indices en 3 intervalles : [inf, milieu-1] milieu [milieu+1, sup]Cas 1 : milieu-inf (inf+sup)/2 - inf (sup-inf)/2Cas 3 : sup-milieu sup -(inf+sup)/2 (sup-inf)/2
On passe dons successivement un intervalle dont le nombre dlments n/2, puis n/4, puis n/8, A la fin on obtient un intervalle rduit 1 ou 2 lments.
Le nombre dlments la k ime itration est : ()k-1n donc 2k n soit k log2n
Il y a au plus log2n itrations comportant 3 comparaisons chacune. La recherche dichotomique dans un tableau tri est dordre O(log2n)
2007/2008 Info2, 1re anne SM/SMI 75
Tri d'un tableau
Le tri consiste ordonner les lments du tableau dans lordre croissant ou dcroissant
Il existe plusieurs algorithmes connus pour trier les lments dun tableau : Le tri par slection-change Le tri par insertion Le tri rapide
Nous verrons dans la suite les trois algorithmes de tri. Le tri sera effectu dans l'ordre croissant
2007/2008 Info2, 1re anne SM/SMI 76
Tri par slection-change
Principe : Cest daller chercher le plus petit lment du tableau pour le mettre en premier, puis de repartir du second, daller chercher le plus petit lment pour le mettre en second etcAu i-me passage, on slectionne le plus petit lment parmi les positions i..n et on l'change ensuite avec T[i].
Exemple :
tape 1: on cherche le plus petit parmi les 5 lments du tableau. On lidentifie en troisime position, et on lchange alors avec llment 1 :
tape 2: on cherche le plus petit lment, mais cette fois partir du deuxime lment. On le trouve en dernire position, on l'change avec le deuxime:
tape 3:
58269
58962
68952
98652
2007/2008 Info2, 1re anne SM/SMI 77
Tri par slection-change : algorithme
Supposons que le tableau est not T et sa taille N
Pour i allant de 0 N-2indice_ppe iPour j allant de i + 1 N-1
Si T[j]
2007/2008 Info2, 1re anne SM/SMI 78
Tri par sTri par slectionlection--change : complexitchange : complexit
On fait n-1 fois, pour i de 0 n-2 : Un parcours de [i..n-1]. Il y a donc un nombre de lectures qui vaut :
(n(n--i) = 0 (ni) = 0 (n22))i=0..ni=0..n--22
Tri en complexitTri en complexit quadratique.quadratique.
2007/2008 Info2, 1re anne SM/SMI 79
Tri par insertionTri par insertion
la ime tape : Cette mthode de tri insre le ime lment T[i-1] la bonne
place parmi T[0], T[2]T[i-2]. Aprs ltape i, tous les lments entre les positions 0 i-1
sont tris. Les lments partir de la position i ne sont pas tris.
Pour insPour insrer lrer lllment T[iment T[i--1] :1] : Si T[i-1] T[i-2] : insrer T[i-1] la ime position ! Si T[i-1]
2007/2008 Info2, 1re anne SM/SMI 80
Tri par insertionTri par insertion
ValeursValeurs
0 1 2 3 0 1 2 3 nn--11
TriTrieses
ii--11
Plus grand :Plus grand :insinsrr en position i !en position i !
Non triNon tries etes etquelconquesquelconques
2007/2008 Info2, 1re anne SM/SMI 81
Tri par insertion
ValeursValeurs
0 1 2 3 0 1 2 3 nn--11
TriTrieses
ii--11
Non triNon tries etes et
quelconquesquelconques
Plus petit :Plus petit :
LLinsinsrer rer gauche.gauche.
2007/2008 Info2, 1re anne SM/SMI 82
37194
Tri par insertion : exemple
tape 1: on commence partir du 2 ime lment du tableau (lment 4). On cherche linsrer la bonne position par rapport au sous tableau dj tri (form de llment 9) :
tape 2: on considre llment suivant (1) et on cherche linsrer dans une bonne position par rapport au sous tableau tri jusqu ici (form de 4 et 9):
tape 3:
tape 4:
37149 37194
39741
97431
37941
2007/2008 Info2, 1re anne SM/SMI 83
Tri par insertion : algorithme
Supposons que le tableau est not T et sa taille N
Pour i allant de 1 N-1decaler vraie; j iTantque ((j >0) et (decaler))
Si T[j]
2007/2008 Info2, 1re anne SM/SMI 84
Tri par insertion : la complexitTri par insertion : la complexit
On fait n-1 fois, pour i de 1 n-1 : Jusqu i changes au maximum (peut-tre moins). Le nombre dchanges peut donc atteindre :
i = 0 (ni = 0 (n22))i=1..ni=1..n--11
Tri en complexitTri en complexit quadratique.quadratique.
2007/2008 Info2, 1re anne SM/SMI 85
Tri rapide
Le tri rapide est un tri rcursif bas sur l'approche "diviser pour rgner" (consiste dcomposer un problme d'une taille donne des sous problmes similaires mais de taille infrieure faciles rsoudre)
Description du tri rapide : 1) on considre un lment du tableau qu'on appelle pivot 2) on partitionne le tableau en 2 sous tableaux : les lments
infrieurs ou gaux au pivot et les lments suprieurs au pivot. on peut placer ainsi la valeur du pivot sa place dfinitive entre les deux sous tableaux
3) on rpte rcursivement ce partitionnement sur chacun des sous tableaux cres jusqu' ce qu'ils soient rduits un seul lment
2007/2008 Info2, 1re anne SM/SMI 86
Procdure Tri rapide
Procdure TriRapide(tableau T : rel par adresse, p, r: entier par valeur)variable q: entierSi p
2007/2008 Info2, 1re anne SM/SMI 87
Procdure de partition
Procdure Partition(tableau T :rel par adresse, p, r: entier par valeur,q: entier par adresse )
Variables i, j: entierpivot: relpivot T[p], ip+1, j rTantQue (i
2007/2008 Info2, 1re anne SM/SMI 88
Tri rapide : la complexitTri rapide : la complexit
Le tri rapide a une complexit moyenne dordre O(n log2n). Dans le pire des cas, le tri rapide reste dordre O(n2) Le choix du pivot influence largement les performances du tri
rapide
Le pire des cas correspond au cas o le pivot est chaque choix le plus petit lment du tableau (tableau dj tri)
diffrentes versions du tri rapide sont proposs dans la littrature pour rendre le pire des cas le plus improbable possible, ce qui rend cette mthode la plus rapide en moyenne parmi toutes celles utilises
2007/2008 Info2, 1re anne SM/SMI 89
Tri : Analyse de complexit
Tri insertion ou Tri slection sont dordre O(N2) Si N=106 alors N2 = 1012 Et si on peut effectuer 106
oprations par seconde alors lalgorithme exige 11,5 jours
Tri rapide est dordre O(Nlog2N)
Si N=106 alors Nlog2N = 6N Et si on peut effectuer 106
oprations par seconde alors lalgorithme exige 6 secondes
2007/2008 Info2, 1re anne SM/SMI 90
Enregistrements
Les langages de programmation offrent, en plus des types de base(entier, rel, boolen), dautres types de donnes appels enregistrements.
Un enregistrement est un regroupement de donnes qui doivent tre considrs ensemble.
Exemple: les fiches dtudiants. Chaque fiche est caractrise par : un nom et prnom, numro dinscription, ensemble de notes
En pseudo-code : enregistrement FicheEtudiantDebut nom, prenom : chaine de caractres
numero : entiertableau notes[10] : rel
Fin
2007/2008 Info2, 1re anne SM/SMI 91
Enregistrements
Un enregistrement est un type comme les autres types. Ainsi la dclaration suivante :
f, g : FicheEtudiantdfinit deux variables f et g enregistrements de type FicheEtudiant Lenregistrement FicheEtudiant contient plusieurs parties (champs), on
y accde par leur nom prcd dun point "." : f.nom dsigne le champ (de type chaine) nom de la fiche f f.notes[i] dsigne le champ (de type rel) notes[i] de la fiche f Pour dfinir les champs dun enregistrement, on crit :
f: FicheEtudiantf.nom "XXXXX" f.prenom "YYYYY" f.numero 1256f.notes[2] 12.5
Les affectations entre enregistrement se font champ par champ
2007/2008 Info2, 1re anne SM/SMI 92
Utilisation des enregistrements
Procedure affiche(FicheEtudiant v)debutcrire("No:",v.numero, "-",v.prenom)Pour i allant de 0 v.notes.taille() fairecrire(v.notes[i], " ")FinPourfinProcedure
Enregistrement ComplexeDebut re : rel
im: relFin
2007/2008 Info2, 1re anne SM/SMI 93
Enregistrements : exemple
Fonction add( z1, z2 :Complexe par valeur) : ComplexeDebut Variable z: Complexe
z.re=z1.re+z2.rez.im=z1.im+z2.im
retourne(z)FinFonction
Programme principaleVariables u, v, w: Complexe
a, b, c, d : relDebut ecrire("Entrez 4 valeurs relles :")
lire(a,b,c,d)u.re a u.im b v.re c v.im dww add(u,v)ecrire("Somme( ,) = :", w.re,w.im)
Fin
2007/2008 Info2, 1re anne SM/SMI 94
Structures en C
Dclaration :struct personne {
char nom[20];char prenom[20];int no_employe;
} Ce type de structure est utilis pour dclarer des variables de la
manire suivante : struct personne p1, p2; Accs aux membres : p1.nom="XAAA";p2.no_employe=20; Initialisation : struct personne p={"AAAA", "BBBB", 5644}; Tableau de structure : struct personne T[100];