Inscription / Connexion Nouveau Sujet

1 2 +


Niveau terminale
Partager :

algorithme

Posté par
chacha25
26-12-17 à 11:44

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

Posté par
chacha25
re : algorithme 26-12-17 à 11:47

j'ai oublié ça on nous donne aussi a0=0 et b0=12

Posté par
flyingsaucer
re : algorithme 26-12-17 à 11:54

Bonjour,

Quelle est l'expression de b_n ?

Posté par
chacha25
re : algorithme 26-12-17 à 11:56

je n'est pas l'expression de bn ducoup je pense que c'est 1bn

Posté par
flyingsaucer
re : algorithme 26-12-17 à 11:59

Petite question, est-ce b×n ou b_n ?

Posté par
vham
re : algorithme 26-12-17 à 12:00

Bonjour,

Il faut recopier exactement l'énoncé ... et dire ce que vous avez commencé à faire

Posté par
chacha25
re : algorithme 26-12-17 à 12:01

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

Posté par
chacha25
re : algorithme 26-12-17 à 12:02

c'est bn

Posté par
chacha25
re : algorithme 26-12-17 à 12:09

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

Posté par
patrice rabiller
re : algorithme 26-12-17 à 13:31

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 ?

Posté par
alb12
re : algorithme 26-12-17 à 13:34

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

en Xcas:

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:;

Posté par
patrice rabiller
re : algorithme 26-12-17 à 13:37

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...

Posté par
mathafou Moderateur
re : algorithme 26-12-17 à 13:38

Bonjour,

Citation :
sinon j'ai bn+1=(an +2bn)/3

bein tiens !!
tu avais pourtant dit :
je n'est pas l'expression de bn

non tu as l'expression de bn+1 en fonction de bn !
mais c'est bien ce qui définit les termes de la suite (b) !!

et puis fondamental :
"Petite question, est-ce b\times n ou b_n ?"
et tu réponds le FAUX :
"c'est bn"

non
ce n'est pas bn qui veut dire b multiplié par n
mais bn qui veut dire b indice n

un indice en véritable indice est OBLIGATOIRE dans cet exo sinon l'ensemble tout entier ne rime à rien du tout.

pour écrire quelque chose en indice ici on le met entre des balises [sub][/sub] par le bouton X2

b[sub]n[/sub] pour avoir bn
b[sub]n+1[/sub] pour avoir bn+1 (le terme suivant de la suite (b))

faire "Aperçu" avant de Poster est aussi indispensable

