bonjour je dois faire un algorithme avec la suite définie par récurrence suivante:
an+1=(2an+bn)/3
afin d'obtenir les n premier termes de la suite
je n'arrive pas à programmer car il y a deux variables a et b
sinon j'ai bn+1=(an +2bn)/3 mais après on me demande les n premiers termes de la suite (Bn) donc je pense que c'est pour l'autre question
variables: u,k,b,a,n
debut
entrée : n
a←0
u←0
b←12
u←0
tant que u<n faire
u←(2a+b)/3
n←n+1
sortie u
fin
Bonjour,
En définitive, il y a deux suites définies par récurrence, par les relations :
an+1=(2an+bn)/3
bn+1=(an+2bn)/3
et les conditions initiales : a0=0 et b0=12.
C'est bien ça ?
salut,
hors programme terminale cette annee,
mais conforme au programme de seconde !
en python:
def ListeTermes(n):
a,b=0,12
L=[[a,b]]
for k in range(n):
a,b=(2*a+b)/3,(a+2*b)/3
L.append([a,b])
return L
fonction ListeTermes(n)
var a,b,k,L;
a,b:=0,12;
L:=[[a,b]];
pour k de 1 jusque n faire
a,b:=(2a+b)/3,(a+2b)/3;
L:=append(L,[a,b]);
fpour
retourne L
ffonction:;
Si c'est bien ça, alors, ton algorithme est correct mais incomplet car il faut, à l'intérieur de la boucle "tant que", actualiser la variable b en plus des variables u et a...
Bonjour,
Désolé d'avoir interféré avec alb12 ... mais je crois qu'on demandait un algorithme et non pas un programme d'une part, et il aurait fallu laisser chercher un peu chacha25 d'autre part.
redite : tu cliques sur le bouton X2 situé en dessous de la zone de saisie, puis tu tapes n entre les deux balises.
nom[sub]indice[/sub] donnera à la visualisation (dans Aperçu, puis après avoir posté) nomindice
pareil que pour mettre en gras ou pour souligner par le bouton G ou S :
du texte [u]souligné[/u] ----> du texte souligné
etc etc avec ces boutons de fonctions de l'ile :
(je te parle d'écrire sur l'ile, pas sur un algorithme, il n'y a pas d'indices dans cet algorithme, que des variables)
Bonjour,
----> chacha25 : Dans quel langage devez-vous écrire l'algorithme ?
on attend tout de même ton algorithme corrigé ...
as tu réussi ?
est ce que ça donne les résultats attendus ?
(on peut calculer les premiers termes sans algorithme du tout, rien qu'en appliquant les formules de définition de ces suites,
donc on peut vérifier que l'algorithme donne bien pareil)
je dois faire un algorithme et ensuite le programmé sur sage
voici mon algorithme:
variables: u,k,b,a,n
debut
entrée : n
n←?
a←0
b←12
u←0
tant que u<n faire
a←(2a+b)/3
b←(a+2b)/3
n←n+1
affiche a
afficher b
fin
Avec cette algorithme que j'ai écris en langage casio je dois le programmer en Python avec Sage (je dois utiliser une fenêtre graphique vide, nommée g avec l'instruction suivante : g=Graphics() ) afin de faire une conjecture concernant les points (An) et (Bn) lorsque le programme prend des valeurs de plus en plus grande pour n
variables: u,k,b,a,n
n←?
a←0
b←12
u←0
tant que u
b←(a+2b)/3
n←n+1
affiche a
afficher b
le fait que k ne soit jamais utilisé devait te mettre la puce à l'oreille que ton algorithme est faux
u ne varie jamais il est toujours = 0
n augmente à partir de la valeur donnée jusqu'à l'infini (vu que éternellement 0 sera toujours inférieur à n, to, algorithme ne s'arrête jamais)
le mécanisme même de ta boucle est faux.
pourquoi ?
parce que tu as commencé directement à écrire des trucs avec des variables au lieu de concevoir ton algorithme pas à pas :
pour calculer an et bn :
à partir de a0 et b0
pour tous les k successivement de 1 à n inclus
calculer ak et bk à partir de ak-1 et bk-1
ici le dernier ak, bk calculé est an, bn
ça c'est la première étape de conception de l'algorithme en pur français :
la description en français de la méthode (de l'algorithme) que l'on doit appliquer pour calculer successivement les termes de la suite jusqu'à arriver à celui que l'on cherche.
il faut maintenant mettre de la chair autour de ce squelette
définir les variables et les opérations exactes qui serviront à détailler ça
mais la structure reste la même
si je veux calculer les 10 premiers thermes par exemple
variables: b,a,n
a←0
b←12
n←0
tant que n<=9 faire
a←(2a+b)/3
b←(a+2b)/3
n←n+1
affiche a
afficher b
oui (enfin presque il y a un truc subtil dont on parlera une fois que le mécanisme de la boucle fonctionnera)
sauf que là on te demande les n premiers termes (plus précisément le dernier de cette liste)
et que tu as un conflit de noms de variables entre le "n" de l'énoncé et ton "n" d'indice courant (et pas d'indice final demandé)
c'est pour ça que dans ma description générale en pur français (toujours commencer par cette étape indispensable de décrire "globalement " ce qu'il faut faire)
c'est pour ça donc que j'ai un k et un n dans cette description.
pour ne pas confondre les deux : l'indice d'un ak, bk pendant le calcul, d'un "terme courant"
et l'indice final cherché an bn
Bonjour,
Absolument d'accord avec l'algorithme écrit par mathafou pour comprendre ce qui doit être éxécuté.
et dont chaque ligne peut être un commentaire de l'algorithme programmé qui doit suivre.
Il ne s'agit surement pas d'écrire en Sage qui est un logiciel de gestion
mais en SageMath, apparenté à Python
Il suffit de remplacer n par k
variables: b,a,k
a←0
b←12
k←0
tant que k<=9 faire
a←(2a+b)/3
b←(a+2b)/3
k←k+1
afficher a
afficher b
fin
il va peut etre avoir un probleme lors de l'affichage de a et b car on ne va pas savoir de quelle suite (An) et (Bn) il s'agit
"Il suffit de remplacer n par k"
et "9" par "n-1"
et là tu auras la bonne structure de la boucle qui donnera bien le terme demandé (de rang n) à la fin
bon, le problème d'affichage est un faux problème
il suffit d'afficher un texte avant chaque :
afficher "a = "
afficher a
afficher "b = "
afficher b
ou un truc du même genre
beaucoup plus grave est que les valeurs obtenues sont fausses !
essayons avec n = 1
la boucle va être exécutée une fois, pour k = 0 et c'est tout
a = 0
b = 12
1ere exécution de la boucle :
je calcule (2a+b)/3 ce qui donne 4, que je mets dans la variable a qui contient dorénavant 4
je calcule (a+2b)/3 ce qui donne (4+24)/3 = 28/3, que je mats dans la variable b qui contient dorénavant 28/3
l'algorithme prétend donc que a1 = 4 (c'est vrai) et que b1 = 28/3 (c'est faux, cela devrait être (0+24)/3 = 8)
relis mon message du 26-12-17 à 13:38
on en est à l'algorithme ...
après on va le programmer en Sage ou en va savoir...
comprendre que l'affectation multiple "spécial Python" de Sage (ou de Python caché à l'intérieur de Sage)
a, b = nouvelle valeur de a, nouvelle valeur de b
est différente de :
a = nouvelle valeur de a
b = nouvelle valeur de b
et savoir ce qu'il se passe dans les deux cas est important.
et comment se débrouiller pour que ça marche
en particulier si on veut programmer l'algorithme sur une machine/un langage qui ne permet pas ces affectations simultanées
par exemple, sur une calculette "ordinaire" parce que Sage ne serait pas disponible.
comme déja dit
bien différencier un algorithme (universel donc, par définition) de sa traduction en langage Sage, Python, Algobox, calculette etc
oui, mais ce n'est pas pareil que pas simultané
ici :
a ← (2a+b)/3
b ← (a+2b)/3
faux
a,b ← (2a+b)/3, (a+2b)/3
juste si le langage de description des algorithmes permet cela
et juste en Python etc (en remplaçant "←" par "=")
ne marche pas si on veut le traduire sur la majorité des calculettes
pour rendre justes les affectations séparées :
soit on ajoute une variable temporaire (le moins intellectuellement éprouvant)
soit on modifie la formule mathématique de b (étude mathématique pour exprimer bn+1 en fonction de an+1 et bn)
on ne le fait quasiment jamais de nos jours, mais "pour la culture" savoir que c'est possible est intéressant.
"éluder" le problème en utilisant des langages qui font une usine à gaz interne derrière une simple affectation en permettant des affectations apparemment multiples et simultanées (c'est faux à l'intérieur) ne fait pas vraiment progresser "l'habileté" (skill) en algorithmique !
Bonjour,
Il est temps de passer à l'écriture du programme en Python (SageMath), c'est tellement difficile...!
a,b=0,12
for n in range(6):
print("n =",n," a =", a," b =",b)
a,b=(2*a+b)/3,(a+2*b)/3
on en est là :
Il suffit de remplacer n par k et "9" par "n-1"
variables: b,a,k , n
a←0
b←12
k←0
entrer n
tant que k<=n-1 faire # pour k de 0 à n-1 inclus
a←(2a+b)/3 # calcul de ak+1
b←(a+2b)/3 # calcul de bk+1 faux
k←k+1
afficher a # la première valeur affichée est ak+1 (donc de a1 à an incluses
afficher b # la seconde valeur affichée est bk+1 (donc de b1 à bn incluses
fin
b←(a+2b)/3 est faux parce que a a déja été modifié lors de ce calcul et son contenu n'est plus la valeur de ak, mais deja de ak+1
or la formule c'est bk+1 = (ak + 2bk)/3
pas bk+1 = (ak+1 + 2bk)/3
solutions :
1) "algorithmique" (donc valable quel que soit le langage) : utiliser une variable auxiliaire t (comme temporaire) par exemple
qui permettra de sauver (t←a) l'ancienne valeur de a (ak) avant de modifier cette variable a par la valeur ak+1
et c'est cette valeur là que l'on utilisera pour le calcul de b : b←(t+2b)/3
2) exclusivement en Python : utiliser une variable double "(a,b)" composée de deux éléments pour les modifier simultanément :
a , b = (2a+b)/3 , (a+2b)/3
(remarquer que là on n'est plus dans de l'algorithmique mais dans de la programmation en Python, l'affectation en Python c'est "=" pas "←"
finalement, pour savoir qui est qui dans ce qui est affiché on peut ajouter des affichages "textuels" :
afficher "a[", k, "] = ", a
et idem pour b
noter que les trucs entre " " sont du pur texte , des caractères affichés tels quels, contrairement au a final ou au k qui sont les valeurs des variables à cet instant
on met tout ça bout à bout ("concaténé") dans un seul message affiché
pour le traduire en un programme, ça dépendra du langage, s'il ne permet pas une telle "concaténation" il faudra afficher chaque morceau séparément
mais Python le permet donc on est sauvé vu qu'on le demande au final en Python (en Python à l'intérieur de l'environnement Sage)
le donner directement en Python ne répond pas à la question de faire un algorithme
ce qui a été fait c'est un programme...
(le résultat final)
en plus l'histoire des variables intermédiaires a été escamotée en laissant faire par Python la création et l'usage en interne de telles variables intermédiaires "planquées"
(à l'intérieur il est impossible d'effectuer plusieurs instructions machines simultanément, les affectations se font successivement via DEUX variables intermédiaires planquées, autant que d'éléments du "t-uple")
j'essaie de programmer sur ma calculatrice casio mais je ne comprends comment il faut faire pour afficher les valeurs a et b
Sur Casio, il est nécessaire d'utiliser une variable temporaire, car les affectations multiples, faisables en Python, ne sont pas autoriser sur Casio ...
Par exemple :
A=A
A=(2A+B)/3
B=(A+2Z)/3
Désolé d'avoir dit une grosse bêtise (même deux) :
"ne sont pas autorisées ..."
Z=A
A=(2A+B)/3
B=(A+2Z)/3
Vous devez être membre accéder à ce service...
Pas encore inscrit ?
1 compte par personne, multi-compte interdit !
Ou identifiez-vous :