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 

Extraire la n_ième décimale d'un nombre

 
Poster un nouveau sujet   Répondre au sujet    Apprendre Maple Index du Forum -> Programmation
Voir le sujet précédent :: Voir le sujet suivant  
Auteur Message
anthony.canu



Inscrit le: 22 Avr 2011
Messages: 16

MessagePosté le: 22 Avr 2011 17:50    Sujet du message: Extraire la n_ième décimale d'un nombre Répondre en citant

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



Inscrit le: 12 Sep 2006
Messages: 86

MessagePosté le: 23 Avr 2011 7:36    Sujet du message: Répondre en citant

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



Inscrit le: 22 Avr 2011
Messages: 16

MessagePosté le: 23 Avr 2011 16:53    Sujet du message: Répondre en citant

Merci pour votre réponse mais pour etre franc ca ne correspond pas du tout à ma demande Embarassed (c'est moi qui ai honte)

Dans mon exemple il s'agissait d'aboutir à 541
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: 23 Avr 2011 18:18    Sujet du message: Répondre en citant

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



Inscrit le: 22 Avr 2011
Messages: 16

MessagePosté le: 24 Avr 2011 9:42    Sujet du message: Répondre en citant

Merci beaucoup c'est impeccable Razz
Revenir en haut de page
Voir le profil de l'utilisateur Envoyer un message privé
anthony.canu



Inscrit le: 22 Avr 2011
Messages: 16

MessagePosté le: 30 Sep 2011 21:05    Sujet du message: Un programme pour transformer une suite de décimales ? Répondre en citant

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



Inscrit le: 22 Avr 2011
Messages: 16

MessagePosté le: 30 Sep 2011 22:03    Sujet du message: Répondre en citant

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



Inscrit le: 11 Sep 2006
Messages: 647

MessagePosté le: 01 Oct 2011 9:02    Sujet du message: Répondre en citant

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



Inscrit le: 22 Avr 2011
Messages: 16

MessagePosté le: 01 Oct 2011 18:00    Sujet du message: Répondre en citant

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



Inscrit le: 11 Sep 2006
Messages: 647

MessagePosté le: 02 Oct 2011 8:22    Sujet du message: Répondre en citant

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



Inscrit le: 22 Avr 2011
Messages: 16

MessagePosté le: 02 Oct 2011 12:40    Sujet du message: Répondre en citant

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