Inscription / Connexion Nouveau Sujet
Niveau première
Partager :

Algorithme suite de Syracuse

Posté par
maelys31
24-04-21 à 19:17

Bonjour, j'ai encore un problème avec un algorithme sur cet exercice:
1-Posons N=3
Déterminer un pour n allant de 1 à 11.
2- A chaque suite de Syracuse, on associe 3 nombres particuliers:
•le temps de vol: c'est le plus petit indice n tel que un=1. Quelle est sa valeur pour la suite de Syracuse de 3?
•le temps de vol en altitude: c'est le plus petit indice n tel que un+1<u0. Quelle est sa valeur pour la suite de Syracuse de 3?
•l'altitude maximale: c'est la valeur maximale de la suite. Quelle est sa valeur pour la suite de Syracuse de 3?
3-Le programme suivant,écrit dans le langage Python, permet de déterminer le temps de vol d'une suite de Syracuse de nombre N. (J'ai recopié l'algorithme tel qu'il était dans mon exercice)
from math import *
def s(x):
         if x%2==0:
                     y=x/2
         else:
                  y=...
          return y
u=int(input("valeur de N"))
n=0
while u...
           ...
           n=n+1
print('temps de vol=',...)

Compléter les parties manquantes, puis faites fonctionner ce programme sur votre ordinateur pour N=127. Qu'affiche-t-il alors?

Voici ce que j'ai fait:
1- (je n'ai pas mis le calcul détaillé)
u0=3
u1=10
u2=5
u3=16
u4=8
u5=4
u6=2
u7=1
u8=4
u9=2
u10=1
u11=4

3- Le temps de vol vaut 7.
Le temps de vol en altitude vaut 5.
L'altitude maximale vaut 16.

4- Les trous dans l'algorithme, ligne 7: y=3*x+1
Ligne 10 et 11:  while u>1:
                                              u=s(u)
Ligne 13: print('temps de vol=',n)

J'ai fait tourner l'algorithme sur mon ordinateur mais ça ne fonctionne pas. Il y a des erreurs?
Merci beaucoup

Posté par
ZEDMAT
re : Algorithme suite de Syracuse 24-04-21 à 20:02

Bonsoir,

Citation :
Bonjour, j'ai encore un problème avec un algorithme sur cet exercice:
1-Posons N=3
Déterminer un pour n allant de 1 à 11.


Je suppose que l'énoncé donne l'expression de un.

Posté par
ZEDMAT
re : Algorithme suite de Syracuse 24-04-21 à 21:37

Bien qu'il manque un morceau de l'énoncé et que ce N n'est pas défini,
tes réponses aux questions 1 et 2 sont correctes.

Sauf erreur d'interprétation, ton N est le premier terme u0 de la suite :
u0 = 3
u1 = 10
u2 = 5
etc.

Donc ton problème porte uniquement sur le programme en Python ?

Pour nous faciliter la tâche, je te conseille de faire un copier/coller de ton script .

Dans Python, tu sélectionnes ton script. Tu le copies (CTRL+ C)
Tu reviens sur l'île aux maths et dans la zone de message, tu le colles (CTRL +V) en le mettant (si possible.... mais c'est toujours possible !) entre 2 balises de code </> (voir outil sous la fenêtre du message).
Exple :

from math import *
def s(x):
         if x%2==0:
                     y=x/2
         else:
                  y=3*x+1
         return y


Essaye.

Posté par
maelys31
re : Algorithme suite de Syracuse 24-04-21 à 23:48

Bonsoir, je suis vraiment désolée j'ai eu une coupure d'internet et je n'ai pas pu voir vos messages.
Effectivement j'ai oublié une partie de l'énoncé, pardon.
Je l'ai recopié ci-desous:
La suite de Syracuse (un) d'un nombre N>0 est définie par récurrence, de la manière suivante:
u0=N
pour tout entier naturel n:
si un est pair, alors un+1=\frac{u_n}{2}

si un est impair, alors un+1=3un+1.

La conjecture de Syracuse affirme que, pour tout entier naturel N, il existe un entier naturel n tel que un=1.

Voici l'algorithme que j'ai utilisé:

def s(x):
    if x%2==0:
        y=x/2
    else:
        y=3*x+1
    return y
u=int(input("valeur de N="))
valeur de N=127
n=0
while u>1:
    u=s(u)
    n=n+1
print('temps de vol',n)

