rouday55
Messages postés40Date d'inscriptionjeudi 28 février 2008StatutMembreDernière intervention 8 décembre 2011
-
5 mars 2008 à 18:50
us_30
Messages postés2065Date d'inscriptionlundi 11 avril 2005StatutMembreDernière intervention14 mars 2016
-
6 mars 2008 à 22:15
hello !
je suis donc a ma 4eme heure de programmation en VBa et j'ai trouvé quelques exercices mais certaines réponses me sont introuvables pouvez m'aider s il vous plait?
1) Ecrire une fonction recursive valeurPuissanceRec (VPR) qui étant donnés un nombre x et un exposant n (positif ou negatif) calcule x puissance n en faisant n multiplications successives
2) Ecrire une fonction itérative valeurPuissanceIte (VPI) qui étant donnés un nombre x et un exposant n (positif ou negatif) calcule x puissance n en faisant n multiplications successives
3)Ecrire une fonction recursive valeurPuissanceRecBis (VPRB) répondant a la meme spécification, qui ne fait que log_2(n)multiplications pour calculer x puissance n
4) Ecrire une fonction itérative valeurPuissanceItTer(VPIT) répondant a la meme spécification, qui ne fait que log_2(n) ( a lire log indice 2) multiplications pour calculer x puissance n
J'ai reussi la premiere et la deuxieme question par contre je ne vois pas du tout pour les 2 dernieres. Merci de m eclairer
rouday55
Messages postés40Date d'inscriptionjeudi 28 février 2008StatutMembreDernière intervention 8 décembre 2011 5 mars 2008 à 22:44
un code comme ca c est bon ?
Function vpn (byval x as long n as long ) as double<?xml:namespace prefix o ns "urn:schemas-microsoft-com:office:office" /??>
Je ne connaissais pas trop les rapports entre les fonctions log et exp. Mais juste une petite derniere question a quoi sert (je connais juste MsgBox mais je ne vois pas ce qu il affiche ici) :
Private Sub Command5_Click()
MsgBox tou(2, 3)
End Sub
?
rouday55
Messages postés40Date d'inscriptionjeudi 28 février 2008StatutMembreDernière intervention 8 décembre 2011 6 mars 2008 à 15:39
En recursion :
Ca donne :
Function puisRec (Byval x as integer, Byval n as integer) as Long
If (n = 0) Then
puisRec = 1
Else
puisRec = puisRec (x, n - 1) * x
End If
End Function
jmfmarques
Messages postés7666Date d'inscriptionsamedi 5 novembre 2005StatutMembreDernière intervention22 août 201427 6 mars 2008 à 17:23
C'est là une fonction récursive et elle est juste ...
Elle ne répond toutefois pas à l'exercice qu'il t'est demandé de faire
pour mémoire :
3)Ecrire une fonction recursive valeurPuissanceRecBis (VPRB) répondant a la meme spécification, qui ne fait que log_2(n)multiplications pour calculer x puissance n
rouday55
Messages postés40Date d'inscriptionjeudi 28 février 2008StatutMembreDernière intervention 8 décembre 2011 6 mars 2008 à 18:55
j'ai fait de la programmation recursive en scheme et je me souviens a peu prés d une définition de la puissance dichotomique; je ne sais pas si le cas peut s appliquer ici; toujours est il que je suis la pour apprendre :)
Function VPRB (byval x as integer, byval n as integer) as long
if n = 0 Then
1<?xml:namespace prefix o ns "urn:schemas-microsoft-com:office:office" /??>
Else
if even ? n Then
((VPRB (x * x) (quotient n 2)))
Else( x *(VPRB (x * x) (quotient n 2)))
End if
end function
jmfmarques
Messages postés7666Date d'inscriptionsamedi 5 novembre 2005StatutMembreDernière intervention22 août 201427 6 mars 2008 à 20:00
Je n'en sais rigoureusement rien... (ce que tu montres n'est pas du VB ...)
Ce que je vois par contre (ou ne vois pas du tout, même), c'est qu'il n'y a là aucune utilisation du logarithme ...
Et la lecture de ton énnoncé me donne à penser que c'est ce qui est attendu (une fonction récursive de multiplication utilisant le logaritme)
Je t'ai montré par ailleurs comment faire de façon itérative en utilisant la multiplication et le logarithme.
Je t'ai précisé que la récursivité serait dans ce cas celle d'une simple multiplication (il te suffit de transformer maintenant l'itérativité en récursivité)...
La chose est simple .... désolé...(je ne compte ni faire cet exercice à ta place, ni continuer à répondre à tes différentes tentatives en te disant si "c'est bon, çà" ou "c'est pas bon, çà"... C'est (je te le rappelle) un exercice que TU dois faire ... et il est fort simple !
rouday55
Messages postés40Date d'inscriptionjeudi 28 février 2008StatutMembreDernière intervention 8 décembre 2011 6 mars 2008 à 21:59
oui merci pour ton aide c est tres gentil. Ce que je pense c est qu il ne faut pas utiliser le log en fait mais en realité il y a plusieurs facons de calculer x a la puissance n. Suivant les codes différents le programme fait plus ou moins de calculs plus ou moins rapidement. Par exemple on peut calculer x a la puissance n en passant par la fonction x au carré. A partir de la il n y a donc qu une seule évalutation de x puissance n/2. Il y a une facon de programmer un code qui ne fera que log2(n) opérations. Enfin voilou c est pour ca que je bloque mais je finirai par debloquer
bonne soirée et merci encore.
us_30
Messages postés2065Date d'inscriptionlundi 11 avril 2005StatutMembreDernière intervention14 mars 201610 6 mars 2008 à 22:15
Bonsoir à tous,
Oh, là... Jmfmarques tu t'égares, me semble-t-il...
La substance de la question est :
"Ecrire une fonction qui en log_2(n) multiplications donne x puissance n"
ensuite, on doit la décliner comme on veut (itératif ou récursif)...
L'utilisation du LOG pour le calcul de x^n, est possible mais ne répond pas à la question, car on doit faire n opérations, et non log2(n) opérations... c'est toute la nuance, il me semble...
Le seule algorithme possible est l'exponentiation rapide ou dichotomique (c'est juste une différence d'appellation)...
IL existe 2 sources sur VBF, et un snippets, comme exemple... il suffit de rechercher un petit peu...