Aller au contenu

Sujet n°39

Sujet original

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

Exercice n°1

On s’intéresse à la suite d’entiers définie par :

  • les deux premiers termes sont égaux à 1,
  • ensuite, chaque terme est obtenu en faisant la somme des deux termes qui le précèdent.

En mathématiques, on le formule ainsi :
u_1 = 1, u_2 = 1 et, pour tout entier naturel non nul n, u_{n+2} = u_{n+1} + u_n.

Cette suite est connue sous le nom de suite de Fibonacci.

Écrire en Python une fonction fibonacci qui prend en paramètre un entier n supposé strictement positif et qui renvoie le terme d’indice n de cette suite.

Exemples

>>> fibonacci(1) 
1

>>> fibonacci(2) 
1

>>> fibonacci(25) 
75025

>>> fibonacci(45) 
1134903170
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
24
25
26
27
28
def fibonacci(n):
    """
    n - int, entier strictement positif
    Sortie: int, n-ième entier dans la suite de Fibonacci
    """
    if n == 1 or n==2:
        return 1
    else:
        u1 = 1
        u2 = 1
        for i in range(n-2):
            temp = u1+u2
            u1 = u2
            u2 = temp
        return temp


if __name__ == '__main__':
    # Exemples de l'énoncé
    print(fibonacci(1) == 1)
    print(fibonacci(2) == 1)
    print(fibonacci(25) == 75025 )
    print(fibonacci(45) == 1134903170)

    # Exemples supplémentaires
    print(fibonacci(3) == 2)
    print(fibonacci(4) == 3 )
    print(fibonacci(5) == 5)

Exercice n°2

On considère la fonction pantheon prenant en paramètres eleves et notes deux tableaux de même longueur, le premier contenant le nom des élèves et le second, des entiers positifs désignant leur note à un contrôle de sorte que eleves[i] a obtenu la note notes[i].

Cette fonction renvoie le couple constitué de la note maximale attribuée et des noms des élèves ayant obtenu cette note regroupés dans un tableau.

Ainsi, l’instruction pantheon(['a', 'b', 'c', 'd'], [15,18,12,18]) renvoie le couple (18, ['b', 'd']).

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
def pantheon(eleves, notes): 
    note_maxi = 0 
    meilleurs_eleves =  ... 
    for i in range(...): 
        if notes[i] == ...: 
            meilleurs_eleves.append(...) 
        elif notes[i] > note_maxi: 
            note_maxi = ... 
            meilleurs_eleves = [...]    
    return (note_maxi, meilleurs_eleves)

Compléter ce code.

Commentaires sur le code original
  1. Pour télécharger l'original du fichier à compléter, cliquer ici.

  2. À nouveau, le mot « liste » est à comprendre dans le sens « liste Python » (c'est-à-dire tableau) plutôt que dans le sens du type abstrait de données liste étudié en Terminale.

Exemples

>>> eleves_nsi = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j'] 
>>> notes_nsi = [30, 40, 80, 60, 58, 80, 75, 80, 60, 24] 
>>> pantheon(eleves_nsi, notes_nsi)
(80, ['c', 'f', 'h'])

>>>  pantheon([],[]) 
(0, [])
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
24
def pantheon(eleves, notes):
    note_maxi = 0
    meilleurs_eleves =  []
    for i in range(len(eleves)):
        if notes[i] == note_maxi:
            meilleurs_eleves.append(eleves[i])
        elif notes[i] > note_maxi:
            note_maxi = notes[i]
            meilleurs_eleves = [eleves[i]]
    return (note_maxi, meilleurs_eleves)



if __name__ == '__main__':
    # Exemples de l'énoncé
    eleves_nsi = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j']
    notes_nsi = [30, 40, 80, 60, 58, 80, 75, 80, 60, 24]
    print(pantheon(eleves_nsi, notes_nsi) == (80, ['c', 'f', 'h']) )
    print(pantheon([], []) == (0, []) )

    # Exemples supplémentaires
    eleves_nsi = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j']
    notes_nsi = [58, 80, 75, 80, 60, 24, 30, 40, 80, 60]
    print(pantheon(eleves_nsi, notes_nsi) == (80, ['b', 'd', 'i']) )