Bonsoir j'aurais besoin d'aide sur deux exercices de Python similaires (niveau première spé NSI) Aidez-moi, S'IL-VOUS-PLAÎT. MERCI PAR AVANCE. Et alexis7818, ne
Informatique
ElevedeSeconde2020
Question
Bonsoir j'aurais besoin d'aide sur deux exercices de Python similaires (niveau première spé NSI)
Aidez-moi, S'IL-VOUS-PLAÎT. MERCI PAR AVANCE. Et alexis7818, ne supprimez pas ce devoir, merci. говнюк
Exercice 3 : Puissance de 2 la plus proche d’un nombre entier n. Boucle while
Ecrire une fonction d’argument n, qui renvoie la puissance de 2 la plus proche de n.
Commencer par trouver la valeur de l’exposant k telle que 2k-1 <= n < 2k.
Aide : k = 1 ; tant que 2**k <= n, augmenter k de 1 ; à la sortie de la boucle on a trouvé k.
Si l’écart entre n et 2k -1 est plus petit que l’écart entre 2k et n, alors la fonction retourne 2k -1 , sinon elle retourne 2k.
Exercice 4 : Ecrire un entier n comme une somme de puissance de 2. Boucle while
S’inspirer de l’exercice 3 pour trouver comment encadrer n entre deux puissances successives de 2.
Trouver k tel que 2k -1 <= n < 2k
n s’écrit donc n = 2k -1 + reste ; afficher cette égalité.
Recommencer avec le reste, tant que le reste n’est pas nuL.
Je planceh dessus depuis un certain temps... Mais je ne trouve pas...
Aidez-moi, S'IL-VOUS-PLAÎT. MERCI PAR AVANCE. Et alexis7818, ne supprimez pas ce devoir, merci. говнюк
Exercice 3 : Puissance de 2 la plus proche d’un nombre entier n. Boucle while
Ecrire une fonction d’argument n, qui renvoie la puissance de 2 la plus proche de n.
Commencer par trouver la valeur de l’exposant k telle que 2k-1 <= n < 2k.
Aide : k = 1 ; tant que 2**k <= n, augmenter k de 1 ; à la sortie de la boucle on a trouvé k.
Si l’écart entre n et 2k -1 est plus petit que l’écart entre 2k et n, alors la fonction retourne 2k -1 , sinon elle retourne 2k.
Exercice 4 : Ecrire un entier n comme une somme de puissance de 2. Boucle while
S’inspirer de l’exercice 3 pour trouver comment encadrer n entre deux puissances successives de 2.
Trouver k tel que 2k -1 <= n < 2k
n s’écrit donc n = 2k -1 + reste ; afficher cette égalité.
Recommencer avec le reste, tant que le reste n’est pas nuL.
Je planceh dessus depuis un certain temps... Mais je ne trouve pas...
1 Réponse
-
1. Réponse emma6974
Réponse :
Bjr,
Explications :
def p(n):
k=0
while 2**k<=n:
k+=1
if n-2**(k-1)<2**k-n:
return 2**(k-1)
else:
return 2**k
>>> p(532)
512
>>> p(1000)
1024
def p(n):
R=n
L=[]
M=""
while R!=0:
k=0
while 2**k<=R:
k+=1
L+=[2**(k-1)]
R=R-2**(k-1)
for i in range(len(L)):
if i==0:
M+=str(L[0])
else:
M+=" + "+str(L[i])
print(n,"=",M)
>>> p(8)
8 = 8
>>> p(67)
67 = 64 + 2 + 1
>>> p(1001)
1001 = 512 + 256 + 128 + 64 + 32 + 8 + 1
>>> p(131071)
131071 = 65536 + 32768 + 16384 + 8192 + 4096 + 2048 + 1024 + 512 + 256 + 128 + 64 + 32 + 16 + 8 + 4 + 2 + 1
>>>