Introduction

.

Exercice N°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.

Réponse Multiplication :

#multiplication

#deux autorisations :addition et soustraction

def multiplication(n1,n2):

    resultat=0

    if n1!=0 or n2!=0:

        n1temp,n2temp=1,1

        if n1<0:

            n1temp=-1

            n1=-n1

        if n2<0:

            n2temp=-1

            n2=-n2

        for i in range(n1):

            resultat=resultat+n2

        if n1temp+n2temp==0:resultat=-resultat

    return resultat

#-----------Programme principal---------------#

n1=int(input('Premier nombre pour la multiplication : '))

n2=int(input('Deuxième nombre pour la multiplication : '))

resultat=multiplication(n1,n2)

print('Le résultat  de  ' ,n1,' '+chr(10005)+' ',n2,' = ',resultat)

------------------------------------------------------------------------------------

.

Exercice N°2 :

.

Chercher :

Soit T un tableau non vide d'entiers triés dans l'ordre croissant et n un entier.
La fonction chercher, donnée à la page suivante, doit renvoyer un indice où la valeur n  apparaît éventuellement dans T, et None sinon.
Les paramètres de la fonction sont :
- T, 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.
La fonction chercher est une fonction récursive basée sur le principe « diviser pour régner ».
Le code de la fonction commence par vérifier si 0 <= i et j < len(T). Si cette condition n’est pas vérifiée, elle affiche "Erreur" puis renvoie None.

Question :

Recopier et compléter le code de la fonction chercher proposée ci-dessous :
def chercher(T,n,i,j):

    if i < 0 or ??? :

        print("Erreur")

        return None   

    if i > j :

        return None

    m = (i+j) // ???

    if T[m] < ??? :

        return chercher(T, n, ??? , ???)

    elif ??? :

        return chercher(T, n, ??? , ??? )

    else :

        return ???

chercher

L’exécution du code doit donner :
>>> chercher([1,5,6,6,9,12],7,0,10)

Erreur

>>> chercher([1,5,6,6,9,12],7,0,5)

>>> chercher([1,5,6,6,9,12],9,0,5)

4

>>> chercher([1,5,6,6,9,12],6,0,5)

.

REPONSE

.

Programme 

def chercher(T,n,i,j):

    if i < 0 or not ( 0 <=and j<len(T)):

        print("Erreur")

        return None   

    if i > j :

        return None

    m = (j+i) //2

    if T[m] < n:

        return chercher(T, n,m+1,j)

    elif T[m] > n :

        return chercher(T, n, i , m-1 )

    else :

        return  m

Il faut utiliser idle et copier la commande ci-dessous et appuyer sur entrée

>>> tri_iteratif([41, 55, 21, 18, 12, 6, 25])

resultat=chercher([1,5,6,6,9,12],7,0,10)

print('chercher([1,5,6,6,9,12],7,0,10)',resultat)

resultat=chercher([1,5,6,6,9,12],7,0,5)

print('chercher([1,5,6,6,9,12],7,0,5)',resultat)

resultat=chercher([1,5,6,6,9,12],9,0,5)

print('chercher([1,5,6,6,9,12],9,0,5',resultat)

resultat=chercher([1,5,6,6,9,12],6,0,5)

print('chercher([1,5,6,6,9,12],6,0,5)',resultat)

 

avec Python idle Sur le Shell python

Erreur

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

 

 

>>> chercher([1,5,6,6,9,12],7,0,10)

Erreur

>>> chercher([1,5,6,6,9,12],7,0,5)

>>> chercher([1,5,6,6,9,12],9,0,5)

4

>>> chercher([1,5,6,6,9,12],6,0,5)

2