Bonjour, je suis nulle en algorithme ! J'ai remarqué qu'il y avait de grande chance pour qu'au bac 2013 en math ils mettent un algorithme a faire. Je ne comprend pas celui de Pondichery :
ENTREE
Saisir un nombre S superieur a 3000
TRAITEMENT
Affecter a n la valeur 0
Affecter a U la valeur 3000
Tant que U ≤ S
n prend la valeur n+1
U prend la valeur U*1.025
Fin tant que
SORTIE
Afficher le nombre 2000+n
Il est ecrit en bas de cet algorithme, "pour la valeur S=3300 saisie"
Autorisation : Membre
Nb de messages : 856
Inscrit le : Mer 18 Juil 2012, 18:44
Posté le : Jeu 13 Jui 2013, 12:39
Bonjour!
(EDIT: Corrigé d'après les remarques de Linka)
Il faut que tu donne juste la sortie c'est ça?
En gros, il y a plusieurs manières de faire:
_Tu le programme sur ta calto (mais il faut s'y connaitre un peu )
_Tu essayes de deviner son fonctionnement, puis tu le résous comme un exercice classique.
_Pour la programmation sur calto:
Ca donne:
Code
Prompt S //Permet de saisir une valeur pour S, mais il n'y a pas de test pour savoir s'il est > à 3000 ou pas, c'est à toi de faire attention en rentrant la valeur
0->N
3000->U //On stocke les valeurs demandées
While U<=S //Correspond à la boucle tant que
N+1->N //On incrémente (augmente de 1) N, comme demandé
U*1.025->U //On fait le calcul demandé
End //Fin de boucle
Disp 2000+N //Affichage du résultat
Tu le lances en saisissant la valeur 3300 pour S, et tu regardes le résultat
_Pour deviner le fonctionnement du prgm.
Observe bien ce qu'il fait:
Il demande une valeur, S.
Puis, il met N à 0, et U à 3000.
Ensuite, tant que U<=S, il fait les calculs suivant:
N augmente de 1
U est multiplié par 1.025
Si on réfléchi un peu, on constate (les variables choisies nous mettent d'ailleurs sur la voie), qu'on a affaire à une suite géométrique:
u(n)=1.025u(n-1)
avec pour premier terme u(0)=3000
En effet, à chaque tour de boucle, on multiplie le terme précédent de la suite par la raison (1.025), et on augmente le compteur, pour savoir à quel terme on est.
Pour trouver le résultat, il faut donc résoudre:
u(n)>3300 (la valeur demandée pour S)
Soit 3300<u(0)*q^n
3300<3000*1.025^n
Avec n le plus petit entier possible
Je ne sais pas trop si on peut faire ça par calcul (sûrement, mais je ne l'ai pas encore vu)
Sinon, il te suffit de rentrer la suite sur la calto (si tu ne sais pas le faire dis le je t'expliquerai), et de regarder pour quelle valeur de n u(n)>3300.
Tu ajoute 2000 au résultat (car l'algo affiche n+2000), et tu as la sortie
Autorisation : Membre
Nb de messages : 3767
Inscrit le : Lun 19 Oct 2009, 21:25
Posté le : Jeu 13 Jui 2013, 16:09
≤ = inférieur ou égal. Donc faisons attention au test d'infériorité même si nous écrivons "<" au lieu de "<=".
m@thieu41 : tu confonds la somme des termes d'une suite géométrique avec la suite géométrique.
u(n+1)=u(n)*q donne u(n)=u(0)*q^n
Si tu veux résoudre l'équation (condition de sortie) : 3000*(1.025)^n = u(n) > 3300
alors il faut écrire n > log(3300/3000)/log(1.025)
Puis il faut prendre l'entier strictement suppérieur à la solution réelle maximale pour connaitre le résultat de l'algorithme. (résultat=2000+solution_entière)
EDIT : j'ai corrigé en partant de la condition de sortie de la boucle, comme m@thieu41, cela cause un ">" au lieu de "<=")
On trouve la solution avec la propriété log(a^n)=n*log(a) et la conservation du sens des inéquations par application d'une fonction croissante, ici c'est log.
Et puisque les logarithmes de toutes bases a ont ces propriétés, on peut retenir : c=log_a(a^c)=log_b(a^c)/log_b(a) pour tous a et b réels strictement positifs. EDIT : Cas particulier : log(X)=ln(X)/ln(10) puisque log() à conventionnellement la base 10.
Le reste des infos de m@thieu41 semble très bien.
Nous serons toujours là si d'autres questions sont posées.
---------------------- ti82statfr: 2008, inscrit: 2009, ti84pocketfr: noël2011, ti30xbmultiview: iut 2012-2014
Perfectionniste, manque tact. Pas le temps de tout publier depuis 2011. Répond toujours aux questions. (rédigé juin 2014)
Autorisation : Membre
Nb de messages : 856
Inscrit le : Mer 18 Juil 2012, 18:44
Posté le : Jeu 13 Jui 2013, 16:54
Oups, autant pour moi, j'ai corrigé (les suites géométriques/arithmétiques on a fait ça rapidement en fin d'année, j'ai pas trop retenu )
Ah, je ne savais pas qu'on pouvait utiliser le logarithme pour ce genre d'opérations, pour moi c'est un truc obscur qui sert à connaitre le nombre de chiffre base 10 d'un nombre
≤ = inférieur ou égal : Je te crois, mais comment tu l'as trouvé? J'ai fait un peu au pif en fonction de l'énoncé en fait (1 chance sur 2 j'ai perdu )
Edit: comment on saisit log_A(B) sur la calto? (si c'est possible )
Seulement à partir des systèmes MathPrint. (2.53MP des TI 84plus).
logBASE(X,Base)
On doit utiliser la relation générale.
J'en profite pour montrer le cas particulier entre log décimal et ln népérien, c'est plus facile à retenir :
log(X)=ln(X)/ln(10)
ln(X)=log(X)/log(e)
---------------------- ti82statfr: 2008, inscrit: 2009, ti84pocketfr: noël2011, ti30xbmultiview: iut 2012-2014
Perfectionniste, manque tact. Pas le temps de tout publier depuis 2011. Répond toujours aux questions. (rédigé juin 2014)
Autorisation : Membre
Nb de messages : 3767
Inscrit le : Lun 19 Oct 2009, 21:25
Posté le : Jeu 13 Jui 2013, 17:14
Je suis parti de la condition de poursuite et ai adapté la réponse en désignant l'entier suppérieur.
Ta proposition est effectivement bien plus évidente.
u(final) > 3300
final > solutionréelle
Mais... tu as bien corrigé ton message. Propre.
Un peu flou si on relit historiquement le sujet.
(j'avais pas vu tout de suite ton changement)
---------------------- ti82statfr: 2008, inscrit: 2009, ti84pocketfr: noël2011, ti30xbmultiview: iut 2012-2014
Perfectionniste, manque tact. Pas le temps de tout publier depuis 2011. Répond toujours aux questions. (rédigé juin 2014)