 |
Apprendre Maple Site dédié au logiciel de calcul formel Maple
|
Voir le sujet précédent :: Voir le sujet suivant |
Auteur |
Message |
anthony.canu
Inscrit le: 22 Avr 2011 Messages: 16
|
Posté le: 22 Avr 2011 17:50 Sujet du message: Extraire la n_ième décimale d'un nombre |
|
|
Bonjour,
Existe t il une fonction dans la bibliothèque de maple permettant d'extraire la n_ième décimal d'un nombre.
Exemple avec Pi = 3.1415...
***********************
print (4_ième décimale de Pi)
print (2_ième décimale de Pi)
print (3_ième décimale de Pi)
541
Cordialement
Anthony |
|
Revenir en haut de page |
|
 |
prof_simplet
Inscrit le: 12 Sep 2006 Messages: 86
|
Posté le: 23 Avr 2011 7:36 Sujet du message: |
|
|
Bonjour,
Oui, on peut utikiser evalf(x,n+1) pour évaluer x avec n décimales (on ajoute 1 car le point est compté comme un digit).
Sinon, on peut aussi modifier la valeur de la variable d'environnement Digits qui est à 10 par défaut (le point + 9 décimales).
Code: |
> for k from 2 to 11 do evalf(Pi,k) end do;
3.1
3.14
3.142
3.1416
3.14159
3.141593
3.1415927
3.14159265
3.141592654
3.1415926536
> Digits:=50: evalf(Pi);
3.1415926535897932384626433832795028841971693993751
|
A plus. |
|
Revenir en haut de page |
|
 |
