94
2007/2008 Info2, 1ère année SM/SMI 1 Langage C Langage C Langage C Langage C Présentation générale et instructions de base

Programmation c.pdf

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];