Aller au contenu

Questions : boucles bornées imbriquées

1. Tracé de motifs

Info

  • L'instruction print('*') affiche un caractère * et passe à la ligne suivante.
  • L'instruction print('*', end='') affiche un caractère * et ne passe pas à la ligne.
  • L'instruction print() n'affiche aucun caractère et passe à la ligne.

Question 1.1

Question

Parmi les 4 programmes suivants, lequel permet d'afficher le motif ci-dessous ?

****
****
****
****
****        

Programme A :

for i in range (5):
    for j in range(i):
        print('*', end='')
    print()

Programme B :

for i in range (5):
    for j in range(5):
        print('*', end='')
    print()

Programme C :

for i in range (4):
    for j in range(5):
        print('*', end='')
    print()

Programme D :

for i in range (5):
    for j in range(4):
        print('*', end='')
    print()

  • A
  • B
  • C
  • D
  • A
  • B
  • C
  • D

Le motif comporte 5 lignes, chacune étant composée de 4 étoiles.

Question 1.2

Question

Parmi les 4 programmes suivants, lequel permet d'afficher le motif ci-dessous ?

*
**
***
****
*****       

Programme A :

for i in range (5):
    for j in range(i):
        print('*', end='')
    print()

Programme B :

for i in range (5):
    for j in range(i + 1):
        print('*', end='')
    print()

Programme C :

for i in range (5):
    for j in range(5):
        print('*', end='')
    print()

Programme D :

for i in range (5):
    for j in range(5 - i):
        print('*', end='')
    print()

  • A
  • B
  • C
  • D
  • A
  • B
  • C
  • D

Le motif comporte 5 lignes, chacune étant composée de 1 à 5 étoiles. Le nombre d'étoiles tracées vaut 1 sur la première ligne, 2 sur la 2e, etc. Seule la boucle for j in range(i + 1) permet de tracer le nombre correct d'étoiles, lorsque i varie de 0 à 4.

Question 1.3

Question

Parmi les 4 programmes suivants, lequel permet d'afficher le motif ci-dessous ?

*****
****
***
**
*       

Programme A :

for i in range (5):
    for j in range(i):
        print('*', end='')
    print()

Programme B :

for i in range (5):
    for j in range(i+1):
        print('*', end='')
    print()

Programme C :

for i in range (5):
    for j in range(5):
        print('*', end='')
    print()

Programme D :

for i in range (5):
    for j in range(5-i):
        print('*', end='')
    print()

  • A
  • B
  • C
  • D
  • A
  • B
  • C
  • D

Le motif comporte 5 lignes, chacune étant composée de 5 à 1 étoile(s). Le nombre d'étoiles tracées vaut 5 sur la première ligne, 4 sur la 2e, etc. Seule la boucle for j in range(5 - i) permet de tracer le nombre correct d'étoiles, lorsque i varie de 0 à 4.


2. Questions numériques

Question 2.1

Question

Quelle serait la valeur de la variable total à l'issue de l'exécution de ces instructions ?

total =  0
for i in range(4):
    for j in range(3):
        total = total + 1
  • 10
  • 12
  • 14
  • 20
  • 10
  • 12
  • 14
  • 20

i prend les valeurs 0 à 3, soit 4 valeurs.
Pour chaque valeur de i:
- j prend les valeurs 0 à 2 soit 3 valeurs.
- La variable total est augmentée 3 fois de la quantité 1

Finalement, total vaut 0 + 4*3 = 12

Question 2.2

Question

Quelle serait la valeur de la variable total à l'issue de l'exécution de ces instructions ?

total =  0
for i in range(4):
    for j in range(i):
        total = total + i
  • 10
  • 12
  • 14
  • 20
  • 10
  • 12
  • 14
  • 20

i prend les valeurs 0 à 3.

Quand i = 0, j ne prend aucune valeur et total n'est pas augmenté.

Quand i = 1, j prend la valeur 0 et total est augmenté la valeur de i, soit de 1.

Quand i = 2, j prend les valeurs 0 puis 1, et total est augmenté 2 fois de la valeur de i, soit de 2*2 = 4.

Quand i = 3, j prend les valeurs 0, 1 et 2, et total est augmenté 3 fois de la valeur de i, soit de 3*3 = 9.

Finalement, total vaut 0 + 1 + 2*2 + 3*3 = 14.