anthony.canu
Inscrit le: 22 Avr 2011 Messages: 16
|
Posté le: 23 Avr 2011 16:53 Sujet du message: |
|
|
Merci pour votre réponse mais pour etre franc ca ne correspond pas du tout à ma demande (c'est moi qui ai honte)
Dans mon exemple il s'agissait d'aboutir à 541 |
|
Revenir en haut de page |
|
 |
ALS
Inscrit le: 11 Sep 2006 Messages: 647
|
Posté le: 23 Avr 2011 18:18 Sujet du message: |
|
|
Bonjour,
Ceci devrait mieux convenir, is not it?
Code: |
> DECIMALE:=proc(x,n)
> local n1,q;
> n1:=floor(x*10^n);
> q:=n1 mod 10:
> end proc:
> DECIMALE(evalf(Pi),5);
9
> evalf(Pi);
3.141592654
> cat(DECIMALE(evalf(Pi),4),DECIMALE(evalf(Pi),2),DECIMALE(evalf(Pi),3));
541
|
Bye |
|
Revenir en haut de page |
|
 |
anthony.canu
Inscrit le: 22 Avr 2011 Messages: 16
|
Posté le: 24 Avr 2011 9:42 Sujet du message: |
|
|
Merci beaucoup c'est impeccable  |
|
Revenir en haut de page |
|
 |
anthony.canu
Inscrit le: 22 Avr 2011 Messages: 16
|
Posté le: 30 Sep 2011 21:05 Sujet du message: Un programme pour transformer une suite de décimales ? |
|
|
Prenons un réel mettons sqrt(2) et intéressons nous à ses décimales :
414213562373095...
Réécrivons ces décimales en utilisant le fait que chaque décimale *appelle* une autre décimale :
4 appelle la 4e décimale à savoir 2
1 appelle la 1ere décimale à savoir 4
42 appelle la 42e décimale à savoir 1
(et oui car 4 à déja était appelé donc on prend l'entier composé par deux décimales)
13 appelle la 13e décimale à savoir 0
5 appelle la 5e décimale à savoir 1
6 appelle la 6e décimale à savoir 3
....
On aboutit au final à la création d'un réel dont les décimales sont :
24101314597...
Comment puis je m'y prendre pour créer un programme sous maple pour aboutir au résultat ci dessus ?
Cordialement
Anthony |
|
Revenir en haut de page |
|
 |
anthony.canu
Inscrit le: 22 Avr 2011 Messages: 16
|
Posté le: 30 Sep 2011 22:03 Sujet du message: |
|
|
J'ai commencé à travailler avec les décimales de pi avec ce code :
Code: | > Digits:=100;
Digits := 100
> DECIMALE:=proc(x,n)
> local n1,q;
> n1:=floor(x*10^n);
> q:=n1 mod 10:
> end proc:
> DECIMALE(evalf(Pi),15);
3
> for i from 1 to 10 do print(DECIMALE(evalf(Pi),DECIMALE(evalf(Pi),i))) end do;
1
5
1
9
3
4
2
9
1
9
|
Mais ce code ne gère pas le cas d'une décimale déjà utilisée.
Exemple :
*********
141592653
1 appelle la 1ere décimale à savoir 1
4 appelle la 4e décimale à savoir 5
1 appelle la 1ere décimale à savoir 1 mais cette décimale à déjà été utilisé donc je prend deux décimales :
15 appelle la 15e décimale à savoir 3
9 appelle la 9e décimale à savoir 3
2 appelle la 2e décimale à savoir 4
....... |
|
Revenir en haut de page |
|
 |
ALS
Inscrit le: 11 Sep 2006 Messages: 647
|
Posté le: 01 Oct 2011 9:02 Sujet du message: |
|
|
Bonjour, ça pourrait ressembler à ça :
Code: |
> Digits:=100:
> DECIMALE:=proc(x,n)
> local n1,q;
> n1:=floor(x*10^n);
> q:=n1 mod 10:
> end proc:
> appel:=proc(x,n)
> local d,e,k,appelees,nb;
> Digits:=n+2:
> d:=[seq(DECIMALE(evalf(x),k),k=1..n)];
> appelees:={}: nb:=NULL:
> for k to nops(d)-1 do
> if d[k]>0 and not member(d[d[k]],appelees) then
> if d[k]<Digits then
> print(d[k],` appelle `,d[d[k]]):
> appelees:=appelees union {d[d[k]]}: nb:=nb,d[d[k]]: end if
> else
> e:=d[k]*10+d[k+1]:
> if e<Digits then
> print(e,` appelle `,d[e]):
> appelees:=appelees union {d[e]}: nb:=nb,d[e]: k:=k+1 end if
> end if:
> end do:
> nb
> end proc:
>
> appel(sqrt(2),100);
4, appelle , 2
1, appelle , 4
42, appelle , 1
13, appelle , 0
56, appelle , 7
23, appelle , 8
7, appelle , 5
30, appelle , 9
95, appelle , 4
4, appelle , 2
8, appelle , 6
80, appelle , 3
16, appelle , 0
88, appelle , 5
72, appelle , 8
42, appelle , 1
9, appelle , 2
69, appelle , 2
80, appelle , 3
78, appelle , 7
56, appelle , 7
96, appelle , 1
71, appelle , 7
87, appelle , 7
53, appelle , 7
76, appelle , 1
94, appelle , 6
80, appelle , 3
73, appelle , 4
17, appelle , 4
66, appelle , 0
79, appelle , 0
73, appelle , 4
79, appelle , 0
90, appelle , 4
73, appelle , 4
24, appelle , 8
78, appelle , 7
46, appelle , 3
21, appelle , 1
7, appelle , 5
3, appelle , 4
88, appelle , 5
50, appelle , 4
38, appelle , 6
75, appelle , 2
34, appelle , 0
32, appelle , 9
76, appelle , 1
41, appelle , 7
57, appelle , 6
27, appelle , 4
2, 4, 1, 0, 7, 8, 5, 9, 4, 2, 6, 3, 0, 5, 8, 1, 2, 2, 3, 7, 7, 1, 7,
7, 7, 1, 6, 3, 4, 4, 0, 0, 4, 0, 4, 4, 8, 7, 3, 1, 5, 4, 5, 4,
6, 2, 0, 9, 1, 7, 6, 4
|
|
|
Revenir en haut de page |
|
 |
anthony.canu
Inscrit le: 22 Avr 2011 Messages: 16
|
Posté le: 01 Oct 2011 18:00 Sujet du message: |
|
|
ouhhh il s'en est fallu d'un cheveu pour que ce soit ça !
Votre code répond exactement à ce que je cherche à faire mais il décroche après l'appel de la 13e décimale.
Effectivement il appelle ensuite la 56e décimale alors qu'il aurait du appeler la 5e décimale (qui elle n'a pas encore été appelé) puis la 6e décimale. |
|
Revenir en haut de page |
|
 |
ALS
Inscrit le: 11 Sep 2006 Messages: 647
|
Posté le: 02 Oct 2011 8:22 Sujet du message: |
|
|
Bonjour, maintenant est-ce que ça va?
Code: |
> appel:=proc(x,n)
> local d,e,k,appelees,nb;
> Digits:=n+2:
> d:=[seq(DECIMALE(evalf(x),k),k=1..n)];
> appelees:={}: nb:=NULL:
> for k to nops(d)-1 do
> if d[k]>0 and not member(d[k],appelees) then
> if d[k]<Digits then
> print(d[k],` appelle `,d[d[k]]):
> appelees:=appelees union {d[k]}: nb:=nb,d[d[k]]: end if
> else
> e:=d[k]*10+d[k+1]:
> if e<Digits then
> print(e,` appelle `,d[e]):
> appelees:=appelees union {e}: nb:=nb,d[e]: k:=k+1 end if
> end if:
> end do:
> nb
> end proc:
> appel(sqrt(2),100);
4, appelle , 2
1, appelle , 4
42, appelle , 1
13, appelle , 0
5, appelle , 1
6, appelle , 3
2, appelle , 1
3, appelle , 4
7, appelle , 5
30, appelle , 9
9, appelle , 2
50, appelle , 4
48, appelle , 6
8, appelle , 6
1, appelle , 4
68, appelle , 3
87, appelle , 7
24, appelle , 8
20, appelle , 0
96, appelle , 1
98, appelle , 7
7, appelle , 5
85, appelle , 3
69, appelle , 2
67, appelle , 7
18, appelle , 8
75, appelle , 2
37, appelle , 5
69, appelle , 2
48, appelle , 6
7, appelle , 5
31, appelle , 6
76, appelle , 1
67, appelle , 7
97, appelle , 5
37, appelle , 5
99, appelle , 2
7, appelle , 5
32, appelle , 9
47, appelle , 7
84, appelle , 0
62, appelle , 3
10, appelle , 3
70, appelle , 4
38, appelle , 6
85, appelle , 3
3, appelle , 4
87, appelle , 7
53, appelle , 7
43, appelle , 8
27, appelle , 4
64, appelle , 9
15, appelle , 5
72, appelle , 8
2, 4, 1, 0, 1, 3, 1, 4, 5, 9, 2, 4, 6, 6, 4, 3, 7, 8, 0, 1, 7, 5, 3,
2, 7, 8, 2, 5, 2, 6, 5, 6, 1, 7, 5, 5, 2, 5, 9, 7, 0, 3, 3, 4,
6, 3, 4, 7, 7, 8, 4, 9, 5, 8
|
|
|
Revenir en haut de page |
|
 |
anthony.canu
Inscrit le: 22 Avr 2011 Messages: 16
|
Posté le: 02 Oct 2011 12:40 Sujet du message: |
|
|
......presque, ça déraille juste après l'appel de la 8e décimale, le programme appelle la 1ere décimale alors que celle ci à déjà été appelée au début.
Merci pour ce code en tout cas  |
|
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 - © 19/05/2025
- Alain Le Stang - Navigation optimisée pour une résolution 1024 x 768.
|