OVH Cloud OVH Cloud

Nombre de Fibonacci

5 réponses
Avatar
RCR
Hello,
Si ça intéresse quelqu'un voila un petit exercice pour faire comprendre
l'utilisation des variable à des débutants.

'***********************************************************************************
Sub Fibo()

Dim a As Double
Dim b As Double
Dim result As Double
Dim NB As Integer
Dim aff As String

aff = "0) " & "0" & vbCrLf
aff = aff & "1) " & "1" & vbCrLf

NB = InputBox("Nombre de Fibo")

a = 0
b = 1

For i = 2 To NB
result = a + b
aff = aff & i & ") " & result & vbCrLf
a = b
b = result
Next i

MsgBox aff

End Sub
'************************************************************************************
Pour rappel, dans la suite de Fibonacci chaque nombre (a l'exeption des 2
premiers) est le résultat de la somme des 2 nombres qui le précède.

0) 0
1) 1
2) 1
3) 2
4) 3
5) 5
6) 8
7) 13
8) 21
9) 34
10) 55
11) 89
12) 144
13) 233
14) 377
15) 610
16) 987
17) 1597
18) 2584
19) 4181
20) 6765
21) 10946
22) 17711
23) 28657
24) 46368
25) 75025
26) 121393
27) 196418
28) 317811
29) 514229

5 réponses

Avatar
jm
"RCR" wrote in message
news:%
Hello,
Si ça intéresse quelqu'un voila un petit exercice pour faire comprendre
l'utilisation des variable à des débutants.

'***********************************************************************************
Sub Fibo()

Dim a As Double
Dim b As Double
Dim result As Double
Dim NB As Integer
Dim aff As String

aff = "0) " & "0" & vbCrLf
aff = aff & "1) " & "1" & vbCrLf

NB = InputBox("Nombre de Fibo")

a = 0
b = 1

For i = 2 To NB
result = a + b
aff = aff & i & ") " & result & vbCrLf
a = b
b = result
Next i

MsgBox aff

End Sub



Hello,

on pourrait juste faire un commentaire sur l'emploi du type double
qui peut sembler curieux dans la mesure ou la suite de Fibonacci est définie
pour des entiers et pas des réels.

On utilise ici le type double parce que son range de valeurs est plus grand
mais le plus naturel aurait sans doute été de définir a, b et résults comme
des long.

--
Jean-marc
Avatar
bayosky
Notre ami jm tapota :

On utilise ici le type double parce que son range de valeurs est
plus
grand mais le plus naturel aurait sans doute été de définir a, b et
résults comme des long.



Bonjour,

pour manipuler de très gros entiers
mieux vaut choisir un autre format que long
( c'est absurde méssétinsi )

Le type "decimal" est balèze !

---------------------------------------------------------------

comparaison des possibilités :

----------------------------------------------
long :
¨¨¨¨¨¨¨¨¨
-2 147 483 648
à
2 147 483 647
----------------------------------------------
currency :
¨¨¨¨¨¨¨¨¨¨¨¨¨
-922 337 203 685 477,5808
à
922 337 203 685 477,5807
----------------------------------------------
decimal
¨¨¨¨¨¨¨¨¨¨¨¨¨
sans séparateur décimal :
+/- 79 228 162 514 264 337 593 543 950 335 ;

avec 28 chiffres à droite du séparateur décimal :
+/- 7,9228162514264337593543950335 ;

le plus petit nombre différent de zéro est
+/- 0,000 000 000 000 000 000 000 000 000 1
soit 10 puissance - 28 ...

on peut donc travailler avec de gros entiers en conservant un
excellente précision
pour différencier un entier d'un non entier proche
pour savoir si un quotient est exact,
etc ...
----------------------------------------------

HB
Avatar
jean-marc
"bayosky" a écrit dans le message de
news:
Notre ami jm tapota :

> On utilise ici le type double parce que son range de valeurs est
> plus
> grand mais le plus naturel aurait sans doute été de définir a, b et
> résults comme des long.

Bonjour,

pour manipuler de très gros entiers
mieux vaut choisir un autre format que long
( c'est absurde méssétinsi )

Le type "decimal" est balèze !

---------------------------------------------------------------

comparaison des possibilités :

----------------------------------------------
long :
¨¨¨¨¨¨¨¨¨
-2 147 483 648
à
2 147 483 647
----------------------------------------------
currency :
¨¨¨¨¨¨¨¨¨¨¨¨¨
-922 337 203 685 477,5808
à
922 337 203 685 477,5807
----------------------------------------------
decimal
¨¨¨¨¨¨¨¨¨¨¨¨¨
sans séparateur décimal :
+/- 79 228 162 514 264 337 593 543 950 335 ;

avec 28 chiffres à droite du séparateur décimal :
+/- 7,9228162514264337593543950335 ;

le plus petit nombre différent de zéro est
+/- 0,000 000 000 000 000 000 000 000 000 1
soit 10 puissance - 28 ...

on peut donc travailler avec de gros entiers en conservant un
excellente précision
pour différencier un entier d'un non entier proche
pour savoir si un quotient est exact,
etc ...



Hello,

c'est vrai que decimal et currency ont l'avantage de pouvoir
manipuler de grands nombres. Je ne les emploie cependant jamais
car ils ne sont pas "portables", c'est à dire que si j'écris
un bout de code qui fait usage de ces types, je ne pourrais
sans doute pas le porter tel quel dans un autre langage qui lui ne
supporte pas ce type.
D'autre part, les opérations sur ces types sont très lentes (ce qui
n'est pas forcément un problème pour faire de la compta, mais
beaucoup plus pour faire des maths).

Mais c'est clair, ils ont les avantages que tu expliques et si on
a pas de contraintes de portabilité/vitesse, ça peut être très
utile :-)

