Correction du TD n°2

Exercice 1

001  fonction pgcd(v1,v2):entier
002    Données v1,v2 : entier
003    Locales v : entier
004    v := min(v1,v2)
005    tantque v > 1 et ( v1 modulo v <> 0 ou v2 modulo v <> 0 ) faire 
006     v := v - 1
007    fait
008    resultat : v
009  fin fonction

On utilise la fonction min suivante:

001  fonction min(v1,v2):entier
002    Données v1,v2 : entier
003    Locales m : entier
004    si v1 < v2 alors
005      m := v1
006      sinon
007      m := v2
008    fsi
009    resultat : m
010  fin fonction

Exercice 2

Validité des saisies

001  fonction capaciteCorrecte(v):booleen
002    Données v : entier
003    Locales flag : booleen
004    si v = 1 ou v = 2 ou v = 4 alors
005      flag := VRAI
006      sinon
007      flag := FAUX
008    fsi
009    resultat : flag
010  fin fonction

Remplissage

001  action remplissage(deltaH,hauteurVase,plein,reste,seaux1,seaux2,seaux4)
002    Données   deltaH,hauteurVase : entier
003    Résultats plein : booleen
004              reste : entier
005              seaux1,seaux2,seaux4 : entier
006    Locales   hauteurCumulee,seau : entier
007    seaux1 := 0
008    seaux2 := 0
009    seaux4 := 0
010    hauteurCumulee := 0
011    faire
012      seau := lire()
013      si capaciteCorrecte(seau) alors
014        dans le cas de seau
015          1 : seaux1 := seaux1 + 1
016          2 : seaux2 := seaux2 + 1
017          4 : seaux4 := seaux4 + 1
018        fin dans le cas de
019        hauteurCumulee := hauteurCumulee + seau * deltaH
020      fsi
021    tantque hauteurCumulee < hauteurVase
022    si hauteurCumulee = hauteurVase alors
023      plein := VRAI
024      reste := 0
025    sinon
026      dans le cas de seau
027        1 : seaux1 := seaux1 - 1
028        2 : seaux2 := seaux2 - 1
029        3 : seaux4 := seaux4 - 1
030      fin dans le cas de
031      hauteurCumulee := hauteurCumulee - seau * deltaH
032      reste := hauteurVase - hauteurCumulee
033      plein := FAUX
034    fsi
035  fin action

Programme principal

001  action main(args)
002    Données args : tableau de Chaine
003    Locales deltaH,hauteurVase : entier
004            plein : booleen
005            reste : entier
006            seaux1,seaux2,seaux4 : entier
007    deltaH = lire()
008    hauteurVase = lire()
009    remplissage(deltaH,hauteurVase,plein,reste,seaux1,seaux2,seaux4)
010    si plein alors
011      ecrire("Le vase est plein.")
012    sinon
013      ecrire("Le vase n'est pas plein. Il reste ",reste," unités.")
014    fsi
015    ecrire("Les seaux utilisés sont ",seaux1," de 1, ",
016                                      seaux2," de 2 et ",
017                                      seaux4," de 4.")
018  fin action

Seconde version de la méthode de remplissage 

001  action remplissage(deltaH,hauteurVase,plein,reste,seaux1,seaux2,seaux4)
002    Données   deltaH,hauteurVase : entier
003    Résultats plein : booleen
004              reste : entier
005              seaux1,seaux2,seaux4 : entier
006    Locales   hauteurCumulee,seau,hauteur : entier
007    seaux1 := 0
008    seaux2 := 0
009    seaux4 := 0
010    hauteurCumulee := 0
011    hauteur := 0
012    faire
013      seau := lire()
014      si capaciteCorrecte(seau) alors
015        hauteur := hauteurCumulee + seau * deltaH
016        si hauteur <= hauteurVase alors
017          hauteurCumulee = hauteur
018          dans le cas de seau
019            1 : seaux1 := seaux1 + 1
020            2 : seaux2 := seaux2 + 1
021            4 : seaux4 := seaux4 + 1
022          fin dans le cas de
023        fsi
024      fsi
025    tantque hauteur < hauteurVase
026    si hauteurCumulee = hauteurVase alors
027      plein := VRAI
028    sinon
029      plein := FALSE
030    fsi
031    reste := hauteurVase - hauteurCumulee
032  fin action

Auteur: Nicolas JANEY
UFR Sciences et Techniques
Université de Besançon
16 Route de Gray, 25030 Besançon
nicolas.janey@univ-fcomte.fr