Aller au contenu principal
BacInfo

Ch. 04 · Leçon 2

Série d'exercices N°2 — Structures itératives et fonctions

70 minanalyse

Ce que vous saurez faire

  • Tracer l'exécution d'une fonction utilisant une structure itérative
  • Identifier le rôle d'un sous-programme à partir de son code
  • Construire le TDOL (Tableau de Déclaration des Objets Locaux) d'une fonction
  • Concevoir une solution algorithmique à base de fonctions pour un problème de calcul

id: 33-1520-serie-2-structures-iteratives-fonctions slug: 33-1520-serie-2-structures-iteratives-fonctions titre: Série d'exercices N°2 — Structures itératives et fonctions chapitre: 4 chapitre_titre: Les sous-programmes lecon: 2 niveau: 4eme-sci ordre: 20 prerequis:

  • structures-iteratives
  • fonctions-procedures duree_estimee_min: 70 mots_cles:
  • fonction
  • procedure
  • structure iterative
  • factorielle
  • pgcd
  • trace
  • bac langages:
  • analyse objectifs:
  • Tracer l'exécution d'une fonction utilisant une structure itérative
  • Identifier le rôle d'un sous-programme à partir de son code
  • Construire le TDOL (Tableau de Déclaration des Objets Locaux) d'une fonction
  • Concevoir une solution algorithmique à base de fonctions pour un problème de calcul status: published source_pdf: 33_1520.pdf source_pages:
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10 kind: exercices

Cette série d'exercices porte sur l'analyse et la conception de fonctions mettant en œuvre les structures itératives (boucles Pour, Tant que, Répéter). Pour chaque fonction proposée, il s'agit de :

  • compléter le TDOL (Tableau de Déclaration des Objets Locaux),
  • exécuter pas à pas la fonction sur les valeurs données et indiquer le retour,
  • déduire le rôle de la fonction.

Exercice 1 — Analyse de cinq fonctions (6 pts, 20 min)

Pour chaque module ci-dessous :

  1. Donner le retour correspondant après exécution.
  2. Donner le rôle du module.

Fonction F1

Fonction F1 (a : entier) : entier
Début
    R ← 1
    Pour i de 1 à a faire
        R ← R * i
    FinPour
    Retourner(R)
FIN

Question : Que retourne F1 pour a = 5 ?

Voir le corrigé

TDOL de F1

ObjetType/Nature
Rentier
ientier

Trace pour a = 5

Trace d'exécution
0 / 6
InstructioniR
01···??
02···??
03···??
04···??
05···??
06···??