--
Jean-marc
Tester mon serveur (VB6) => http://myjmnhome.dyndns.org
"There are only 10 kind of people
those who understand binary and those who don't."
mailto: remove '_no_spam_' ;
Avatar
bayosky
Notre ami jean-marc tapota :

D'autre part, les opérations sur ces types sont très lentes (ce qui
n'est pas forcément un problème pour faire de la compta, mais
beaucoup plus pour faire des maths).




Certes... c'est une notion relative. pour traiter les gros entier,
avec puissance, mieux vaut installer MuPAD qui peut communiquer via
DDE avec d'autres exe... On dispose alors d'un moteur de calcul formel
capable de travailler avec 10000 chiffres si on veut :o)

Ceci étant, j'ai fait un xla pour Excel qui contient , entre autre,
lun fonction de décomposition en facteur premier. ( type decimal pour
avoir de gros arguments)

J'ai testé sur des cas pathologiques (produit de deux gros premiers
voisins) et, a ma grande surprise; même sur mon vieux W98 avec un
Pentium à 300 Mhz, ça va nettement plus vite que la TI92 qui possède
cette fonction en ROM ( donc optimisée) ... Donc ...

A+
Avatar
RCR
Re à tous,

Je fais un grand Mea-culpa sur cette énorme erreur vous avez effectivement
tous raison de vous interrogé sur le type de données et je vous remercie
tous sur la remarquable qualité de vos remarque détailler qui vont
certainement en aider plus d'un. Merci d'avoir compris les vrais buts d'internet.
A+ tout le monde.


"RCR" a écrit dans le message de news:
%
Hello,
Si ça intéresse quelqu'un voila un petit exercice pour faire comprendre
l'utilisation des variable à des débutants.

'***********************************************************************************
Sub Fibo()

Dim a As Double
Dim b As Double
Dim result As Double
Dim NB As Integer
Dim aff As String

aff = "0) " & "0" & vbCrLf
aff = aff & "1) " & "1" & vbCrLf

NB = InputBox("Nombre de Fibo")

a = 0
b = 1

For i = 2 To NB
result = a + b
aff = aff & i & ") " & result & vbCrLf
a = b
b = result
Next i

MsgBox aff

End Sub
'************************************************************************************
Pour rappel, dans la suite de Fibonacci chaque nombre (a l'exeption des 2
premiers) est le résultat de la somme des 2 nombres qui le précède.

0) 0
1) 1
2) 1
3) 2
4) 3
5) 5
6) 8
7) 13
8) 21
9) 34
10) 55
11) 89
12) 144
13) 233
14) 377
15) 610
16) 987
17) 1597
18) 2584
19) 4181
20) 6765
21) 10946
22) 17711
23) 28657
24) 46368
25) 75025
26) 121393
27) 196418
28) 317811
29) 514229