Aller au contenu

Sujet n°13

Sujet original

Pour télécharger l'énoncé original, cliquer ici.

Exercice n°1

Écrire en langage Python une fonction recherche prenant comme paramètres une variable a de type numérique (float ou int) et un tableau tab (de type list) et qui renvoie le nombre d'occurrences de a dans tab.

Commentaires

Le nom de cette fonction recherche n'est pas explicite puisqu'elle renvoie le nombre d'occurrences d'éléments dans un tableau (qui n'a pas à se restreindre à des nombres).

Exemples d'utilisations de la fonction recherche

>>> recherche(5, []) 
0 

>>> recherche(5, [-2, 3, 4, 8]) 
0 

>>> recherche(5, [-2, 3, 1, 5, 3, 7, 4]) 
1 

>>> recherche(5, [-2, 5, 3, 5, 4, 5]) 
3 
Une solution
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
def recherche(a, tab):
    """
    a - int ou float
    tab - list, tableau d'entiers ou de flottants
    Sortie: int, nombre d'occurences de a dans tab
    """
    compte = 0
    for elt in tab:
        if elt == a:
            compte += 1
    return compte


if __name__ == '__main__':
    # Exemples de l'énoncé
    print(recherche(5, []) == 0)
    print(recherche(5, [-2, 3, 4, 8]) == 0)
    print(recherche(5, [-2, 3, 1, 5, 3, 7, 4]) == 1)
    print(recherche(5, [-2, 5, 3, 5, 4, 5]) == 3)

    # Exemples supplémentaires
    print(recherche(5, [5, 5, 5, 5]) == 4)
    print(recherche(1, [1, 2, 2, 1]) == 2)

Exercice n°2

La fonction rendu_monnaie prend en paramètres deux nombres entiers positifs somme_due et somme_versee. Elle procède au rendu de monnaie de la différence somme_versee – somme_due pour des achats effectués avec le système monétaire de la zone Euro. On utilise pour cela un algorithme glouton qui commence par rendre le maximum de pièces ou billets de plus grandes valeurs et ainsi de suite. Par la suite, on assimilera les billets à des pièces.

La fonction rendu_monnaie renvoie un tableau de type list contenant les pièces qui composent le rendu.

Toutes les sommes sont exprimées en euros. Les valeurs possibles pour les pièces sont donc contenues dans le tableau pieces = [1, 2, 5, 10, 20, 50, 100, 200].

Ainsi, l’instruction rendu_monnaie(452, 500) renverra le tableau [20, 20, 5, 2, 1].
En effet, la somme à rendre est de 48 euros soit 20 + 20 + 5 + 2 + 1.

Le code de la fonction rendu_monnaie est donné ci-dessous :

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
def rendu_monnaie(somme_due, somme_versee):
    rendu = ...
    a_rendre = ...
    i = len(pieces) - 1
    while ... :
        if pieces[i] <= a_rendre :
            rendu.append(...)
            a_rendre = ...
        else :
            i = ...
    return rendu

Compléter ce code et le tester.

Exemples

>>> rendu_monnaie(700, 700) 
[]

>>> rendu_monnaie(102, 500)
[200, 100, 50, 20, 20, 5, 2, 1] 
Commentaires sur le code original
  1. Pour télécharger l'original du fichier à compléter, cliquer ici.

  2. C'est une application « classique » des algorithmes gloutons.

Une solution
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
def rendu_monnaie(somme_due, somme_versee):
    rendu = []
    a_rendre = somme_versee - somme_due
    i = len(pieces) - 1
    while a_rendre > 0 :
        if pieces[i] <= a_rendre :
            rendu.append(pieces[i])
            a_rendre = a_rendre - pieces[i]
        else :
            i = i-1
    return rendu


if __name__ == '__main__':
    pieces = [1, 2, 5, 10, 20, 50, 100, 200]

    # Exemples de l'énoncé
    print(rendu_monnaie(700, 700) == [])
    print(rendu_monnaie(102, 500) == [200, 100, 50, 20, 20, 5, 2, 1])

    # Exemples supplémentaires
    print(rendu_monnaie(112, 500) == [200, 100, 50, 20, 10, 5, 2, 1])
    print(rendu_monnaie(9, 300) == [200, 50, 20, 20, 1])