Aller au contenu

Ep 18

le document

l'algorithme

Issue de : 23-NSI-09⚓︎

coquille dans le sujet

Dans exercice 2 : ajouter None dans les exemples

EXERCICE 1⚓︎

Programmer la fonction multiplication, prenant en paramètres deux nombres entiers n1 et n2, et qui renvoie le produit de ces deux nombres.

Les seules opérations autorisées sont l’addition et la soustraction.

Exemples :

🐍 Script Python
>>> multiplication(3,5)
15
>>> multiplication(-4,-8)
32
>>> multiplication(-2,6)
-12
>>> multiplication(-2,0)
0

Réponse

Complétez le code ci-dessous

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



Solution

###
def multiplication(n1, n2):bksl-nl if n1 < 0:bksl-nl return -multiplication(-n1, n2)bksl-nl if n2 < 0:bksl-nl return -multiplication(n1, -n2)bksl-nl resultat = 0bksl-nl for py-und in range(n2):bksl-nl resultat += n1bksl-nl return resultatbksl-nlbksl-nltry:bksl-nl assert multiplication(3,5) == 15bksl-nl assert multiplication(-4,-8) == 32bksl-nl assert multiplication(-2,6) == -12bksl-nl assert multiplication(-2,0) == 0bksl-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-nlbksl-nlbksl-nl



EXERCICE 2⚓︎

Soit tab un tableau non vide d'entiers triés dans l'ordre croissant et n un entier.

La fonction chercher ci-dessous doit renvoyer un indice où la valeur n apparaît dans tab si cette valeur y figure et None sinon.

Les paramètres de la fonction sont :

  • tab, le tableau dans lequel s'effectue la recherche ;
  • n, l'entier à chercher dans le tableau ;
  • i, l'indice de début de la partie du tableau où s'effectue la recherche ;
  • j, l'indice de fin de la partie du tableau où s'effectue la recherche.

L’algorithme demandé est une recherche dichotomique récursive.

Recopier et compléter le code de la fonction chercher suivante :

🐍 Script Python
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
def chercher(tab, x, i, j):
    '''Renvoie l'indice de x dans tab, si x est dans tab, 
    None sinon.
    On suppose que tab est trié dans l'ordre croissant.'''
    if i > j:
        return None
    m = (i + j) // ... 
    if ... < x: 
        return chercher(tab, x, ... , ...) 
    elif tab[m] > x:
        return chercher(tab, x, ... , ...) 
    else:
        return ...
L'exécution du code doit donner :

🐍 Script Python
>>> chercher([1, 5, 6, 6, 9, 12], 7, 0, 10)
None
>>> chercher([1, 5, 6, 6, 9, 12], 7, 0, 5)
None
>>> chercher([1, 5, 6, 6, 9, 12], 9, 0, 5)
4
>>> chercher([1, 5, 6, 6, 9, 12], 6, 0, 5)
2
Réponse

Complétez le code ci-dessous

###
def chercher(tab, n, i, j):bksl-nl if i < 0 or j > len(tab) :bksl-nl return Nonebksl-nl if i > j :bksl-nl return Nonebksl-nl m = (i + j) // ...bksl-nl if ... < n :bksl-nl return chercher(tab, n, ... , ...)bksl-nl elif ... > n :bksl-nl return chercher(tab, n, ... , ... )bksl-nl else :bksl-nl return ...bksl-nl



Solution

###
def chercher(tab, n, i, j):bksl-nl if i < 0 or j > len(tab) :bksl-nl return Nonebksl-nl if i > j :bksl-nl return Nonebksl-nl m = (i + j) // 2bksl-nl if tab[m] < n :bksl-nl return chercher(tab, n, m+1 , j)bksl-nl elif tab[m] > n :bksl-nl return chercher(tab, n, i , m-1 )bksl-nl else :bksl-nl return mbksl-nlbksl-nltry:bksl-nl assert chercher([1, 5, 6, 6, 9, 12], 7, 0, 10) == Nonebksl-nl assert chercher([1, 5, 6, 6, 9, 12], 7, 0, 5) == Nonebksl-nl assert chercher([1, 5, 6, 6, 9, 12], 9, 0, 5) == 4bksl-nl assert chercher([1, 5, 6, 6, 9, 12], 6, 0, 5) == 2bksl-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-nlbksl-nlbksl-nl