Rôle : F1 calcule la factorielle de a (c'est-à-dire a!).

Fonction F2

Fonction F2 (x : entier) : booléen
DEBUT
    nb ← 0
    Pour i de 1 à x faire
        Si x mod i = 0 alors
            nb ← nb + 1
        Fin Si
    Fin Pour
    Si nb = 2 alors
        test ← vrai
    Sinon
        test ← faux
    Fin si
    Retourner(test)
FIN

Question : Que retourne F2 pour x = 8 et pour x = 5 ?

Voir le corrigé

TDOL de F2

ObjetType/Nature
ientier
nbentier
testbooléen

Trace pour x = 8 — on compte les diviseurs de 8 :

i8 mod inb
101
202
3≠ 02
403
5≠ 03
6≠ 03
7≠ 03
804

nb = 4 ≠ 2F2(8) = faux

Trace pour x = 5 — diviseurs de 5 :

i5 mod inb
101
2≠ 01
3≠ 01
4≠ 01
502

nb = 2F2(5) = vrai

Rôle : F2 vérifie si x est un nombre premier (un entier est premier s'il admet exactement 2 diviseurs).

Fonction F3

Fonction F3 (a, b : entier) : entier
Début
    R ← 1
    Pour i de 1 à b faire
        R ← R × a
    FinPour
    Retourner(R)
FIN

Question : Que retourne F3 pour a = 2 et b = 4 ?

Voir le corrigé

TDOL de F3

ObjetType/Nature
Rentier
ientier

Trace pour a = 2, b = 4

Trace d'exécution
0 / 5
InstructioniR
01···??
02···??
03···??
04···??
05···??

Rôle : F3 calcule a à la puissance b (soit a^b).

Fonction F4

Fonction F4 (ch : chaîne) : booléen
Début
    test ← vrai
    i ← 0
    Répéter
        si ch[i] ∈ ["a".."z", "A".."Z"] alors
            i ← i + 1
        sinon
            test ← faux
        finSi
    jusqu'à (i = long(ch)) ou (test = faux)
    Retourner(test)
FIN

Question : Que retourne F4 pour ch = 'CD Rom' et pour ch = 'CDrom' ?

Voir le corrigé

TDOL de F4

ObjetType/Nature
testbooléen
ientier

Trace pour ch = 'CD Rom' (longueur 6)

ich[i]alphabétique ?test
0'C'ouivrai
1'D'ouivrai
2' 'nonfaux

Arrêt : test = fauxF4('CD Rom') = faux

Trace pour ch = 'CDrom' (longueur 5)

ich[i]alphabétique ?test
0'C'ouivrai
1'D'ouivrai
2'r'ouivrai
3'o'ouivrai
4'm'ouivrai

À ce stade i devient 5, donc i = long(ch) ⇒ arrêt. F4('CDrom') = vrai

Rôle : F4 vérifie si une chaîne est alphabétique (uniquement composée de lettres).

Amélioration possible : on peut écrire la condition de manière plus lisible avec majus(ch[i]) ∈ ["A".."Z"].

Fonction F5

Fonction F5 (a, b : entier) : entier
Début
    Tant que (a ≠ b) faire
        Si (a > b) Alors
            a ← a - b
        sinon
            b ← b - a
        FinSi
    Fin Tantque
    Retourner(a)
FIN

Question : Que retourne F5 pour a = 20 et b = 14 ?

Voir le corrigé

TDOL de F5 : aucune variable locale supplémentaire (les paramètres a et b sont modifiés directement).

Trace pour a = 20, b = 14

Trace d'exécution
0 / 7
Instructionab
01···??
02···??
03···??
04···??
05···??
06···??
07···??

Rôle : F5 détermine le PGCD (Plus Grand Commun Diviseur) de a et b par la méthode des soustractions successives.

Exercice 2 — Analyse d'algorithme (Bac 2019, 5 pts, 15 min)

Soit l'algorithme suivant :

Algorithme Inconnu
Début
    Lire(c1)
    Lire(c2)
    c3 ← 0
    Pour i de 0 à Long(c2) - 1 Faire
        Si Majus(c2[i]) = Majus(c1) Alors
            c3 ← c3 + 1
        Fin Si
    Fin Pour
    Ecrire(c3)
Fin

Question 1 — Bonne proposition de TDO

Voici les quatre propositions de tableau de déclaration des objets :

Propositionc1c2c3
1chaînechaîneentier
2caractèrecaractèreentier
3chaînecaractèreréel
4caractèrechaîneentier

Quelle est la bonne proposition ?

Voir le corrigé

On analyse les indices fournis par l'algorithme :

  • c3 ← 0 puis c3 ← c3 + 1 : c3 est un entier.
  • Long(c2) et l'accès c2[i] : c2 est une chaîne.
  • Majus(c1) (sans indice) : c1 est un caractère.

Proposition 4 : c1 caractère, c2 chaîne, c3 entier.

Question 2 — Message d'affichage significatif

Parmi les instructions suivantes, laquelle remplace utilement Ecrire(c3) ?

  • A. Ecrire("Le nombre de caractères majuscules de", c1, "et", c2, "est :", c3)
  • B. Ecrire("Le nombre d'occurrences de", c1, "dans", c2, "est :", c3)
  • C. Ecrire("Le nombre de chiffres dans", c2, "est :", c3)
  • D. Ecrire("Le nombre de caractères communs entre", c1, "dans", c2, "est :", c3)
Voir le corrigé

L'algorithme compare la majuscule de chaque caractère de la chaîne c2 à la majuscule du caractère c1, et compte le nombre de correspondances : il compte donc les occurrences de c1 dans c2 (en ignorant la casse).

Exemple : pour c1 = "B" et c2 = "Bombom" :

ic2[i]Majus(c2[i]) = Majus(c1) ?c3
0'B'oui1
1'o'non1
2'm'non1
3'b'oui2
4'o'non2
5'm'non2

Résultat : c3 = 2.

Réponse B : Ecrire("Le nombre d'occurrences de", c1, "dans", c2, "est :", c3)

Exercice 3 — Séquence sur un entier (Bac 2019, 5 pts, 15 min)

Soit la séquence algorithmique suivante, où x est un entier naturel :

nb ← 1
TantQue (x div 10) ≠ 0 Faire
    nb ← nb + 1
    x ← x div 10
Fin TantQue

Question 1 — Valeur finale de nb

Calculer la valeur finale de nb pour :

  • x = 5403 → ?
  • x = 176 → ?
  • x = 3 → ?
Voir le corrigé

Pour x = 5403 :

xx div 10nb
54035402
540543
5454
50arrêt

nb = 4

Pour x = 176 :

xx div 10nb
176172
1713
10arrêt

nb = 3

Pour x = 3 :

xx div 10nb
30arrêt (la boucle ne s'exécute pas)

nb = 1

Question 2 — Rôle de la séquence

Voir le corrigé

Cette séquence détermine le nombre de chiffres de l'entier naturel x.

Question 3 — Version sans structure itérative

Écrire une séquence algorithmique équivalente sans utiliser de boucle.

Voir le corrigé

On peut convertir l'entier en chaîne puis prendre sa longueur :

nb ← long(convch(x))

convch convertit un entier en chaîne de caractères.

Exercice 4 — Propagation Covid-19 (Prototype Bac 2022, 5 pts, 20 min)

La propagation de l'épidémie Covid-19 suit une croissance exponentielle. Pour déterminer le nombre total de personnes contaminées pendant un nombre de jours N donné et pour x personnes initialement contaminées, on utilise la formule :

$$ S = \sum_{i=0}^{N} \frac{x^{i}}{i!} = 1 + x + \frac{x^{2}}{2!} + \frac{x^{3}}{3!} + \cdots + \frac{x^{N}}{N!} $$

Donner un algorithme solution à ce problème, sachant que x et N sont deux entiers strictement supérieurs à 0.

Voir le corrigé

La solution s'appuie naturellement sur deux fonctions déjà rencontrées dans l'exercice 1 :

  • factoriel(i) calcule i!
  • puissance(x, i) calcule x^i

Algorithme principal

Algorithme Epidemie
Début
    Répéter
        Ecrire("Donner x : "), Lire(x)
        Ecrire("Donner N : "), Lire(N)
    jusqu'à (x > 0) et (N > 0)

    S <- 1
    Pour i de 1 à N faire
        S <- S + puissance(x, i) / factoriel(i)
    Fin Pour

    Ecrire("La somme = ", S)
Fin

TDO principal

ObjetType/Nature
x, N, ientier
Sréel
puissancefonction
factorielfonction

Fonction factoriel

Fonction factoriel (a : entier) : entier
Début
    R ← 1
    Pour i de 1 à a faire
        R ← R * i
    FinPour
    Retourner(R)
FIN

Fonction puissance

Fonction puissance (a, b : entier) : entier
Début
    R ← 1
    Pour i de 1 à b faire
        R ← R × a
    FinPour
    Retourner(R)
FIN

Bravo d'être arrivé jusqu'ici. Marquez la leçon terminée pour ancrer le progrès.