Socles pour statue

Résolu
Kams31 - Modifié le 30 juil. 2018 à 08:43
Whismeril
Messages postés
17329
Date d'inscription
mardi 11 mars 2003
Statut
Modérateur
Dernière intervention
17 mai 2022
- 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 ?

7 réponses

Whismeril
Messages postés
17329
Date d'inscription
mardi 11 mars 2003
Statut
Modérateur
Dernière intervention
17 mai 2022
596
29 juil. 2018 à 23:37
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


1
volumeTotal = 0
largeurSol = int(input())
largeurSup = int(input())
for loop in range( largeurSol - largeurSup+1 ):
volumeTotal = volumeTotal + ( largeurSol * largeurSol * 1 )
print(volumeTotal)
0
mais Man, je comprends pas ce que tu me dis de rajouter.... Explique moi s'il te plait... J'aimerais comprendre..
1
jordane45
Messages postés
35417
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
17 mai 2022
356
30 juil. 2018 à 22:01
On ne te demande pas d'ajouter quoi que ce soit......
On te dit de prendre le code TEL QUEL.. et de le TESTER.
Puis de nous indiquer exactement ce que ça t'affiche....

On ne peut pas te le dire autrement.... c'est pourtant du bon français bien rédigé......
0
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
    print("Largeur sol: " + str(largeurSol))
    print("Volume total: " + str(volumeTotal))  
    print("i: " + str(i))
    i +=1
    
print("Volume final: " + str(volumeTotal))




Largeur sol?
Largeur sup?
nbLopp: 5
Largeur sol: 7
Volume total: 49
i: 0
Largeur sol: 6
Volume total: 85
i: 1
Largeur sol: 4
Volume total: 101
i: 2
Largeur sol: 1
Volume total: 102
i: 3
Largeur sol: -3
Volume total: 111
i: 4
Volume final: 111
0
jordane45
Messages postés
35417
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
17 mai 2022
356
30 juil. 2018 à 22:12
Ok
petite erreur dans le code
essaye juste en modifiant
 largeurSol = largeurSol - 1  # ou  largeurSol -= 1
0
jordane45
Messages postés
35417
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
17 mai 2022
356 > jordane45
Messages postés
35417
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
17 mai 2022

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 ++++.
0
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
0
Whismeril
Messages postés
17329
Date d'inscription
mardi 11 mars 2003
Statut
Modérateur
Dernière intervention
17 mai 2022
596
31 juil. 2018 à 06:16
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?
1
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

0
Whismeril
Messages postés
17329
Date d'inscription
mardi 11 mars 2003
Statut
Modérateur
Dernière intervention
17 mai 2022
596
31 juil. 2018 à 13:22
C’est ça
Maintenant regarde ton code, s’il fait bien ces instructions dans cet ordre
0
Ça marche ! Merci beaucoup pour ta patience
0
Whismeril
Messages postés
17329
Date d'inscription
mardi 11 mars 2003
Statut
Modérateur
Dernière intervention
17 mai 2022
596
31 juil. 2018 à 13:31
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()
1

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
jordane45
Messages postés
35417
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
17 mai 2022
356
30 juil. 2018 à 08:57
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...



0
volumeTotal = 0
largeurSol = int(input())
largeurSup = int(input())
for loop in range( largeurSol - largeurSup+1 ):
volumeTotal = volumeTotal + ( largeurSol * largeurSol * 1 )
print(volumeTotal)

J'ai pas encore appris les conditions en python pour le moment..
0
jordane45
Messages postés
35417
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
17 mai 2022
356
30 juil. 2018 à 17:32
de quelles "conditions" me parles tu ???
Il n'y a aucune condition dans le code que je t'ai donné.........
As tu au moins testé ???


NB: Pour poster du code sur le forum.. merci d'utiliser LA COLORATION SYNTAXIQUE !
Explications ici : https://codes-sources.commentcamarche.net/faq/11288-les-balises-de-code
0
Je pensais qu'on avait pas le droit de mettre "while" en python..

J'ai mis:

largeurSol = int(input())
largeurSup = int(input()) #3
nbLoop = int(largeurSol - largeurSup + 1)
i = 0
while i < nbLoop:
largeurSol = largeurSol - i
volumeTotal += ( largeurSol * largeurSol * 1)
i += 1
print(volumeTotal)

Erreur: Sorry: IndentationError: unexpected indent (exe, line 8)
0
jordane45
Messages postés
35417
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
17 mai 2022
356
30 juil. 2018 à 17:48
le message d'erreur est clair..... il manque de l'indentation.

De plus.. pour la dernière fois....

Pour poster ton code sur le forum UTILISE LES BALISES DE CODE

ce n'est pas compliqué à comprendre pourtant...!!!! non ??!!

La prochaine fois je supprime ton message.
Merci.
0
Désolée je suis nouvelle sur le forum...

volumeTotal = 0
largeurSol = int(input()) 
largeurSup = int(input())
nbLoop = int(largeurSol - largeurSup + 1)
i = 0
while (i < nbLoop):
  largeurSol = largeurSol - i
  volumeTotal += ( largeurSol * largeurSol * 1)
i += 1
print(volumeTotal)


On me dit: Votre programme a dépassé la limite de temps : il est trop lent ou bien boucle indéfiniment.
0
Whismeril
Messages postés
17329
Date d'inscription
mardi 11 mars 2003
Statut
Modérateur
Dernière intervention
17 mai 2022
596
30 juil. 2018 à 20:40
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.
0
Salut,

Je capte pas tes prints..... pourquoi tu rajoutes str ?
0
Je dois utiliser le largeurSup dans mon while ?
0
Whismeril
Messages postés
17329
Date d'inscription
mardi 11 mars 2003
Statut
Modérateur
Dernière intervention
17 mai 2022
596
30 juil. 2018 à 21:30
As tu essayé?
0
 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)) 
0
Whismeril
Messages postés
17329
Date d'inscription
mardi 11 mars 2003
Statut
Modérateur
Dernière intervention
17 mai 2022
596
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
0
Whismeril
Messages postés
17329
Date d'inscription
mardi 11 mars 2003
Statut
Modérateur
Dernière intervention
17 mai 2022
596
30 juil. 2018 à 23:26
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?

0
Il faut que la largeur sol débute à 7 et non à 6.
0
Whismeril
Messages postés
17329
Date d'inscription
mardi 11 mars 2003
Statut
Modérateur
Dernière intervention
17 mai 2022
596
30 juil. 2018 à 23:42
Exactement,
que changerais tu au code pour y remédier?
0
Je sais pas trop, le largeur sol il est aléatoire... je vois pas comment je peux le faire débuter à 7...
0
Whismeril
Messages postés
17329
Date d'inscription
mardi 11 mars 2003
Statut
Modérateur
Dernière intervention
17 mai 2022
596
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.
0
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......
0