language de Programmation structuree

download language de Programmation structuree

of 11

Transcript of language de Programmation structuree

  • 8/10/2019 language de Programmation structuree

    1/11

    1

    Programmation structure

    Universit de Nice - Sophia Antipolis

    Richard GrinVersion 1.1.3 1/10/11

    Richard Grin Programmation structure page 2

    Plan

    Algorithme Principe de base de la programmation structure

    Les structures

    Traduction en Java

    Richard Grin Programmation structure page 3

    Objectif

    Matriser la complexit lors de lcriture de

    programmes/algorithmes comportant de

    nombreuses instructions

    Richard Grin Programmation structure 4

    Algorithme

    Richard Grin Programmation structure 5

    Algorithme

    Lenchanement des oprations lmentaires qui

    permettent de rsoudre un problme sappelle un

    algorithme

    Nimporte quelle machine ou individu qui suit la

    lettre lalgorithme obtiendra le bon rsultat, mme sil

    ne comprend pas ce quil fait

    Programme et algorithme

    Un programme est crit dans un langage qui peut

    tre excut par une machine

    Un algorithme est crit dans un pseudo-langage,

    souvent proche dun langage informatique mais

    dbarrass de dtails techniques lis aux

    langages informatiques ou la machine, qui

    gnent la comprhension du cheminement

    logique

    Richard Grin Programmation structure page 6

  • 8/10/2019 language de Programmation structuree

    2/11

    2

    Exemple : algorithme dEuclide

    On cherche le PGCD de deux entiers naturels aet b (a > b)

    Description informelle de lalgorithme :

    1. Si b = 0, le PGCD est a ; FIN

    2. sinon,

    calculer r le reste de la division de a par b,

    puis remplacer a par b, puis b par r,

    puis recommencer ltape prcdente

    Richard Grin Programmation structure page 7

    Exemple de calcul de PGCD

    PGCD de 18 et de 14 (a = 18 et b = 14) b 0 ; r = 18 modulo 14 = 4 ; a = 14 ; b = 4

    b 0 ; r = 14 modulo 4 = 2 ; a = 4 ; b = 2

    b 0 ; r = 4 modulo 2 = 0 ; a = 2 ; b = 0

    b = 0 donc on sarrte

    2 est le PGCD de 18 et de 14

    Richard Grin Programmation structure page 8

    Transcription plus formelle

    Il faut maintenant transcrire cette description

    informelle dans les termes de la programmation

    structure

    a nest pas toujours vident

    Il peut exister plusieurs transcriptions possibles

    Richard Grin Programmation structure page 9

    Exemple de pseudo-langage

    Entrer a, b

    tant que (b 0) rpter {

    r := a modulo b

    a := b

    b := r

    }Afficher a

    Richard Grin Programmation structure page 10

    Preuve de programme/dalgorithme

    Pour les programmes les plus simples il est

    possible de dmontrer que le rsultat de

    lalgorithme est correct

    Le plus souvent la preuve est trop complexe et on

    se contente deffectuer des tests sur le

    programme crit dans le langage informatique

    La preuve de programme sappuie

    essentiellement sur les invariants de boucle (voir

    section dans la suite de ce cours)

    Richard Grin Programmation structure page 11

    Complexit dun algorithme

    Il existe le plus souvent plusieurs algorithmes

    pour rsoudre un problme

    La complexit dun algorithme mesure lefficacit

    dun algorithme en temps de calcul ou en quantit

    de mmoire

    On recherche des algorithmes qui ncessitent

    moins de temps de calcul ou (souvent

    incompatible) moins despace mmoire

    Richard Grin Programmation structure page 12

  • 8/10/2019 language de Programmation structuree

    3/11

    3

    Calcul de la complexit

    La complexit dpend le plus souvent de la taillen des donnes traiter

    Le calcul de la complexit dun algorithme donne

    une valuation du nombre doprations

    significatives en fonction de la taille n

    Par exemple, on dira quen moyenne (notion

    probabiliste car dpend des donnes) le tri par

    insertion de n lments ncessite (n - n) / 4

    oprations de comparaison entre lments trier

    Richard Grin Programmation structure page 13

    Notation O()

    La complexit est surtout importante pour lesgrands nombres (toujours rapide si petit nombre)

    Pour les grands nombres n est trs petit par

    rapport n

    On dit que le tri par insertion est en O(n), ce qui

    donne un ordre de grandeur pour lefficacit du tri

    par insertion

    Les meilleurs algorithmes de tri sont en O(n log n)

    Richard Grin Programmation structure page 14

    Classes de complexit

    Les algorithmes les plus rapides sont en O(1) : ne

    dpend pas de la taille des donnes traiter

    Algorithme linaire : O(n)

    Logarithmique : O(log n), meilleur que O(n)

    Moins bons :

    Polynomial : en O(np) pour un certain p

    Exponentiel : en O(exp n) (catastrophique !)

    Richard Grin Programmation structure page 15

    Exemple

    Pour trier 30.000 lments, il faudra environ

    900.000.000 comparaisons avec le tri par

    insertion qui est en O(n)

    1.600.000 comparaisons avec un tri

    quicksort qui est en O(n log n)

    Richard Grin Programmation structure page 16

    Richard Grin Programmation structure page 17

    Principe de laprogrammation structure

    Principe gnral de base

    Un programme peut comporter des milliers, et

    mme des millions dinstructions

    Impossible pour un dveloppeur davoir une vision

    densemble et de grer cette complexit

    Il faut dcomposer le programme en lments plus

    simples apprhender

    Le discours de la mthode de Descartes : Diviser

    chacune des difficults que jexaminerai en autant

    de parcelles quil se pourrait, et quil serait requis

    pour les rsoudre.

    Richard Grin Programmation structure page 18

  • 8/10/2019 language de Programmation structuree

    4/11

    4

    Programmation structure

    Une mauvaise dcomposition peut rendre leproblme encore plus difficile rsoudre

    La programmation structure permet de bien

    dcomposer un programme complexe en parties

    plus simples comprendre

    Richard Grin Programmation structure page 19

    Principe

    Un programme est dcompos en modules Chaque module a une des structures de la

    programmation structure

    En plus de permettre une bonne dcomposition,

    ce principe offre un bon guide lors de lcriture du

    programme puisque les structures de la

    programmation structure sont simples et peu

    nombreuses

    Richard Grin Programmation structure page 20

    Spcification des modules

    Lorsquon introduit un nouveau module dans la

    dcomposition, il faut le dfinir de faon prcise

    En effet, lorsquon cherchera le dcomposer

    son tour, il ne faut pas avoir regarder ce qui

    lentoure

    Il faut donner une spcification du module qui

    dcrit la situation de dpart (les pr-conditions)

    ce qui sera obtenu la fin de lexcution du

    module (les post-conditions)

    Richard Grin Programmation structure page 21

    Spcification des modules

    La spcification dit ce que lon veut obtenir mais

    pas comment lobtenir

    Le comment sera donn lorsque le module

    sera dcompos son tour

    Richard Grin Programmation structure page 22

    Programmation par contrat

    Le contrat du module est le suivant :

    si on fournit au module des donnes qui satisfont

    aux pr-conditions, le module assure quil rendra

    un rsultat qui satisfera aux post-conditions

    Richard Grin Programmation structure page 23

    Exemple de spcification

    Pour une mthode qui insre un nombre entier n

    dans une liste de nombres entiers l dj trie par

    ordre croissantvoid inserer(Liste l, int n)

    Pr-condition :la liste dentiers l est trie par ordre croissant

    Post-condition :le nombre n est ajout la liste l

    la liste l est trie par ordre croissant

    Richard Grin Programmation structure page 24

  • 8/10/2019 language de Programmation structuree

    5/11

    5

    Richard Grin Programmation structure page 25

    Les structures de laprogrammation structure

    Structures de laprogrammation structure

    Chaque module a une des ces 3 structures :

    suite de modules

    alternative

    rptition

    Richard Grin Programmation structure page 26

    Suite

    Richard Grin Programmation structure page 27

    Faire Traitement 1 puis Traitement 2

    Chaque module a lui-mme une des

    structures de la programmation

    structure

    Cest le systme des poupes

    russes qui sembotent les unes

    dans les autres Se gnralise en une suite de n

    traitements (n > 2)

    Exemple

    Saisir une fraction (x / y)

    Rduire la fraction (on obtient a / b)

    m = a * b

    Richard Grin Programmation structure page 28

    Alternative

    Richard Grin Programmation structure page 29

    Si la condition est vraie,

    faire Traitement 1,

    sinon, faire Traitement 2

    Exemple si (x > y) {

    max = x;

    }

    sinon {

    max = y;

    }

    Variante (pour les cas o on ne fait rien si la

    condition est fausse) :

    si (x > max) {

    max = x;

    }

    Richard Grin Programmation structure page 30

  • 8/10/2019 language de Programmation structuree

    6/11

    6

    Rptition jusqu

    Richard Grin Programmation structure page 31

    Rpter Traitement

    jusqu ce que la condition ( de fin ) soit vraie

    Lordre naturel dexcution est

    de haut en bas et de gauche droite ;

    on ajoute une flche pour indiquer

    un autre ordre

    Exemple

    rpter {x = x + 10;

    } jusqu (x < y)

    Richard Grin Programmation structure page 32

    Rptition tant que

    Richard Grin Programmation structure page 33

    Tant que condition est vraie,

    rpter Traitement

    Exemple

    tant que (x < y) rpter {

    x = x + 10;

    }

    Richard Grin Programmation structure page 34

    Diffrence importanteentre jusqu et tant que

    Richard Grin Programmation structure page 35

    Avec jusqu, le traitement est excut au

    moins une fois

    Exemple

    rpter {

    x = x + 10;

    } jusqu (x >= y)

    Richard Grin Programmation structure page 36

    On commence par augmenter

    x de 10, mme si x >= y

    au dbut

  • 8/10/2019 language de Programmation structuree

    7/11

    7

    Rptition pour

    Cas particulier de la boucle tant que Utilis quand on sait au moment de lcriture de

    lalgorithme combien de fois la boucle va tre

    parcourue

    Pour i de 1 n rpter Traitement

    i sappelle la variable de boucle

    Richard Grin Programmation structure page 37

    Exemple

    pour i de 1 20 rpter {s = s + i;

    }

    Richard Grin Programmation structure page 38

    Richard Grin Programmation structure page 39

    Complment sur lesinvariants de boucle

    Cette section est rserve aux curieux qui

    souhaiteraient avoir une ide de la faon de

    prouver un algorithme en utilisant des invariants

    de boucle

    Il peut tre intressant de prouver des parties de

    programmes si on veut tre certain davoir bien

    pris en compte tous les cas de figure

    Richard Grin Programmation structure page 40

    Rappel sur les boucles Essentiellement 2 types de boucle :

    Tant que (condition) rpter traitement

    Rpter traitement jusqu (condition_de_fin)

    On peut se passer du 2me type qui peut tre

    remplac par :

    traitement suivi de tant que(non condition_de_fin)

    rpter traitement

    La suite de cette section ne considrera que les

    boucles tant que

    Appelons condition de rptition la condition

    dune boucle tant que Richard Grin Programmation structure page 41

    Invariant de boucle Un invariant de boucle est une expression

    boolenne toujours vraie au dbut et la fin dune

    certaine boucle

    Pour dmontrer quune expression boolenne est

    un invariant de boucle, il suffit de dmontrer que

    linvariant est vrai juste avant la boucle et que

    si lexpression est vraie au dbut de la boucle,

    et si la condition de rptition est vraie,

    alors lexpression est vraie la fin de la boucle

    Richard Grin Programmation structure page 42

  • 8/10/2019 language de Programmation structuree

    8/11

    8

    Invariant de boucle

    Entrer a, b

    a0 = a; b0 = b

    tant que (b 0) rpter {

    r := a modulo b

    a := b

    b := r

    }

    Afficher a

    Richard Grin Programmation structure page 43

    Invariant de boucle :

    les diviseurs de a0

    et de b0 sont les

    mmes que ceux de

    a et de b.

    a0 et b0 ont t

    introduits pour

    faciliter lexpression

    de linvariant de

    boucle

    Preuve de la boucle

    Il faut prouver que la boucle se terminera, ce quiest vident puisque b est un entier positif qui

    dcrot (dfinition du reste de la division entire :

    a = bq + r avec r < b)

    A la fin on doit trouver que a est bien le PGCD des

    2 nombres du dpart, compte tenu de linvariant

    de boucle et que la condition de rptition est

    fausse (puisquon est sorti de la boucle)

    Cest vrai car lensemble des diviseurs du a final

    est lensemble des diviseurs des a et b du dpart

    Richard Grin Programmation structure page 44

    Richard Grin Programmation structure page 45

    Traduction en Java

    Suite de traitements

    Suite dinstructions lmentaires :int x = 3;

    int y = x + 8;

    Bloc avec des accolades

    Un traitement peut tre reprsent en Java par un

    appel de mthode (tudi plus loin dans le cours)

    Richard Grin Programmation structure page 46

    Alternative if (x >= 0) {

    x = x + 1;

    }

    else {

    x = -x + 1;

    y++;

    }

    Variante :if (x >= 0) {

    x = x + 1;

    }

    Richard Grin Programmation structure page 47

    Alternative

    Possible de ne pas mettre daccolades sil ny a

    quune seule instruction dans le if ou le else

    if (x >= 0)

    x = x + 1;

    else

    x = -x + 1;

    if (x >= 0)

    x = x + 1;

    Pas recommand, car source derreurs !

    Richard Grin Programmation structure page 48

  • 8/10/2019 language de Programmation structuree

    9/11

    9

    Alternative

    Lorsque plusieurs if sont embots les uns dansles autres, un bloc else se rattache au dernier

    if qui na pas de else

    Richard Grin Programmation structure page 49

    Exemple

    x = 3;y = 8;

    if (x == y)

    if (x > 10)

    x = x + 1;

    else

    x = x + 2;

    Richard Grin Programmation structure 50

    Quelle valeur pour x

    la fin de ce code ?

    Facile de se tromper

    si on ne met pas

    daccolades,

    surtout si on indente

    mal son code !

    Exemple

    x = 3;

    y = 8;

    if (x == y) {

    if (x > 10) {

    x = x + 1;

    }

    }else {

    x = x + 2;

    }

    Richard Grin Programmation structure 51

    Mettre des accolades

    vite de se tromper !

    Expressions boolennes

    Ce sont des expressions dont le type Java estboolean ; elles peuvent avoir 2 valeurs : true

    (vrai) ou false (faux)

    Elles sont utilises par if ou par les rptitions

    (comme condition pour refaire une boucle)

    Oprateurs et , ou , non ; en Java

    && , || , !

    Richard Grin Programmation structure page 52

    Exemples x >= 0

    (x != 0) && (y / x > 2.3) // raccourci

    (x == 0) || (y / x > 2.3) // raccourci

    ! ((x == 0) || (y / x > 2.3))

    Richard Grin Programmation structure page 53

    Distinction de cas suivant une valeur

    Java a une instruction qui permet de simplifier du

    code avec des if embots dans le cas o la

    condition dpend de la valeur dune expression

    Richard Grin Programmation structure page 54

  • 8/10/2019 language de Programmation structuree

    10/11

    10

    Richard Grin Programmation structure 55

    switch

    switch(expression) {

    case val1: instructions;break;

    ...

    case valn: instructions;break;

    default: instructions;}

    expression est de type char,byte, short, ou int

    (ou String depuis le JDK 7)

    Sil ny a pas de clause default, rien nest excut

    si expression ne correspond aucun case

    Attention, sans break, les

    instructions du cas suivant

    sont excutes !

    Richard Grin Programmation structure 56

    Exemple de switchchar lettre;

    int nbVoyelles = 0, nbA = 0,nbT = 0, nbAutre = 0;

    . . .

    switch (lettre) {

    case 'a' : nbA++;

    case 'e' : // pas dinstruction !

    case 'i' : nbVoyelles++;

    break;

    case 't' : nbT++;

    break;

    default : nbAutre++;

    }

    Rptition jusqu

    do {

    x++;

    } while (x < 8)

    Quelle valeur aura x aprs ce code ?

    Richard Grin Programmation structure page 57

    Exemples en Java tant que

    while (x < 8) {

    x++;

    }

    Quelle valeur aura x aprs ce code ?

    Richard Grin Programmation structure page 58

    Rptition pour

    Richard Grin Programmation structure page 59

    En Java :for (initialisations ; test ; modifications) {

    instructions dans la boucle

    }

    Rptition pour

    La boucle for de Java est plus gnrale que

    pour ; la boucle for peut faire tout autre chose

    que dincrmenter la variable de boucle

    Le plus souvent la variable de boucle est

    dclare lintrieur de linstruction dinitialisation

    de for (sa porte est alors limite la boucle) :for (int i = 0; ; )

    Richard Grin Programmation structure page 60

  • 8/10/2019 language de Programmation structuree

    11/11

    11

    Exemple typique de rptition pour

    Richard Grin Programmation structure page 61

    for (int i = 0; i < 3; i++) {

    instructions dans la boucle

    }

    Question : combien de fois les instructions dans la

    boucle seront-elles excutes ?

    initialisations test modifications

    Exercice

    Reconstituer la structure pour laide desautres structures de la programmation structure

    Utiliser les poupes russes en donnant

    plusieurs tapes, chaque tape nutilisant quune

    seule structure de la programmation structure

    Richard Grin Programmation structure page 62

    Saut depuis une boucle en Java

    Pas prvu dans la programmation structure ; il

    faut jouer sur la condition de sortie pour sortir

    dune sortie en son milieu

    Prvu dans la plupart des langages informatique

    car bien pratique

    En Java, 2 instructions :break et continue

    break fait sortir de la boucle ; lexcution se

    poursuit juste aprs la fin de la boucle

    continue reste dans la boucle mais saute la fin

    de la boucle en cours

    Richard Grin Programmation structure page 63 Richard Grin Programmation structure 64

    Exemple de continue etbreak

    int somme = 0;

    for (int i = 0; i < 10; i++) {

    if (i % 2 == 0) continue;

    if (somme > 4) break;

    somme = somme + i;

    }

    System.out.println(somme);

    Quaffiche ce code ?