Mumu
Nombre de messages : 176 Localisation : 45 Date d'inscription : 20/12/2012
| Sujet: Entrer des nombres reels en notation scientifique Dim 24 Mar 2013 - 23:29 | |
| Bonsoir à toutes et à tous Je viens ce soir pour vous narrer une mésaventure qui fût la mienne il y a quelques temps de cela. J'avais posté une question relative à la notation scientifique dans Panoramic. La réponse a été sans ambigüité. On peut pas entrer des nombres de la forme 1.342E25 ! C'est ma foi on ne peut plus vrai. Ou alors il faut utiliser la fonction power(), ce qui choquait mon sens de l’esthétique... Alors, moi, du style -je ne vais pas me laisser abattre- -que je vais te me faire une sub qui fera date dans les anales, je t'ai développé un code qui m'a rempli de fierté, que le plus fort c'est moi, et que je pouvais repartir le front haut, fier comme si j'avais un bar tabac (Coluche dixit). Je ne résiste pas au "plaisir" de vous soumettre ce code... - Code:
-
' ------------------------------------------------------------------------------ ' ' ConvNotationScientifique(nombre$) ' nombre$ est une chaine représentant un nombre au format ' (-)######.#######E(-)### ' les "-" sont facultatifs et les nb doivent comporter 1 et 1 seul "E" ' les "#" on peut en mettre tant qu'on veut. Veiller seulement à ne pas depasser ' la capacité de Panoramic ' Resultat dans la variable retour ' '-------------------------------------------------------------------------------
sub ConvNotationScientifique(nombre$) dim_local i%,puissance%,int_mantisse$,frac_mantisse$,signe% if variable("retour") = 0 then dim retour puissance% = 0 int_mantisse$ ="" frac_mantisse$ ="." i% = 0 signe% = 1 if left$(nombre$,1) = "-" then signe% = -1 while mid$(nombre$,len(nombre$)-i%,1)<> "e" and mid$(nombre$,len(nombre$)-i%,1)<> "E" if mid$(nombre$,len(nombre$)-i%,1)<> "-" puissance% = puissance%+(val(mid$(nombre$,len(nombre$)-i%,1))* power(10,i%)) else puissance% = 0-puissance% end_if i% = i%+1 end_while i% = 1 while mid$(nombre$,i%,1)<> "e" and mid$(nombre$,i%,1)<> "E" if mid$(nombre$,i%,1)<> "." int_mantisse$ = int_mantisse$ + mid$(nombre$,i%,1) else exit_while
end_if i%= i%+1 end_while while mid$(nombre$,i%,1)<> "e" and mid$(nombre$,i%,1)<> "E" frac_mantisse$ = frac_mantisse$ + mid$(nombre$,i%+1,1) i%= i%+1 end_while retour = (val(int_mantisse$) + val(frac_mantisse$)* signe%)* power(10,puissance%)
end_sub
Oh vains dieux la belle sub ! au moins 30 lignes de code et des heures de boulot,... et des litres de sueur... Puis je me suis rendu compte que : val("1.342E25") ça fait exactement la même chose en 1 seule ligne, quasi instantanément et sans sueur. Bon je vais aller me coucher. Ca au moins j'sais faire... | |
|
Jicehel
Nombre de messages : 5947 Age : 52 Localisation : 77500 Date d'inscription : 18/04/2011
| Sujet: Re: Entrer des nombres reels en notation scientifique Dim 24 Mar 2013 - 23:55 | |
| Le principal c'est que tu es atteint ton but. Tu as réussi à faire la SUB que tu voulais et ça tu peux en être fier | |
|
papydall
Nombre de messages : 7017 Age : 74 Localisation : Moknine (Tunisie) Entre la chaise et le clavier Date d'inscription : 03/03/2012
| Sujet: Re: Entrer des nombres reels en notation scientifique Lun 25 Mar 2013 - 0:29 | |
| - Mumu a écrit:
- Oh vains dieux la belle sub ! au moins 30 lignes de code et des heures de boulot,... et des litres de sueur...
Puis je me suis rendu compte que :
val("1.342E25")
ça fait exactement la même chose en 1 seule ligne, quasi instantanément et sans sueur. Dis- toi que « les heures de boulot et les litres de sueur » n’étaient pas peine perdue ! Car tu avais bien réfléchi à ton problème et tu as essayé un code qui ne marchait pas, puis un autre, puis une autre approche qui n’allait pas non plus pour aboutir enfin à un code qui marche ! Dans toute cette « aventure » tu as testé des commandes et des fonctions en panoramic et tu as compris pourquoi telle chose ne marchait pas, etc. Enfin, la récompense venait : te sentir fier d’avoir réussi. Et puis tu m’as appris une chose que j’ignorais (d’autres panoramiciens aussi peut-être): val("1.342E25") : je ne pensais pas que Panoramic accepte une telle écriture! Alors MERCI.Et service pour service, tu peux abréger le test : - Code:
-
while mid$(nombre$,len(nombre$)-i%,1)<> "e" and mid$(nombre$,len(nombre$)-i%,1)<> "E"
comme ceci : - Code:
-
while upper$(mid$(nombre$,len(nombre$)-i%,1))<> "E" | |
|
Yannick
Nombre de messages : 8635 Age : 53 Localisation : Bretagne Date d'inscription : 15/02/2010
| Sujet: re Lun 25 Mar 2013 - 2:27 | |
| @ mumu, Tu peux être fier(e) de ton code ! Heureusement que je n'en ai pas eu besoin avant, je serai parti dans le même but que toi mais peut être pas avec la même réussite... Comme beaucoup, je pense, je ne savais pas que val() faisait ce boulot là. Alors BRAVO pour ce code, et MERCI de ton partage ! | |
|
Contenu sponsorisé
| Sujet: Re: Entrer des nombres reels en notation scientifique | |
| |
|