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

 Delphi Discussion :

Remplissage d'un array à 2 dimensions rapidement


Sujet :

Delphi

  1. #1
    Candidat au Club
    Inscrit en
    Décembre 2009
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Décembre 2009
    Messages : 4
    Points : 3
    Points
    3
    Par défaut Remplissage d'un array à 2 dimensions rapidement
    Bonjour,

    Je me permets de vous demander de l'aide car cela fait plusieurs jours que j'essaie désespérément de trouver une solution mais rien n'y fait.

    Voilà, j'ai en variable globale un MAINS : array[1..8,1..5,1..5] of integer;

    J'aimerai pouvoir remplir rapidement chaque partie du tableau, par exemple en faisant cela :
    MAINS[1,1] := (1,1,2,3,4);
    MAINS[1,2] := (1,1,2,3,4);
    ...

    Quelle que soit la syntaxe utilisée (point virgule, virgule, parenthèse, crochets), cela ne passe pas.
    Ma question est donc, est-on obligé de remplir un tableau case par case ?

    Merci par avance pour toutes vos réponses.

  2. #2
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 705
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 13 705
    Points : 25 575
    Points
    25 575
    Par défaut
    La Syntaxe est un peu différente
    Pour une variable globale, cela doif fonctionner ... sinon tu passe par une constante (qui devient modifiable, mais le plus sage était de la copier dans une autre variable)

    Bon, ça doit donner ça, j'espère que c'est dans la bon ordre ...

    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
    MAINS : array[1..8,1..5,1..5] of integer =
      (
        ( 
          (1,1,2,3,4), 
          (1,1,2,3,4),
          (1,1,2,3,4), 
          (1,1,2,3,4),
          (1,1,2,3,4), 
        ),
          (1,1,2,3,4), 
          (1,1,2,3,4),
          (1,1,2,3,4), 
          (1,1,2,3,4),
          (1,1,2,3,4), 
        )...
      );

  3. #3
    rsc
    rsc est déconnecté
    Membre éprouvé
    Avatar de rsc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2004
    Messages
    711
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : France, Côte d'Or (Bourgogne)

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

    Informations forums :
    Inscription : Juin 2004
    Messages : 711
    Points : 918
    Points
    918
    Par défaut
    Une alternative, qui peut être intéressante si beaucoup de tes "lignes" sont identiques, est

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    type 
      TLigne = array[1..5] of intege;
    const
      X: TLigne = (1,1,2,3,4);
    ...
     
    TLigne(MAIN[1, 1] := X;
    TLigne(MAIN[1, 2] := X;
    ...
    Mais je reconnais que c'est un peu tordu

  4. #4
    Expert éminent sénior
    Avatar de Paul TOTH
    Homme Profil pro
    Freelance
    Inscrit en
    Novembre 2002
    Messages
    8 964
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Freelance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2002
    Messages : 8 964
    Points : 28 457
    Points
    28 457
    Par défaut
    Citation Envoyé par kevpagnat Voir le message
    Bonjour,

    Je me permets de vous demander de l'aide car cela fait plusieurs jours que j'essaie désespérément de trouver une solution mais rien n'y fait.

    Voilà, j'ai en variable globale un MAINS : array[1..8,1..5,1..5] of integer;

    J'aimerai pouvoir remplir rapidement chaque partie du tableau, par exemple en faisant cela :
    MAINS[1,1] := (1,1,2,3,4);
    MAINS[1,2] := (1,1,2,3,4);
    ...

    Quelle que soit la syntaxe utilisée (point virgule, virgule, parenthèse, crochets), cela ne passe pas.
    Ma question est donc, est-on obligé de remplir un tableau case par case ?

    Merci par avance pour toutes vos réponses.
    une idée rigolote comme ça ...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    begin
      MAINS[1,1,1] := 1;
      MAINS[1,1,2] := 1;
      MAINS[1,1,3] := 2;
      MAINS[1,1,4] := 3;
      MAINS[1,1,5] := 4;
      move(MAINS[1,1], MAINS[1,2],     5 * SizeOf(Integer));
      move(MAINS[1,1], MAINS[1,3], 2 * 5 * SizeOf(Integer));
      move(MAINS[1,1], MAINS[1,5],     5 * SizeOf(Integer));
      move(MAINS[1], MAINS[2],     5 * 5 * SizeOf(Integer));
      move(MAINS[1], MAINS[3], 2 * 5 * 5 * SizeOf(Integer));
      move(MAINS[1], MAINS[5], 4 * 5 * 5 * SizeOf(Integer));
    end;

  5. #5
    Candidat au Club
    Inscrit en
    Décembre 2009
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Décembre 2009
    Messages : 4
    Points : 3
    Points
    3
    Par défaut
    En fait non, mes lignes seront toutes différentes. C'est vrai je me suis mal exprimé dans mon 1er post. Ce serait plus du genre :
    MAINS[1,1] := (1, 1, 2, 3, 4);
    MAINS[1,2] := (6, 4, 3, 3, 3); ...

    ShaiLeTroll, ton code est-il à mettre à la place de la déclaration de la variable globale ou en tant que définition ?
    Si je colle ton code en déclaration, j'obtiens un magnifique "Expression attendue mais ')' trouvé"

    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
    MAINS : array[1..8,1..5,1..5] of integer =
      (
        ( 
          (1,1,2,3,4), 
          (1,1,2,3,4),
          (1,1,2,3,4), 
          (1,1,2,3,4),
          (1,1,2,3,4), 
        ),
          (1,1,2,3,4), 
          (1,1,2,3,4),
          (1,1,2,3,4), 
          (1,1,2,3,4),
          (1,1,2,3,4), 
        )
      );
    C'est quand même pas simple tout ça ...

  6. #6
    Candidat au Club
    Inscrit en
    Décembre 2009
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Décembre 2009
    Messages : 4
    Points : 3
    Points
    3
    Par défaut
    Ah, bon, bah c'était pas grand chose finalement.
    J'ai trouvé la coquille. Voici un exemple de code donc :

    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
     
    MAINS : array[1..8,1..5,1..5] of Integer =
      (
        (
          (1,1,2,3,4),
          (1,1,2,3,4),
          (1,1,2,3,4),
          (1,1,2,3,4),
          (1,1,2,3,4)
        ),
        (
          (1,1,2,3,4),
          (1,1,2,3,4),
          (1,1,2,3,4),
          (1,1,2,3,4),
          (1,1,2,3,4)
        )...
    )
    Y'avait juste une virgule de trop à la fin de chaque bloc.
    Merci pour tout.
    Bonne continuation à tous.

  7. #7
    Membre éprouvé
    Avatar de Dr.Who
    Inscrit en
    Septembre 2009
    Messages
    980
    Détails du profil
    Informations personnelles :
    Âge : 45

    Informations forums :
    Inscription : Septembre 2009
    Messages : 980
    Points : 1 294
    Points
    1 294
    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
    const
      MatrixXCount = 8;
      MatrixYCount = 5;
      MatrixZCount = 5;
      MatrixOCount = MatrixXCount * MatrixYCount * MatrixZCount;
     
    type
      PMatrix = ^TMatrix;
      TMatrix = packed record case integer of
        0: (TD : array[0..MatrixXCount-1, 0..MatrixYCount-1, 0..MatrixZCount-1] of integer);
        1: (OD : array[0..MatrixOCount-1] of integer);
      end;
     
     
    var
      Mtx : TMatrix = (OD: (
        1,2,3,4,5,    1,2,3,4,5,    1,2,3,4,5,    1,2,3,4,5,    1,2,3,4,5,
        1,2,3,4,5,    1,2,3,4,5,    1,2,3,4,5,    1,2,3,4,5,    1,2,3,4,5,
        1,2,3,4,5,    1,2,3,4,5,    1,2,3,4,5,    1,2,3,4,5,    1,2,3,4,5,
        1,2,3,4,5,    1,2,3,4,5,    1,2,3,4,5,    1,2,3,4,5,    1,2,3,4,5,
        1,2,3,4,5,    1,2,3,4,5,    1,2,3,4,5,    1,2,3,4,5,    1,2,3,4,5,
        1,2,3,4,5,    1,2,3,4,5,    1,2,3,4,5,    1,2,3,4,5,    1,2,3,4,5,
        1,2,3,4,5,    1,2,3,4,5,    1,2,3,4,5,    1,2,3,4,5,    1,2,3,4,5,
        1,2,3,4,5,    1,2,3,4,5,    1,2,3,4,5,    1,2,3,4,5,    1,2,3,4,5
      ));

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

Discussions similaires

  1. Problème avec fonction et array à 2 dimensions
    Par wrm8787 dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 13/02/2009, 17h24
  2. Méthode push dans un Array à plusieurs dimensions
    Par thibane dans le forum Général JavaScript
    Réponses: 6
    Dernier message: 02/04/2008, 11h42
  3. Réponses: 1
    Dernier message: 21/09/2007, 15h42
  4. [débutant] remplissage d'un array
    Par CompuTux dans le forum Collection et Stream
    Réponses: 8
    Dernier message: 20/09/2007, 13h41
  5. [C#] Tableau et Array 2 dimension
    Par appwnet dans le forum Windows Forms
    Réponses: 5
    Dernier message: 22/10/2006, 15h46

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