Problème d'algorithme simple

Résolu/Fermé
barnabe0057 Messages postés 14453 Date d'inscription lundi 2 mars 2009 Statut Contributeur Dernière intervention 24 novembre 2024 - Modifié le 31 mai 2021 à 20:21
barnabe0057 Messages postés 14453 Date d'inscription lundi 2 mars 2009 Statut Contributeur Dernière intervention 24 novembre 2024 - 1 juin 2021 à 11:44
Bonjour,

Je précise que je n'ai jamais fait de Python, mais là mon avenir direct en dépend.

Je dois réaliser un mini script, voilà l'énoncé du problème :

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.


Si on passe au script la valeur 7 puis ensuite la valeur 3, on doit obtenir en sortie 135.

Voila les explications pour arriver à ce résultat :

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.


Mon algorithme (pourtant parfait ;) fonctionne avec certaines valeurs d'entrée mais pas avec tous, je ne comprends vraiment pas pourquoi :

largeur_Sol = int(input())
largeur_Sup = int(input())

count = largeur_Sol - largeur_Sup
result = largeur_Sol * largeur_Sol

for loop in range(count):
   etage = (largeur_Sol - count) * (largeur_Sol - count)
   result = result + etage

print(result)


Merci d'avance si vous pouvez m'expliquer ce qui cloche.




Configuration: Linux / Firefox 88.0


A voir également:
  • 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.
  • Iphone 14 simple - Guide
  • Simple ocr - Télécharger - Bureautique
  • Simple file locker - Télécharger - Sécurité
  • Logiciel algorithme gratuit - Télécharger - Édition & Programmation
  • Organigramme simple - Guide

3 réponses

yg_be Messages postés 23350 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 26 novembre 2024 Ambassadeur 1 554
31 mai 2021 à 20:23
bonjour,
dans quel cas obtiens-tu quel résultat incorrect?
0
yg_be Messages postés 23350 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 26 novembre 2024 1 554
Modifié le 31 mai 2021 à 20:46
en fait, en relisant ton programme, je me demande dans quel cas tu as un résultat correct.
afin de comprendre ce que fait ton programme, ajoute des instructions print() pour visualiser les valeurs de tes variables.
0
barnabe0057 Messages postés 14453 Date d'inscription lundi 2 mars 2009 Statut Contributeur Dernière intervention 24 novembre 2024 4 917
31 mai 2021 à 20:36
Merci pour ta réactivité.

C'est un examen en ligne où mon algorithme est testé avec plusieurs paires de valeurs, mais je ne sais pas lesquelles, je sais d'après le résultat qu'il y a juste un cas de figure où mon algo fonctionne, ce qui est encore plus troublant.
0
barnabe0057 Messages postés 14453 Date d'inscription lundi 2 mars 2009 Statut Contributeur Dernière intervention 24 novembre 2024 4 917
31 mai 2021 à 20:39
Je pense qu'on peut dire que les 2 premières lignes sont correctes.

A la ligne 4 je récupère le nombre d'étages que j'utilise ensuite dans la boucle.

Chaque tour de boucle calcule le volume d'un étage.

A la ligne 5 je rajoute le volume de l'étage au sol puisqu'il ne fait pas partie de la boucle.
0
barnabe0057 Messages postés 14453 Date d'inscription lundi 2 mars 2009 Statut Contributeur Dernière intervention 24 novembre 2024 4 917 > barnabe0057 Messages postés 14453 Date d'inscription lundi 2 mars 2009 Statut Contributeur Dernière intervention 24 novembre 2024
31 mai 2021 à 20:44
Je crois que j'ai compris mon erreur, reste plus qu'à tester.
0
yg_be Messages postés 23350 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 26 novembre 2024 1 554 > barnabe0057 Messages postés 14453 Date d'inscription lundi 2 mars 2009 Statut Contributeur Dernière intervention 24 novembre 2024
Modifié le 31 mai 2021 à 20:46
afin de comprendre ce que fait ton programme, ajoute des instructions print() pour visualiser les valeurs de tes variables.
0
yg_be Messages postés 23350 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 26 novembre 2024 1 554
31 mai 2021 à 20:48
pourquoi ne testes-tu pas ton programme en dehors du site d'examen?
0
barnabe0057 Messages postés 14453 Date d'inscription lundi 2 mars 2009 Statut Contributeur Dernière intervention 24 novembre 2024 4 917 > barnabe0057 Messages postés 14453 Date d'inscription lundi 2 mars 2009 Statut Contributeur Dernière intervention 24 novembre 2024
31 mai 2021 à 20:50
Voilà ça fonctionne, j'ai créé une variable qui itère à chaque tour de boucle :

largeur_Sol = 7
largeur_Sup = 3

nbEtages = largeur_Sol - largeur_Sup
volume = largeur_Sol * largeur_Sol

var = 0

for loop in range(nbEtages):
var = var + 1
etage = (largeur_Sol - var) * (largeur_Sol - var)
volume = volume + etage

print(volume)


Je passe en "Résolu" merci pour ton aide.

Bonne soirée.
0
ccm81 Messages postés 10903 Date d'inscription lundi 18 octobre 2010 Statut Membre Dernière intervention 19 novembre 2024 2 427
31 mai 2021 à 21:08
bonjour

perso, j’initialiserai result à 0 et j'ajouterai 1 à ta valeur de count

largeur_Sol = int(input())
largeur_Sup = int(input())

count = largeur_Sol - largeur_Sup + 1
result = 0

for loop in range(count):
   etage = (largeur_Sol - loop) * (largeur_Sol - loop)
   result = result + etage

print(result)

Cdlmnt
0
yg_be Messages postés 23350 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 26 novembre 2024 1 554
31 mai 2021 à 21:10
perso, je me formerais, au lieu de me faire aider.
0
barnabe0057 Messages postés 14453 Date d'inscription lundi 2 mars 2009 Statut Contributeur Dernière intervention 24 novembre 2024 4 917 > yg_be Messages postés 23350 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 26 novembre 2024
31 mai 2021 à 21:21
C'est justement un test d'entrée pour une formation de développeur BAC +2
0
yg_be Messages postés 23350 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 26 novembre 2024 1 554 > barnabe0057 Messages postés 14453 Date d'inscription lundi 2 mars 2009 Statut Contributeur Dernière intervention 24 novembre 2024
1 juin 2021 à 10:57
c'est un test pour évaluer la capacité à se faire aider?
0
barnabe0057 Messages postés 14453 Date d'inscription lundi 2 mars 2009 Statut Contributeur Dernière intervention 24 novembre 2024 4 917 > yg_be Messages postés 23350 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 26 novembre 2024
1 juin 2021 à 11:44
C'est une drôle de manière de voir les choses, pour plusieurs raisons :

- je n'ai pas demandé qu'on fasse tout l'exercice à ma place
- j'ai proposé ma solution qui était très proche du résultat recherché
- j'ai finalement trouvé et corrigé mon erreur tout seul comme un grand

Je te souhaite une bonne journée.
0