Module VB.net

Fermé
IchigoKen90 - Modifié par IchigoKen90 le 26/08/2011 à 17:39
Patrice33740 Messages postés 8556 Date d'inscription dimanche 13 juin 2010 Statut Membre Dernière intervention 2 mars 2023 - 28 août 2011 à 14:28
Bonjour,

Voici le code de mon formulaire :

Public Class FrmFonctionsMathematiques

Private Sub BtnCalculer_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BtnCalculer.Click
If RdBtnIterative.Checked Then
If RdBtnSomme.Checked Then
TxtResultat.Text = SommeIterative(TxtN.Text)
Else
TxtResultat.Text = FactorielleIterative(TxtN.Text)
End If
Else
If RdBtnSomme.Checked Then
TxtResultat.Text = SommeRecursive(TxtN.Text)
Else
TxtResultat.Text = FactorielleRecursive(TxtN.Text)
End If
End If
End Sub

Private Sub TxtN_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles TxtN.KeyPress
If IsNumeric(e.KeyChar) Or Asc(e.KeyChar) = 8 Then
Else
e.Handled = True
End If
End Sub
End Class


Jusque là aucun soucis j'ai tout compris. (miracle)

Mais voici ce qui pose problème, le module :

Module ModuleFonctionsMathematiques
Function SommeIterative(ByVal N As Integer) As Integer
Dim I As Integer
SommeIterative = 0
For I = 1 To N
SommeIterative = SommeIterative + I
Next
'Return S
End Function

Function FactorielleIterative(ByVal N As Integer) As Long
Dim I As Integer
FactorielleIterative = 1
For I = 1 To N
FactorielleIterative = I * FactorielleIterative
Next I
'Return Fact
End Function
Function SommeRecursive(ByVal N As Integer) As Long
If N = 0 Then
SommeRecursive = 0
Else
SommeRecursive = N + SommeRecursive(N - 1)
End If
End Function
Function FactorielleRecursive(ByVal N As Integer) As Long
If N = 0 Then
FactorielleRecursive = 1
Else
FactorielleRecursive = N * FactorielleRecursive(N - 1)
End If
End Function
End Module

Tout d'abord, pourquoi y a t'il un Integer et 3 Long, quelle est la différence qui fais que cette fonction n'utilise pas "Long" comme les autres?

Les apostrophes qui montrent 'Return S et 'Return Fact. Qu'indiquent t'elles?

Je ne sais pas ce que sont les recursives et iteratives... et les calculs avec les N et les I m'échappent.

Bref enormément de soucis qui je l'espère pourront m'être expliqués par vous.

Merci d'avance,
Bien à vous.

4 réponses

Patrice33740 Messages postés 8556 Date d'inscription dimanche 13 juin 2010 Statut Membre Dernière intervention 2 mars 2023 1 776
26 août 2011 à 19:46
Bnjour,

1 - Pour être cohérent il faut écrire :
Function SommeIterative(ByVal N As Integer) As Long

2 - Itératif et récursif donnent le même résultat, c'est la méthode qui change :
- Itératif, la fonction calcule tous les résultats, elle nécessite une variable intermédiaire (I)
- Récursif : la fonction s'auto - appelle autant de fois que nécessaire (jusqu'à ce que le résultat soit une valeur pré-déterminée) pour calculer le résultat global. Pas besoin de variable intermédiaire mais il y a un risque d'atteindre les limites de la pile d'appel de sous-programmes.

3 - les apostrophes sont des commentaires du concepteur

4 - N est l'argument de la fonction

1
Merci beaucoup !
0
En fait j'aurais besoin de quelques précisions encore,
Voici l'algorithme

Debut
Lire N
S = 0
Pour I allant de 1 à N faire
S = S + I
FPour
Ecrire S
Fin


Je ne comprend pas le "Pour FPour"

Merci d'avance pour ces précisions.
0
Patrice33740 Messages postés 8556 Date d'inscription dimanche 13 juin 2010 Statut Membre Dernière intervention 2 mars 2023 1 776
28 août 2011 à 14:28
Bonjour,

Pour I allant de 1 à N faire
....
FPour
Signifie :
Répéter (Boucler sur) toutes les instructions situées entre le 'faire' et le ''Fpour' en faisant varie I, à chaque boucle, de 1 jusqu'à N.
C'est-à-dire :
S=S+1 puis
S=S+2 puis
S=S+3 puis
...
S=S+N

L'algo, traduit en VB, pourrait donner :
Sub XXX()                       'Debut
  N = Val(InputBox("Entrer N")) 'Lire N
  S = 0                         'S = 0
  For I = 0 To N                'Pour I allant de 1 à N faire
    S = S + I                   'S = S + I
  Next I                        'FPour
  MsgBox S                      'Ecrire S
End Sub                         'Fin
0