Socles pour statue [Résolu]

Kams31 - 29 juil. 2018 à 21:23 - Dernière réponse : Whismeril 12094 Messages postés mardi 11 mars 2003Date d'inscriptionContributeurStatut 13 octobre 2018 Dernière intervention
- 31 juil. 2018 à 13:31
Bonjour,

un peu d'aide s'il vous plait....

Enoncé:


Les habitants d'Algoréa aiment bien ériger des statues et les poser sur des socles majestueux. Selon les dimensions de la statue, le socle doit être plus ou moins haut et offrir une surface plus ou moins grande pour y poser la statue. Cependant, les constructeurs de statues ont souvent du mal à estimer la quantité de béton nécessaire à la construction de chaque socle. Vous souhaitez écrire un programme pour les aider.
Ce que doit faire votre programme :

Voici un exemple de socle :
Pyramide formée de 3 marches carrées de tailles décroissantes

Un socle est ainsi constitué d'étages, chaque étage ayant une hauteur égale à une unité et une base carrée. Le côté des carrés diminue de une unité à chaque étage.

Votre programme doit lire deux entiers, représentant respectivement la largeur du socle au niveau du sol et la largeur du socle au niveau de la face supérieure du socle. Il doit ensuite calculer et afficher le volume du socle.

Exemple
entrée :
7
3
sortie :
135

Commentaires
Le volume du premier étage est 7 × 7 = 49, le volume du second est 6 × 6 = 36, etc. et le volume du dernier étage est 3 × 3 = 9. Le volume total est donc : 7 × 7 + 6 × 6 + 5 × 5 + 4 × 4 + 3 × 3 = 135.

Ma solution:
volumeTotal = 0 
largeurSol = int(input()) 
largeurSup = int(input()) 
for loop in range(3): 
   volumeTotal = ( (largeurSol) * 3 ) + ( (largeurSup) * 3 ) 
print(volumeTotal)


Qu'est-ce que je rate ?
Afficher la suite 

Votre réponse

44 réponses

Whismeril 12094 Messages postés mardi 11 mars 2003Date d'inscriptionContributeurStatut 13 octobre 2018 Dernière intervention - 29 juil. 2018 à 23:37
0
Merci
Bonsoir

déjà, il y a une incohérence dans ton énoncé, entre
Pyramide formée de 3 marches carrées de tailles décroissantes
et
7 × 7 + 6 × 6 + 5 × 5 + 4 × 4 + 3 × 3
y'a 5 étages et pas 3.

Je suppose que la formule mathématique est ce qu'il faut faire, puisque chaque étage diminue de 1, c'est donc qu'il me paraît le plus proche du reste de l'énoncé.

Ton code, il fait
volumeTotal = 7*3 + 3*3
volumeTotal = 7*3 + 3*3
volumeTotal = 7*3 + 3*3


volumeTotal = 0
largeurSol = int(input())
largeurSup = int(input())
for loop in range( largeurSol - largeurSup+1 ):
volumeTotal = volumeTotal + ( largeurSol * largeurSol * 1 )
print(volumeTotal)
Commenter la réponse de Whismeril
jordane45 22795 Messages postés mercredi 22 octobre 2003Date d'inscriptionModérateurStatut 13 octobre 2018 Dernière intervention - 30 juil. 2018 à 08:57
0
Merci
Bonjour,

Pour calculer le nombre de marches, il te suffit de faire la soustraction de la largeur de ta base et celle de ta dernière marche.
Ensuite, une boucle qui décrémente de 1 la base à chaque tour
Le calcul du volume
et le tour est joué.

Un truc du genre

volumeTotal = 0 
largeurSol = int(input()) #7
largeurSup = int(input()) #3 

#Nombre de marches : 5 = 7 - 3 + 1
nbLoop = int(largeurSol - largeurSup + 1)