valeurs ajoutées à total j = 0 j = 1 j = 2 
i = 0  X   X   X 
i = 1  1   X   X 
i = 2  2   2    X 
i = 3  3   3   3 

Question 2.3

Question

Quelle serait la valeur de la variable total à l'issue de l'exécution de ces instructions ?

total =  0
for i in range(5):
    for j in range(i):
        total = total + j
  • 10
  • 12
  • 14
  • 20
  • 10
  • 12
  • 14
  • 20

i prend les valeurs 0 à 4.

Quand i = 0, j ne prend aucune valeur et total n'est pas augmenté.

Quand i = 1, j prend la valeur 0 et total est augmenté de 0.

Quand i = 2, j prend les valeurs 0 puis 1, et total est augmenté à chaque fois de la valeur de j, soit de 0 + 1 = 1.

Quand i = 3, j prend les valeurs 0, 1 et 2, et total est augmenté à chaque fois de la valeur de j, soit de 0 + 1 + 2 = 3.

Quand i = 4,j prend les valeurs 0, 1, 2 et 3, et total est augmenté à chaque fois de la valeur de j, soit de 0 + 1 + 2 + 3 = 6

Finalement, total vaut 0 + 1 + 3 + 6 = 10

valeurs ajoutées à total j = 0 j = 1 j = 2  j = 3
i = 0  X   X   X   X 
i = 1  0   X   X   X 
i = 2  0   1   X   X 
i = 3  0   1   2   X 
i = 4  0   1   2   3 

3. Tracés en boucles

Les tracés suivants ont été réalisés dans un environnement Jupyter, à l'aide du module mobilechelonian qui permet d'utiliser l'essentiel des méthodes liées à la tortue. Pour exécuter les codes dans un notebook Jupyter, les instructions sont à précéder de :
from mobilechelonian import Turtle.

Dans un environnement standard on pourra utiliser le module turtle, avec quelques adaptations du code.

Question 3.1

Question

Parmi les boucles imbriquées suivantes, laquelle permet de faire tracer à la tortue la figure ci-dessous ?

trois carrés

Boucle A :

t = Turtle()
for nb_carre in range(4) : 
    for nb_cote in range(3) :
        t.forward(100)
        t.left(90)
    t.right(120) 

Boucle B :

t = Turtle()
for nb_carre in range(3) : 
    for nb_cote in range(4) :
        t.forward(100)
        t.left(90)
    t.left(30) 

Boucle C :

t = Turtle()
for nb_carre in range(3) : 
    for nb_cote in range(4) :
        t.forward(100)
        t.left(90)
    t.left(120) 

Boucle D :

t = Turtle()
for nb_carre in range(3) : 
    for nb_cote in range(4) :
        t.forward(100)
        t.left(120)
    t.left(90) 

  • A
  • B
  • C
  • D
  • A
  • B
  • C
  • D

Il y a 3 carrés à tracer (range(3)) et chaque carré possède 4 côtés (range(4)). Les angles du carré font 90° et chaque carré est l'image d'un autre par une rotation d'un tiers d'angle plein (360/3 = 120°). Le sens de cette rotation importe peu : t.right(120) aurait aussi convenu.

Question 3.2

Question

Parmi les boucles imbriquées suivantes, laquelle permet de faire tracer à la tortue la figure ci-dessous ?

trois carrés

Boucle A :

t = Turtle()
for nb_poly in range(6) : 
    for nb_cote in range(3) :
        t.forward(80)
        t.left(120)
    t.left(60) 

Boucle B :

t = Turtle()
for nb_poly in range(3) : 
    for nb_cote in range(6) :
        t.forward(80)
        t.left(120)
    t.left(60) 

Boucle C :

t = Turtle()
for nb_poly in range(6) : 
    for nb_cote in range(3) :
        t.forward(80)
        t.left(60)
    t.left(120) 

Boucle D :

t = Turtle()
for nb_poly in range(3) : 
    for nb_cote in range(6) :
        t.forward(80)
        t.left(60)
    t.left(120) 

  • A
  • B
  • C
  • D
  • A
  • B
  • C
  • D

Il y a 3 hexagones réguliers à tracer (range(3)) et chaque hexagone possède 6 côtés (range(6)). Les angles de l'hexagone font 120° (donc la tortue doit pivoter de 180 - 120 = 60°) et chaque hexagone est l'image d'un autre par une rotation d'un tiers d'angle plein (360/3 = 120°). Le sens de cette rotation importe peu : t.right(120) aurait aussi convenu.