 |
Apprendre Maple Site dédié au logiciel de calcul formel Maple
|
Voir le sujet précédent :: Voir le sujet suivant |
Auteur |
Message |
leyrassl
Inscrit le: 13 Jan 2007 Messages: 27
|
Posté le: 15 Jan 2007 11:57 Sujet du message: liste des chiffres d'un nombre |
|
|
bonjour,
à partir d'un nombre,
je voudrais créer une procédure pour obtenir la liste de ses chiffres,
j'ai voulu faire op(nombre) mais ça en marche pas evidement
car on doit l'utiliser sur une séquence.
mais alors comment faire?
je voudrais seulement le raisonnement
j'essaierai pour le code
mais niveau raisonnement je ne sais pas comment procéder.
merci. |
|
Revenir en haut de page |
|
 |
ALS
Inscrit le: 11 Sep 2006 Messages: 647
|
Posté le: 15 Jan 2007 12:58 Sujet du message: |
|
|
Bonjour, voici une petite procédure qui devrait faire l'affaire: on copie n dans n1 et on créé une séquence L vide.
Pour k de 1 jusqu'à la longueur de n
On calcule le dernier chiffre q de n1
on remplace n1 par (n1-q)/10
on ajoute q à la séquence L
fin Pour
[L] est le résultat escompté
Code: |
> chiffres:=proc(n::nonnegint)
> local L,n1,q,i,k;
> i:=floor(log10(n))+1: # longueur du nombre n
> n1:=n; L:=NULL;
>
>
>
>
>
>
> [L]
> end proc:
> chiffres(1234567890);
[1, 2, 3, 4, 5, 6, 7, 8, 9, 0]
|
Je vous laisse compléter les lignes blanches.
A+ |
|
Revenir en haut de page |
|
 |
leyrassl
Inscrit le: 13 Jan 2007 Messages: 27
|
Posté le: 15 Jan 2007 14:40 Sujet du message: |
|
|
alors j'ai complété mais j'obtiens la liste inversée
Code: | chiffres:=proc(n::nonnegint)
local L,n1,q,i,k;
i:=floor(log10(n))+1: # longueur du nombre n
n1:=n; L:=NULL; q:=0;
for k from 1 to i do
q:=n1 mod 10;
n1:=(n1-q)/10;
L:=L,q;
end do;
return[L];
end proc; |
merci. |
|
Revenir en haut de page |
|
 |
ALS
Inscrit le: 11 Sep 2006 Messages: 647
|
Posté le: 15 Jan 2007 14:47 Sujet du message: |
|
|
C'est très bien: pour avoir la liste dans le bon sens, il suffit de mettre q à gauche et non à droite dans L en faisant:
> L:=q,L;
Code: |
chiffres:=proc(n::nonnegint)
> local L,n1,q,i,k;
> i:=floor(log10(n))+1: # longueur du nombre n
> L:=NULL;
> n1:=n:
> for k to i do
> q:=n1 mod 10:
> n1:=(n1-q)/10:
> L:=q,L:
> end do:
> [L]
> end proc:
> chiffres(1234567890);
[1, 2, 3, 4, 5, 6, 7, 8, 9, 0]
|
|
|
Revenir en haut de page |
|
 |
leyrassl
Inscrit le: 13 Jan 2007 Messages: 27
|
Posté le: 15 Jan 2007 14:52 Sujet du message: |
|
|
merci beaucoup!!!  |
|
Revenir en haut de page |
|
 |
leyrassl
Inscrit le: 13 Jan 2007 Messages: 27
|
Posté le: 15 Jan 2007 14:56 Sujet du message: |
|
|
j'ai voulu me reservir de cette procédure pour inverser les chiffres du nombre c'est-à-dire trouver le résultat que je trouvais mais en créant une autre procédure mais elle ne marche pas.
Code: | nbinv:=proc(n)
local i,S,f;
S:=chiffres(n); # obtenir la liste des chiffres de ce nombre
for i to nops(S)-1 do
f:=S[i]; S[i]:=S[nops(S)-1-i]; S[nops(S)-1-i]:=f;
end do;
return S;
end proc;
nbinv(1254555); |
seulement voici le message que je rencontre à l'exécution:
Error, (in nbinv) invalid subscript selector
merci. |
|
Revenir en haut de page |
|
 |
leyrassl
Inscrit le: 13 Jan 2007 Messages: 27
|
Posté le: 15 Jan 2007 15:22 Sujet du message: |
|
|
j'ai modifié mon programme comme suit:
Code: | nbinv:=proc(n)
local i,S,f,j;
S:=chiffres(n); # obtenir la liste des chiffres de ce nombre
for j from 0 to nops(S)-1 do
i:=1;
while i<nops(L)-j do
f:=S[i]; S[i]:=S[nops(S)-1-i]; S[nops(S)-1-i]:=f;
i:=i+1;
end do;
end do;
return S;
end proc;
nbinv(1693563); |
mais ça me retourne exactement le même nombrel!
merci. |
|
Revenir en haut de page |
|
 |
ALS
Inscrit le: 11 Sep 2006 Messages: 647
|
Posté le: 16 Jan 2007 16:58 Sujet du message: |
|
|
Code: |
> listeinverse:= proc(L::list)
> local i;
> [seq(op(nops(L)-i,L),i=0..nops(L)-1)];
> end proc:
|
|
|
Revenir en haut de page |
|
 |
leyrassl
Inscrit le: 13 Jan 2007 Messages: 27
|
Posté le: 16 Jan 2007 17:19 Sujet du message: |
|
|
bonjour,
j'ai voulu le modifer comme suit
pour qu'il prenne en argument le nombre
sachant que chiffres(n) me donne la liste des chiffres.
mais ça ne marche pas. merci.
Code: | listeinverse:= proc(n)
local i,L;
L:=chiffres(n)
[seq(op(nops(L)-i,L),i=0..nops(L)-1)];
end proc:
listeinverse(1693563); |
|
|
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 - ©
- Alain Le Stang - Navigation optimisée pour une résolution 1024 x 768.
|