bref encore un qui ne comprend pas ce que veut dire recopier un énoncé et même si ça se trouve ce que veut dire le mot "énoncé"
et le donne donc par petits bouts au compte goutte quand on lui tire les vers du nez
(et en plus l'écrit de façon incorrecte, à se demander si tu comprends ce que veut dire les indices...)

résumé écrit correctement
on définit les suites (a) et (b) par

a0 = 0 et b0 = 12 (en indices)
an+1=(2an+bn)/3 (en indices)
bn+1=(an +2bn)/3 (idem)


les valeurs successives de b évoluent en fonction de cette dernière formule

donc ton algorithme qui garde b inchangé = constante 12 est faux.

(doublement faux car ta suite "u" s'appelle a)

nota : piège dans l'écriture de l'algorithme,
on modifie b après avoir modifié a par exemple, on ne peut pas faire deux affectations simultanément,
ce qui donne une formule fausse car ce n'est plus an que l'on utilise pour calculer bn+1
mais deja la valeur de an+1 et ce serait faux (ne correspond pas à la formule bn+1=(an +2bn)/3

solution :
utiliser une variable "auxiliaire" qui mémorise an avant de le modifier, par exemple
(ou d'autre techniques du même genre, par exemple en Python ne pas définir deux variables a et b mais une seule [a,b])

Posté par
mathafou Moderateur
re : algorithme 26-12-17 à 13:40

PS : Python c'est un programme, pas un algorithme, comprendre la différence est fondamental.

Posté par
patrice rabiller
re : algorithme 26-12-17 à 13:40

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.

Posté par
alb12
re : algorithme 26-12-17 à 13:43

exact desole

Posté par
alb12
re : algorithme 26-12-17 à 13:46

de toute maniere mes programmes ne donnent aucune indication pour ecrire l'algo demande.

Posté par
chacha25
re : algorithme 27-12-17 à 10:55

merci pour votre aide
par contre ne n'arrive pas a ecrire le n en indice

Posté par
mathafou Moderateur
re : algorithme 27-12-17 à 11:41

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 :

algorithme

(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)

Posté par
chacha25
re : algorithme 27-12-17 à 11:47

d'accord je ferai mieux la prochaine fois
(an : j'y arrive maintenant)

Posté par
vham
re : algorithme 27-12-17 à 11:48

Bonjour,

----> chacha25 : Dans quel langage devez-vous écrire l'algorithme ?

Citation :
mathafou a écrit
PS : Python c'est un programme, pas un algorithme, comprendre la différence est fondamental.

Avez-vous une autre définition que :
" Un algorithme est une suite finie et non ambiguë d'opérations ou d'instructions permettant de résoudre un problème ou d'obtenir un résultat " ?
Note : Python est un langage de programmation informatique assorti d'un interpréteur des instructions écrites...

Un algorithme peut être écrit en langage naturel ou dans un langage de programmation exécutable (c'est alors un programme), c'est le cas en langage Algobox ou Python, Xcas etc.

Citation :
alb12 a écrit :
de toute manière mes programmes ne donnent aucune indication pour écrire l'algorithme demandé

justement, les commentaires existent et doivent être écrits pour que l'on comprenne facilement l'algorithme à exécuter...

Posté par
mathafou Moderateur
re : algorithme 27-12-17 à 11:55

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)

Posté par
malou Webmaster
re : algorithme 27-12-17 à 11:57

mathafou, je te "pique" ton image de 11:41 ! trop bien !

Posté par
chacha25
re : algorithme 27-12-17 à 12:04

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

Posté par
mathafou Moderateur
re : algorithme 27-12-17 à 12:19

Citation :
Avez-vous une autre définition que :
" Un algorithme est une suite finie et non ambiguë d'opérations ou d'instructions permettant de résoudre un problème ou d'obtenir un résultat " ?

pourquoi en faudrait-il une autre ?

par contre un programme est la traduction d'un algorithme dans un langage spécifié sur une machine spécifiée
en Python par exemple
ou en Algobox, Java, C, Scratch, sur un calculette de telle marque etc etc ...

le même algorithme peut se traduire en une foule de programmes différents

c'est comme la différence entre un nombre et sa représentation décimale ...
confondre le nombre 21 avec sa représentation 21 en base 10 est une erreur
le même nombre 21 peut s'écrire 10101 en binaire, ou 210 en base 3 ou etc
c'est toujours le même nombre indépendant de la façon dont on l'écrit
bien sur pour parler du nombre, on choisit forcément une représentation de ce nombre !
mais il vaut mieux être parfaitement conscient de la différence entre le nombre lui-même et sa représentation.
de même que la différence entre l'algorithme et sa traduction en un programme.

Citation :
les commentaires existent et doivent être écrits

parfaitement

ils doivent même être écrits avant même "le code" : lors de la conception de l'algorithme "en langage naturel" (en pur français vu que c'est le langage "par défaut" quand on veut parler de quoi que ce soit dans un pays francophone)
les commentaires sont alors à 90% ces phrases là en pur français qui ont servi lors de la conception de l'algorithme

Posté par
chacha25
re : algorithme 27-12-17 à 12:27

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

Posté par
mathafou Moderateur
re : algorithme 27-12-17 à 12:33

variables: u,k,b,a,n
n←?
a←0
b←12
u←0
tant que ua←(2a+b)/3
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

Posté par
chacha25
re : algorithme 27-12-17 à 12:42

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

Posté par
mathafou Moderateur
re : algorithme 27-12-17 à 12:51

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

Posté par
vham
re : algorithme 27-12-17 à 12:56

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

Posté par
chacha25
re : algorithme 27-12-17 à 12:59

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

Posté par
mathafou Moderateur
re : algorithme 27-12-17 à 13:18

"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

Citation :
nota : piège dans l'écriture de l'algorithme,
on modifie b après avoir modifié a par exemple, on ne peut pas faire deux affectations simultanément,
ce qui donne une formule fausse car ce n'est plus ak que l'on utilise pour calculer bk+1
mais deja la valeur de ak+1 et ce serait faux (ne correspond pas à la formule bn+1=(an +2bn)/3

solution :
utiliser une variable "auxiliaire" qui mémorise a avant de le modifier, par exemple
(ou d'autre techniques du même genre, par exemple en Python etc)

Posté par
alb12
re : algorithme 27-12-17 à 16:17

chacha25 @ 27-12-2017 à 12:27

je dois le programmer en Python avec Sage

ce n'est certainement pas le premier programme en Sage que tu fais ?
A toi de nous montrer ce que tu sais faire.

Posté par
alb12
re : algorithme 27-12-17 à 16:52

interessant

Posté par
mathafou Moderateur
re : algorithme 27-12-17 à 19:12

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

Posté par
alb12
re : algorithme 27-12-17 à 19:35

vu la pythonisation des esprits, l'instruction:
a,b=b,a
sera autorisee dans un algo.

Posté par
mathafou Moderateur
re : algorithme 27-12-17 à 20:05

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 !

Posté par
alb12
re : algorithme 27-12-17 à 20:17

quand on choisit Sage en terminale on a depasse ce stade
(qui est vu en seconde)

Posté par
mathafou Moderateur
re : algorithme 27-12-17 à 20:31

apparemment pas au vu des tentatives de chacha25 ...

Posté par
chacha25
re : algorithme 03-01-18 à 09:50

du coup la je ne sais toujours pas comment faire

Posté par
vham
re : algorithme 03-01-18 à 10:26

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


Résultat (limité pour n de 0 à 5)
n = 0    a = 0    b = 12
n = 1    a = 4.0    b = 8.0
n = 2    a = 5.333333333333333    b = 6.666666666666667
n = 3    a = 5.777777777777778    b = 6.222222222222222
n = 4    a = 5.9259259259259265    b = 6.0740740740740735
n = 5    a = 5.975308641975309    b = 6.024691358024691

Posté par
mathafou Moderateur
re : algorithme 03-01-18 à 10:35

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)

Posté par
chacha25
re : algorithme 03-01-18 à 10:37

merci beaucoup pour votre aide !!! d=je ne maîtrise pas sage du tout

Posté par
mathafou Moderateur
re : algorithme 03-01-18 à 10:43

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")

Posté par
chacha25
re : algorithme 03-01-18 à 10:53

j'essaie de programmer sur ma calculatrice casio mais je ne comprends comment il faut faire pour afficher les valeurs a et b

Posté par
mathafou Moderateur
re : algorithme 03-01-18 à 10:59

voir la notice de la calculette ...

Posté par
patrice rabiller
re : algorithme 03-01-18 à 11:02

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

Posté par
patrice rabiller
re : algorithme 03-01-18 à 11:03

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

Posté par
patrice rabiller
re : algorithme 03-01-18 à 11:04

Encore une erreur pour le calcul de B : c'est pas mon jour !
B=(Z+2B)/3

Posté par
mathafou Moderateur
re : algorithme 03-01-18 à 11:05

un exemple extrait d'une notice d'une calculette de chez Casio :
algorithme
le triangle noir provoque l'affichage de ce qui est avant (de B)

1 2 +




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 !