Aller au contenu

Suite numérique 1ère maths


Messages recommandés

Posté(e)

Bonjour peut on m'aider s'il vous plaît, je ne suis vraiment pas douée sur python. Des explications avec éventuellement des solutions m'aideraient à mieux comprendre. Je vous mets le sujet ci joint étant assez long. 

IMG_20221112_201710.jpg

  • Réponses 56
  • Created
  • Dernière réponse

Top Posters In This Topic

  • E-Bahut
Posté(e)

Bonsoir,

Pour ce soir, ce sera bref. Si tu n'as pas avancé ou si personne n'a répondu d'ici demain, je reprendrai ce fil.

1) Il suffit d'appliquer la démarche.
13 impair -> 13*3+1=40
40 pair -> 40/2=20
20 pair -> 20/10=10
10 pair -> 10/2=5
5 impair -> 3*5+1=16
16 pair -> 16/2=8
8 pair -> 8/2=4
4 pair -> 4/2=2
2 pair -> 2/2=1
Terminé !

Le vol de 13 est donc 13 40 20 10 5 16 8 4  2 1 d'où
sa durée est de 10 (10 nombres)
sa hauteur est de 40 (maximum obtenu)

2) L'algorithme doit traduire la suite des opérations faites ci-dessus.

Tant que n>1
     Si n pair
          n <- n/2
     Sinon faire
          n <- 3*n+1
     Afficher n
     Fin si
Fin Tant que

3) n%2 reste de la division entière de n par 2 (si n%2=0 alors n est pair)
n//2 quotient de la division entière de n par 2
Partant de là, je te laisse coder l'algorithme en Pyrhon.

A demain si nécessaire.

 

 

 

Posté(e)

Bonjour, alors le faire en python je sais que je dois remplacer les flèches par = et que tant que c'est "while" mais comment traduire le si et sinon ? 

  • E-Bahut
Posté(e)

Bonjour,

Tu as l'exemple de cette structure à la question 5.

IF ........... :

ELSE ....... :

Ne pas oublier les ":" en fin de ligne

 

Tu peux faire une recherche sur le forum avec le mot "syracuse".

 

Posté(e)
Il y a 2 heures, julesx a dit :

Attention cependant, if et else en minuscules, cf. la suite de l'énoncé à la question 5.

Donc le programme donne ceci ?

While n>1 :

   If n%2==0 :

      n=n/2 

Else n//2==0 :

       n=3*n+1 

Pint n

Je ne l'ai pas tapé sur ma calculatrice car je prends vraiment beaucoup de temps à trouver toute les touches. Et je sais que d'habitude on définit n mais comme c'est un entier je ne sais pas quoi mettre.

 

 

 

 

 

 

 

  • E-Bahut
Posté(e)

Si tu disposes d'un accès Internet, tu peux utiliser trinket.io qui donne accès gratuitement à une application Python où tu pourras taper et tester tes programmes facilement.

  • E-Bahut
Posté(e)

En respectant les indentations, en remplaçant n=n/2 par n=n//2 pour ne travailler qu'avec des entiers et en corrigeant le pint en print,  on a

while n>1:
    if n%2==0:
        n=n//2
    else:
        n=3*n+1;
    print(n)

Mais si tu veux vérifier avec le n=13 initial, il faut rajouter au début les deux lignes
n=13
print(n) sinon le 13 de départ n'est pas affiché.

Posté(e)
il y a 9 minutes, julesx a dit :

En respectant les indentations, en remplaçant n=n/2 par n=n//2 pour ne travailler qu'avec des entiers et en corrigeant le pint en print,  on a

while n>1:
    if n%2==0:
        n=n//2
    else:
        n=3*n+1;
    print(n)

Mais si tu veux vérifier avec le n=13 initial, il faut rajouter au début les deux lignes
n=13
print(n) sinon le 13 de départ n'est pas affiché.

D'accord merci je pense que la question ne porte pas sur le 13 de la question 1 alors je vais laisser ainsi. 

Pour la question 4 je dois créer des variables ?  Comme ce qui est montré en dessous ? 

il y a 35 minutes, pzorba75 a dit :

trinket.io

il y a 36 minutes, pzorba75 a dit :

Si tu disposes d'un accès Internet, tu peux utiliser trinket.io qui donne accès gratuitement à une application Python où tu pourras taper et tester tes programmes facilement.

 

Merci je testerai 

  • E-Bahut
Posté(e)
il y a 28 minutes, Eleor a dit :

