Académique Documents
Professionnel Documents
Culture Documents
TD 8
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
Question 1.1 : Eectuer les actions suivantes : acher le tableau acher le sous-tableau de la 2e ligne la 3e ligne comprises acher le sous-tableau du dbut la 2e ligne comprise acher le sous-tableau de la 3e ligne comprise la n du tableau acher le tableau constitu uniquement des lignes dindice pair acher le tableau constitu uniquement des lments dindice impair de chaque ligne (ceci correspond acher uniquement les colonnes dindice impair de la matrice) Correction :
lobjectif est quils constatent que les mmes fonctions restent valables
tab=[[6,2,3,5,6],[4,6,2,6,1],[1,3,6,7,9],[1,6,3,6,8],[6,0,1,4,6]] print(tab)
#sans utiliser les tranches propres au langages python
for i in range(1,3): print(tab[i]) for i in range(2): print(tab[i]) for i in range(2, len(tab)): print(tab[i]) for i in range(0, len(tab),2): print(tab[i]) for i in range(len(tab)): for j in range(0, len(tab[1]),2): print(tab[i][j]) print(\n)
#on utilise ici les tranches qui sont propres au langage Python
Question 1.2 : crire un algorithme qui permet premirement dacher la diagonale (de gauche droite), puis la 2e diagonale Correction :
1re anne
113
Bases de la programmation
IUT de Villetaneuse
1 2 3 4 5
1 2 3 4 5 6
Correction :
tab=[[6,2,3,5,6],[4,6,2,6,1],[1,3,6,7,9],[1,6,3,6,8],[6,0,1,4,6]] taille = len(tab) i=0 ; k=taille-1 while (i < taille ): print(tab[i][k]) i=i+1 ; k = k-1
1 2 3 4 5 6 7 8 9 10 11
Question 1.3 : Tester si les nombres qui apparaissent dans les deux diagonales sont tous gaux une seule et mme valeur. Le programme achera "OUI" ou "Non" en fonction du rsulat. Correction :
tab=[[6,2,3,5,6],[4,6,2,6,1],[1,3,6,7,9],[1,6,3,6,8],[6,0,1,4,6]] val = tab[0][0]; taille=len(tab) i=0 ; k=taille-1 while (i < taille and tab[i][i] == val and tab[i][k] == val): # garder lordre des conditions i=i+1 ; k=k-1 if (i == taille): print(oui); else: print(non);
Question 1.4 : Soit un tableau deux dimensions initialis avec des nombres entiers. 6 4 1 3 6 2 6 3 6 0 3 2 6 3 1 5 6 7 8 4
1 2 3 4 5 6 7 8 9 10
Donner un algorithme qui permet de calculer la moyenne par colonne. Les valeurs des moyennes seront sauvegardes dans une liste. Ensuite, indiquer lindice de la colonne correspondant la plus grande moyenne. Correction :
dimAlg= 5 #dimension de A - lignes dimAcl =4 # dimension de A - colonnes matriceA=[[6,2, 3, 5],[4,6, 2, 6],[1,3, 6, 7],[3,6, 3,8],[6,0, 1, 4]] moyenne=[0.0]*dimAcl for j in range(dimAcl): for i in range (dimAlg): moyenne[j]=moyenne[j]+matriceA[i][j]; moyenne[j]=moyenne[j]/dimAlg Bases de la programmation
114
1re anne
Departement informatique
11 12 13 14 15 16 17 18 19 20 21 22
MoyenneMax=moyenne[0] clMax=0 for j in range(1,dimAcl): if (moyenne[j]>MoyenneMax): MoyenneMax=moyenne[j] clMax=j print(La moyenne par colonne est: \n) print(moyenne)
crire lalgorithme qui change le triangle infrieur avec le triangle suprieur dans un tableau deux dimensions. Cest donc le tableau obtenu en faisant une symtrie par rapport la diagonale principale. Donnez le programme en utilisant la boucle while puis la boucle for. Exemple : 10 23 56 47 11 44 90 78 45 12 67 55 78 56 89 34 ---\ ---/ 10 11 45 78 23 44 12 56 56 90 67 89 47 78 55 34
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
Correction :
tab=[[10, 11, 45, 78],[23, 44, 12, 56], [56, 90, 67, 89],[47, 78, 55, 34]] nbLigEff=4 nbColEff=4 i=0 while (i<nbLigEff): j=i+1 while (j<nbColEff): temp = tab[i][j] tab[i][j] = tab[j][i] tab[j][i] = temp j=j+1 i=i+1 for lg in tab: print(lg)
Avec la boucle for
1 2 3 4 5 6 7 8 9 10 11
tab=[[10, 11, 45, 78],[23, 44, 12, 56], [56, 90, 67, 89],[47, 78, 55, 34]] nbLigEff=4 nbColEff=4 for i in range(nbLigEff): for j in range(i+1, nbColEff): temp = tab[i][j] tab[i][j] = tab[j][i] tab[j][i] = temp for lg in tab: print(lg)
1re anne
115
3
Bases de la programmation
IUT de Villetaneuse
1 2 3 4 5 6 7 8 9 10 11 12 13
Dans la base de donnes des tudiants du dpartement informatique, nous disposons dune table "tudiant" contenant le numro, le nom et le prnom des tudiants. Question 3.1 : crire un programme qui permet de saisir toutes ces informations au clavier et de les stocker dans un tableau. Correction :
idxnum=0 #index du numero idxnom=1 # index de \ldots idxprenom=2 nbEtud=int(raw_input(Saisissez le nombre dtudiants : )) etudiant= [ [ 0 , "", "" ] for i in range(nbEtud) ] for i in range(nbEtud): numet= int(raw_input(Saisissez le numro : )) nomet = raw_input(Saisissez le nom : ) prenomet= raw_input(Saisissez le prnom : ) etudiant[i][idxnum]= numet etudiant[i][idxnom]= nomet etudiant[i][idxprenom]= prenomet
Version 2 :
1 2 3 4 5 6 7 8 9
nbEtud=int(raw_input(Saisissez le nombre dtudiants : )) etudiant= [ ] for i in range(nbEtud): numet= int(raw_input(Saisissez le numro : )) nomet = raw_input(Saisissez le nom : ) prenomet= raw_input(Saisissez le prnom : ) etud=[ numet, nomet, prenomet] etudiant=etudiant+ [etud]
1 2 3 4 5 6
Question 3.2 : crire le programme qui permet dacher tous les tudiants dont le nom commence par une lettre saisie au clavier (en tenant compte de la casse). Correction :
idxnom=1 lettre= raw_input(donnez la premire lettre : ) for i in range(len(etudiant)): nom=etudiant[i][idxnom] if nom[0]==lettre: print (etudiant[i])
1 2 3 4
3
1re anne
1 2 3 4
lettre= raw_input(donnez la premire lettre : ).lower() for i in range(len(etudiant)): if etudiant[i][idxnom][0].lower()==lettre : print (etudiant[i])
Bases de la programmation
116
Departement informatique
1 2 3 4 5 6 7 8 9 10
En Python, un tableau 2 dimensions est dni comme une liste de listes. crire le programme qui permet de vrier que les lments dune liste sont des listes de mme longueur. Par exemple les lments de la liste A = [[1, 2], [2, 4, 3]] nont pas la mme longueur (len([1, 2]) !=len([2, 4, 3]) ). Correction :
taille=len(A) t=len(A[0]) i=1 while (i<taille and len(A[i])==t ): # garder lordre des conditions i=i+1 if i==taille: print(mme nombre de colonnes) else: print(nombre de colonnes variable)
1 2 3 4 5
1 2
Question 5.2 : Modier le programme pour construire la matrice carre identit I (tous les lments de la diagonale sont gaux 1, les autres valent 0). Correction :
Demander seulement une dimension (matrice carre). Mme initialisation, puis
1 2 3 4 5 6 7
Question 5.3 : crire une fonction qui calcule la trace dune matrice carre, cest--dire la somme des coecients diagonaux de cette matrice. Correction :
def trace(A): if len(A)!=len(A[1]): print(Le calcul est impossible) else: tr=0 for i in range(len(A)): tr=tr+A[i][i] 1re anne
117
Bases de la programmation
IUT de Villetaneuse
return(tr)
1 2 3 4 5 6 7 8 9
Question 5.4 : crire une fonction qui teste si un lment x appartient une matrice A. Correction :
def appartenance(x): dedans = False i=0 while i < range(len(A)) and dedans==False : j=0 while j < range(len(A[1])) and dedans==False: if A[i][j] == x: dedans = True return(dedans)
3 3
1 2 3 4
Question 5.5 : crire une fonction qui permute deux lignes dune matrice. Correction :
def permut_ligne(A): tempo=A[k] A[k] = A[l] A[l] = tempo
1 2 3 4 5
Question 5.6 : crire une fonction qui remplace dans une matrice A toutes les occurrences de x par y. Correction :
def remplace(A,x,y): for i in range(len(A)): for j in range(len(A[i])): if A[i][j] == x: A[i][j] = y
1 2 3 4 5 6 7
Ecrire aussi une fonction qui permet de faire laddition de deux matrices de mme dimension. Correction :
def addition_mat(mat1, mat2): mat3= [ [ 0 for i in range(len(mat1[1])) ] for j in range(len(mat1)) ] for i in range(len(mat1)): for j in range(len(mat1[1])): mat3[i][j] = mat1[i][j] + mat2[i][j]; return mat3
Un carr (tableau dentiers de N lignes et N colonnes initialises) est dit magique lorsque la somme dune ligne, dune colonne ou dune diagonale quelconque est toujours gale au mme nombre. Voici un exemple de carr magique :
Bases de la programmation
118
1re anne
Departement informatique
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 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48
15 8 1 24 17 16 14 7 5 23 22 20 13 6 4 3 21 19 12 10 9 2 25 18 11 Question 7.1 : Concevoir une fonction crant une matrice carre dont les coecients sont des entiers positif saisi par lutilisateur. Question 7.2 : Concevoir une fonction qui vrie si un carr est magique. Correction :
def carre_magique(tabMag): OK = True i =0 j = 0 somme = 0 sommeSuiv = 0 taille = len(tabMag)
if (taille > 1): for j in range(taille): somme = somme + tabMag[0][j] print(\n somme = + str( somme))
#comparaison avec les autres lignes
i=i+1 while (OK and i < taille): for j in range(taille): sommeSuiv = sommeSuiv + tabMag[i][j] print(\n sommeSuiv = + str(sommeSuiv)) if (sommeSuiv != somme): OK = False i=i+1 sommeSuiv = 0
# comparaison avec les colonnes
j = 0 while (OK and j < taille): for i in range(taille): sommeSuiv = sommeSuiv + tabMag[i][j] print(\n sommeSuiv = + str(sommeSuiv)) if (sommeSuiv != somme): OK = False j=j+1 sommeSuiv = 0
if (OK): j = 0 sommeSuiv = 0 for i in range(taille): sommeSuiv = sommeSuiv + tabMag[i][j] j=j+1 print(\n sommeSuiv = + str(sommeSuiv)) if (sommeSuiv != somme): OK = False 1re anne
119
Bases de la programmation
49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72
if (OK): sommeSuiv = 0 j = taille - 1 for i in range(taille): sommeSuiv = sommeSuiv + tabMag[i][j] j=j-1 print(\n sommeSuiv = + str(sommeSuiv)) if (sommeSuiv != somme): OK = False
# fin du if (taille > 1)
return OK tabMag= [[15,8,1,24,17],[16,14,7,5,23],[22,20,13,6,4],[3,21,19,12,10],[9,2,25,18,11]] if carre_magique(tabMag): print(\n Oui il est magique \n); else: print(\nNon il n est pas magique\n);
Bases de la programmation
120
1re anne