Aller au contenu

Répétitions

Exercice

1) Quelle est la valeur désignée par S après les lignes suivantes:

S ← 0
S ← S + 1
S ← S + 2
S ← S + 3
S ← S + 4
S ← S + 5
S ← S + 6
S ← S + 7
S ← S + 8
S ← S + 9
S ← S + 10
Solution
S ← 0      # S désigne la valeur 0
S ← S + 1  # S désigne la valeur 0+1
S ← S + 2  # S désigne la valeur 0+1+2
S ← S + 3  # S désigne la valeur 0+1+2+3
S ← S + 4  # S désigne la valeur 0+1+2+3+4
S ← S + 5  # S désigne la valeur 0+1+2+3+4+5
S ← S + 6  # S désigne la valeur 0+1+2+3+4+5+6
S ← S + 7  # S désigne la valeur 0+1+2+3+4+5+6+7
S ← S + 8  # S désigne la valeur 0+1+2+3+4+5+6+7+8
S ← S + 9  # S désigne la valeur 0+1+2+3+4+5+6+7+8+9
S ← S + 10 # S désigne la valeur 0+1+2+3+4+5+6+7+8+9+10, c'est à dire 55.

2) Comment pourriez-vous décrire brièvement chacune des lignes ci-dessus (exceptée la première) sans les réécrire toutes ?

Solution

Chaque affectation est de la forme S ← S + nombre.

On pourrait donc décrire ainsi les dix lignes (autre que l'initialisation S ← 0):

Pour chaque entier de 1 jusque 10:
    S ← S + entier

3) Un pseudocode équivalent à l'ensemble des lignes est le suivant (compléter les pointillés):

S ← 0
Pour chaque entier k entre 1 et 10:
    S ← ...............
Solution
S ← 0
Pour chaque entier k entre 1 et 10:
    S ← S + k

4) Pour traduire cela en python:

  • ouvrir l'application python
  • Ajouter un script
  • Donner un nom à ce script (par exemple somme)
  • Entrer le texte suivant dans l'éditeur:
S = 0
for k in range(1, 10+1):
    S = S+k
  • Sortir de l'éditeur de script
  • Aller sur les pointillés en face du nom de votre script
  • Sélectionner "Exécuter le script"
  • Taper le nom de la variable (ici S) dont vous voulez la valeur dans la console qui vient de s'ouvrir.

Important

  • Les deux-points en fin de ligne for sont nécessaires.
  • L'indentation (c'est à dire l'espace en début de ligne) pour tout le bloc concernant les instructions à répéter est indispensable.
  • Dans l'éditeur python de la NumWorks, l'indentation se fait seule, sauf si vous oubliez les deux-points. L'absence d'indentation rend le code faux, python ne peut deviner seul la délimitation du bloc à répéter.

A savoir: range et for

  • En langage Python, pour traduire:
Pour chaque entier k entre l'entier a et l'entier b:
    ....

on écrira:

for k in range(a,b+1):
    .......

Attention

Notez bien la dissymétrie de range: la première valeur est prise, on s'arrête juste avant la dernière.

Par contre en pseudocode, nous n'utilisons par le range de python et k prend chaque valeur entière de a à b (a et b compris) dans le pseudocode "Pour chaque entier k entre l'entier a et l'entier b:".

La syntaxe Python est à connaître:

for k in range(a,b+1):
    instruction 1 à répéter
    instruction 2 à répéter
    instruction 3 à répéter
    ...
instruction hors de la boucle

On retiendra notamment:

  • les deux-points en fin de ligne for
  • l'indentation des instructions à répéter.

Exercice

Avec le code suivant:

T = 0
for j in range(0, 4):
    S = j*j
    T = T + S   

1) Quelles sont les valeurs successives prises par j ?

Solution

j prend les valeurs 0, 1, 2, 3.

2) Décrire les valeurs successives prises par S et T en complétant un tableau comme le suivant :

Valeurs de j Valeurs de S Valeurs de T
0
0
1
2
3
Solution

Valeurs de j Valeurs de S Valeurs de T
0
0 02 = 0 0+0 = 0
1 12 = 1 0+1=1
2 22 = 4 1+4=5
3 32 = 9 5+9=14

Exercice

1) Quelle est la valeur désignée par S après le code suivant:

S ← 0
Pour chaque entier k entre 1 et 7:
    S ← S + 2
Solution

Valeurs de k Valeurs  de S
0
1 2
2 4
3 6
4 8
5 10
6 12
7 14

