IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

VB.NET Discussion :

somme intervalle [a,]


Sujet :

VB.NET

  1. #1
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2011
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2011
    Messages : 2
    Par défaut somme intervalle [a,]
    Bonjour, j'aimerais calculer la somme des entiers d’un intervalle [a,b].
    J'aimerais en déduire un projet VB.net utilisant une fonction "Somme" et construire une version récursive de cette fonction "Somme". Voilà ce que j'ai déjà mis pour mes 2 fonctions. Malheureusement, elle ne fonctionne pas. Pourriez-vous m'aider ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    Function SommeIterative(ByVal A As Integer, ByVal B As Integer) As Long
    Dim I As Integer
    SommeIterative = 0
    For I = A To B
    SommeIterative = SommeIterative + I
    Next
     
    End Function
     
     
    Function SommeRecursive(ByVal A As Integer, ByVal B As Integer) As Long
    If B = 0 Then
    SommeRecursive = 0
    Else
    SommeRecursive = B + SommeRecursive(B - A)
    End If
     
    End Function
    Voilà ce que j'ai comme code pour mon bouton calculer :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Private Sub BtnCalculer_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BtnCalculer.Click
    Dim A, B As Integer
    A = TxtA.Text
    B = TxtB.Text
     
    If RdBtnIterative.Checked Then
     
    TxtSomme.Text = SommeIterative(A, B)
    Else
    TxtSomme.Text = SommeRecursive(A, B)
     
    End If
    Si quelqu'un pouvez m'aider, ce serait très gentil SVP. Merci d'avance !

  2. #2
    Membre Expert Avatar de DonQuiche
    Inscrit en
    Septembre 2010
    Messages
    2 741
    Détails du profil
    Informations forums :
    Inscription : Septembre 2010
    Messages : 2 741
    Par défaut
    Bonsoir.

    Le premier algo est correct ce n'est que le VB qui semble pêcher (je connais mal ce langage). Visiblement, tu utilises une variable du même nom que la fonction (premier problème) et qui n'a pas été déclarée (via Dim, second problème).

    Le second algo, en revanche, est foireux : tu te retrouves à appeler avec un seul argument une fonction à deux arguments, etc.
    * D'abord, pour te mettre sur la piste, remplit simplement les blancs (underscores) : Somme(A, B) = A + Somme(_, _).
    * Une fois que ce sera fait, demande-toi quelle devrait être la condition de sortie de la récursivité : quel couple d'arguments garantit que nous avons terminé. Tu peux déjà oublier l'idée du zéro comme cas particulier ici.


    Enfin, tes deux fonctions doivent retourner un résultat (via l'instruction Return), qui sera un nombre, et qui devra ensuite être converti en chaîne avec ToString() (dans BtnCalculer_Click).

  3. #3
    Expert éminent Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 204
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 204
    Par défaut
    le 1er algo est bon même dans le code

    pour donquiche, l'héritage de vb6 fait que dans une fonction il y a une variable implicite du même nom (qui est donc déclaré)
    et sans return, ca fonctionne aussi c'est cette même variable qui est retourné
    avec l'utilisation de return, la variable est ignorée

    pour usher_119 maintenant on écrit plutot

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    function sommeIter(a,b)
      dim somme as integer
      'calcul
      return somme
    end function
    comme tu peux le constater, le forum permet la mise en forme du code (bouton # dans l'interface d'édition de message)

    après ce que veut dire donquiche aussi, c'est que vb te laisse écrire des trucs qui pourront planter à la compilation
    A = TxtA.Text
    a est un nombre et tu mets du texte dedans, il faut passer par une conversion, genre integer.tryparse
    TxtSomme.Text = SommeRecursive(A, B)
    et là inversement tu met un entier dans un string, ca va passser à tous les coups, mais en général on écrit TxtSomme.Text = SommeRecursive(A, B).ToString

    pour la récursivité, il faut qu'à chaque tour tu connaisses la valeur actuelle de la récursivité et le paramètre de fin

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
     Function sommeRecur(current As Integer, fin As Integer) As Integer
            If current = fin Then Return current ' condition de sortie
     
            Return sommeRecur(current + 1, fin) + current
        End Function
    c'est être plus simple à comprendre pour un débutant avec un paramètre byref qui contient le total et qui est modifié dans le corps de la fonction (qui peut du coup être une méthode)
    (byref signifie que si on modifie la valeur dans la méthode, la valeur dans l'appelant est modifiée aussi, avec byval ce n'est pas le cas)


    chez moi le code de ta première fonctionne, il peut néanmoins être simplifié :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     Function SommeIterative(ByVal A As Integer, ByVal B As Integer) As Long
            For I As Integer = A To B
                SommeIterative += I
            Next
        End Function
    une variable nombre vaut toujours 0 à sa création
    += permet d'incrémenter de la valeur qui suit
    on peut déclarer (et typer) une variable au sein de la déclaration FOR, elle devient inaccessible après la boucle
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

Discussions similaires

  1. [XL-2003] Intervalle dans fonction SOMME(DECALER))
    Par tranzebou dans le forum Excel
    Réponses: 4
    Dernier message: 26/08/2009, 16h58
  2. [Débutant] faire la somme selon intervalle de temps
    Par nonolt dans le forum MATLAB
    Réponses: 2
    Dernier message: 14/05/2009, 15h44
  3. [XL-2002] somme du nbre d'éléments compris dans un intervale
    Par polynesian turtle dans le forum Excel
    Réponses: 2
    Dernier message: 06/04/2009, 14h05
  4. Réponses: 3
    Dernier message: 01/04/2009, 11h51
  5. [Requête] somme d'un champ selon une intervalle choisie
    Par syldudu dans le forum Requêtes et SQL.
    Réponses: 14
    Dernier message: 25/01/2007, 11h44

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo