ÉLEMENTS DE CORRECTION
ALG5 - FONCTIONS ET EXEMPLES DAPPLICATION
ALG5 - FONCTIONS ET EXEMPLES DAPPLICATION
Les corrections des exercices données ci-après ne sont que des indications pour aboutir à la solution, qui détaillent la plupart du temps un cheminement à suivre. D’autres solutions
sont possibles.. .
ÉLÉMENTS DE CORRECTION DE LEXERCICE NO1
On n’oubliera pas d’écrire les spécifications de la fonction.
Code Python
1def compare_x_y(x,y):
2""" A partir de deux réels x et y renverra:
3* -1 si x<y
4* 0 si x=y
5* 1 sinon """
6if x<y:
7return -1
8else:
9if x>y:
10 return 1
11 else:
12 return 0
ÉLÉMENTS DE CORRECTION DE LEXERCICE NO2
Lorsque l’on met en application l’algorithme des divisions successives, il est nécessaire de récupérer le valeurs des bits obtenus puis
de « retourner » leur affichage. On écrira donc une fonction qui « retourne » une chaîne de caractère.
Code Python
1def retourne_chaine(chaine):
2""" Retourne une chaîne de caractères """
3retourne=""
4for i in range(0,len(chaine)):
5retourne=retourne+chaine[len(chaine)-i-1]
6return retourne
7
8def decomposition_en_binaire(n):
9""" Renvoie la décomposition en binaire de l’entier
10 naturel n par la méthode des divisions successives """
11 N=n
12 i=0
13 S=""
14 while N!=0:
15 S=S+str(N%2)
16 N=N//2
17 return retourne_chaine(S)
ÉLÉMENTS DE CORRECTION DE LEXERCICE NO3
(1). On classe les trois nombres par ordre croissant en étudiant les différents cas :
Code Python
1def ord_triplet(x,y,z):
2""" Renvoie par ordre croissant les trois nombres
3x,y,z saisis en paramètres """
4if x<=y:
5if y<=z:
6return x,y,z
7else:
8if x<=z:
9return x,z,y
10 else:
11 return z,x,y
12 else:
13 if x<=z:
14 return y,x,z
15 else:
16 if y<=z:
17 return y,z,x
18 else:
19 return z,y,x
(2). Les trois côtés a,bet cn’étant pas saisi nécessairement dans l’ordre, il faut les réordonner tout d’abord pour avoir la mesure
du plus grand côté de ce triangle.
Code Python
1def pythagore(a,b,c):
2""" vérifie que le triangle donc les trois côtés
3mesurent a, b et c est rectangle
4Renverra Vrai si c’est le cas, Faux sinon """
5
6print(type(ord_triplet(a,b,c)))
7cote=ord_triplet(a,b,c)
8if cote[2]**2==cote[1]**2+cote[0]**2:
9return True
10 else:
11 return False
ÉLÉMENTS DE CORRECTION DE LEXERCICE NO4
Code Python
1def ligne_sapin(n,d):
2ligne=d+""
3for i in range(n):
4ligne=ligne+"^"
5return ligne
6
7def decalage(n):
8d=""
9for i in range(n):
10 d=d+" "
11 return d
12
13 def sapin(n):
14 nb_motif=1
15 decale=decalage(n+1)
16 for i in range(n):
17 print(ligne_sapin(nb_motif,decale))
18 nb_motif=nb_motif+2
19 decale=decalage(n-i)
20
21 sapin(12)
ÉLÉMENTS DE CORRECTION DE LEXERCICE NO5
(1). Il suffit de faire calculer le reste de la division euclidienne de npar 10 :
Code Python
1def unite(n):
2""" Renvoie le chiffre des unités de l’entier n"""
3return n\%10
INFORMATIQUE - CPGE MPSI - 2016/17 1 ÉLÉMENTS DE CORRECTION CHAPITRE ALG5
(2). Cette fonction renvoie le chiffre des dizaines de n, et on devrait donc l’appeller dizaine.
(3). On s’inspire des deux fonctions précédentes.
Code Python
1def centaine(n):
2""" Renvoie le chiffre des centaines de l’entier n"""
3a=n//100
4return(unite(a))
(4). Ici :
Code Python
1def Armstrong(n):
2for i in range(m):
3if unite(i)**3+dizaine(i)**3+centaine(i)**3==i:
4print(i)
On pourrait utiliser une liste pour stocker ces nombres et la renvoyer en résultat de la fonction Armstrong.
ÉLÉMENTS DE CORRECTION DE LEXERCICE NO6
Code Python
1def palyndrome(mot):
2mot_retourne=""
3for i in range(len(mot)):
4mot_retourne=mot_retourne+mot[len(mot)-i-1]
5if mot==mot_retourne:
6return True
7else:
8return False
9
10 print(palyndrome("toto"))
11 print(palyndrome("sos"))
INFORMATIQUE - CPGE MPSI - 2016/17 2 ÉLÉMENTS DE CORRECTION CHAPITRE ALG5
1 / 2 100%
La catégorie de ce document est-elle correcte?
Merci pour votre participation!

Faire une suggestion

Avez-vous trouvé des erreurs dans linterface ou les textes ? Ou savez-vous comment améliorer linterface utilisateur de StudyLib ? Nhésitez pas à envoyer vos suggestions. Cest très important pour nous !