====== Premiers exemples et implémentations ======
//Exercice 1 du TP2//
Il est parfois utile -- voire nécessaire -- de mettre en place un premier parcours séquentiel, avec
une boucle, et, en fixant ce premier élément, de parcourir une deuxième boucle. De manière artificielle on peut faire
for i in range(4):
for j in range(3):
print(i, j)
Combien de fois la fonction ''print'' est-elle appelée dans cette boucle ?
===== Matrice de Vandermonde =====
On peut aussi créer un tableau rectangulaire -- une matrice -- avec une liste de listes grâce à deux boucles imbriquées.
Par exemple, pour une **matrice de Vandermonde**, dont l’élément de la ligne $0 \leqslant i \leqslant n-1$ et de la colonne $0 \leqslant j \leqslant p-1$, est $i^j$,
def vandermonde(n, p):
M = []
for i in range(n):
L = []
for j in range(p):
L.append(i∗∗j)
M.append(L)
return M
Ce qui peut être, après exécution, testé en console :
>>> vandermonde(6,4)
Quel est la complexité de la fonction ''vandermonde'' ?
===== Tableau triangulaire =====
On peut dans certains cas n'avoir besoin que d'un tableau triangulaire, c'est-à-dire qu'une borne de l'itérateur qui permet de décrire la boucle interne (la deuxième) dépend de l’indice qui permet de décrire la première boucle.
for i in range(4):
for j in range(i): # noter le i
print(i, j)
ou encore
def tableau_triangulaire(n):
"""
crée un tableau triangulaire de taille n avec m[i][j]=(i+1)∗(j+1)
"""
M = []
for i in range(n):
L = []
for j in range(i): # j décrit l'intervalle d'entier [[0 , i−1]]
item = (i+1)∗∗(j +1)
L.append(item)
M.append(L)
return M
Après exécution en console :
>>> tableau_triangulaire(5)
Quel est la complexité de la fonction ''tableau_triangulaire'' ?