i = 0
while i < nbLoop: # Tant que i est inférieure à nbLoop
  largeurSol = largeurSol - i  # ou  largeurSol -= i
  volumeTotal += ( largeurSol * largeurSol * 1) # Volume = Longueur X largeur X hauteur
   i += 1 # On ajoute  1 à i
    
print(volumeTotal)



premier tour ( i = 0 )
volumeTotal = 7 * 7 * 1 => 49

i = 1
volumeTotal = 49 + ( 6 * 6 * 1 ) = 85

i = 2
volumeTotal = 85 + ( 5 * 5 * 1 ) = 110

..etc


NB: je ne code pas en Python, il se peut donc qu'il y ait des erreurs dans le code...



jordane45 22795 Messages postés mercredi 22 octobre 2003Date d'inscriptionModérateurStatut 13 octobre 2018 Dernière intervention > Kams31 - 30 juil. 2018 à 19:58
Ben...montres nous ce que ca affiche...
Sinon comment penses tu que nous puissions t'aider ????? Oo
volumeTotal = 0
largeurSol = int(input()) 
largeurSup = int(input())
nbLoop = int(largeurSol - largeurSup + 1)
i = 0
while (volumeTotal):
   largeurSol = largeurSol - i
   volumeTotal += ( largeurSol * largeurSol * 1)
   i += 1
print(volumeTotal)


La réponse donnée par votre programme est incorrecte. Il a affiché :

0

au lieu de :

135
Whismeril 12094 Messages postés mardi 11 mars 2003Date d'inscriptionContributeurStatut 13 octobre 2018 Dernière intervention - 30 juil. 2018 à 20:23
while (volumeTotal):

Une boucle while exécute son code tant qu'une condition est "vraie".
volumeTotal ne peut pas être vrai, c'est un nombre
largeurSol = int(input()) 
largeurSup = int(input())
nbLoop = int(largeurSol - largeurSup + 1)
i = 0
while (i < nbLoop):
   volumeTotal = 0
   largeurSol = largeurSol - i
   volumeTotal += ( largeurSol * largeurSol * 1)
   i += 1
print(volumeTotal)


A quel endroit j'ai faux pour vous ?
Commenter la réponse de jordane45
Whismeril 12094 Messages postés mardi 11 mars 2003Date d'inscriptionContributeurStatut 13 octobre 2018 Dernière intervention - 30 juil. 2018 à 20:40
0
Merci
J'ai repris le code de Jordane, auquel j'ai ajouté des "print" un peu partout.
volumeTotal = 0 
print("Largeur sol?")
largeurSol = int(input()) #7
print("Largeur sup?")
largeurSup = int(input()) #3 

#Nombre de marches : 5 = 7 - 3 + 1
nbLoop = int(largeurSol - largeurSup + 1)
print("nbLopp: " + str(nbLoop))

i = 0
while i < nbLoop: # Tant que i est inférieure à nbLoop
    largeurSol = largeurSol - i  # ou  largeurSol -= i
    volumeTotal += ( largeurSol * largeurSol * 1) # Volume = Longueur X largeur X hauteur
    i += 1 # On ajoute  1 à i
    print("Largeur sol: " + str(largeurSol))
    print("Volume total: " + str(volumeTotal))
    print("i: " + str(i))

print("Volume final: " + str(volumeTotal))


Regarde ce qui se passe, les valeurs affichées.
Essaye de voir ce qui ne va pas.
Je dois utiliser le largeurSup dans mon while ?
Whismeril 12094 Messages postés mardi 11 mars 2003Date d'inscriptionContributeurStatut 13 octobre 2018 Dernière intervention - 30 juil. 2018 à 21:30
As tu essayé?
 largeurSol = int(input()) 
largeurSup = int(input())
nbLoop = int(largeurSol - largeurSup + 1)
print(str(nbLoop))
i = 0
while (i < nbLoop):
   volumeTotal = 0
   largeurSol = largeurSol - i
   volumeTotal += ( largeurSol * largeurSol * 1)
   i += 1
   print(str(largeurSol))
   print(str(volumeTotal))