2) Donnez une traduction en langage Python.

Solution
S = 0
for k in range(1,7+1):
    S = S + 2

3) Testez votre traduction.
4) Comment traduire plus brièvement ?

Solution

On ajouté 7 termes égaux à 2... plus brièvement, on a donc tout simplement calculé 7\times 2.

Exercice

1) Quelle est la valeur désignée par S après les lignes suivantes:

S ← ''
S ← S + 'a'
S ← S + 'a'
S ← S + 'a'
S ← S + 'a'
S ← S + 'a'
S ← S + 'a'
S ← S + 'a'
Solution

Valeur de S après chaque affectation:

S ← ''   # chaîne vide 
S ← S + 'a'  # "a"
S ← S + 'a'  # "aa" 
S ← S + 'a'  # "aaa"
S ← S + 'a'  # "aaaa"
S ← S + 'a'  # "aaaaa"
S ← S + 'a'  # "aaaaaa"
S ← S + 'a'  # "aaaaaaa"

2) Ecrire en pseudocode cette série d'instructions en utilisant "Pour ..."

Solution

En pseudocode:

S ← ''   # chaîne vide 
Pour chaque entier k entre 1 et 7:
    S ← S + 'a' 

3) Traduire en langage Python.

Solution

En langage Python:

S = ''   # chaîne vide 
for k in range(1,7+1):
    S = S + 'a' 

4) Tester sur la machine.
5) Tester dans la console python: S = 7*'a'. Que vaut S après cette affectation ?

Note

On pourra noter de même S ← 7*'a' en pseudocode pour obtenir 'aaaaaaa'.

Exercice

1) Quelle est la valeur désignée par S après les lignes:

S ← ''
S ← S + 'ab'
S ← S + 'abb'
S ← S + 'abbb'
S ← S + 'abbbb'
S ← S + 'abbbbb'
S ← S + 'abbbbbb'
S ← S + 'abbbbbbb'
Solution

Valeur de S après chaque affectation:

S ← ''  # chaîne vide 
S ← S + 'ab'        # "ab"
S ← S + 'abb'       # "ababb"
S ← S + 'abbb'      # "ababbabbb"
S ← S + 'abbbb'     # "ababbabbbabbbb"
S ← S + 'abbbbb'    # "ababbabbbabbbbabbbbb"
S ← S + 'abbbbbb'   # "ababbabbbabbbbabbbbbabbbbbb"
S ← S + 'abbbbbbb'  # "ababbabbbabbbbabbbbbabbbbbbabbbbbbb"

2) Compléter le pseudocode suivant pour obtenir le même résultat:

S ← ''
Pour chaque entier k entre ...... et  ......... :
    S ← ..........................
Solution
S ← ''
Pour chaque entier k entre 1 et  7 :
    S ← S + "a" + k*"b"

3) Traduire en python avec une boucle for.

Solution
S = ''
for k in range(1,7+1):
    S = S + "a" + k*"b"

4) Testez la traduction python.

Exercice

Quelle est la valeur étiquetée par l'identifiant S après les lignes suivantes:

S = ''
for j in range(1,6):
    T = (6-j)*'a' + j*'b'
    S = S + T

Répondre à l'aide d'un tableau affichant l'état de S et T à chaque tour de boucle.

Solution

Valeurs de j Valeurs de T
Valeurs de S
chaîne vide
1 "aaaaab" "aaaaab"
2 "aaaabb" "aaaaabaaaabb"
3 "aaabbb" "aaaaabaaaabbaaabbb"
4 "aabbbb" "aaaaabaaaabbaaabbbaabbbb"
5 "abbbbb" "aaaaabaaaabbaaabbbaabbbbabbbbb"

Exercice

Quelle est la valeur étiquetée par l'identifiant S après les lignes suivantes:

S = ''
for j in range(1,6):
    T = (6-j)*'a' + j*'b'
    S = T + S

Répondre à l'aide d'un tableau affichant l'état de S et T à chaque tour de boucle.

Solution

La seule différence par rapport au script précédent est l'affectation de S: on a remplacé l'affectation S = S+T par l'affectation S = T+S.

Valeurs de j Valeurs de T
Valeurs de S
chaîne vide
1 "aaaaab" "aaaaab"
2 "aaaabb" "aaaabbaaaaab"
3 "aaabbb" "aaabbbaaaabbaaaaab"
4 "aabbbb" "aabbbbaaabbbaaaabbaaaaab"
5 "abbbbb" "abbbbbaabbbbaaabbbaaaabbaaaaab"