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

Python Discussion :

La suite de Syracuse ou conjecture de Collaz


Sujet :

Python

  1. #1
    Candidat au Club
    La suite de Syracuse ou conjecture de Collaz
    Bonsoir, je suis confronté a un problème épineux --", en tout cas difficile avec mes connaissances actuelles...
    Je travaille sur un programme dans lequel il m'est demandé d'écrire un programme permettant de donner le temps de vol, le temps de vol en altitude et l’altitude maximale...(mais tout cela avec une seule boucle)

    Pour ceux qui savent pas:
    La suite de Syracuse est une suite d'entiers naturels définie de la manière suivante : on part d'un nombre entier plus grand que zéro ; s’il est pair, on le divise par 2 ; s’il est impair, on le multiplie par 3 et on ajoute 1. En répétant l’opération, on obtient une suite d'entiers positifs dont chacun ne dépend que de son prédécesseur.(def wikipedia )
    Le temps de vol c'est le plus petit indice n tel que u(n) = 1.
    et le temps de vol en altitude c'est le plus petit indice n tel que un+1 ≤ u0.
    et l' altitude maximale la valeur maximale de la suite.

    Actuellement je suis capable seulement de calculer le temps de vol avec le programme suivant

  2. #2
    Candidat au Club
    [mise a jour] J'y suis parvenu
    Bon, j'y suis parvenu mais je respecte pas la consigne de une seule boucle... Voici mon travail

    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
    19
    20
    21
    22
    23
    u=int(input("premier terme de la suite"))
    liste = []
    indice=0
    liste = liste + [u]
    ui=0
    tpsvolalt=0
    while u != 1 :
     
        if u%2 == 0 :
            u=u//2
            liste = liste + [u]
            indice = indice +1
     
        else :
            u=3*u+1
            liste = liste + [u]
            indice = indice +1
        while u>=ui :
            tpsvolalt=indice
            ui=u
    print("le temps de vol est ",int(indice))
    print("le temps de vol en altitude est ",int(tpsvolalt))
    print("le vol maximum est ",max(liste))

  3. #3
    Membre expert
    Salut,

    Ce serait préférable de poster le code plutôt qu'une image...

    Cela nous éviterait d'avoir à le recopier si on voulait le tester...

  4. #4
    Candidat au Club
    Ha oui pardon xd
    Citation Envoyé par Beginner. Voir le message
    Salut,

    Ce serait préférable de poster le code plutôt qu'une image...

    Cela nous éviterait d'avoir à le recopier si on voulait le tester...

  5. #5
    Rédacteur/Modérateur

    La ligne if u < ui and u == max(list)) est fausse. Il faudrait remplacer max() pas min() pour avoir un bon résultat.

    Et je ferais même un peu différement, je remplacerais cette ligne par if u < ui and tpsvolalt == 0
    Et pour que ça marche, j'ajouterais une ligne au tout début du programme tpsvolalt = 0 .

    PS : ton code n'est plus lisible, utilise la balise code pour que les indentations apparaissent. Et la balise code, c'est le bouton # sur la barre de boutons (ça ajoute {CODE} et {/CODE} avant et après la portion de code)
    N'oubliez pas le bouton Résolu si vous avez obtenu une réponse à votre question.

  6. #6
    Candidat au Club
    Citation Envoyé par tbc92 Voir le message
    La ligne if u < ui and u == max(list)) est fausse. Il faudrait remplacer max() pas min() pour avoir un bon résultat.

    Et je ferais même un peu différement, je remplacerais cette ligne par if u < ui and tpsvolalt == 0
    Et pour que ça marche, j'ajouterais une ligne au tout début du programme tpsvolalt = 0 .

    PS : ton code n'est plus lisible, utilise la balise code pour que les indentations apparaissent. Et la balise code, c'est le bouton # sur la barre de boutons (ça ajoute {CODE} et {/CODE} avant et après la portion de code)
    Merci beaucoupppp!!!!!!! :3

  7. #7
    Candidat au Club
    réponse finale
    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
    19
    20
    21
    22
    23
    24
    25
    u=int(input("premier terme de la suite"))
    liste = []
    indice=0
    liste = liste + [u]
    ui=u
    tpsvolalt=0
    while u != 1 :
     
        if u%2 == 0 :
            u=u//2
            liste = liste + [u]
            indice = indice +1
     
        else :
            u=3*u+1
            liste = liste + [u]
            indice = indice +1
        if ui==1:
            tpsvolalt=0
        elif u<ui and tpsvolalt==0 :
            tpsvolalt=indice-1
     
    print("le temps de vol est ",int(indice))
    print("le temps de vol en altitude est ",int(tpsvolalt))
    print("le vol maximum est ",max(liste))

    j'avais oublié de prendre en compte le un+1 et le cas particulier de 1 en lien avec ma modif

###raw>template_hook.ano_emploi###