Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Calcul scientifique Python Discussion :

hauteur d'une pyramide


Sujet :

Calcul scientifique Python

  1. #1
    Futur Membre du Club
    hauteur d'une pyramide
    Bonjour,

    j'ai repris avec python et là je suis des cours en ligne pour une certification PCAP, mais j'ai un exercice qui me complique un peu, je sollicite votre aide svp!

    je dois ecrire un programme qui doit calculer la hauteur d'une pyramide en fonction d'un nombre des blocs donner aléatoirement, soit blocks = input("entrer un nombre des blocks: "). chaque ligne inférieure a un block de plus que celle qui vient après, et la hauteur est calculée lorsque chaque ligne est parfaitement rempli(c'est à dire les lignes inferieures comportent un block de plus que les lignes superieures). Si la règle n'est pas suivi, le programme s'arrête automatiquement.


    Merci pour votre aide.

    illustration de la pyramide:

  2. #2
    Rédacteur



    Ma solution est assez simple, quelques lignes de codes ! Mais c'est vous qui devez résoudre l'exercice.

    Prenez une feuille de papier et un crayon et pensez qu'au nombre N (nombre de briques au départ) on retire k pierres à chaque rangée. La seule difficulté c'est que la valeur de k change à chaque rangée.

  3. #3
    Expert confirmé
    Est-ce que c'est de la triche d'utiliser la somme d'une suite arithmétique?
    Brachygobius xanthozonus
    Ctenobrycon Gymnocorymbus

  4. #4
    Expert éminent sénior
    Salut,

    Citation Envoyé par MasterCisco Voir le message
    chaque ligne inférieure a un block de plus que celle qui vient après, et la hauteur est calculée lorsque chaque ligne est parfaitement rempli(c'est à dire les lignes inferieures comportent un block de plus que les lignes superieures). Si la règle n'est pas suivi, le programme s'arrête automatiquement
    Le nombre de briques B doit s'écrire comme la somme de H entiers consécutifs (H étant la hauteur recherchée).
    Ce qui revient à chercher m et n tels que:
    B soit la somme des entiers de l'intervalle [m, n], ou
    2*B = n * (n + 1) - m * (m - 1).
    Et s'ils existent H = n - m

    Exemples.
    • B = 6 s’écrit 3 + 2 + 1 => m, n = 0, 3 et H = 3 - 0 = 3
    • B = 5 s'écrit 3 + 2 => m, n = 1, 3 et H = 3 - 1 = 2
    • B = 4 s'écrit 4 => m, n = 3, 4 et H = 1


    La difficulté est "ok dans les cas où m = 0 i.e. s'il existe n tel que B s'écrive sous la forme des n premiers entiers positifs... j'ai la solution" mais, dans les autres cas où m > 0, voire est sans solution, c'est un plus compliqué.

    Mais vous avez de la chance: il y a la rubrique algo. et ses forums où poser la question.

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  5. #5
    Rédacteur

    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    #! python3
    # coding: utf-8
     
    from termcolor import cprint
     
    def hauteur_pyramide(N):
        k = 1
        while True:
            N -= k
            cprint("Nombre d'éléments restant = {}, rang = {}".format(N, k), "green")
            if N - k - 1 >= 0:
                k += 1
            else:
                break
        cprint("Hauteur pyramide = {}".format(k), "green")
     
    for k in [3, 6, 10, 15, 21, 28, 29, 30, 31]:
        hauteur_pyramide(k)


    PS F:\test-python> & C:/Users/User/AppData/Local/Programs/Python/Python37-32/python.exe f:/test-python/Tests/forum_dvp/b_test.py
    Nombre d'éléments restant = 2, rang = 1
    Nombre d'éléments restant = 0, rang = 2 
    Hauteur pyramide = 2
    Nombre d'éléments restant = 5, rang = 1
    Nombre d'éléments restant = 3, rang = 2
    Nombre d'éléments restant = 0, rang = 3
    Hauteur pyramide = 3
    Nombre d'éléments restant = 9, rang = 1
    Nombre d'éléments restant = 7, rang = 2
    Nombre d'éléments restant = 4, rang = 3
    Nombre d'éléments restant = 0, rang = 4
    Hauteur pyramide = 4
    Nombre d'éléments restant = 14, rang = 1
    Nombre d'éléments restant = 12, rang = 2
    Nombre d'éléments restant = 9, rang = 3
    Nombre d'éléments restant = 5, rang = 4
    Nombre d'éléments restant = 0, rang = 5
    Hauteur pyramide = 5
    Nombre d'éléments restant = 20, rang = 1
    Nombre d'éléments restant = 18, rang = 2
    Nombre d'éléments restant = 15, rang = 3
    Nombre d'éléments restant = 11, rang = 4
    Nombre d'éléments restant = 6, rang = 5
    Nombre d'éléments restant = 0, rang = 6
    Hauteur pyramide = 6
    Nombre d'éléments restant = 27, rang = 1
    Nombre d'éléments restant = 25, rang = 2
    Nombre d'éléments restant = 22, rang = 3
    Nombre d'éléments restant = 18, rang = 4
    Nombre d'éléments restant = 13, rang = 5
    Nombre d'éléments restant = 7, rang = 6
    Nombre d'éléments restant = 0, rang = 7
    Hauteur pyramide = 7
    Nombre d'éléments restant = 28, rang = 1
    Nombre d'éléments restant = 26, rang = 2
    Nombre d'éléments restant = 23, rang = 3
    Nombre d'éléments restant = 19, rang = 4
    Nombre d'éléments restant = 14, rang = 5
    Nombre d'éléments restant = 8, rang = 6
    Nombre d'éléments restant = 1, rang = 7
    Hauteur pyramide = 7
    Nombre d'éléments restant = 29, rang = 1
    Nombre d'éléments restant = 27, rang = 2
    Nombre d'éléments restant = 24, rang = 3
    Nombre d'éléments restant = 20, rang = 4
    Nombre d'éléments restant = 15, rang = 5
    Nombre d'éléments restant = 9, rang = 6
    Nombre d'éléments restant = 2, rang = 7
    Hauteur pyramide = 7
    Nombre d'éléments restant = 30, rang = 1
    Nombre d'éléments restant = 28, rang = 2
    Nombre d'éléments restant = 25, rang = 3
    Nombre d'éléments restant = 21, rang = 4
    Nombre d'éléments restant = 16, rang = 5
    Nombre d'éléments restant = 10, rang = 6
    Nombre d'éléments restant = 3, rang = 7
    Hauteur pyramide = 7

  6. #6
    Expert éminent sénior
    Salut,

    Ton code ne fonctionne pas pour les valeurs de k où il n'existe pas un entier n tel que k s'écrive comme la somme des entiers de 1 à n. Pire, il ne dit même pas qu'il retourne une erreur dans le cas contraire.

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  7. #7
    Rédacteur

    Je ne comprends pas ta critique, il y a toutes les informations nécessaires sur la hauteur et le nombre d'éléments restants :

    . . .
    Nombre d'éléments restant = 3, rang = 7
    Hauteur pyramide = 7

  8. #8
    Expert éminent sénior
    Citation Envoyé par danielhagnoul Voir le message
    Je ne comprends pas ta critique, il y a toutes les informations nécessaires sur la hauteur et le nombre d'éléments restants :

    . . .
    Nombre d'éléments restant = 3, rang = 7
    Hauteur pyramide = 7
    Il reste des briques à placer... soit le programme dit "je sais pas faire" (et dans cas on ne sort pas de hauteur), soit il trouve une solution avec un intervalle qui ne commence pas à 1 mais à un m tel que la somme des entiers de l'intervalle [m, n] soit égal au nombre de briques.

    Par exemple:
    29 s'écrit comme la somme des entiers de l'intervalle [14, 15], la hauteur est 2.
    30 s'écrit comme la somme des entiers de l'intervalle [4, 5, 6, 7, 8]: la hauteur est 5.
    31 s'écrit comme la somme des entiers de l'intervalle [15, 16]: la hauteur est 2.

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  9. #9
    Membre chevronné
    L'énoncé n'a pas été forcément clair, mais moi ce que je comprend c'est que soit on a une pyramide parfaite, soit non, et dans ce cas il faut renvoyer une erreur. Je ne suis pas sûr donc qu'il faille considérer 29=15+14 soit une pyramide.

  10. #10
    Expert éminent sénior
    Salut,

    Citation Envoyé par lg_53 Voir le message
    L'énoncé n'a pas été forcément clair, mais moi ce que je comprend c'est que soit on a une pyramide parfaite, soit non, et dans ce cas il faut renvoyer une erreur. Je ne suis pas sûr donc qu'il faille considérer 29=15+14 soit une pyramide.
    Tout à fait, c'est pour cela que j'ai écrit: "soit le programme dit "je sais pas faire" (et dans cas on ne sort pas de hauteur), soit il trouve une solution qui...".
    Sûr que chercher m, n est un peu plus compliqué que de se contenter de vérifier qu'un nombre (de briques) s'écrit comme la somme de N premiers entiers.

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  11. #11
    Expert confirmé
    Avec un peu de calcul, j'aboutis à ça:
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    import math
     
    def getHeight(S):
        h = (math.sqrt(1 + 8*S) - 1)/2
        h = int(h)
        return { 'hauteur': h, 'reste': int(S - h*(h+1)/2) }
     
    print(getHeight(7))


    Après on est libre d'afficher la hauteur ou pas.
    Brachygobius xanthozonus
    Ctenobrycon Gymnocorymbus

  12. #12
    Futur Membre du Club
    Citation Envoyé par lg_53 Voir le message
    L'énoncé n'a pas été forcément clair, mais moi ce que je comprend c'est que soit on a une pyramide parfaite, soit non, et dans ce cas il faut renvoyer une erreur. Je ne suis pas sûr donc qu'il faille considérer 29=15+14 soit une pyramide.
    Bonsoir,

    Merci pour vos contribution. Pour l'énoncé, j'ai parfaitement repris tel qu'ecris dans l'exercice.

  13. #13
    Futur Membre du Club


    tel est l'enoncé de l'exercice!

  14. #14
    Expert éminent sénior
    Salut,

    Citation Envoyé par MasterCisco Voir le message
    tel est l'enoncé de l'exercice!
    Certes mais la dernière ligne vous dit aussi "test your code using the data we've provided".
    Et vu ce que raconte la note juste avant, vous avez déjà 2 solutions.

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  15. #15
    Rédacteur

    Calculer quelle est la pyramide constructible avec N blocs ou calculer quelle est la pyramide tronquée constructible avec N blocs avec la condition : on doit utilisé tous les blocs, ce n'est évidemment pas le même problème.