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 :

Taille d' un tableau de tableau


Sujet :

Delphi

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    51
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 51
    Points : 42
    Points
    42
    Par défaut Taille d' un tableau de tableau
    bonjour,

    je dispose d'un tableau de tableau du genre

    mon_tab: array of array of integer;

    C'est en fait une collection d'acquisitions de données, pour chaque acquisition je récupere 2000 données par exemple, et je peux aller jusque 10000 acquisitions facilement.
    Au départ, j'avais déclaré comme ça:

    mon_tab: array [1..10000]of array [1..2000] of integer;

    Mais ca consomme un max de mémoire, donc je souhaite modifier dynamiquement la taille de mon_tab, parce que je me sers pas tout le temps de ces tableaux, ni a pleine capacité.
    J'ai fait un petit test du genre:

    setlength(mon_tab, taille +100);

    Ca semble fonctionner, mais je ne sais pas quel tableau est vraiment agrandi, est-ce le 1er membre ou le 2e ? Ce qui m'intéresse c'est de pouvoir faire gonfler le 1er, je pense que c'est le cas...
    Est-ce que quelqu'un connait la réponse ?

    merki.

  2. #2
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 459
    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 459
    Points : 24 873
    Points
    24 873
    Par défaut
    C'est la première dimension qui est agrandi ... si tu veux agrandir la seconde dimension, j'ai toujours pour ma part, parcouru la 1ère dimension, et j'agrandi chaque cellule

    Il existe une autre solution, comme on faisait en delphi 3

    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
    procedure TFrmTestMemory.BtnPointerIntArray1024By256Click(Sender: TObject);
    type
      PMatriceInteger1024By255 = ^TMatriceInteger1024By255;
      TMatriceInteger1024By255 = array [0..1023,0..255] of Integer;
      TShortString8 = string[8];
      PMatriceString1024By255 = ^TMatriceString1024By255;
      TMatriceString1024By255 = array [0..1023,0..255] of TShortString8;
    var
      Tableau : PMatriceInteger1024By255 ;
      TabStr : PMatriceString1024By255 ;
      PosH : Integer;
      PosV : Byte;
    begin
        GetMem(Tableau, 1024*256*SizeOf(Integer)); // faut absoluement alouéé la taille du Type !
        for PosH := 0 to 1023 do
        begin
          for PosV := 0 to 255 do
          begin
            Tableau^[PosH][PosV]:= PosH*PosV;
          end; 
        end;
        FreeMem(Tableau);
     
        GetMem(TabStr, 1024*256*SizeOf(TShortString8)); // faut absoluement alouéé la taille du Type !
        for PosH := 0 to 1023 do
        begin
          for PosV := 0 to 255 do
          begin
            TabStr^[PosH][PosV]:= IntToStr(PosH) +'_'+ IntToStr(PosV);
          end;
        end;
        FreeMem(TabStr);
    end;
    Il faut absolument, conserver les dimensions, je conseille, ceci pour une utilisation massive

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    type
      PIntegerArray10000By2000 = ^TMatriceInteger10000By2000 ;
      TIntegerArray10000By2000 = array [1..10000,1..2000] of Integer;
      THomerData = record
        DimensionUn: Word;
        DimensionDeux: Word;
        Values: TIntegerArray10000By2000;
      end;
    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
    var
      Data: THomerData;
    begin
      Data.DimensionUn := 100;
      Data.DimensionDeux := 50;
      GetMem(Data.Values, Data.DimensionUn*Data.DimensionUn*SizeOf(Integer));
     
      for PosH := 1 to Data.DimensionUn do
      begin
        for PosV := 1 to Data.DimensionDeux do
        begin
          Data.Values[PosH][PosV]:= PosH*PosV;
        end; 
      end;
      FreeMem(Data.Values);
    Avec du Courage, je conseile même de faire une classe avec une propriété Items multi-dimension qui gère un capacity et un count séparé comme une TList
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    51
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 51
    Points : 42
    Points
    42
    Par défaut
    ok merci, ca répond a ma question

  4. #4
    Expert éminent sénior

    Avatar de sjrd
    Homme Profil pro
    Directeur de projet
    Inscrit en
    Juin 2004
    Messages
    4 517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : Suisse

    Informations professionnelles :
    Activité : Directeur de projet
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2004
    Messages : 4 517
    Points : 10 154
    Points
    10 154
    Par défaut
    Citation Envoyé par ShaiLeTroll Voir le message
    C'est la première dimension qui est agrandi ... si tu veux agrandir la seconde dimension, j'ai toujours pour ma part, parcouru la 1ère dimension, et j'agrandi chaque cellule

    Il existe une autre solution, comme on faisait en delphi 3
    Je crois que tu seras intéressé de savoir que la pseudo-routine SetLength peut accepter un nombre variable d'arguments (oui, comme en C), pour chaque dimension :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    var
      MonTab: array of array of Integer;
    begin
      SetLength(MonTab, 5, 3);
      // MonTab est un tableau de 5x3 entiers
    end;
    sjrd, ancien rédacteur/modérateur Delphi.
    Auteur de Scala.js, le compilateur de Scala vers JavaScript, et directeur technique du Scala Center à l'EPFL.
    Découvrez Mes tutoriels.

  5. #5
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 459
    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 459
    Points : 24 873
    Points
    24 873
    Par défaut
    Citation Envoyé par sjrd Voir le message
    Je crois que tu seras intéressé de savoir que la pseudo-routine SetLength peut accepter un nombre variable d'arguments (oui, comme en C), pour chaque dimension
    Citation Envoyé par Aide D7
    Pour les tableaux dynamiques, SetLength peut prendre plusieurs paramètres de longueur (autant que le nombre de dimensions du tableau). Chaque paramètre spécifie le nombre d'éléments avec une dimension particulière.
    Yep, j'ai même retrouvé un essai de cela dans mon application à bordel, mais je l'oublie TOUT le temps, faut dire que j'ai rarement des tableaux à deux dimensions, et souvent la 2eme est variable, ... un jour ça va rentrer, et puis, je fais surtout des tableaux de structure, ... ou des TList ...
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

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

Discussions similaires

  1. Fixer la taille des cellules dans un tableau HTML ?
    Par bilou95 dans le forum Balisage (X)HTML et validation W3C
    Réponses: 3
    Dernier message: 19/03/2007, 16h10
  2. Taille des traits d'un tableau
    Par salseropom dans le forum Tableaux - Graphiques - Images - Flottants
    Réponses: 2
    Dernier message: 22/09/2006, 16h17
  3. tailles de cellules dans un tableau
    Par Hayabusa dans le forum Balisage (X)HTML et validation W3C
    Réponses: 4
    Dernier message: 05/09/2006, 21h12
  4. taille du browser adaptée à un tableau dont la taille varie
    Par grinder59 dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 03/01/2006, 12h46
  5. [CSS] taille de police d'un tableau
    Par cyberhunter dans le forum Mise en page CSS
    Réponses: 5
    Dernier message: 11/08/2005, 12h10

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