Apprendre Maple Index du Forum Apprendre Maple
Site dédié au logiciel de calcul formel Maple
 
  Page d'accueilPage d'accueil   FAQFAQ    RechercherRechercher    Liste des MembresListe des Membres    Groupes d'utilisateursGroupes d'utilisateurs 
S'enregistrerS'enregistrer    ProfilProfil   Se connecter pour vérifier ses messages privésSe connecter pour vérifier ses messages privés   ConnexionConnexion 

Calcul d'une période dans une séquence

 
Poster un nouveau sujet   Répondre au sujet    Apprendre Maple Index du Forum -> Séquences, listes, ensembles, tables ou tableaux...
Voir le sujet précédent :: Voir le sujet suivant  
Auteur Message
vins



Inscrit le: 08 Mar 2008
Messages: 3

MessagePosté le: 12 Mar 2008 21:01    Sujet du message: Calcul d'une période dans une séquence Répondre en citant

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 Smile
Revenir en haut de page
Voir le profil de l'utilisateur Envoyer un message privé
ALS



Inscrit le: 11 Sep 2006
Messages: 647

MessagePosté le: 14 Mar 2008 16:11    Sujet du message: Répondre en citant

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
Voir le profil de l'utilisateur Envoyer un message privé
vins



Inscrit le: 08 Mar 2008
Messages: 3

MessagePosté le: 15 Mar 2008 20:21    Sujet du message: Répondre en citant

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 Smile. Bonne soirée

PS : Ce site est vraiment intéressant et fort utile.
Revenir en haut de page
Voir le profil de l'utilisateur Envoyer un message privé
vins



Inscrit le: 08 Mar 2008
Messages: 3

MessagePosté le: 17 Mar 2008 19:35    Sujet du message: Répondre en citant

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
Voir le profil de l'utilisateur Envoyer un message privé
ALS



Inscrit le: 11 Sep 2006
Messages: 647

MessagePosté le: 22 Mar 2008 23:39    Sujet du message: Re Répondre en citant

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
Voir le profil de l'utilisateur Envoyer un message privé
Montrer les messages depuis:   
Poster un nouveau sujet   Répondre au sujet    Apprendre Maple Index du Forum -> Séquences, listes, ensembles, tables ou tableaux... Toutes les heures sont au format GMT + 2 Heures
Page 1 sur 1

 
Sauter vers:  
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


phpBB

Développé par phpBB © 2001, 2006 phpBB Group
Traduction par : phpBB-fr.com


Apprendre Maple - ©  - Alain Le Stang - Navigation optimisée pour une résolution 1024 x 768.