Bonjour,
Je n'ai pas peu résoudre l'exercice suivant on utilisant python
On dispose de 5 000 cubes.
Quel est le nombre maximal d'étages que l'on peut construire ?
On peut programmer une fonction Python qui, pour un entier K donné, renvoie le nombre maximal d'étages que l'on peut construire avec K cubes ainsi que le nombre de cubes non utilisés.
Bonjour,
sans savoir comment sont empilé ses cubes il est totalement impossible de faire quoi que ce soit
c'est une évidence de simple bon sens !!
énoncé complet obligatoire
et la figure (rien que la figure en image, jamais aucun texte, tout texte doit être recopié)
Voici le sujet complet ci dessous :
1. Combien de cubes sont nécessaires pour construire une pyramide à 20 étages ? À 30 étages ?On peut programmer une fonction Python qui, pour un entier N donné, renvoie le nombre de cubes nécessaires pour construire une pyramide à N étages.
2. On dispose de 5 000 cubes.Quel est le nombre maximal d'étages que l'on peut construire ?On peut programmer une fonction Python qui, pour un entier K donné, renvoie le nombre maximal d'étages que l'on peut construire avec K cubes ainsi que le nombre de cubes non utilisés.
Voici ce que j'ai fait pour l'exercice 1 j'ai tester et tout marche correctement
from math import *
u = 0
n = 0
x = int(input("Entrer x ="))
for k in range(x):
n = n + 1
print("Étage", n)
u = u + n ** 2
print("u =", u)
pfff
c'est faux
ce n'est pas l'énoncé complet
tu ne sais pas ce que veut dire le mot "énoncé" !
il manque :
comment sont empilé les cubes |
C'étais évident en plus dsl, par contre que je peut que Screenshots depuis mon ordinateur mon manuel de math car on utilise plus les livres manuel.
OK
donc Un = Un-1 + n²
U0 = 0
U1 = 1
U2 = 1 + 2²
etc
que ce soit pour l'algo de la question 1 ou celui de la question 2 le squelette est le même :
u = 0
n = 0
tant que on n'a pas fini
n = n+1
u = u + n**2
la différence entre les deux questions est le critère d'arrêt et ce qu'on fait des u ainsi obtenus
dans la question1 (que tu as traitée pour qu'il sorte tous les U depuis U1 jusqu'au Ux demandé) le critère d'arrêt était de faire x boucles
(donc traduit par un for)
dans la question 2 le critère d'arrêt est que U atteigne une valeur entrée
(donc ça se traduira par un while)
propose ...
si je me trompe pas while permet d'exécuter une boucle la (ou les) instructions tant que la confitions est vérifiée.
Donc while k in range(x):
n = n + 1
print("Étage", n)
u = u + n ** 2
print("u =", u)
?
la condition n'est pas sur n mais sur u !!!
on aura fini quand u sera trop grand
programmer c'est avant tout faire preuve de logique dans le raisonnement !
pas aligner des instructions
et le print donnera la valeur de n finale (en dehors de la boucle, quand on a fini)
il n'y a pas de "range" du tout dans cette question.
d'ailleurs au niveau syntaxe "while k in range" ne veut rien dire du tout
while c'est while (condition)
pas while (liste d'éléments) !!!
la logique de cette question c'est par exemple si je veux savoir combien d'étages avec 40 cubes
je calcule les Un un par un :
U0 = 0
U1 = 1
U2 = 1+4 = 5
U3 = 5+9 = 14
u4 = 14+16 = 30
U5 = 30 + 25 = 55 est > 40
donc il faut 4 étages ce qui fait 30 cubes
et il en restera 10 inutilisables car 5 étages nécessitent plus de 40 cubes
c'est ça qu'on demande
(bien entendu au lieu de 40 c'est une valeur d'entrée !)
J'ai comprit en toute logique mais je n'arrive pas a l'appliquer en format python ou en méthode de programmation
Donc le code serais :
from math import *
u = 0
n = 0
x = int(input("Entrer x ="))
while(u)
n = n + 1
u = u + n ** 2
print(n)
?
pas de logique :
x ne sert à rien
while (u)
(u) n'est pas une condition significative par rapport à la question
u quoi ? u est un nombre ! (la valeur du nombre de cubes Un)
u egal à quelque chose ?
u inférieur à quelque chose ?
u supérieur à quelque chose ?
que cherche-t-on ?
print mal placé car ce print est exécuté à chacun des passages dans la boucle
alors que ce qui nous intéresse c'est la valeur finale de n quand on a terminé
voir mon exemple numérique : si on entre 40 le programme répond 4 et rien d'autre (le nombre d'étages de la plus grande pile de cubes qu'on peut faire avec 40 cubes)
tout le reste est "des calculs internes qui ne nous intéressent pas".
d'ailleurs on pourrait dire pareil dans ta résolution de la question 1 :
tu ne réponds pas à ce qui est demandé
ce que tu fais c'est afficher toutes les valeurs de Uk pour k de 1 à n
si j'entre 5 il va afficher (orint) U1, U2, U3, U4 et U5
ce qui est demandé si j'entre 5 est la seule et unique valeur de U5 :
u = 0
n = 0
x = int(input("Entrer x ="))
for k in range(x):
n = n + 1
print("Étage", n)
u = u + n ** 2
print("u =", u) # (indentation à zéro)
ce n'est pas "le code" qu'il faut "imaginer" !!
c'est la logique "en français" de ce que l'on doit faire
tu ne comprends pas ce qui est fait dans mon exemple numérique ?
je calcule des Uk tant que quoi ? (en français)
"while" quelle condition sur U ?
while ça veut juste dire "tant que", avec la même signification que en français normal :
"tant que je n'ai pas encore trouvé, je continue à chercher"
relis le et médite le jusqu'à ce que tu comprennes comment cet exemple numérique fonctionne.
avec des phrases en français.
et ensuite Python ("le code") sera juste la traduction mot à mot de ça !
je cherche l'étage en donnant le nombre de cube;tant que je n'ai pas encore trouvé, je continue à chercher jusqu'a = ou < 5000
presque (et pas assez détaillé)
dans ta phrase tu as deux conditions
je n'ai pas encore trouvé
mais quel est le critère précis qui dit qu'on a trouvé ou pas ???
et
jusqu'a = ou < 5000
donc dès le début tu as U0 = 0 ou U1 = 2 qui est ≤ 5000
et ça s'arrête immédiatement (puisque" jusqu'à" est satisfaite !)
ce qui est la réalité de ce qu'on fait (voir mon exemple!!) c'est :
on a trouvé quand c'est trop grand
on n'a pas encore trouvé quand c'est trop petit
donc la seule et unique condition est tant que c'est trop petit (≤5000)
et puis un programme cela doit être pour une utilisation générale et pas la seule valeur numérique 5000
ce qui donne l'algorithme en français
en ayant le nombre de cube disponibles A
à partir de U0
tant que Un ≤ A, passer au Un suivant
quand c'est fini (c'est donc Un > A), j'ai trouvé le plus petit n avec Un > A
et donc le plus grand n avec Un ≤ A est celui d'avant : Un-1
et sa traduction "mot à mot" :
A = int(input("Entrer le nombre de cubes "))
# en partant de U0 = 0
n = 0
U = 0
while U <= A :
# passer au Un suivant
n = n+1
U = U+n**2
# ici (on a fini) n est le plus petit Un > A
# et donc n-1 le plus grand <= A
print("on peut faire",n-1,"étages au plus")
nota : on le teste en entrant une valeur connue (par exemple celle de mon exemple = 40 cubes)
et cela doit donner la même chose que à la main :
avec 40 cubes on peut faire 4 étages
(et il reste 10 cubes inutilisés, information que l'on peut faire afficher par le programme à la fin)
il faut aussi tester le cas où le nombre de cubes est juste exactement suffisant c'est à dire un des Un connus
par exemple U4=30, si j'entre 30 il doit me donner 4 étages aussi
(pour vérifier qu'il n'y a pas d'erreurs dans les inégalités strictes ou pas)
une fois ces tests effectués, le programme peut être considéré comme valide et on le lance avec 5000
Pour les cube inutilisé pour les afficher il faut donc mettre print() quelque chose
print(U- quelque chose ? )
on dispose de A cubes et on en utilise U
donc ce sera A moins quelque chose
attention que la valeur à cet instant de U est la plus petite valeur strictement supérieure à A et pas le U cherché qui est la plus grande valeur ≤ A
il faut donc "remonter" au U précédent (n-1)
Si Un = Un-1 + n2
on a bien entendu Un-1 = Un - n2
U est un nombre de cubes
n un nombre d'étages !!
c'est n'importe quoi ta réponse !!
reprenons encore le même exemple numérique A = 40 :
je calcule les Un un par un :
U0 = 0
U1 = 1
U2 = 1+4 = 5
U3 = 5+9 = 14
u4 = 14+16 = 30
U5 = 30 + 25 = 55 est > 40
ici U vaut 55 et n vaut 5 (et A vaut toujours 40)
qu'est ce que je fais ensuite pour dire :
donc il faut 4 étages ( c'est le print(n-1) )
ce qui fait 30 cubes
comment recalculer ça sachant que la valeur de U4 a été perdue et que maintenant U vaut 55 (la valeur de U5)
je me répète :
Si Un = Un-1 + n2
on a bien entendu Un-1 = Un - n2
bref si U5 = 55 (n = 5)
alors U4 = U5 - 5²
et il en restera 10 (A - U4 !!!) inutilisables car 5 étages nécessitent plus de 40 cubes
J'arrive pas a trouve donc A nombre de cubes par exemple je met 5000 on peut faire 24 étage mais il restera 100 cubes c'est surement A- quelque chose sa peut pas U comme vous le dite ni n je comprend pas comment on peut trouver ce chiffre 100
il faut te l'écrire en quelle langue ?
Vous devez être membre accéder à ce service...
Pas encore inscrit ?
1 compte par personne, multi-compte interdit !
Ou identifiez-vous :