Inscription / Connexion Nouveau Sujet
Niveau seconde
Partager :

Algorihme maths seconde

Posté par
Lashar
09-03-16 à 22:22

Bonsoir, alors voilà je suis sur un devoir de maths depuis quelques temps maintenant et je n'ai strictement rien compris. Si quelqu'un pouvait m'éclairer s'il-vous-plaît, j'ai essayer de taper ce programme sur la calculatrice mais je n'y comprend rien.

ALGORITHME 1 :
Entrée : un entier naturel a non nul
Traitement : Tant que a > 1
Si a est pair alors mettre a/2 dans a
sinon mettre 3a + 1 dans a
Fin du tant que
Sortie : Afficher a

ALGORITHME 2 :
Initialisation : a un entier différent de 0
n prend la valeur 0
Traitement : Tant que a > 1
augmenter n de 1
Si a est pair alors diviser a par 2
sinon multiplier a par 3 et ajouter 1
Fin du tant que
Sortie : Afficher la valeur de n

1/ Appliquer l'algorithme 1 pour a = 5, a = 7 puis pour a = 20.
2/ Que constate-t-on ?
3/ L'algorithme 2 comporte une petite erreur au début ; laquelle ? Expliquer.
4/ Par contre, il comporte aussi une amélioration par rapport à l'algorithme 1 ; laquelle ? Expliquer.

Merci d'avance

Posté par
kenavo27
re : Algorihme maths seconde 10-03-16 à 07:05

Bonjour,
ALGORITHME 1 :
Entrée : un entier naturel a non nul
Traitement : Tant que a > 1
Si a est pair alors mettre a/2 dans a
sinon mettre 3a + 1 dans a
Fin du tant que
Sortie : Afficher a

Si a est pair exemple a=12
alors mettre a/2 dans a -> a devient 12/2=6
Et 6 s'affichera


Si on entre a=11
alors a= 3x11 + 1 = 33+1=34

Posté par
Lashar
re : Algorihme maths seconde 10-03-16 à 08:46

Bonjour, kenavo27,
d'accord donc si je comprend bien, pas besoin de calculatrice. Ca me parrait assez simple comme début..
Et donc on peut constater quoi?
Merci de votre aide si tôt le matin.

Posté par
mathafou Moderateur
re : Algorihme maths seconde 10-03-16 à 12:51

Bonjour,

c'est un peu faux car la boucle tant que fait recommencer les calculs jusqu'à plus soif et pour l'instant personne ne sait si l'algorithme se terminera un jour quelle que soit la valeur de départ.
(conjecture de Syracuse)

par contre pour des valeurs de départ "faibles" (jusqu'à plusieurs millions c'est des valeurs "faibles") c'est effectivement le cas
l'algorithme se termine toujours
ce qui veut dire que on finit toujours par arriver à 1.

algorithme 1 :
remarquer que quelle que soit la valeur entière de a, le caclul donne toujours une valeur entière > 0
donc :

tant que a > 1
calcul absolument quelconque qui pour toute valeur de a remplace ceta valeur par uen autre valeur entière > 0
fin tant que
aficher a

donnera toujours l'un des deux résultats suivant

soit l'algorithme ne se termine jamais
soit il affiche le seul nombres entier qui n'est > 1 : le nombre 1

l'algorithme affichera toujours 1 (si la conjecture de Syracuse est vraie)
au pire (si la conjecture est fausse) il risque de ne jamais s'arrêter
et en pratique il pourrait même durer simplement des jours et des jours avant de cracher 1 et de s'arrêter.
ou de se planter en sortant n'importe quoi pour cause de débordement des capacités de calcul (3a + 1 > a , rien ne garantit que les nombres ne vont pas augmenter pour devenir gigantesques au cours du calcul)

pour savoir ce que fait un algorithme "à la main" il faut faire un tableau qui donne la valeur de chaque variable au fur et à mesure de l'exécution de chaque instruction

                                                  a
