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

Windows Forms Discussion :

fonction retournant un tableau


Sujet :

Windows Forms

  1. #1
    Membre régulier
    Inscrit en
    Août 2009
    Messages
    143
    Détails du profil
    Informations forums :
    Inscription : Août 2009
    Messages : 143
    Points : 74
    Points
    74
    Par défaut fonction retournant un tableau
    Salut tout le monde

    S'il vous plait quelqu'un peut-il me dire comment déclarer une fonction pour qu'elle retourne un tableau?

    merci

  2. #2
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 12
    Points : 11
    Points
    11
    Par défaut
    tiens un petit bout de code qui devrait t'aider. Je ne sais pas si c'est la meilleur solution mais ça marche.

    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
     
     
        Public Sub recupereTableau()
            Dim tableauControl(,) As Object = New String(,) {}
            tableauControl = retourneTableau()
     
        End Sub
     
        Public Function retourneTableau()
            Dim tableauARetourner(1, 1)
            tableauARetourner(0, 0) = "ligne 0 colonne 0"
            tableauARetourner(0, 1) = "ligne 0 colonne 1"
            tableauARetourner(1, 0) = "ligne 1 colonne 0"
            tableauARetourner(1, 1) = "ligne 1 colonne 1"
            Return (tableauARetourner)
        End Function

  3. #3
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 749
    Points
    39 749
    Par défaut
    Citation Envoyé par SandyF Voir le message
    Salut tout le monde

    S'il vous plait quelqu'un peut-il me dire comment déclarer une fonction pour qu'elle retourne un tableau?

    merci
    Qu'est-ce que tu veux dire par "retourner" ? transposer ? inverser l'ordre des éléments ? pour un tableau à combien de dimensions ? Donne plus de détails sur ce que tu veux faire...

  4. #4
    Membre régulier
    Inscrit en
    Août 2009
    Messages
    143
    Détails du profil
    Informations forums :
    Inscription : Août 2009
    Messages : 143
    Points : 74
    Points
    74
    Par défaut
    Citation Envoyé par tomlev Voir le message
    Qu'est-ce que tu veux dire par "retourner" ? transposer ? inverser l'ordre des éléments ? pour un tableau à combien de dimensions ? Donne plus de détails sur ce que tu veux faire...

    Par retourner un tableau, j'entend fournir un tableau comme résultat. j'ai essayé un truc mais j'ai cet avertissement en retour:

    Avertissement 1: La fonction 'ReconnaissanceMur' ne retourne pas une valeur pour tous les chemins de code. Une exception de référence null peut se produire au moment de l'exécution lorsque le résultat est utilisé.
    Voilà la déclaration de ma fonction:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
     
    Public Function ReconnaissanceMur(ByVal i As Integer, ByVal j As Integer, ByVal tablo As modAnt, ByVal obs(,) As Integer) As Integer()
    De plus quand je fais
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
     
    Dim mat(9) As Integer
    mat = ReconnaissanceMur(i, j, posAnt(w), obstacl)
     
     
                        For nb = 1 To UBound(mat)
     
                        Next
    j

    j'ai l'erreur :

    l'exception ArgumentNullException n'a pas été gérée
    ce qui me surprend, vu qu'à ma connaissance lorsqu'on déclare un tableau de integer, il est initialisé à zéro et non à Nothing

  5. #5
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 749
    Points
    39 749
    Par défaut
    Citation Envoyé par SandyF Voir le message
    Par retourner un tableau, j'entend fournir un tableau comme résultat.
    Ah, tout simplement... j'avais mal interprété le sens de la phrase

    Avertissement 1: La fonction 'ReconnaissanceMur' ne retourne pas une valeur pour tous les chemins de code. Une exception de référence null peut se produire au moment de l'exécution lorsque le résultat est utilisé.
    Ca veut dire que le code de ta fonction ne gère pas tous les cas, et il est possible que dans certains cas elle ne renvoie pas de valeur. Fais voir le code de cette fonction

    Citation Envoyé par SandyF Voir le message
    ce qui me surprend, vu qu'à ma connaissance lorsqu'on déclare un tableau de integer, il est initialisé à zéro et non à Nothing
    En VB6 c'était le cas. En VB.NET il faut l'initialiser explicitement avec New

  6. #6
    Membre régulier
    Inscrit en
    Août 2009
    Messages
    143
    Détails du profil
    Informations forums :
    Inscription : Août 2009
    Messages : 143
    Points : 74
    Points
    74
    Par défaut
    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
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
     
     
    Public Function ReconnaissanceMur(ByVal i As Integer, ByVal j As Integer, ByVal tablo As modAnt, ByVal obs(,) As Integer) As Integer()
            'Fonction permettant de déterminer les obstacles rencontrés par un rayon émetteur-récepteur.Ce résultat est transmis par le vecteur matr
            Dim abs, ord, ptitAbs, grdAbs, ptitOrd, grdOrd, u, v As Integer
            Dim a, b As Double
            Dim matr(9) As Integer
     
            abs = CInt(Round(tablo.x / K)) : ord = CInt(Round(tablo.y / K))
     
            If i <= abs Then
                ptitAbs = i
                grdAbs = abs
            Else
                ptitAbs = abs
                grdAbs = ord
            End If
     
            If j <= ord Then
                ptitOrd = j
                grdOrd = ord
            Else
                ptitOrd = ord
                grdOrd = j
            End If
     
            If (ptitAbs = grdAbs) And (ptitOrd = grdOrd) Then
                Return matr
            Else
                If ptitAbs = grdAbs Then
                    For v = ptitOrd To grdOrd
                        matr(obstacl(grdAbs, v)) += 1
                        Return matr
                    Next
                Else
                    If ptitOrd = grdOrd Then
                        For v = ptitAbs To grdOrd
                            matr(obstacl(u, grdOrd)) += 1
                            Return matr
                        Next
                    Else
                        a = (grdOrd - ptitOrd) / (grdAbs - ptitAbs)
                        b = (ptitOrd * grdAbs - grdOrd * ptitAbs) / (grdAbs - ptitAbs)
     
                        For u = ptitAbs To grdAbs
                            For v = ptitOrd To grdOrd
                                If v = a * u + b Then
                                    matr(obstacl(u, v)) += 1
                                    Return matr
                                End If
                            Next
                        Next
     
                    End If
                End If
            End If
        End Function
    Cette fonction permet de déterminer les obstacles rencontrés par un segment de droite entre deux points .

    Pour ce qui est de l'initialisation avec new, j' ai fais un débogage avec point d'arrêt situé juste avant l'appel de la fonction reconnaissanceMur, là je n'ai aucune erreur

  7. #7
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 749
    Points
    39 749
    Par défaut
    Ah oui, si tu spécifies la taille ça crée bien le tableau...

    Par contre dans certains cas tu ne renvoies pas matr, le résultat de la fonction est donc indéfini. Ajoute juste un Return matr à la fin de la fonction, ça devrait régler le problème

  8. #8
    Membre chevronné
    Avatar de Sehnsucht
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Octobre 2008
    Messages
    847
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Lot et Garonne (Aquitaine)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Octobre 2008
    Messages : 847
    Points : 2 209
    Points
    2 209
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    For v = ptitOrd To grdOrd
    matr(obstacl(grdAbs, v)) += 1
    Return matr
    Next
    Attention à ce moment tu retourne matr dès le premier tour de boucle, je pense que le code devrait plutôt ressembler à ça:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    For v = ptitOrd To grdOrd
    matr(obstacl(grdAbs, v)) += 1
    Next
    Return matr
    Cela t'arrive plusieurs fois dans ta fonction
    Nous sommes tous plus ou moins geek : ce qui est inutile nous est parfaitement indispensable ( © Celira )
    À quelle heure dormez-vous ?
    Censément, quelqu'un de sensé est censé s'exprimer sensément.

  9. #9
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 749
    Points
    39 749
    Par défaut
    Citation Envoyé par Sehnsucht Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    For v = ptitOrd To grdOrd
    matr(obstacl(grdAbs, v)) += 1
    Return matr
    Next
    Attention à ce moment tu retourne matr dès le premier tour de boucle, je pense que le code devrait plutôt ressembler à ça:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    For v = ptitOrd To grdOrd
    matr(obstacl(grdAbs, v)) += 1
    Next
    Return matr
    Cela t'arrive plusieurs fois dans ta fonction
    effectivement, j'avais même pas fait gaffe...

  10. #10
    Membre régulier
    Inscrit en
    Août 2009
    Messages
    143
    Détails du profil
    Informations forums :
    Inscription : Août 2009
    Messages : 143
    Points : 74
    Points
    74
    Par défaut
    Ah oui, en effet l'ajout de
    return matr
    en fin de de fonction résout le problème, je n'ai plus aucun message d'avertissement.
    Merci de votre aide

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 24
    Dernier message: 24/05/2006, 19h19
  2. Fonction retournant un tableau initialisé
    Par ero-sennin dans le forum Delphi
    Réponses: 6
    Dernier message: 13/05/2006, 16h05
  3. [TP] Fonction retournant un tableau
    Par molesqualeux dans le forum Turbo Pascal
    Réponses: 8
    Dernier message: 07/05/2006, 01h01
  4. PB avec fonction retournant un tableau
    Par T-B dans le forum Langage
    Réponses: 2
    Dernier message: 27/01/2006, 22h01
  5. fonction retournant un tableau
    Par Jero13 dans le forum C
    Réponses: 7
    Dernier message: 22/11/2005, 11h14

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