D'accord merci je pense que la question ne porte pas sur le 13 de la question 1 alors je vais laisser ainsi. 

C'est juste au cas où tu voudrais teste le script.

il y a 29 minutes, Eleor a dit :

Pour la question 4 je dois créer des variables ?  Comme ce qui est montré en dessous ? 

Oui, mais il faut les initialiser, par exemple hauteur=0 et durée=1.

Posté(e)
il y a 45 minutes, julesx a dit :

C'est juste au cas où tu voudrais teste le script.

Oui, mais il faut les initialiser, par exemple hauteur=0 et durée=1.

D'accord, celà m'embête un peu car nous n'avons pas fait d'exercice du même type, souvent c'était juste un prix qu'il fallait trouver et un nombre de mètre par exemple et non une liste de chiffres ou le maximum donc je ne sais pas comment m'y prendre. 

 

 

  • E-Bahut
Posté(e)

Bon, écoute, je te joins le script complet pour cette partie, essaie de voir ce que tu peux en tirer.

n=13
hauteur=0
duree=1
print(n)
while n>1:
    if n%2==0:
        n=n//2
    else:
        n=3*n+1;
    duree=duree+1
    if n>hauteur:
        hauteur=n
    print(n)
print("duree ",duree)
print("hauteur ",hauteur)
    

Rappels :
n=13 pour tester le script
hauteur=0 pour déclarer et initialiser la variable
duree=1 idem et 1 car le premier nombre n'est pas compté ensuite.

Partant de là, essaie de voir la suite. Par contre, je ne reste pas connecté, pour la suite, il faudra compter sur un autre intervenant.

Posté(e) (modifié)
il y a 40 minutes, julesx a dit :

Bon, écoute, je te joins le script complet pour cette partie, essaie de voir ce que tu peux en tirer.

n=13
hauteur=0
duree=1
print(n)
while n>1:
    if n%2==0:
        n=n//2
    else:
        n=3*n+1;
    duree=duree+1
    if n>hauteur:
        hauteur=n
    print(n)
print("duree ",duree)
print("hauteur ",hauteur)
    

Rappels :
n=13 pour tester le script
hauteur=0 pour déclarer et initialiser la variable
duree=1 idem et 1 car le premier nombre n'est pas compté ensuite.

Partant de là, essaie de voir la suite. Par contre, je ne reste pas connecté, pour la suite, il faudra compter sur un autre intervenant.

D'accord merci, pourriez vous expliquer pourquoi il est écrit deux fois duree et hauteur à la fin ?

Et donc si je veux recopier le script sans l'exemple de n=13 je n'écris juste pas la première ligne qui est donc "n=13" ? 

Et pas de soucis le travail sera présent demain matin aussi.

Pour la question 5 j'ai donc complété sur la pièce jointe ci dessous. Mais pour V je ne sais pas ce qu'il faut mettre,si il faut l'initialiser comme la hauteur et la duree et donc dans ce cas mettre V=1 ?

Ensuite pour la question 6 je ne vois pas ce qu'il faut répondre.

 

IMG_20221113_204445.jpg

Modifié par Eleor
  • E-Bahut
Posté(e)

vol(3) affiche une liste de valeurs mises entre [3,10,...,1]. Il faut donc, en Python, déclarer V=[] comme une liste vide dans la fonction vol et placer la réponse dans v par la méthode .append. Ce n'est pas vraiment "mathématique" mais 'Pythonique".

Posté(e)
Il y a 5 heures, pzorba75 a dit :

vol(3) affiche une liste de valeurs mises entre [3,10,...,1]. Il faut donc, en Python, déclarer V=[] comme une liste vide dans la fonction vol et placer la réponse dans v par la méthode .append. Ce n'est pas vraiment "mathématique" mais 'Pythonique".

Donc V[3,10,5,16,8,4,2,1] ?

  • E-Bahut
Posté(e)

Bonjour,

1er :

Citation

pourriez vous expliquer pourquoi il est écrit deux fois duree et hauteur à la fin ?

Citation

image.png.16401cb9e4dc0f0925d14ba3b185c09a.png

L'instruction print génère l'affichage de ce qui est écrit entre parenthèses donc ici il y a 2 choses à afficher :
1) "hauteur" qui est une  chaine de caractères (puisque le mot hauteur est écrit entre guillemets)
2) la valeur de la variable nommée hauteur.

Si je peux te donner un conseil, il faut que tu trouves le moyen de TESTER tes scripts avec PYTHON. Il est vrai que sur une calculatrice ce n'est pas la joie...

