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 :

Structures et tableaux [Débutant]


Sujet :

VB.NET

  1. #1
    Membre actif Avatar de stracoma
    Homme Profil pro
    Médecin
    Inscrit en
    Août 2013
    Messages
    413
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : Maroc

    Informations professionnelles :
    Activité : Médecin

    Informations forums :
    Inscription : Août 2013
    Messages : 413
    Points : 229
    Points
    229
    Par défaut Structures et tableaux
    Bonsoir à vous. J'ai besoin de votre aide.
    Ce code marche bien:

    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
    Module Module1
        Dim tablo() As Employer
     
        Public Structure ddn
            Public jour As Integer
            Public mois As String
            Public annnee As Integer
     
        End Structure
        Public Structure Employer
            Public nom As String
            Public salaire As Double
            Public sadate As ddn
     
            Public Sub New(ByVal nnom As String, ByVal ssalaire As Double, ByVal jjour As Integer, ByVal mmois As String, ByVal aannee As Integer)
                Me.nom = nnom
                salaire = ssalaire
                sadate.jour = jjour
                sadate.mois = mmois
                sadate.annnee = aannee
            End Sub
     
        End Structure
        Sub Main()
            Dim p1 As New Employer("Sarah", 7500, 28, "mars", 1979)
            ReDim Preserve tablo(0)
            tablo(0) = p1
            Dim p2 As New Employer("Nadine", 55000, 17, "fevrier", 1983)
            ReDim Preserve tablo(1)
            tablo(1) = p2
            Dim p3 As New Employer("kamal", 54500, 20, "avril", 1980)
            ReDim Preserve tablo(2)
            tablo(2) = p3
            Dim p4 As New Employer("Jacques", 56000, 2, "juin", 1985)
            ReDim Preserve tablo(3)
            tablo(3) = p4
            affiche(tablo)
     
            Console.ReadKey()
     
        End Sub
        Public Sub affiche(ByVal ttablo() As Employer)
            For i As Integer = 0 To ttablo.Length - 1
                Console.WriteLine("votre nom est: " & ttablo(i).nom & " et vous gagnez: " & ttablo(i).salaire & " Dh.")
                Console.WriteLine("vous etes ne (e) le " & ttablo(i).sadate.jour & " " & ttablo(i).sadate.mois & " " & ttablo(i).sadate.annnee)
                Console.WriteLine("===========================================")
            Next
     
        End Sub
     
    End Module
    je me suis dit pourquoi après chaque création d'une variable Employer il faut faire: "ReDim tablo" puis "tablo(index)=p"
    N'est il pas possible d'ajouter une instruction dans sub new de la structure Employer, genre:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Public Sub New(ByVal nnom As String, ByVal ssalaire As Double, ByVal jjour As Integer, ByVal mmois As String, ByVal aannee As Integer)
                Me.nom = nnom
                salaire = ssalaire
                sadate.jour = jjour
                sadate.mois = mmois
                sadate.annnee = aannee
                'ReDim tablo(N)
                'tablo(N)= ????
            End Sub
    en déclarant N comme une variable globale
    Merci
    J'apprends la programmation pour le plaisir

  2. #2
    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
    Soit tu connais à l'avance la taille de ton tableau et ainsi tu le Dimensionnes directement à la bonne taille (ça t'éviteras de faire des ReDim Preserve et donc de multiples copies de tableaux "inutiles") ; soit tu ne connais pas la taille à l'avance et alors tu utilises un conteneur dynamique (par ex: un List(Of Employe))
    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.

  3. #3
    Membre actif Avatar de stracoma
    Homme Profil pro
    Médecin
    Inscrit en
    Août 2013
    Messages
    413
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : Maroc

    Informations professionnelles :
    Activité : Médecin

    Informations forums :
    Inscription : Août 2013
    Messages : 413
    Points : 229
    Points
    229
    Par défaut
    Merci pour la réponse.
    J'ai choisi de donner à l'avance une taille fixe à mon tableau "tablo(3)", mon problème c'est que je ne sais pas quoi assigner à tablo(N):
    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
    Module Module1
        Dim tablo(3) As Employer
        Dim N As Integer = 0
        Public Structure ddn
            Public jour As Integer
            Public mois As String
            Public annnee As Integer
     
        End Structure
        Public Structure Employer
            Public nom As String
            Public salaire As Double
            Public sadate As ddn
     
            Public Sub New(ByVal nnom As String, ByVal ssalaire As Double, ByVal jjour As Integer, ByVal mmois As String, ByVal aannee As Integer)
                nom = nnom
                salaire = ssalaire
                sadate.jour = jjour
                sadate.mois = mmois
                sadate.annnee = aannee
                tablo(N) = ?????????? que dois-je écrire ici
                N += 1
            End Sub
     
        End Structure
        Sub Main()
            Dim p1 As New Employer("Sarah", 7500, 28, "mars", 1979)
            'ReDim Preserve tablo(0)
            'tablo(0) = p1
            Dim p2 As New Employer("Nadine", 55000, 17, "fevrier", 1983)
            'ReDim Preserve tablo(1)
            'tablo(1) = p2
            Dim p3 As New Employer("kamal", 54500, 20, "avril", 1980)
            'ReDim Preserve tablo(2)
            'tablo(2) = p3
            Dim p4 As New Employer("Jacques", 56000, 2, "juin", 1985)
            'ReDim Preserve tablo(3)
            ''tablo(3) = p4
            affiche(tablo)
     
            Console.ReadKey()
     
        End Sub
        Public Sub affiche(ByVal ttablo() As Employer)
            For i As Integer = 0 To ttablo.Length - 1
                Console.WriteLine("votre nom est: " & ttablo(i).nom & " et vous gagnez: " & ttablo(i).salaire & " Dh.")
                Console.WriteLine("vous etes ne (e) le " & ttablo(i).sadate.jour & " " & ttablo(i).sadate.mois & " " & ttablo(i).sadate.annnee)
                Console.WriteLine("===========================================")
            Next
     
        End Sub
     
    End Module
    J'apprends la programmation pour le plaisir

  4. #4
    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
    Faut surtout que t'arrêtes de vouloir faire "des choses" dans le constructeur ; un constructeur ça sert à construire UNE instance.
    Donc c'est dans ton Main que tu obtiens tes instances (via appel du constructeur) et donc c'est dans ton Main que tu les ajoutes à ton tableau
    Code Pseudo-Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    tab <- tableau d'indices 0 à 3
    n <- 0
     
    Main ()
        emp <- Nouvel Employe
        tab[n] <- emp
        n <- n + 1
     
        emp <- Nouvel Employe
        tab[n] <- emp
        n <- n + 1
     
        etc... (avec sans doute vérification de quand n dépasse la taille du tableau)
    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.

  5. #5
    Membre actif Avatar de stracoma
    Homme Profil pro
    Médecin
    Inscrit en
    Août 2013
    Messages
    413
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : Maroc

    Informations professionnelles :
    Activité : Médecin

    Informations forums :
    Inscription : Août 2013
    Messages : 413
    Points : 229
    Points
    229
    Par défaut
    si je dois écrire ce code après chaque new empoyer, je préfère conserver mon tout premier code, sauf si ne pas bien assimiler votre proposition
    J'apprends la programmation pour le plaisir

  6. #6
    Expert confirmé
    Inscrit en
    Avril 2008
    Messages
    2 564
    Détails du profil
    Informations personnelles :
    Âge : 64

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 564
    Points : 4 441
    Points
    4 441
    Par défaut
    bonjour
    Tu peux le DECLARER avec la dimension max voulu et lui ASSIGNER un tableau temporaire TempArray -de n'importe quelle dimension à l'execution avec la methode shared API :
    - Array.Copy(arrSRC,arrDST, lengthDest) ...Le fait de specifier lengthDST a pour effet d'ignorer les elements SUPERFLUS du tempArray ...
    De plus l'initialisation des tableaux peut etre abrege quand meme sinon nous deviendrons "des machines à ecrire Remington" avant la quarantaine :
    code reamenage pour affichage sur un form avec un button ,un textbox :

    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
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
     
     Module Module1
     
        Public MaxEmploye As Integer = 4 'compteur
        Public ArrEmployes(MaxEmploye - 1) As Employe 'note le -1 sinon vb.net cree un tableau de 5 elements(en csharp on met 4 tout court)
        Public Structure DDN
            Public Jour As Integer
            Public Mois As String
            Public Anne As Integer
     
        End Structure
        Public Structure Employe
            Public Nom As String
            Public Salaire As Double
            Public DateNaissance As DDN
     
            Public Sub New(ByVal ONom As String, ByVal OSalaire As Double, ByVal OJour As Integer, ByVal OMois As String, ByVal OAnne As Integer)
                Nom = ONom
                Salaire = OSalaire
     
                DateNaissance.Jour = OJour
                DateNaissance.Mois = OMois
                DateNaissance.Anne = OAnne
     
            End Sub
     
        End Structure
        'Sub Main()
        '    Dim p1 As New Employe("Sarah", 7500, 28, "mars", 1979)
        '    ArrEmployes(N) = p1
     
     
        '    Dim p2 As New Employe("Nadine", 55000, 17, "fevrier", 1983)
        '    ArrEmployes(N) = p2
        '    Dim p3 As New Employe("kamal", 54500, 20, "avril", 1980)
        '    ArrEmployes(N) = p3
        '    Dim p4 As New Employe("Jacques", 56000, 2, "juin", 1985)
        '    ArrEmployes(N) = p4
        '    Affiche(ArrEmployes)
     
     
     
        'End Sub
        Public Sub Affiche(ByVal arrEmp() As Employe)
            For i As Integer = 0 To arrEmp.Length - 1
                Console.WriteLine("votre nom est: " & arrEmp(i).Nom & " et vous gagnez: " & arrEmp(i).Salaire & " Dh.")
                Console.WriteLine("vous etes ne (e) le " & arrEmp(i).DateNaissance.Jour & " " & arrEmp(i).DateNaissance.Mois & " " & arrEmp(i).DateNaissance.Anne)
                Console.WriteLine("===========================================")
            Next
     
        End Sub
     
    End Module
     
    'le form
     
    'LE FORM
     
    Imports System.Text
     
    Public Class frmStracomma
        Private tempArray() As Employe
        Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
            Dim p1 As New Employe("Sarah", 7500, 28, "mars", 1979)
            Dim p2 As New Employe("Nadine", 55000, 17, "fevrier", 1983)
            Dim p3 As New Employe("kamal", 54500, 20, "avril", 1980)
            Dim p4 As New Employe("Jacques", 56000, 2, "juin", 1985)
            Dim p5 As New Employe("Jacquot", 1000, 2, "aout", 1993)
            Dim p6 As New Employe("Abacus", 12000, 13, "decembre", 2001)
            tempArray = New Employe() {p1, p2, p3, p4, p5, p6}
     
            Array.Copy(tempArray, ArrEmployes, ArrEmployes.Length)
     
     
            Affiche(ArrEmployes)
     
     
        End Sub
        Private sb As New StringBuilder
        Private Sub Affiche(ByVal arrEmp() As Employe)
            sb.Clear()
            For i As Integer = 0 To arrEmp.Length - 1
                sb.AppendLine("votre nom est: " & arrEmp(i).Nom & " et vous gagnez: " & arrEmp(i).Salaire & " Dh.")
                'Console.WriteLine("votre nom est: " & arrEmp(i).Nom & " et vous gagnez: " & arrEmp(i).Salaire & " Dh.")
                sb.AppendLine("vous etes ne (e) le " & arrEmp(i).DateNaissance.Jour & " " & arrEmp(i).DateNaissance.Mois & " " & arrEmp(i).DateNaissance.Anne)
                'Console.WriteLine("vous etes ne (e) le " & arrEmp(i).DateNaissance.Jour & " " & arrEmp(i).DateNaissance.Mois & " " & arrEmp(i).DateNaissance.Anne)
                sb.AppendLine("===========================================")
                'Console.WriteLine("===========================================")
     
            Next
            sb.AppendLine(" les recrutements sont supendus pour cause de crise....!!!")
            TextBox1.Text = sb.ToString
        End Sub
     
    End Class
    Cela illustre aussi la Remarque de Sehnsucht car le fait que l'array employe soit dans le meme module que le class employe ne veut pas dire confondre 2 roles differents:
    -le class employe a pour role d'etre un store ou magasin qui gere UN employe ...
    -l'array employe a pour role d'etre un store plus grand qui gere PUSIEURS employes ...
    D'ailleurs l'array employe justifie dans des scenarios courants un class à part tres complexe....

  7. #7
    Membre actif Avatar de stracoma
    Homme Profil pro
    Médecin
    Inscrit en
    Août 2013
    Messages
    413
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : Maroc

    Informations professionnelles :
    Activité : Médecin

    Informations forums :
    Inscription : Août 2013
    Messages : 413
    Points : 229
    Points
    229
    Par défaut
    Merci MABROUKI
    J'étudie encore ton code. Je dois aller consulter le tuto pour array.copie (je l'ignore)
    NB: j’aurais aimé que vous restiez en console. je suis débutant, avec form button textbox ... je me sens perdu
    J'apprends la programmation pour le plaisir

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

Discussions similaires

  1. probleme pour structure et tableaux
    Par yassin123441 dans le forum C++
    Réponses: 1
    Dernier message: 18/06/2008, 01h11
  2. Type Structuré et Tableaux
    Par Aurazed dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 30/05/2007, 22h45
  3. [C++/CLI]Structures et tableaux en C++ .NET
    Par kinouseb dans le forum C++/CLI
    Réponses: 2
    Dernier message: 08/12/2006, 14h01
  4. [XSD]Créer structure de tableaux
    Par blastobi dans le forum Valider
    Réponses: 4
    Dernier message: 07/04/2006, 11h29
  5. Structures et tableaux, la galère
    Par kameha dans le forum C
    Réponses: 10
    Dernier message: 05/01/2006, 17h31

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