Module VB.net

IchigoKen90 -  
Patrice33740 Messages postés 8400 Date d'inscription   Statut Membre Dernière intervention   -
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

  1. Patrice33740 Messages postés 8400 Date d'inscription   Statut Membre Dernière intervention   1 783
     
    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
  2. IchigoKen90
     
    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
  3. Patrice33740 Messages postés 8400 Date d'inscription   Statut Membre Dernière intervention   1 783
     
    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