Somme carres sur vba

Résolu
julienen Messages postés 9 Date d'inscription dimanche 24 février 2008 Statut Membre Dernière intervention 16 mars 2008 - 24 févr. 2008 à 16:45
jmfmarques Messages postés 7666 Date d'inscription samedi 5 novembre 2005 Statut Membre Dernière intervention 22 août 2014 - 24 févr. 2008 à 22:19
bonjour

j'ai deux fonctions une récursive et l'autre itérative qui renvoie la somme des carres dess entiers compris entre  1 et n :

Function sommeDesCarresRec(ByVal n As Long) As Long
If n > 1 Then
sommeDesCarresRec = n ^ 2 + sommeDesCarresRec(n - 1)
Else
sommeDesCarresRec = n
End If
End Function


Sub sommeDesCarresRe()


    MsgBox sommeDesCarresRec(5)
   
End Sub


Function sommeDesCarres(ByVal n As Long) As Long
Dim i As Long
For i = 1 To n
sommeDesCarres = n ^ 2 + sommeDesCarres
Next i
End Function


Sub sommeDesCarre()


    MsgBox sommeDesCarres(5)
   
End Sub

Seul hic c'est que ces deux fonctions ne renvoient pas le meme résultat (55  et 125 ) ; quelqu'un aurait il un meilleur moyen pour réecrire ma fonction itérative ?
enfin , y'aurait il un moyen de comparer les deux fonctions sur vba ?

Julien
A voir également:

7 réponses

jmfmarques Messages postés 7666 Date d'inscription samedi 5 novembre 2005 Statut Membre Dernière intervention 22 août 2014 27
24 févr. 2008 à 17:55
Private Sub Command1_Click()
  MsgBox sommeDesCarresRec(5)
  MsgBox sommeDesCarres(5)
End Sub


Function sommeDesCarresRec(ByVal n As Long) As Long
  While n > 0
    sommeDesCarresRec = n ^ 2 + sommeDesCarresRec
    n = n - 1
  Wend
End Function


Function sommeDesCarres(ByVal n As Long) As Long
  Dim i As Long
  For i = 1 To n
     sommeDesCarres = i ^ 2 + sommeDesCarres
  Next i
End Function


 
3
jmfmarques Messages postés 7666 Date d'inscription samedi 5 novembre 2005 Statut Membre Dernière intervention 22 août 2014 27
24 févr. 2008 à 18:06
Excuses

J'ai écrit 2 itératives...

Voilà la récursive :

Function sommeDesCarresRec(ByVal n As Long) As Long
    If n = 0 Then Exit Function
    sommeDesCarresRec = n ^ 2 + sommeDesCarresRec(n - 1)
End Function
3
julienen Messages postés 9 Date d'inscription dimanche 24 février 2008 Statut Membre Dernière intervention 16 mars 2008
24 févr. 2008 à 18:18
merci jmfmarques pour la fonction itérative , en effet j'ai pensé à utilisé while mais il faut que je m'entraine plus sur les boucles ...
par contre y'aurait il un moyen de comparer le résultat des deux fonctions sur VBA , par exemple avec une fonction testSommeDesCarres qui pourrait  comparer les résultats des deux versions  pour un n donné ?

Julien
0
jmfmarques Messages postés 7666 Date d'inscription samedi 5 novembre 2005 Statut Membre Dernière intervention 22 août 2014 27
24 févr. 2008 à 19:41
Ben....
C'est tout simplement la même chose que pour la comparaison de deux variables dont chacune serait le résultat de l'une des deux fonctions !!!


 


dim toto as long, titi as long, tata as long
toto = 5  ' ou ce que tu veux d'autre)


titi = sommeDesCarresRec(toto)
tata = sommeDesCarres(toto)

et tu compares titi avec tata !!!...
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
julienen Messages postés 9 Date d'inscription dimanche 24 février 2008 Statut Membre Dernière intervention 16 mars 2008
24 févr. 2008 à 19:53
j'ai essayé avec cette fonction et apparemment ça marche :

Function testSommeDesCarres(ByVal n As Long, ByVal m As Long, ByVal p As Long) As Boolean


n = 5
m = sommeDesCarresRec(n)
p = sommeDesCarres(n)


If m = p Then
testSommeDesCarres = "vrai"
Else
testSommeDesCarres = "faux"
End If


End Function


Sub testSommeDesCarre()


    MsgBox testSommeDesCarres(5, 5, 5)
   
End Sub
0
julienen Messages postés 9 Date d'inscription dimanche 24 février 2008 Statut Membre Dernière intervention 16 mars 2008
24 févr. 2008 à 19:55
mais je ne suis pas sur de l'application quand je mets testSommeDesCarres (5 ,5, 5 ) , car m et p ne valent pas 5
0
jmfmarques Messages postés 7666 Date d'inscription samedi 5 novembre 2005 Statut Membre Dernière intervention 22 août 2014 27
24 févr. 2008 à 22:19
Je ne sais pas où tu veux en venir (car les deux fonctionneront et le résultat sera toujours True), mais voilà :

Private Sub Command1_Click()
  Dim toto As Integer
  toto = 5
  MsgBox verifions(toto)
End Sub


Function sommeDesCarresRec(ByVal n As Long) As Long
    If n = 0 Then Exit Function
    sommeDesCarresRec = n ^ 2 + sommeDesCarresRec(n - 1)
End Function


Function sommeDesCarres(ByVal n As Long) As Long
  Dim i As Long
  For i = 1 To n
     sommeDesCarres = i ^ 2 + sommeDesCarres
  Next i
End Function

Private Function verifions(essai) As Boolean
  verifions = True
  If sommeDesCarres(essai) <> sommeDesCarresRec(essai) Then verifions = False
End Function


Si tu veux Falmse comme résultat, il te faudra bien évidemment "fausser" l'une des deux fonctions
0
Rejoignez-nous