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