Forum

Catégorie : Programmes
Forum : Aide à la programmation
Vues : 604
Réponses : 15
Type : discussion
Etat : réponses autorisées

Programation tant que

Xayru le 09/11/2013 à 16:01
Bonjour,
Je cherche à réaliser un programme pouvant répondre à cette énoncé :

"On souhaite déterminer le rang N à partir duquel U(n)> ou = A

1) Ecrire l'algorithme permettant de résoudre ce problème
2) Déterminer le rang N pour A=1000 puis A=10^6"

En sachant que la suite est u(0) = 0
et U(n+1)= U(n)²+3U(n)+1

Donc j'ai compris qu'il faut faire un algorithme "tant que U(n)> ou = A" mais je ne sais pas le réaliser

Donc je possède une calculatrice TI-82 stats.fr et aimerais connaitre l'algorithme correspondant

Merci d'avance j’espère avoir été le plus claire possible

Cordialement, une personne perdue
m@thieu41 le 10/11/2013 à 10:05
Bonjour,

Tu veux savoir à partir de quel rang U(n)>=A, donc la boucle doit tourner tant que U(n)>A (ainsi elle s'arrête quand U(n)>=A).
Essaye de nous proposer le début de l’algorithme, ou au moins ce que tu as cherché, qu'on puisse te corriger.
Xayru le 10/11/2013 à 12:36
Bah j ai beau essayer je ne réussi pas a le commencer
m@thieu41 le 10/11/2013 à 15:29
Tu as fait un peu d'algorithme en cours? Le prof a du t'apprendre à poser les bases: les variables à utiliser, les initialisations, pose aussi les boucles même si elles sont vides, bref met le maximum de ce que tu sais, et n'ai pas peur de te tromper, je t'aiderai à compléter.
Xayru le 11/11/2013 à 11:18
Ok

Disp A
U-> U²+3U+1
Tant que U=< A

End

Je sais qu'il manque le For (....) mais à part ça .. :/
m@thieu41 le 11/11/2013 à 11:43
Alors effectivement il y a quelques problèmes:

Disp sert à afficher, et non à demander une valeur (ce qui se fait avec la fonction Prompt variable).

Ensuite, concernant le calcul de U:
U-> U²+3U+1
C'est l'inverse:
U²+3U+1->U
De plus, il faut le mettre à l'intérieur de la boucle Tant que, et non avant.

par contre, il faut donner une valeur initiale à U (se sera 0 puisque U(0)=0). Ca s'appelle initialiser la variable. Il faut mettre cette initialisation en dehors de la boucle, avant celle ci.

Ensuite, tu as besoin d'une variable (mettons N) que tu initialises à 0, et à laquelle tu rajoutes 1 à chaque tour de boucle.

Je te laisse réfléchir avec ces indications, si tu as besoin d'explications supplémentaires n'hésites pas.

PS: Inutile ici de rajouter une boucle for...
Xayru le 11/11/2013 à 14:52
Ah oui l'initialisation c'est vrai :/

donc :
Prompt U
0-> U
While U>=A
U²+3U+1-> U
End
Disp N

Si je ne me trompe pas (sauf pour le N peut-être non ?)

Au tout cas merci beaucoup à toi happy.gif
m@thieu41 le 11/11/2013 à 15:14
Tu y es presque winkle.gif

Au début tu mets:
Prompt U
0-> U
Ce qui veut dire que tu demande une valeur pour U, puis, sans en tenir compte, tu la remplace par 0.
En fait l'utilisateur ne doit pas rentrer la valeur de U (qui vaut 0 au début), mais celle de A (puisque c'est la seule donnée qui dépend de l'utilisateur et qui varie d'une utilisation à l'autre).

Ensuite, pour le N:
Tu ne t'en sert qu'une fois: A la fin, pour l’afficher. Or, tu ne sais pas quelle est la valeur de N puisque tu ne l'utilises jamais, donc ce qui sera affiché sera complètement aléatoire.
Il faut donc, au début, initialiser N à 0 (puisqu'on commence à tester le rang 0).
Puis, dans la boucle, il faut rajouter 1 à la valeur de N à chaque fois (comme ça on sait quel rang on est en train de tester).

Petite erreur (que tu n'avais pas faite sur ton code précédent):
While U>=A
Il faut tester si c'est inférieur ou égal, et non pas supérieur ou égal.

Aide: Pour rajouter 1 à N, il suffit de mettre:
N+1->N

Pour l'initialisation, c'est comme pour U.
Xayru le 11/11/2013 à 16:07
Euh tu t'es trompé au debut c'est prompt A que l'on souhaite

Prompt A
0->U
O->n
n+1->n
u²+3u+1->u
while U>=A
Disp n

je sais pas où est ma faute malheureusement..
m@thieu41 le 11/11/2013 à 17:07
Xayru a écrit :
Euh tu t'es trompé au debut c'est prompt A que l'on souhaite
C'est ce que je t'ai signalé winkle.gif

Tu as les bonnes instructions (sauf qu'il faut mettre while U<=A), mais pas dans le bon ordre.

Voici la structure que tu aurais du avoir (et qu'il y avait dans le code précédent):

Saisie de la variable A
Initialisation de U et de N
Début de la boucle While
Calcul de U et de N
Fin de la boucle (End)
Affichage du résultat

Tu as toutes les instructions, il faut juste que tu les replace dans l'ordre que je te donne ci-dessus.

Attention à la confusion entre 0 et O
Xayru le 11/11/2013 à 17:42
Alors j'ai ré-essayé

Prompt A
0-> u
1-> n
While u=<A
n+1->n
U²+3U+1-> U
End
Disp n

Mais ça me met toujours erreur
m@thieu41 le 11/11/2013 à 17:46
Quand tu fais l'initialisation, il faut mettre N à 0 puisqu'on commence à U(0).

Code correct:
Code
Prompt A
0->U
0->N
While U=<A
N+1->N
U²+3U+1->U
End
Disp N


Citation
Mais ça me met toujours erreur

Comment ça?
Quel est le type d'erreur et à quel ligne est ce que ça te renvoi?

Sources possibles:
-> se saisit avec la touche [sto->], à coté du 1.
=< se trouve dans le menu [2nde],[math],[6].
Il n'y a pas d'espace après un ->
Xayru le 11/11/2013 à 17:53
ERR: TYPE DONNEE

Et oui je sais sto-> ainsi que le =<

Je comprend pas pourquoi
m@thieu41 le 11/11/2013 à 18:25
Fais "voir" et dis moi à quelle ligne va le curseur.
Xayru le 11/11/2013 à 18:41
0->U
m@thieu41 le 11/11/2013 à 19:21
Le U se saisis avec [alpha],[5].