Alors installe PYTHON sur un ordinateur (ou travaille en ligne) et met en œuvre tes scripts. Cela serait tellement mieux pour comprendre ce qui se passe....

2ème As tu vu en cours la notion de "listes" sous python ? Si non, cela ne s'invente pas. Sur internet en tapant "python listes" tu vas trouver une multitude de sites traitant ce sujet. Le plus difficile est de sélectionner un cours à ton niveau de compréhension (débutant). Il y a des tutoriels très bien faits.

  • E-Bahut
Posté(e)
def vol(n): # fonction décrivant le vol
    V=[n] # la liste V est initialisée avec comme 1er élément la valeur de n
    while n!=1: #tant que la valeur de n n'est pas égale à 1 on calcule la nouvelle valeur de n
        if n%2==0:
            n=n/2
        else:
            n=3*n+1
        V=V+[n] # à chaque tour de boucle, on ajoute dans la liste V, la nouvelle valeur de n mais attention
                #  pour que la concaténation (ajout) soit possible, il faut mettre n entre crochets
        print("valeur de n",n,"liste",V) #simple affichage de contrôle qui peut être supprimé.
    return V

#Programme principal
nombre=3 # il suffit de changer la valeur de la variable nombre, pour faire... d'autres vols
print(vol(nombre)) # on "appelle" la fonction vol() qui renvoie la liste des valeurs successives quand on part de "nombre" (ici 3)

1) Je t'ai mis le "code" : tu peux le copier (ctrl+c) puis le coller (ctrl+v) dans l'éditeur python.... que tu as récupéré (?) depuis mon dernier message 🤨

2) Pour être en totale conformité avec le modèle de l'énoncé :
    
Je n'ai pas utilisé la méthode V.append(n) mais V=V+[n]
    J'ai initialisé V à V=[n] pour que la valeur initiale du vol figure dans la liste finale.

Bon courage et... teste tes scripts, c'est le moment le plus sympa... quand on obtient ce que l'on veut 😄.

C'est vraiment mon jour de bonté 🤓

Voici ce que produit le script que je t'ai donné :

image.png.f5af9deb1be259cf4645f67dc7bf591c.png

Pour n'afficher que le résultat attendu (la dernière ligne), il suffit comme indiqué dans les commentaires de supprimer la ligne (de contrôle) 
 

print("valeur de n",n,"liste",V) #simple affichage de contrôle qui peut être supprimé.
Posté(e)
il y a une heure, PAVE a dit :
def vol(n): # fonction décrivant le vol
    V=[n] # la liste V est initialisée avec comme 1er élément la valeur de n
    while n!=1: #tant que la valeur de n n'est pas égale à 1 on calcule la nouvelle valeur de n
        if n%2==0:
            n=n/2
        else:
            n=3*n+1
        V=V+[n] # à chaque tour de boucle, on ajoute dans la liste V, la nouvelle valeur de n mais attention
                #  pour que la concaténation (ajout) soit possible, il faut mettre n entre crochets
        print("valeur de n",n,"liste",V) #simple affichage de contrôle qui peut être supprimé.
    return V

#Programme principal
nombre=3 # il suffit de changer la valeur de la variable nombre, pour faire... d'autres vols
print(vol(nombre)) # on "appelle" la fonction vol() qui renvoie la liste des valeurs successives quand on part de "nombre" (ici 3)

1) Je t'ai mis le "code" : tu peux le copier (ctrl+c) puis le coller (ctrl+v) dans l'éditeur python.... que tu as récupéré (?) depuis mon dernier message 🤨

2) Pour être en totale conformité avec le modèle de l'énoncé :
    
Je n'ai pas utilisé la méthode V.append(n) mais V=V+[n]
    J'ai initialisé V à V=[n] pour que la valeur initiale du vol figure dans la liste finale.

Bon courage et... teste tes scripts, c'est le moment le plus sympa... quand on obtient ce que l'on veut 😄.

C'est vraiment mon jour de bonté 🤓

Voici ce que produit le script que je t'ai donné :

image.png.f5af9deb1be259cf4645f67dc7bf591c.png

Pour n'afficher que le résultat attendu (la dernière ligne), il suffit comme indiqué dans les commentaires de supprimer la ligne (de contrôle) 
 

print("valeur de n",n,"liste",V) #simple affichage de contrôle qui peut être supprimé.

Bonjour, merci bien je le testerai, je ne pourrai le tester que ce soir étant en cours. 

Le "while n!=1" l'exclamation correspond à ? C'est une erreur ?

