Aller au contenu

Ep 45

le document

l'algorithme

Issue de : 23-NSI-13⚓

EXERCICE 1⚓

Écrire une fonction compte_occurrences prenant en paramùtres une valeur x et un tableau tab (de type list) et renvoyant le nombre d’occurrences de x dans tab.

L’objectif de cet exercice Ă©tant de parcourir un tableau, il est interdit d’utiliser la mĂ©thode count des listes Python.

Exemples :

🐍 Script Python
>>> compte_occurrences(5, [])
0
>>> compte_occurrences(5, [-2, 3, 1, 5, 3, 7, 4])
1
>>> compte_occurrences('a', ['a','b','c','a','d','e','a'])
3

RĂ©ponse

Complétez le code ci-dessous

###
# Mettre votre code icibksl-nlbksl-nl



Solution

###
def comptepy-undoccurrences(a, tab):bksl-nl nb = 0bksl-nl for element in tab:bksl-nl if element == a:bksl-nl nb += 1bksl-nl return nbbksl-nlbksl-nltry:bksl-nl assert comptepy-undoccurrences(5, []) == 0bksl-nl assert comptepy-undoccurrences(5, [-2, 3, 1, 5, 3, 7, 4]) == 1bksl-nl assert comptepy-undoccurrences('a', ['a','b','c','a','d','e','a']) == 3bksl-nl print('Tout semble correct 👍')bksl-nlbksl-nlexcept AssertionError as asser:bksl-nl print('Le rĂ©sultat de votre fonction n\'est pas conforme đŸ€”')bksl-nl



EXERCICE 2⚓

On considùre dans cet exercice un algorithme glouton pour le rendu de monnaie. Pour rendre une somme en monnaie, on utilise à chaque fois la plus grosse piùce possible et ainsi de suite jusqu’à ce que la somme restante à rendre soit nulle.

Les piÚces de monnaie utilisées sont : - pieces = [1, 2, 5, 10, 20, 50, 100, 200]

On souhaite Ă©crire une fonction rendu_monnaie qui prend en paramĂštres - un entier somme_due reprĂ©sentant la somme Ă  payer ; - un entier somme_versee reprĂ©sentant la somme versĂ©e qui est supĂ©rieure ou Ă©gale Ă  somme_due ; - et qui renvoie un tableau de type list contenant les piĂšces qui composent le rendu de la monnaie restante, c’est-Ă -dire de somme_versee - somme_due.

Ainsi, l’instruction rendu_monnaie(452, 500) renvoie 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 :

🐍 Script Python
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
pieces = [1, 2, 5, 10, 20, 50, 100, 200]

def rendu_monnaie(somme_due, somme_versee):
    '''Renvoie la liste des piĂšces Ă  rendre pour rendre la monnaie
    lorsqu'on doit rendre somme_versee - somme_due'''
    rendu = ... 
    a_rendre = ... 
    i = len(pieces) - 1
    while a_rendre > ...: 
        while pieces[i] > a_rendre:
            i = i - 1
        rendu.append(...) 
        a_rendre = ... 
    return rendu
🐍 Script Python
>>> rendu_monnaie(700,700)
[]
>>> rendu_monnaie(102,500)
[200, 100, 50, 20, 20, 5, 2, 1]
RĂ©ponse

Complétez le code ci-dessous

###
def rendupy-undmonnaie(sommepy-unddue, sommepy-undversee):bksl-nl pieces = [1, 2, 5, 10, 20, 50, 100, 200]bksl-nl rendu = ...bksl-nl apy-undrendre = ...bksl-nl i = len(pieces) - 1bksl-nl while apy-undrendre > ... :bksl-nl if pieces[i] <= apy-undrendre :bksl-nl rendu.append(...)bksl-nl apy-undrendre = ...bksl-nl else :bksl-nl i = ...bksl-nl return rendubksl-nlbksl-nl



Solution

###
def rendupy-undmonnaie(sommepy-unddue, sommepy-undversee):bksl-nl pieces = [1, 2, 5, 10, 20, 50, 100, 200]bksl-nl rendu = []bksl-nl apy-undrendre = sommepy-undversee - sommepy-undduebksl-nl i = len(pieces) - 1bksl-nl while apy-undrendre > 0 :bksl-nl if pieces[i] <= apy-undrendre :bksl-nl rendu.append(pieces[i])bksl-nl apy-undrendre = apy-undrendre - pieces[i]bksl-nl else :bksl-nl i = i - 1bksl-nl return rendubksl-nlbksl-nltry:bksl-nl assert rendupy-undmonnaie(700,700) == []bksl-nl assert rendupy-undmonnaie(102,500) == [200, 100, 50, 20, 20, 5, 2, 1]bksl-nl print('Tout semble correct 👍')bksl-nlbksl-nlexcept AssertionError as asser:bksl-nl print('Le rĂ©sultat de votre fonction n\'est pas conforme đŸ€”')bksl-nl