Aller au contenu

if et accumulateur

Exercice

Écrire une fonction prenant en paramètre un entier naturel n et renvoyant en sortie la somme des entiers pairs compris (au sens large) entre 0 à n: S = 0 + 2 + 4 + ... (le dernier terme étant n si n est pair et n-1 sinon).

Indication: reconnaître un pair

n désignant un entier, le test n%2 == 0 est égal à True si et seulement si n est pair.

Le principe

Il s'agit d'appliquer le principe d'accumulation déjà utilisé.

On crée une variable S initialisée à 0 dans laquelle on va ajouter (accumuler) un à un tous les termes pairs.

S ← 0
S ← S + 2 # S désigne maintenant la valeur 2
S ← S + 4 # S désigne maintenant la valeur 2+4
S ← S + 6 # S désigne maintenant la valeur 2+4+6
S ← S + 8 # S désigne maintenant la valeur 2+4+6+8
S ← S + 10 # S désigne maintenant la valeur 2+4+6+8+10
...

Pour écrire cette succession d'instructions, on utilise bien sûr comme précédemment une boucle for. Mais, dans cette boucle, à chaque passage, on filtre: on ne laisse passer que les entiers pairs.

A vous d'écrire cela à l'aide d'une fonction python.

pseudo-code
fonction somme_des_pairs(n):
    S ← 0
    Pour chaque entier k entre 0 et n:
        Si k est pair:
            S ← S + k
    renvoyer S
code python
def somme_pairs(n):
    """
    n -- entier naturel

    renvoie la somme  des entiers naturels pairs
    valant au plus n.
    """
    S = 0
    for i in range(0, n+1):
        if i%2 == 0:
            S = S + i
    return S

Tests:

>>> somme_pairs(4)
6
>>> somme_pairs(5)
6
>>> somme_pairs(6)
12
>>> somme_pairs(8)
20

Exercice

Écrire une fonction prenant en paramètre un entier naturel n et renvoyant en sortie la somme des entiers multiples de trois compris (au sens large) entre 0 à n.

>>> somme_multiple3(3)
3
>>> somme_multiple3(5)
3
>>> somme_multiple3(9)
18
pseudo-code

Le principe est le même que dans l'exercice précédent: on accumule par sommation les valeurs en n'oubliant pas de les filtrer.

fonction somme_des_pairs(n):
    S ← 0
    Pour chaque entier k entre 0 et n: #on parcourt tous les entiers entre 0 et n
        Si k est multiple de 3: #on filtre: on ne retient que les multiples de 3
            S ← S + k
    renvoyer S
code python
def somme_multiple3(n):
    """
    n -- entier naturel

    renvoie la somme  des entiers naturels multiples de 3
    valant au plus n.
    """
    S = 0
    for i in range(0, n+1):
        if i%3 == 0:
            S = S + i
    return S