print(str(volumeTotal)) 
Whismeril 12094 Messages postés mardi 11 mars 2003Date d'inscriptionContributeurStatut 13 octobre 2018 Dernière intervention - 30 juil. 2018 à 21:46
Je ne t'ai pas demandé de changer les print, ni même d'essayer une modification (au hasard?)

Juste que tu essayes le code que je t'ai donné et que tu dises en fonction de ce qui s'affiche ce qui te semble fonctionner de travers
Ah oui, ma largeur passe de 7 à 6 à 4 à 1 à -3, c'est pas ce que je veux.
Commenter la réponse de Whismeril
0
Merci
mais Man, je comprends pas ce que tu me dis de rajouter.... Explique moi s'il te plait... J'aimerais comprendre..
jordane45 22795 Messages postés mercredi 22 octobre 2003Date d'inscriptionModérateurStatut 13 octobre 2018 Dernière intervention - 30 juil. 2018 à 22:12
Ok
petite erreur dans le code
essaye juste en modifiant
 largeurSol = largeurSol - 1  # ou  largeurSol -= 1
jordane45 22795 Messages postés mercredi 22 octobre 2003Date d'inscriptionModérateurStatut 13 octobre 2018 Dernière intervention > jordane45 22795 Messages postés mercredi 22 octobre 2003Date d'inscriptionModérateurStatut 13 octobre 2018 Dernière intervention - 31 juil. 2018 à 08:43
Il faut aussi déplacer cette ligne à la fin de ta boucle...
Si tu regardes bien, actuellement dès la première valeur tu passes à 6 (au lieu de 7) et tu descends jusqu'à 2 au lieu de 3...
Si tu places cette ligne à la fin de ta boucle... ça commencera bien à 7 et finira normalement à 3.
Je ne comprend pas qu'en regardant le resultat des print tu n'ais pas réussi à le voir....
C'est pourtant d'un niveau débutant ++++.
Ok!
sortie :

Largeur sol?
Largeur sup?
nbLopp: 5
Largeur sol: 6
Volume total: 36
i: 0
Largeur sol: 5
Volume total: 61
i: 1
Largeur sol: 4
Volume total: 77
i: 2
Largeur sol: 3
Volume total: 86
i: 3
Largeur sol: 2
Volume total: 90
i: 4
Volume final: 90
jordane45 22795 Messages postés mercredi 22 octobre 2003Date d'inscriptionModérateurStatut 13 octobre 2018 Dernière intervention - 30 juil. 2018 à 22:51
Donc c'est bon non ?
jordane45 22795 Messages postés mercredi 22 octobre 2003Date d'inscriptionModérateurStatut 13 octobre 2018 Dernière intervention - 30 juil. 2018 à 22:53
Maintenant il ne te reste plus qu'à comprendre le code
.car la je l'ai écrit à ta place... mais tu dois savoir comment il marche sinon il
N'y a aucun intérêt
Commenter la réponse de Kams31
Whismeril 12094 Messages postés mardi 11 mars 2003Date d'inscriptionContributeurStatut 13 octobre 2018 Dernière intervention - 30 juil. 2018 à 23:26
0
Merci
Maintenant que Jordane a débugé son code c'est trop facile ;)

Ce que je t'ai fait faire est d'afficher toutes les valeurs au fur est à mesure du code.
L'idée est de voir ce qui ne se passe pas comme prévu, identifier le symptôme, pour pouvoir corrigé l'erreur.

Il reste encore une erreur.
Avec ça

Largeur sol: 6
Volume total: 36
i: 0
Largeur sol: 5
Volume total: 61
i: 1
Largeur sol: 4
Volume total: 77
i: 2
Largeur sol: 3
Volume total: 86
i: 3
Largeur sol: 2
Volume total: 90
i: 4
Volume final: 90

Tu as ce qu'il faut pour identifier le symptôme.
Quel est il?

