Somme carres sur vba [Résolu]

Messages postés
9
Date d'inscription
dimanche 24 février 2008
Dernière intervention
16 mars 2008
- 24 févr. 2008 à 16:45 - Dernière réponse :
Messages postés
7668
Date d'inscription
samedi 5 novembre 2005
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
Afficher la suite 

Votre réponse

7 réponses

Meilleure réponse
Messages postés
7668
Date d'inscription
samedi 5 novembre 2005
Dernière intervention
22 août 2014
24 févr. 2008 à 17:55
3
Merci
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


 

Merci jmfmarques 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 90 internautes ce mois-ci

Commenter la réponse de jmfmarques
Meilleure réponse
Messages postés
7668
Date d'inscription
samedi 5 novembre 2005
Dernière intervention
22 août 2014
24 févr. 2008 à 18:06
3
Merci
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

Merci jmfmarques 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 90 internautes ce mois-ci

Commenter la réponse de jmfmarques
Messages postés
9
Date d'inscription
dimanche 24 février 2008
Dernière intervention
16 mars 2008
24 févr. 2008 à 18:18
0
Merci
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
Commenter la réponse de julienen
Messages postés
7668
Date d'inscription
samedi 5 novembre 2005
Dernière intervention
22 août 2014
24 févr. 2008 à 19:41
0
Merci
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 !!!...
Commenter la réponse de jmfmarques
Messages postés
9
Date d'inscription
dimanche 24 février 2008
Dernière intervention
16 mars 2008
24 févr. 2008 à 19:53
0
Merci
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
Commenter la réponse de julienen
Messages postés
9
Date d'inscription
dimanche 24 février 2008
Dernière intervention
16 mars 2008
24 févr. 2008 à 19:55
0
Merci
mais je ne suis pas sur de l'application quand je mets testSommeDesCarres (5 ,5, 5 ) , car m et p ne valent pas 5
Commenter la réponse de julienen
Messages postés
7668
Date d'inscription
samedi 5 novembre 2005
Dernière intervention
22 août 2014
24 févr. 2008 à 22:19
0
Merci
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
Commenter la réponse de jmfmarques

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.