Pour la question 6 il faut tout reprendre ? 

  • E-Bahut
Posté(e)

Tout simplement en faisant appel à la fonction vol(n). Cf. question 5, tu dois avoir

def vol(n):
    V=[n]
    while n>1:
        if n%2==0:
            n=n//2
        else:
            n=n*3+1
        V=V+[n]
    return V

donc il suffit de rajouter en-dessous

def duree(n):
    return len(vol(n))

def hauteur(n):
    return max(vol(n))

 

Posté(e) (modifié)
Il y a 2 heures, julesx a dit :

Tout simplement en faisant appel à la fonction vol(n). Cf. question 5, tu dois avoir

def vol(n):
    V=[n]
    while n>1:
        if n%2==0:
            n=n//2
        else:
            n=n*3+1
        V=V+[n]
    return V

donc il suffit de rajouter en-dessous

def duree(n):
    return len(vol(n))

def hauteur(n):
    return max(vol(n))

 

D'accord merci beaucoup. 

Donc on arrive à la question 7 "déterminer l'entier inférieur à 1000 ayant la plus grande hauteur puis celui ayant le plus long vol" je pense qu'il faut reprendre l'algorithme de la question 4 pour la hauteur donc celui là:

n=1

hauteur=0

duree=1

print(n)

while n>1:

    if n%2==0:

        n=n//2

    else:

        n=3*n+1;

    duree=duree+1

    if n>hauteur:

        hauteur=n

    print(n)

print("duree ",duree)

print("hauteur ",hauteur)

 

Pour la plus grande hauteur il faut ajouter des lignes à l'algorithme donc peut être lui demander  tant que la hauteur < 1000 ?

Pour déterminer le vol le plus long il faut reprendre l'algorithme 5 qui affiche tout ce qu'il y a dans la variable ? Mais je ne sais pas non plus comment lui demander d'afficher le plus long vol seulement.

Faut il donc faire deux algorithme l'un  pour la plus grande hauteur et l'autre pour le plus long vole ? 

Ou doit on le déterminer par calcul peut être ?  J'ai vu quelques formules comme pour la somme des termes= (n-p+1)*Un+UP/2 ou "soit n et p deux entiers naturels alors Un=Up+(n-p)*r 

Modifié par Eleor
  • E-Bahut
Posté(e)

Il n'y a aucun calcul à faire, seulement créer l'algorithme qui affiche l'entier inférieur à 1000 ayant la plus grande hauteur (en se limitant pour le moment à celui-ci). Pour faire cela, tu as à ta disposition les fonctions définies précédemment, en particulier la fonction hauteur(n). Il faut évidemment afficher à fin deux éléments, l'entier et la hauteur.
Donc tu commences par définir deux variables, nmax et hmax, que tu initialises à 0. Ensuite, tu fais varier n de 1 à 1000 en utilisant la fonction hauteur(n). Je te laisse continuer la réflexion.

Posté(e) (modifié)
il y a une heure, julesx a dit :

Il n'y a aucun calcul à faire, seulement créer l'algorithme qui affiche l'entier inférieur à 1000 ayant la plus grande hauteur (en se limitant pour le moment à celui-ci). Pour faire cela, tu as à ta disposition les fonctions définies précédemment, en particulier la fonction hauteur(n). Il faut évidemment afficher à fin deux éléments, l'entier et la hauteur.
Donc tu commences par définir deux variables, nmax et hmax, que tu initialises à 0. Ensuite, tu fais varier n de 1 à 1000 en utilisant la fonction hauteur(n). Je te laisse continuer la réflexion.

Je vois alors si on suit les étapes ça donne 

hmax=0

nmax=0

For n in range (1,1000) :

         nmax=...

         hmax=...

     

mais je ne sais pas comment intégrer ma fonction hauteur(n)

Modifié par Eleor

Rejoindre la conversation

Vous pouvez publier maintenant et vous inscrire plus tard. Si vous avez un compte, connectez-vous maintenant pour publier avec votre compte.

Invité
Répondre à ce sujet…

×   Collé en tant que texte enrichi.   Coller en tant que texte brut à la place

  Seulement 75 émoticônes maximum sont autorisées.

×   Votre lien a été automatiquement intégré.   Afficher plutôt comme un lien

×   Votre contenu précédent a été rétabli.   Vider l’éditeur

×   Vous ne pouvez pas directement coller des images. Envoyez-les depuis votre ordinateur ou insérez-les depuis une URL.

Chargement

×
×
  • Créer...
spam filtering
spam filtering