Je sais pas trop, le largeur sol il est aléatoire... je vois pas comment je peux le faire débuter à 7...
Whismeril 12094 Messages postés mardi 11 mars 2003Date d'inscriptionContributeurStatut 13 octobre 2018 Dernière intervention - 30 juil. 2018 à 23:52
Ha non, à ce moment là ça n’est pas aléatoire, tu saisies 7, le calcul doit donc commencer à 7.
Si tu saisis une autre valeur, le calcul doit,commencer à cette valeur.
volumeTotal = 0 
largeurSol = 7 #7
largeurSup = int(input()) #3 

#Nombre de marches : 5 = 7 - 3 + 1
nbLoop = int(largeurSol - largeurSup + 1)

i = 0
while (i < nbLoop): # Tant que i est inférieure à nbLoop
    largeurSol -= 1  # ou  largeurSol -= i
    volumeTotal += ( largeurSol * largeurSol * 1) # Volume = Longueur X largeur X hauteur
    i +=1
    
print((volumeTotal))


Je change alors mon int(input()) par ma valeur 7 ? Je fais de même avec largeurSup et j'ajoute 3 ?
ça ne fonctionne toujours pas......
Whismeril 12094 Messages postés mardi 11 mars 2003Date d'inscriptionContributeurStatut 13 octobre 2018 Dernière intervention - 31 juil. 2018 à 00:05
Non, il ne faut pas forcer l’input à 7.
Si tu saisis 5, ton programme devra commencer par 5, idem pour 6 ou 987.
Là ça n’est pas le cas.
Regarde ce que fait chaque ligne
J'ai essayé de changer chaque ligne après le while. Je sais pas du tout. Dis moi la réponse. Je bloque vraiment depuis 2 jours..
Commenter la réponse de Whismeril
Whismeril 12094 Messages postés mardi 11 mars 2003Date d'inscriptionContributeurStatut 13 octobre 2018 Dernière intervention - 31 juil. 2018 à 06:16
0
Merci
Un algorithme c’est une « recette » .
Une suite « d’actions » à réaliser avec des « ingrédients » pour obtenir le résultat.

Par exemple voici la recette d’une multiplication de 2 nombres.

Demander nombre1
Demander nombre2
Affecter 0 à résulat
Pour un compteur allant de 1 à nombre2
résultat = résultat + nombre1

Afficher “Le produit de “
Afficher nombre1
Afficher “ par “
Afficher nombre2
Afficher “ vaut “
Afficher résultat

Par exemple 4*5 = 4 + 4 + 4 + 4 + 4, mon algorithme fait donc 5 boucles qui additonnent 4 au résultat précédent.

Peux tu écrire la recette de ton exercice?
Affecter 0 à volumeTotal
Demander largeur
Demander longueur
nbLoop = longueur - largeur + 1
Affecter 0 à i
Tant que i est inférieur à nbLoop:
   volumeTotal = Longueur X largeur X hauteur
   i augmente de 1
   largeur diminue de 1

Afficher volumeTotal

Whismeril 12094 Messages postés mardi 11 mars 2003Date d'inscriptionContributeurStatut 13 octobre 2018 Dernière intervention - 31 juil. 2018 à 13:22
C’est ça
Maintenant regarde ton code, s’il fait bien ces instructions dans cet ordre
Ça marche ! Merci beaucoup pour ta patience
Commenter la réponse de Whismeril
Whismeril 12094 Messages postés mardi 11 mars 2003Date d'inscriptionContributeurStatut 13 octobre 2018 Dernière intervention - 31 juil. 2018 à 13:31
0
Merci
De rien.
Si ça répond à tout, merci de marquer oe sujet résolu en cliquant sur la roue dentée tout en haut du sujet


Pour les print avec str().
Si tu mets du texte print l’affiche
Si tu mets un nombre print le convertit en texte en l’afficher
Mais si tu mets les 2, ça n’est ni l’un ni l’autre, du coup ça plante, c’est pourquoi j’ai converti le nombre en texte avec str()
Commenter la réponse de Whismeril

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.