Entrée : un entier naturel a non nul              12
Traitement : Tant que a > 1                                 12 est effectivement > 1 donc on fait
Si a est pair alors mettre a/2 dans a             6         12 est effectivement pair
sinon mettre 3a + 1 dans a                                  le sinon n'est donc pas exécuté
Fin du tant que                                             je revient systématiquement au début du tant que
Tant que a > 1                                    6         6 est effectivement > 1 donc on fait
Si a est pair alors mettre a/2 dans a             3         6 est effectivement pair
sinon mettre 3a + 1 dans a                                  le sinon n'est donc pas exécuté
Fin du tant que                                             je revient systématiquement au début du tant que
Tant que a > 1                                    3         3 est effectivement > 1 donc on fait
Si a est pair alors mettre a/2 dans a             3         3 n'est pas pair, donc je ne fais pas
sinon mettre 3a + 1 dans a                        10        et je fais le sinon 
Fin du tant que                                             je revient systématiquement au début du tant que
Tant que a > 1                                    10        10 est effectivement > 1 donc on fait
Si a est pair alors mettre a/2 dans a             5         10 est pair, je fais
sinon mettre 3a + 1 dans a                                  le sinon n'est donc pas exécuté
Fin du tant que                                             je revient systématiquement au début du tant que
Tant que a > 1                                    5         5 est effectivement > 1 donc on fait
Si a est pair alors mettre a/2 dans a                       5 n'est pas pair, je ne fais paq
sinon mettre 3a + 1 dans a                        16        et je fais le sinon
Fin du tant que                                             je revient systématiquement au début du tant que
Tant que a > 1                                    16        16 est effectivement > 1 donc on fait
Si a est pair alors mettre a/2 dans a             8         16 est pair, je fais
sinon mettre 3a + 1 dans a                                  le sinon n'est donc pas exécuté
Fin du tant que                                             je revient systématiquement au début du tant que
Tant que a > 1                                    8         8 est effectivement > 1 donc on fait
Si a est pair alors mettre a/2 dans a             4         8 est pair, je fais
sinon mettre 3a + 1 dans a                                  le sinon n'est donc pas exécuté
Fin du tant que                                             je revient systématiquement au début du tant que
Tant que a > 1                                    4         4 est effectivement > 1 donc on fait
Si a est pair alors mettre a/2 dans a             2         4 est pair, je fais
sinon mettre 3a + 1 dans a                                  le sinon n'est donc pas exécuté
Fin du tant que                                             je revient systématiquement au début du tant que
Tant que a > 1                                    2         2 est effectivement > 1 donc on fait
Si a est pair alors mettre a/2 dans a             1         2 est pair, je fais
sinon mettre 3a + 1 dans a                                  le sinon n'est donc pas exécuté
Fin du tant que                                             je revient systématiquement au début du tant que
Tant que a > 1                                    1         1 n'est pas > 1 donc je ne fa fait
Fin du tant que                                             fin définitive du tant que
Sortie : Afficher a                               1         j'affiche 1


on voit que exécuter ainsi pas à pas un algorithme à la main peut être "assez pénible"

et que on peut avoir intérêt à faire faire tout ça par la machine
(au besoin en ajoutant dans la boucle "tant que" un autre "afficher a" permettant de suivre l'évolution de cette variable
et en faisant afficher des commentaires en texte du genre "a est pair je le multiplie par 2")

je ne vois aucune erreur au début de l'algorithme 2, sauf si on est puriste le fait qu'il est nécessaire de déclarer les variables, toutes les variables

variables : a, n des entiers
Initialisation : a un entier différent de 0
n prend la valeur 0
Traitement : etc

l'algorithme 2 est identique à l'algorithme 1 sauf que en plus il compte (dans la variable n) le nombre de fois qu'il a fallu exécuter la boucle "tant que" avant de retomber sur la valeur a = 1 ("temps de vol" pour le vocabulaire de la suite de Syracuse)

Posté par
mathafou Moderateur
re : Algorihme maths seconde 10-03-16 à 12:53

quelques fautes de frappe sans grande importance, mais (un mot a sauté)

* soit il affiche le seul nombre entier qui n'est pas > 1 : le nombre 1



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 1675 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 !