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 :

Calcul sur tableau bidimensionnel


Sujet :

VB.NET

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Février 2008
    Messages
    113
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 113
    Points : 58
    Points
    58
    Par défaut Calcul sur tableau bidimensionnel
    Bonjour à tous.

    Je vous expose mon problème :
    J'ai un tableau à 2 dimensions, la première colonne me sert d'index et la seconde contient des valeurs calculées. Donc je stocke mes calculs dans ce tableau.
    Mais je voudrai faire un tri sur cette 2ième colonne afin de vérifier s'il n'y a pas de valeurs identiques (ce sont des Integer) et que je retourne un message d'erreur si tel est le cas.

    Mais voila je ne sais pas comment faire ce tri dans mon tableau...

    Il y aurait-il une âme charitable afin de m'éclairer.

    Merci d'avance

  2. #2
    Expert confirmé
    Avatar de Aspic
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2005
    Messages
    3 905
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Août 2005
    Messages : 3 905
    Points : 4 388
    Points
    4 388
    Par défaut
    Utilise plutot une SortedList ! C'est un tableau bidimentionnel et comme son nom l'indique, il trie automatiquement les valeurs

    Génial non ?
    Qui ne tente rien n'a rien !
    Ce qui ne nous tue pas nous rends plus fort !!
    Mon projet ZELDA en C++/Allegro
    http://www.tutoworld.com - Le Forum -
    Mes ressources Dotnet (cours, sources, tutos)
    --------------------------------------------
    + + =

    Ne pas oublier le Tag !

  3. #3
    Membre averti
    Homme Profil pro
    Freelance
    Inscrit en
    Février 2008
    Messages
    312
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Freelance

    Informations forums :
    Inscription : Février 2008
    Messages : 312
    Points : 390
    Points
    390
    Par défaut
    si c'est juste pour verifier que y a pas de valeur identique, ta qu'a compare chaque valeur avec les autres et dès que 2 valeur sont identique tu met ton message d'erreur et tu sort de ta boucle
    je te le fait en algo
    pour i de 0 à nbligne ( l'index de ta derniere ligne logiquement )
    pour j de i+1 à nbligne
    si tab(2 'ta colonne valeur, i)=tab(2, j) alors
    afficher("erreur")
    'on sort de la boucle
    fin si
    fin pour
    fin pour
    y a peut-etre des erreurs dans l'algo a verifier!

  4. #4
    Membre averti
    Homme Profil pro
    Freelance
    Inscrit en
    Février 2008
    Messages
    312
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Freelance

    Informations forums :
    Inscription : Février 2008
    Messages : 312
    Points : 390
    Points
    390
    Par défaut
    finalement la méthode d'aspic est surement plus approprié

  5. #5
    Expert confirmé
    Avatar de Aspic
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2005
    Messages
    3 905
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Août 2005
    Messages : 3 905
    Points : 4 388
    Points
    4 388
    Par défaut
    Bah oui puisque la SortedList fait déjà tout le boulot

    N'oublie pas le tag
    Qui ne tente rien n'a rien !
    Ce qui ne nous tue pas nous rends plus fort !!
    Mon projet ZELDA en C++/Allegro
    http://www.tutoworld.com - Le Forum -
    Mes ressources Dotnet (cours, sources, tutos)
    --------------------------------------------
    + + =

    Ne pas oublier le Tag !

  6. #6
    Membre du Club
    Profil pro
    Inscrit en
    Février 2008
    Messages
    113
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 113
    Points : 58
    Points
    58
    Par défaut
    OK, merci bien, je test et je reviens mettre résolu

  7. #7
    Membre du Club
    Profil pro
    Inscrit en
    Février 2008
    Messages
    113
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 113
    Points : 58
    Points
    58
    Par défaut
    Désolé, j'enlève le résolu pour le moment mais j'ai un petit soucis avec la sortedList.

    Voila ce que je veux faire :

    Clé | Valeur
    "BR" | 1500
    "BR" | 1501
    "BR" | 1502
    "BL" | 4300
    "BL" | 4301
    "BR" | 1503
    C'est pas possible? Puisque chaque clé doit être unique...
    J'ai pensé que inverser les clés et les valeurs ci dessus me résoudrait le problème, cela me donne donc ça :

    Clé | Valeur
    1500 | "BR"
    1501 | "BR"
    1502 | "BR"
    4300 | "BL"
    4301 | "BL"
    1503 | "BR"
    En plus cela me permettait de contrôler s'il n'y a pas de doublon dans mes entiers. mais le problème est que par la suite je voudrai pouvoir afficher la liste des entiers en fonction des "BR" ou des "BL".
    Mais je ne peux pas travailler directement sur les valeurs pour afficher les clé. enfin j'ai pas trouvé en tout cas.
    Je veux pouvoir stocker une liste de valeur qui seront liées soit à "BR" soit à "BL" et ensuite avoir accès aux éléments de cette liste (ex: afficher tous les BR ou tous les BL) tout en controlant que dans mes valeurs il n'y en ait pas d'identiques...
    Je ne sais pas comment je peux faire. Help please !!

  8. #8
    Expert confirmé
    Avatar de Aspic
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2005
    Messages
    3 905
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Août 2005
    Messages : 3 905
    Points : 4 388
    Points
    4 388
    Par défaut
    Ah oui la clef doit être unique donc faut repasser à ton tableau normal si tu veux mettre des clefs identiques mais c'est bizarre car par définition, une clef c'est unique !
    Qui ne tente rien n'a rien !
    Ce qui ne nous tue pas nous rends plus fort !!
    Mon projet ZELDA en C++/Allegro
    http://www.tutoworld.com - Le Forum -
    Mes ressources Dotnet (cours, sources, tutos)
    --------------------------------------------
    + + =

    Ne pas oublier le Tag !

  9. #9
    Membre du Club
    Profil pro
    Inscrit en
    Février 2008
    Messages
    113
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 113
    Points : 58
    Points
    58
    Par défaut
    Oui.

    Donc pour récapituler je veux avoir ça :
    Clé | Valeur
    "BR" | 1500
    "BR" | 1501
    "BR" | 1502
    "BL" | 4300
    "BL" | 4301
    "BR" | 1503
    Je veux ensuite pouvoir vérifier que les valeurs ne comportent pas de doublons.
    c'est à dire que je retourne une erreur si j'ai quelque chose de ce type :

    Clé | Valeur
    "BR" | 1500
    "BR" | 1500
    Donc j'en reviens au début... Le mieux pour réaliser ce que je veux faire c'est de rester sur un tableau bidimensionel? et si oui, comment je peux tester ma colonne valeur pour vérifier qu'il n'y ai pas de doublons?

    Merci d'avance pour vos conseils.

  10. #10
    Expert confirmé
    Avatar de Aspic
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2005
    Messages
    3 905
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Août 2005
    Messages : 3 905
    Points : 4 388
    Points
    4 388
    Par défaut
    En parcourant les éléments ! comment est déclaré ton tableau ?
    Qui ne tente rien n'a rien !
    Ce qui ne nous tue pas nous rends plus fort !!
    Mon projet ZELDA en C++/Allegro
    http://www.tutoworld.com - Le Forum -
    Mes ressources Dotnet (cours, sources, tutos)
    --------------------------------------------
    + + =

    Ne pas oublier le Tag !

  11. #11
    Membre du Club
    Profil pro
    Inscrit en
    Février 2008
    Messages
    113
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 113
    Points : 58
    Points
    58
    Par défaut
    Mon tableau est rempli en fonction de mon datagrid.
    J'ai une CheckBoxColonne "BR". En fonction que "BR" soit coché ou pas, je rempli mon tableau en faisant un calcul sur chaque ligne.
    Je fais :
    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
     
    'Je redimensionne mon tableau en fonction du nombre de lignes du DGV
    Redim resultat (1,Total_LigneDGV)
     
    'Je passe chaque ligne de mon DGV
    For Each dtgr as DataGridViewRow in MonDGV
     
    'je test si la cellule "BR" de la ligne est cochée ou pas et je rempli mon DGV en fonction, le calcul n'est pas le même...
    'La colonne 0 de resultat(,) correspond aux "BR" et la 1 aux "BL"
    If dtgr.Cells("BR").Value = True Then
    idx_row = dtgr.Index
    resultat(0,idx_row) = MonCalcul
    ElseIf dtgr.Cells("BR").Value = False Then
    idx_row = dtgr.Index
    resultat(1,idx_row) = MonCalcul2
    End If
    Next dtgr
    Comment-ça en parcourant les éléments?

  12. #12
    Membre du Club
    Profil pro
    Inscrit en
    Février 2008
    Messages
    113
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 113
    Points : 58
    Points
    58
    Par défaut
    Bon j'ai finalement réussi à me débrouiller avec mon tableau, je met le code de ma procédure et j'aimerai vos avis si ça ne vous dérange pas. Merki d'avance

    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
      Sub Charger()
            Dim Obj_Etor_Bloc As New Etor_Bloc
            Dim Obj_Etor As New Etor
            Dim idx_row As Integer
     
            Dim total_ligne = My_Frm_confAPI.DGV_Rgt_Etor.Rows.Count - 1
     
            ReDim resultat(1, total_ligne)
            Try
     
                For Each dtgr As DataGridViewRow In MonDGV.Rows
                    'Sort du traitement si c'est la dernière ligne, car elle ne doit pas être traitée.
                    If dtgr.Index = MonDGV.Rows.Count - 1 Then
                        Return
                    End If
     
                    'Calcul pour chaque ligne  en fonction des BR ou des BL 
                    ' on stocke les valeurs dans un tableau bidimensionnel, si la valeur existe déjà, retourne un message d'erreur
                    If dtgr.Cells("T_BR").Value = True Then
                        idx_row = dtgr.Index
                        resultat(0, idx_row) = MonCalcul
     
                        'On test si la valeur calculée n'est pas déjà contenue dans le tableau.
                        For i As Integer = 0 To resultat.GetUpperBound(0)
     
                            If Not (i = idx_row) Then
                                If resultat(0, i) = resultat(0, idx_row) Then
                                    MessageBox.Show("[ERREUR] : le calcul obtient un doublon au rang : " & Obj_Etor.Rang)
                                ElseIf resultat(1, i) = resultat(0, idx_row) Then
                                    MessageBox.Show("[ERREUR] : le calcul obtient un doublon au rang : " & Obj_Etor.Rang)
                                End If
                            End If
     
                        Next i
                    ElseIf dtgr.Cells("T_BR").Value = False Then
                        idx_row = dtgr.Index
                        resultat(1, idx_row) = MonCalcul2
     
                        For i As Integer = 0 To resultat.GetUpperBound(0)
     
                            If Not (i = idx_row) Then
                                If resultat(0, i) = resultat(0, idx_row) Then
                                    MessageBox.Show("[ERREUR] : le calcul obtient un doublon au rang : " & Obj_Etor.Rang)
                                ElseIf resultat(1, i) = resultat(0, idx_row) Then
                                    MessageBox.Show("[ERREUR] : le calcul obtient un doublon au rang : " & Obj_Etor.Rang)
                                End If
                            End If
     
                        Next i
     
                    End If
     
                Next dtgr
     
            Catch ex As Exception
                MessageBox.Show(ex.Message, ex.Source)
     
            End Try
     
        End Sub

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

Discussions similaires

  1. Cast sur un tableau bidimensionnel de structures
    Par PapaJaac dans le forum Langage
    Réponses: 9
    Dernier message: 19/01/2013, 15h07
  2. [XI R2] Calculs sur 2 périodes dans tableau
    Par Anonymously dans le forum Webi
    Réponses: 2
    Dernier message: 16/10/2012, 17h44
  3. [WD14] Calcul sur champs de tableau croisé dynamique
    Par KOUADIO SEVERIN dans le forum WinDev
    Réponses: 2
    Dernier message: 08/06/2012, 12h54
  4. Réponses: 4
    Dernier message: 29/10/2010, 16h20
  5. Calcul sur une partie d'un tableau défini sous VBA
    Par VBA_LOVER dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 20/08/2009, 12h27

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