xxxxxxxxxx
### Exercice 1
Écrire une fonction `recherche` qui prend en paramètres `elt` un nombre entier et `tab`
un tableau de nombres entiers, et qui renvoie l’indice de la première occurrence de `elt`
dans `tab` si `elt` est dans `tab` et `-1` sinon.
Exemples :
```python
>>> recherche(1, [2, 3, 4])
-1
>>> recherche(1, [10, 12, 1, 56])
2
>>> recherche(50, [1, 50, 1])
1
>>> recherche(15, [8, 9, 10, 15])
3
```
xxxxxxxxxx
xxxxxxxxxx
Jeu de tests :
Jeu de tests :
xxxxxxxxxx
assert recherche(1, [2, 3, 4]) == -1
assert recherche(1, [10, 12, 1, 56]) == 2
assert recherche(50, [1, 50, 1]) == 1
assert recherche(15, [8, 9, 10, 15]) == 3
xxxxxxxxxx
<details>
<summary style="border:1pt solid slateblue; border-radius:5pt; width:15%; color:slateblue; padding:3px; background-color: lightcyan"> Solutions </summary>
<div style="border:1pt solid slateblue; border-radius:5pt; color:slateblue; padding:3px; background-color: lightcyan">
#### Alternative 1 :
Avec une boucle `for` dont on sort dès qu'on a trouvé l'élément recherché grâce à un `return i` dans la boucle.
```python
def recherche(elt, tab):
for i in range(len(tab)):
if tab[i] == elt:
return i
return -1
```
#### Alternative 2 :
Avec une boucle `while` dont on sort dès qu'on a trouvé l'élément recherché grâce à la condition `tab[i] != elt`.
Si on arrive à la fin de la boucle, c'est que l'élément n'a pas été trouvé.
```python
def recherche(elt, tab):
i = 0
while i < len(tab) and tab[i] != elt:
i += 1
if i == len(tab):
i = -1
return i
```
#### Alternative 3 :
Avec une boucle `while` dont on sort dès qu'on a trouvé l'élément recherché grâce à un `return i` dans la boucle.
Si on arrive à la fin de la boucle, c'est que l'élément n'a pas été trouvé.
```python
def recherche(elt,tab):
i=0
while i < len(tab):
if tab[i] == elt:
return i
i = i+1
return -1
```
</div>
</details>
xxxxxxxxxx
### Exercice 2
On considère la fonction `insere` ci-dessous qui prend en argument un entier `a` et un
tableau `tab` d'entiers triés par ordre croissant. Cette fonction insère la valeur `a` dans le
tableau et renvoie le nouveau tableau. Les tableaux seront représentés sous la forme de
listes python.
```python
def insere(a, tab):
l = list(tab) #l contient les mêmes éléments que tab
l.append(a)
i = ...
while a < ... :
l[i+1] = ...
l[i] = a
i = ...
return l
```
Compléter la fonction `insere` ci-dessus.
Exemples :
```python
>>> insere(3,[1,2,4,5])
[1, 2, 3, 4, 5]
>>> insere(10,[1,2,7,12,14,25])
[1, 2, 7, 10, 12, 14, 25]
>>> insere(1,[2,3,4])
[1, 2, 3, 4]
```
xxxxxxxxxx
xxxxxxxxxx
Jeu de tests (**pas entièrement fourni par l'énoncé original**) :
Jeu de tests (pas entièrement fourni par l'énoncé original) :
xxxxxxxxxx
assert insere(3, [1, 2, 4, 5]) == [1, 2, 3, 4, 5]
assert insere(10, [1, 2, 7, 12, 14, 25]) == [1, 2, 7, 10, 12, 14, 25]
assert insere(1, [2, 3, 4]) == [1, 2, 3, 4]
assert insere(4, [1, 2, 3]) == [1, 2, 3, 4]
assert insere(-5, [-7, -6, -2, 0, 3, 6]) == [-7, -6, -5, -2, 0, 3, 6]
xxxxxxxxxx
<details>
<summary style="border:1pt solid slateblue; border-radius:5pt; width:25%; color:slateblue; padding:3px; background-color: lightcyan"> Remarques sur l'énoncé </summary>
<div style="border:1pt solid slateblue; border-radius:5pt; color:slateblue; padding:3px; background-color: lightcyan">
- Il y a un problème d'indentation dans la boucle `while` (2 espaces au lieu de 4).
- Le test de la boucle `while` peut induire en erreur car il utilise un `and` qui n'est pas indiqué par l'énoncé.
- La PEP8 de python déconseille d'utiliser `l` comme nom de variable.
</div>
</details>
Il y a un problème d'indentation dans la boucle while
(2 espaces au lieu de 4).
Le test de la boucle while
peut induire en erreur car il utilise un and
qui n'est pas indiqué par l'énoncé.
La PEP8 de python déconseille d'utiliser l
comme nom de variable.
xxxxxxxxxx
<details>
<summary style="border:1pt solid slateblue; border-radius:5pt; width:15%; color:slateblue; padding:3px; background-color: lightcyan"> Solutions </summary>
<div style="border:1pt solid slateblue; border-radius:5pt; color:slateblue; padding:3px; background-color: lightcyan">
```python
def insere(a, tab):
l = list(tab) #l contient les mêmes éléments que tab
l.append(a)
i = len(l) - 2
while a < l[i] and i > -1:
l[i+1] = l[i]
l[i] = a
i = i-1
return l
```
</div>
</details>