 |
Apprendre Maple Site dédié au logiciel de calcul formel Maple
|
Voir le sujet précédent :: Voir le sujet suivant |
Auteur |
Message |
vins
Inscrit le: 08 Mar 2008 Messages: 3
|
Posté le: 12 Mar 2008 21:01 Sujet du message: Calcul d'une période dans une séquence |
|
|
Bonjour , par un algorithme simple je construis une séquence d'entiers naturels dont je sais qu'elle est soit périodique, soit périodique à partir d'un certain rang. Je souhaiterais savoir s'il est possible de déterminer cette période, et ce sans distinguer le cas "périodique" et le cas "périodique à partir d'un certain rang".
Merci d'avance  |
|
Revenir en haut de page |
|
 |
ALS
Inscrit le: 11 Sep 2006 Messages: 647
|
Posté le: 14 Mar 2008 16:11 Sujet du message: |
|
|
Bonjour, j'ai écrit cette petite procédure qui j'espère fera l'affaire.
En entrée: la liste d'entiers L dont on cherche la période éventuelle.
En sortie: en cas de période trouvée, la liste [i,p] où p est la période obtenue et le rang i à partir duquel elle est obtenue.
> periode:=proc(L::list(nonnegint))
> local i,j,k,n,p,tester;
>
> tester:=proc(i,p)
> local t,j;
> for j from i to nops(L) do
> if j+p<=nops(L) then
> if L[j]<>L[j+p] then return false end if;
> end if;
> end do;
> if i+p=nops(L) then return false else return true fi;
> end proc;
> n:=nops(L);
> for i to n do
> for j from i+1 to n do
> if L[j]=L[i] then
> p:=j-i: k:=j:
> while k+p<=n do
> if L[k+p]<>L[j] then break fi;
> k:=k+p
> end do;
> if tester(i,p) then return[i,p] end if
> end if;
> end do
> end do;
> end proc:
> periode([1,6,8,1,5,12,6,8,1,5,12,6,8,1,5,12,6,8,1,5,12,6,8,1,5]); # période 5 à partir du 2ème terme
[2, 5]
> periode([7,1,8,2,5,1,4,6,3,7,8,1,7,8,1,7,8,1,7,8,1,7,8]); # période 3 à partir du 10ème terme
[10, 3]
> periode([7,1,8,2,5,1,4,6,3,7,8,1,7,8,1,7,8,1,7,8,1,7,8,5]); # aucune période
A+ |
|
Revenir en haut de page |
|
 |
vins
Inscrit le: 08 Mar 2008 Messages: 3
|
Posté le: 15 Mar 2008 20:21 Sujet du message: |
|
|
Merci beaucoup je n'ai pas eu le tps de regarder en détails (et je ne maîtrise pas réellement maple, j'ai seulement quelques notions de base) mais je le testerai et vous confirmerai qu'il fonctionne . Bonne soirée
PS : Ce site est vraiment intéressant et fort utile. |
|
Revenir en haut de page |
|
 |
vins
Inscrit le: 08 Mar 2008 Messages: 3
|
Posté le: 17 Mar 2008 19:35 Sujet du message: |
|
|
Bonsoir,
J'ai commencé à m'intéresser au programme que vous avez écrit, et j'aimerais vous poser quelques questions :
- tout d'abord sur la forme, pour être certain d'avoir bien compris :
* est-ce nécessaire sur maple de définir l'objet à l'entrée de la procédure (pourrait-on simplement écrire periode:=proc(L) ?) ?
*list(nonnegint) indique que c'est une liste d'entiers naturels ?
*nops(L) est le nombre d'éléments de la liste L ?
*then return false : "donne la valeur" false à la procédure 'tester'?
*if...else...fi : on met fi s'il y a else, et end if sinon ?
*break : permet de sortir de la boucle ?
- ensuite sur le fond : je ne comprends pas bien comment
tester:=proc(i,p)
> local t,j;
> for j from i to nops(L) do
> if j+p<=nops(L) then
etc...
peut fonctionner alors que les valeurs i et p ne semblent pas définies ?
Je crois que c'est tout pour le moment. Merci pour votre aide. |
|
Revenir en haut de page |
|
 |
ALS
Inscrit le: 11 Sep 2006 Messages: 647
|
Posté le: 22 Mar 2008 23:39 Sujet du message: Re |
|
|
Bonsoir, je réponds à vos questions:
* est-ce nécessaire sur maple de définir l'objet à l'entrée de la procédure
vous voulez dire le type d'objet - réponse: non, le type est facultatif, donc on pourrait simplement écrire periode:=proc(L).
*list(nonnegint) indique que c'est une liste d'entiers naturels ? oui
*nops(L) est le nombre d'éléments de la liste L ? exact
*then return false : "donne la valeur" false à la procédure 'tester'? oui
*if...else...fi : on met fi s'il y a else, et end if sinon ? non, fi est l'ancienne syntaxe pour end if, les 2 écritures sont admises.
*break : permet de sortir de la boucle ? exact.
- ensuite sur le fond : je ne comprends pas bien comment
tester:=proc(i,p)
> local t,j;
> for j from i to nops(L) do
> if j+p<=nops(L) then
etc...
peut fonctionner alors que les valeurs i et p ne semblent pas définies ?
tester est une procédure interne à la procédure période.
i,p sont les paramètres passés à cette procédure lors de son appel, donc ces variables sont parfaitement reconnues.
A plus tard. |
|
Revenir en haut de page |
|
 |
|
|
Vous ne pouvez pas poster de nouveaux sujets dans ce forum Vous ne pouvez pas répondre aux sujets dans ce forum Vous ne pouvez pas éditer vos messages dans ce forum Vous ne pouvez pas supprimer vos messages dans ce forum Vous ne pouvez pas voter dans les sondages de ce forum
|

Développé par phpBB © 2001, 2006 phpBB Group
Traduction par : phpBB-fr.com
Apprendre Maple - © 03/04/2025
- Alain Le Stang - Navigation optimisée pour une résolution 1024 x 768.
|