Inscription / Connexion Nouveau Sujet
Niveau première
Partager :

Python

Posté par
JustKorea
09-01-20 à 00:24

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.

Posté par
mathafou Moderateur
re : Python 09-01-20 à 00:35

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é)

attentionextrait de c_faq la FAQ du forum :

Q05 - Puis-je insérer une image dans mon message ? Comment faire ? Quelle image est autorisée ?


(et réponses aux questions précédentes, formules des suites obtenues, vu que c'est à partir de ces formules qu'on va programmer l'algorithme !!)

Posté par
JustKorea
re : Python 09-01-20 à 00:38

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)

Posté par
mathafou Moderateur
re : Python 09-01-20 à 00:44

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   

il faut le dire en quelle langue ?

Posté par
JustKorea
re : Python 09-01-20 à 00:48

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.

Posté par
JustKorea
re : Python 09-01-20 à 00:49

Le voici

Python

Posté par
mathafou Moderateur
re : Python 09-01-20 à 01:08

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 ...

Posté par
JustKorea
re : Python 09-01-20 à 01:18


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)

?

Posté par
JustKorea
re : Python 09-01-20 à 01:21

Mais comment peut on mettre le nombre de cube nécessaire pour donne l'étage ( u ) ?

Posté par
mathafou Moderateur
re : Python 09-01-20 à 01:41

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 !)

Posté par
JustKorea
re : Python 09-01-20 à 01:50

J'ai comprit en toute logique mais je n'arrive pas a l'appliquer en format python ou en méthode de programmation

Posté par
JustKorea
re : Python 09-01-20 à 01:52

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)

?

Posté par
mathafou Moderateur
re : Python 09-01-20 à 02:18

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)


le print c'est une fois terminée la boucle
pas à l'intérieur.

bon c'est pas catastrophique : si je demande U1000 il va juste me sortir en plus 999 valeurs inutiles...

Posté par
JustKorea
re : Python 09-01-20 à 03:19

Désoler je comprend plus rien je n'arrive pas a imaginer le code de A a Z

Posté par
mathafou Moderateur
re : Python 09-01-20 à 04:49

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 !

Posté par
JustKorea
re : Python 09-01-20 à 06:37

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

Posté par
mathafou Moderateur
re : Python 09-01-20 à 11:56

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")


on garde les traces de la description en français de ce qu'on fait et de sa signification sous forme de commentaires
(indispensables pour comprendre immédiatement l'algorithme si on revient six mois plus tard pour le modifier)

Posté par
mathafou Moderateur
re : Python 09-01-20 à 12:22

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

Posté par
JustKorea
re : Python 09-01-20 à 12:38

Pour les cube inutilisé pour les afficher il faut donc mettre print() quelque chose

print(U- quelque chose ? )

Posté par
mathafou Moderateur
re : Python 09-01-20 à 12:57

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

Posté par
JustKorea
re : Python 09-01-20 à 13:16

Donc U - (n-1) ?

Posté par
mathafou Moderateur
re : Python 09-01-20 à 13:28

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

Posté par
JustKorea
re : Python 09-01-20 à 13:45

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

Posté par
mathafou Moderateur
re : Python 09-01-20 à 13:55

il faut te l'écrire en quelle langue ?

Citation :
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²

si U = U25 (n = 25, n-1 = 24)
alors U24 se calcule avec U24 = U25 - 25²

soit U-n**2 (puisque n = 25 et U contient U25)

et le nombre de cubes restants sera
5000 - U24 = A-(U-n**2)

Posté par
JustKorea
re : Python 09-01-20 à 13:58

J'avais pensé aussi a cette formule mais je n'ai pas changer le signe

Posté par
flight
re : Python 09-01-20 à 16:38

salut

normalement tu offres le café à mathafou

Posté par
flight
re : Python 09-01-20 à 16:40

intéressant à programmer ..je vais essayer ...



Vous devez être membre accéder à ce service...

Pas encore inscrit ?

1 compte par personne, multi-compte interdit !

Ou identifiez-vous :


Rester sur la page

Inscription gratuite

Fiches en rapport

parmi 1675 fiches de maths

Désolé, votre version d'Internet Explorer est plus que périmée ! Merci de le mettre à jour ou de télécharger Firefox ou Google Chrome pour utiliser le site. Votre ordinateur vous remerciera !