Sur mon ordinateur il me marque qu'il y a une erreur de syntaxe sur la ligne
u=int(input("valeur de N=))


Encore désolée pour cet énorme oubli. Toutes mes excuses

Posté par
ZEDMAT
re : Algorithme suite de Syracuse 25-04-21 à 09:34

Citation :
Sur mon ordinateur il me marque qu'il y a une erreur de syntaxe sur la ligne
u=int(input("valeur de N=))


Je vais tester tout ton programme mais dans la ligne ci dessus, manifestement il manque un guillemet (fermant) après le N= ". Rectifie et essaye....

Je reviens dans 5 minutes.

Posté par
ZEDMAT
re : Algorithme suite de Syracuse 25-04-21 à 09:38

mais je viens de constater que ce guillemet est bien présent dans ton script !!

Le problème est ailleurs

Posté par
ZEDMAT
re : Algorithme suite de Syracuse 25-04-21 à 09:50

Il n'était pas loin !!
Ton script fonctionne parfaitement si tu enlèves la ligne incongrue (copié/collé malencontreux ??) qui suit celle signalée dans le message d'erreur

Citation :
Voici l'algorithme que j'ai utilisé:
def s(x):
    if x%2==0:
        y=x/2
    else:
        y=3*x+1
    return y
u=int(input("valeur de N="))
valeur de N=127
n=0
etc.


Algorithme suite de Syracuse

Posté par
ZEDMAT
re : Algorithme suite de Syracuse 25-04-21 à 10:03

Lis mes messages successifs à partir du haut... sinon cela va être incompréhensible

Mon logiciel Python n' a pas réagi comme le tien car il m'a tout de suite indiqué là où se trouvait l'erreur du script.
J'ai remarqué que parfois, le message d'erreur n'indique pas la ligne où se trouve vraiment l'erreur de syntaxe.... et que l'erreur se trouve en fait dans la ligne qui précède ou qui suit.

Algorithme suite de Syracuse

Posté par
ZEDMAT
re : Algorithme suite de Syracuse 25-04-21 à 10:13

lis d'abord ce qui précède....

Une remarque pour améliorer ton script :
tu as pris comme condition de sortie de la boucle tant que (while)
u>1 donc dès que u=1, "on" sort.

Cela fonctionne puisque u ne prend que des valeurs supérieures à 1
mais cela tu ne le savais pas... a priori.

Je te suggère de mettre :
tant que u est différent de 1
ce qui s'écrit sous python
while u!=1

!= signifie

Posté par
maelys31
re : Algorithme suite de Syracuse 25-04-21 à 14:42

D'accord, je vais tout de suite essayer pour vous dire.
Merci beaucoup

Posté par
maelys31
re : Algorithme suite de Syracuse 25-04-21 à 15:04

Python 3.9.2 (tags/v3.9.2:1a79785, Feb 19 2021, 13:44:55) [MSC v.1928 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> def s(x):
...     if x%2==0:
...         y=x/2
...     else:
...         y=3*x+1
...     return y
... u=int(input("valeur de N="))
  File "<stdin>", line 7
    u=int(input("valeur de N="))
    ^
SyntaxError: invalid syntax

Voici ce que j'obtient quand j'ecris mon programme, Python me met erreur de syntaxe des que je rentre la ligne
u=int(input("valeur de N="))

Posté par
ZEDMAT
re : Algorithme suite de Syracuse 25-04-21 à 15:17

Tu as bien enlevé la ligne  "valeur de N = 127" ?

J'avais récupéré ton script mis entre balises </> et après avoir enlevé cette ligne, il fonctionnait parfaitement ! (voir ma copie d'écran de 9h 50... ici !!)
Je ne comprends pas.

Refais un copié collé entre balises de ton script qui plante...

Tu es vraiment en... Colombie ?
Ici il est15h 17, il fait beau et je vais aller prendre l'air et marcher pendant une bonne heure ! A tout à l'heure

Posté par
maelys31
re : Algorithme suite de Syracuse 25-04-21 à 15:21

Oui, j'habite sur un voilier. C'est pour cela que je met du temps a repondre parfois a cause du decalage horaire. Je vais refaire un copie colle de mon script.

Posté par
maelys31
re : Algorithme suite de Syracuse 25-04-21 à 15:24

>>> def s(x):
...     if x%2==0:
...         y=x/2
...     else:
...         y=3*x+1
...     return y
... u=int(input("Valeur de N="))
  File "<stdin>", line 7
    u=int(input("Valeur de N="))
    ^
SyntaxError: invalid syntax

Quand j'ecris le programme, s'il y a une erreur je ne peux pas ecrire plus loin que la ligne ou il y a l'erreur. Je dois recommencer a zero.

Posté par
ZEDMAT
re : Algorithme suite de Syracuse 25-04-21 à 16:58

maelys31 @ 25-04-2021 à 15:24

[code]>>> def s(x):
...     if x%2==0:
...         y=x/2
...     else:
...         y=3*x+1
...     return y
... u=int(input("Valeur de N="))
  


Je ne comprends pas ce que tu fais....
Pourquoi ces chevrons >>> devant def ?
Pourquoi ces points ... au début des lignes suivantes ?
C'est toi qui les as ajoutés ??

Dans ton message de 23h48 (ici), tu avais un script impeccable où il te suffisait d'enlever une ligne pour qu'il tourne sans problème.
Reprends le.... sans rien ajouter.

Posté par
ZEDMAT
re : Algorithme suite de Syracuse 25-04-21 à 17:14

lis d'abord mon précédent message

def s(x):
    if x%2==0:
        y=x/2
    else:
        y=3*x+1
    return y

u=int(input("valeur de N="))
n=0
while u!=1:
    u=s(u)
    n=n+1
print('temps de vol',n)


Sélectionne le script entre les bornes [ code] et [ /code].
Copie le (CTRL+C), sans RIEN modifier.
Reviens dans ton éditeur Python, colle ce que tu as copié (CTRL+V).
Ne modifie RIEN.

Lance le programme (en général petit triangle vert).
Une fenêtre s'ouvre où apparait ton texte  "valeur de N=" ; tu saisis le nombre N que tu veux (127 par exemple) et tu valides.
Dans la console apparait le temps de vol.

Posté par
maelys31
re : Algorithme suite de Syracuse 25-04-21 à 18:58

ZEDMAT @ 25-04-2021 à 16:58



Je ne comprends pas ce que tu fais....
Pourquoi ces chevrons >>> devant def ?
Pourquoi ces points ... au début des lignes suivantes ?
C'est toi qui les as ajoutés ??

Dans ton message de 23h48 (ici), tu avais un script impeccable où il te suffisait d'enlever une ligne pour qu'il tourne sans problème.
Reprends le.... sans rien ajouter.

Je n'ai rien ajouter les chevrons et les points sont generes automatiquement quand je commence un programme et quand je change de ligne.

Posté par
maelys31
re : Algorithme suite de Syracuse 25-04-21 à 19:12

Je crois que je n'ai pas du tout le même python que vous car je n'ai pas de bouton pour lancer le programme. J'ai fait une capture d'écran pour que ce soit plus clair.

Algorithme suite de Syracuse

Posté par
ZEDMAT
re : Algorithme suite de Syracuse 25-04-21 à 19:39

As tu essayé le copié/collé de MON programme ?



Alors la  après !! je cale.
Je vais poser le problème technique à mes collègues spécialistes...

Posté par
maelys31
re : Algorithme suite de Syracuse 25-04-21 à 19:41

Non, je vais tout de suite essayer

Posté par
maelys31
re : Algorithme suite de Syracuse 25-04-21 à 19:46

>>> def s(x):
...     if x%2==0:
...         y=x/2
...     else:
...         y=3*x+1
...     return y
... u=int(input("valeur de N="))
  File "<stdin>", line 7
    u=int(input("valeur de N="))
    ^
SyntaxError: invalid syntax
>>> n=0
>>> while u!=1:
...     u=s(u)
...     n=n+1
... print('temps de vol',n)
  File "<stdin>", line 4
    print('temps de vol',n)
    ^
SyntaxError: invalid syntax
>>>

Voici ce que j'ai obtenu en faisant le copie/colle de votre programme.

Posté par
mathafou Moderateur
re : Algorithme suite de Syracuse 25-04-21 à 20:18

Bonjour,
définir une fonction en ligne de commande ???
(ils viennent de là les chevrons)
un programme ne se tape pas en ligne de commande !!!

mais dans l'éditeur de programmes !!

si tu tiens absolument à mettre ça en ligne de commandes (pfff )
déja à chaque malheureuse faute de frappe tu dois tout retaper depuis le début
quelle galère !!
personne ne fait comme ça !

et en plus ce sera exécuté immédiatement pendant la frappe
quelle galère et quelle pagaille ...

>>> 
>>> def s(x):
...     if x%2==0:
...         y=x/2
...     else:
...         y=3*x+1
...     return y
...                      jusque là c'est des lignes  de suite de la 1ère ligne de commande "def"
                         il faut passer à la ligne pour terminer cette ligne
>>> u = int(input("valeur de N="))    # commande exécutée immédiatement !!!
valeur de N=10     #  résultat de cette commande (après avoir tapé 10 à l'invite !!)
>>> n=0       # commande exécutée immédiatement !!!
>>> while u!=1:
...     u=s(u)           # pareil : lignes de suite de la ligne "whlle"
...     n=n+1
...                   # on est toujours dans les lignes de suite de la même ligne : passer à la ligne
>>> print('temps de vol',n)     # commande exécutée immédiatement !!!
temps de vol 6 #  résultat de cette commande
>>>        # prêt à taper de nouvelles commandes
 

si on veut tester une autre valeur, il faut tout RETAPER depuis "u=int(input etc)
pour re exécuter ces commandes immédiates
(qui ne forment donc pas un programme du tout)

Posté par
maelys31
re : Algorithme suite de Syracuse 25-04-21 à 20:23

Bonsoir, ou se trouve l'editeur de programme?

Posté par
maelys31
re : Algorithme suite de Syracuse 25-04-21 à 20:24

Je ne le savais pas quand j'ouvre Python, on m'envoie en ligne de commande...

Posté par
mathafou Moderateur
re : Algorithme suite de Syracuse 25-04-21 à 20:27

exemple avec EduPython :

Algorithme suite de Syracuse

Posté par
maelys31
re : Algorithme suite de Syracuse 25-04-21 à 20:29

Je n'ai pas EduPython...
J'ai Python 3.9

Posté par
maelys31
re : Algorithme suite de Syracuse 25-04-21 à 20:33

Il faut que je telecharge EduPython?

Posté par
ZEDMAT
re : Algorithme suite de Syracuse 25-04-21 à 20:58

Merci à Mathafou pour son intervention salvatrice.... les chevrons auraient dû m'alerter mais sincèrement je n'imaginais pas que tu saisissais le code directement dans la console !!
Tu n'avais jamais encore utilisé un programme fait avec Python ?

Bon, pour utiliser le langage Python (version au choix ?), il te faut un éditeur, un environnement pour éditer le code.

Je ne suis pas un spécialiste (plutôt un débutant !!) et Mathafou saura mieux que moi te conseiller, cependant Edu Python me semble une bonne idée...

Tu peux toujours essayer en attendant l'avis de Mathafou

Posté par
maelys31
re : Algorithme suite de Syracuse 25-04-21 à 21:03

Je viens d'installer EduPython sur mon ordinateur et le programme fonctionne parfaitement.
Je  ne le savais pas non plus, je pensais que c'etait l'editeur de programme...
Merci infiniment pour votre aide

Posté par
maelys31
re : Algorithme suite de Syracuse 25-04-21 à 21:06

def s(x):
    if x%2==0:
        y=x/2
    else:
        y=3*x+1
    return y
u=int(input("valeur de N="))
n=0
while u!=1:
    u=s(u)
    n=n+1
print('temps de vol=',n)

Dans la console Python j'ai obtenu ce resultat.
*** Console de processus distant Réinitialisée *** 
valeur de N=127
temps de vol= 46
>>> 

Posté par
mathafou Moderateur
re : Algorithme suite de Syracuse 25-04-21 à 21:23

l'avantage de EduPython est que c'est "tout en un"
l'éditeur, la console , le debugger (pour exécuter pas à pas, mettre des points d'arrêt etc)

bien d'autres"IDE" (environnement intégré de développement =tout en un ) conviennent
je n'en ai pas utilisé d'autres que celui là (pas envie d'en installer des tas ...)

mais on en trouve aussi en ligne sur Internet (sans rien installer chez soi)
il suffit de chercher "Python en ligne" avec un moteur de recherche ;

https://trinket.io/python3
https://www.programiz.com/python-programming/online-compiler/

etc (je n'ai essayé que ces deux là à l'instant)
d'autres te préconiseront peut être leur préféré personnel ...

Posté par
mathafou Moderateur
re : Algorithme suite de Syracuse 25-04-21 à 21:34

ah bein si tu as installé EduPython entretemps ..
c'est parfait.
(c'est celui recommandé pour l'enseignement )

Posté par
ZEDMAT
re : Algorithme suite de Syracuse 25-04-21 à 21:55

Super, une aventure qui finit bien



Bon vent maelys31

NB : Il y a beaucoup de tutoriels et de documents divers sur Edupython....

Posté par
maelys31
re : Algorithme suite de Syracuse 26-04-21 à 16:55

Merci beaucoup de m'avoir aidée



Vous devez être membre accéder à ce service...

Pas encore inscrit ?

1 compte par personne, multi-compte interdit !

Ou identifiez-vous :


Rester sur la page

Inscription gratuite

Fiches en rapport

parmi 1674 fiches de maths

Désolé, votre version d'Internet Explorer est plus que périmée ! Merci de le mettre à jour ou de télécharger Firefox ou Google Chrome pour utiliser le site. Votre ordinateur vous remerciera !