Académique Documents
Professionnel Documents
Culture Documents
13 print(res1,res2,res3,res4,"",res5,sep="\n")
Affichage
1 AirFrance/Toulouse-Blagnac(LFBO)-
2 AirFrance/Toulouse-Blagnac(LFBO)-
3 irFrance/ToulouseBlagnac(LFBO)
4 AirFrance/Toulouse-Blagnac(LFBO)-
5
6 AirFrance/Toulouse-Blagnac(LFBO)
1 #Fichier icna5.py
2 n=0
3 if __name__=="__main__":
4 for i in range(5):
5 n=n+4
6 else:
7 for i in range(3,6):
8 n=n+4
9 print(n)
6°) Réponse A et D.
La convergence de la méthode de Newton n’est pas assurée, il faut donc prévoir une
sortie de boucle liée au nombre d’itérations.
7°) Réponse A certaine.
La validité de la réponse dépend toutefois de la fonction étudiée car la convergence dans
le cas général n’est pas assurée.
Réponse C et D possibles car la propriété très proche de zéro relève d’une qualification
adéquate au café du commerce et déplacée dans une épreuve de concours. Dans le cadre
du café du commerce, la D sera probablement considérée comme fausse.
1 def methodeNewton(f,pas,x):
2 for i in range(0,pas):
3 # Emploi du quotient f/f'
4 x1=x-f(x)/(3*x**2-(3/2))
5 x=x1
6 return x
7
8 def f(x):
9 return x**3-(3/2)*x-2
10
11 #Initialisation
12 x0=8
13 pas=10
14 # Execution
15 x=methodeNewton(f,pas,x0)
16 # Codes de formatage obsolètes
17 print("x=%0.6f"%x)
18 print("f(x)=%0.6f"%f(x))
8°) Réponses A et C.
Le programme présenté calcule l’aire d’une fonction dans un intervalle. C’est une ap-
proximation de la fonction f par la méthode des rectangles à gauche. Le résultat dépend
donc du nombre d’intervalles. Contrairement à ce que suggère la question il y a bien 100
itérations pour i variant de 0 à 99.
L’intégrale vaut :
1 1
x4 3 2
Z
5
f (x) dx = − x − 2x =−
0 4 4 0 2
Code commenté
1 def rectangle(f,xA,xB,intervalles):
2 resultat,i=0,0
3 base=(xB-xA)/intervalles
4 # très maladroit - boucle itérative préférable
5 while i <intervalles:
6 resultat=resultat+f(xA+i*base)*base
7 i+=1
8 return resultat
9
10 def f(x) :
11 return x**3-(3/2)*x-2
12
13 #Initialisation
14 xA,xB=0.0,1.0
15 intervalles=100
16 # méthode d'intégration
17 resultat=rectangle(f,xA,xB,intervalles)
18 print("resultat=%0.6f"%resultat)
Résultat affiché
1 resultat=-2.497475
9°) Réponse C.
Le code précédent est légèrement modifié pour prendre en compte la valeur de la fonction
au milieu d’un intervalle. C’est encore une méthode d’intégration de f approchée par
des rectangles mais au centre.
Dans le cas général, on ne peut conclure aussi trivialement. Elle est en fait égale à la
précédente décalée d’un demi-intervalle.
Réponse B éventuellement.
Code commenté
1 def median(f,xA,xB,intervalles):
2 resultat,i=0,0
3 base=(xB-xA)/intervalles
4 # très maladroit - boucle itérative préférable
5 while i <intervalles:
6 resultat=resultat+f(xA+(2*i+1)/2*base)*base
7 i+=1
8 return resultat
9
10 def f(x) :
11 return x**3-(3/2)*x-2
12
13 #Initialisation
14 xA,xB=0.0,1.0
15 intervalles=100
16 # méthode d'intégration
17 resultat=median(f,xA,xB,intervalles)
18 print("resultat=%0.6f"%resultat)
Résultat affiché
1 resultat=-2.500012
1 annee=-1
2 while annee<=0:
3 annee=input("Entrez une année :")
4 try:
5 annee=int(annee) #ligne a
6 assert annee>0 #ligne b
7 except ValueError:
8 print("Erreur de saisie\n")
9 annee=-1 #ligne c
10 except AssertionError:
11 print("Erreur de saisie\n")
12 annee=-1
11°) Rappel : l’année est bissextile si elle est divisible par 4 et non divisible par 100 ou si elle
est divisible par 400.
— 1900 n’est pas bissextile car elle est divisible par 4 mais aussi par 100, sans être
divisible par 400.
— 2018 n’est pas bissextile car non divisible par 4.
— 2000 est divisible par 400, elle est donc bissextile.
— 1802 n’est pas divisible par 4, elle n’est donc pas bissextile.
Si le code 1 est correct, les réponses B et C sont justes.
Notons par a, b, c les prédicats logiques respectifs correpondant à annee divisible par
4, 100, 400. L’équation logique vérifiée par le prédicat r "année est bissextile" s’écrit :
r = a.b + c
r = (a ⊕ b) ⊕ c
Il fait usage du ou exclusif sur les chaines d’octets. Cet opérateur est représenté en
python par le symbole ˆ. Il n’est pas à priori parmi les plus pratiqués en CPGE.
Nous pouvons montrer vu les conditions que ces deux codes sont équivalents.
12°) Réponse A.
Le code est correct mais pas très habile.
La maladresse est sans doute voulue pour des raisons "pédagogiques", elles m’échappent
comme de coutume.
Code commenté
1 # ________ Code n°2
2 # Etat faux par défaut
3 bissextile=False
4 if annee%400==0:
5 # Vrai si divisible par 400
6 bissextile=True
7 elif annee%100==0:
8 # Faux si non divisible par 4OO
9 # mais divisible par 100
10 bissextile=False
11 elif annee%4==0:
12 # Vrai si non divisible par 4OO
13 # et non divisible par 100
14 # mais divisible par 4
15 bissextile=True
16
13°) Réponse B.
cf équation logique évoquée à la Q11.
Et réponse A par complémentarité
1 # ________ Code n°3
2 if annee%400==0 or (annee%4==0 and annee%100!=0): # ligne d
3 print("C'est une année bissextile")
4 else:
5 print("C'est une année non bissextile")
1 import numpy as np
2
3 def matrice(n):
4 # définit une matrice 4x4 et la remplit de zéro
5 A=np.zeros((n,n))
6 for i in range(1,n+1):
7 # remplit la diagonale de 1
8 A[i-1,i-1]=1
9 # remplit la première colonne de range(1,5)
10 A[i-1,0]=i
11 # remplit la première ligne de range(1,5)
12 A[0,i-1]=i
13 # remplit la dernière ligne de 5-range(1,5)
14 A[n-1,i-1]=n+1-i
15 # remplit la dernière colonne de 5-range(1,5)
16 A[i-1,n-1]=n+1-i
17 return A
18 print(matrice(4))
Affichage obtenu
[[ 1. 2. 3. 4.]
[ 2. 1. 0. 3.]
[ 3. 0. 1. 2.]
[ 4. 3. 2. 1.]]