Bonjour,
Je débute en Pascal et j'aimerais savoir s'il existe une fonction qui compte le nombre d'entrées dans un tableau (count). Si elle n'existe pas, pouvez-vous m'expliquer comment la créer ?
Merci d'avance .
Bonjour,
Je débute en Pascal et j'aimerais savoir s'il existe une fonction qui compte le nombre d'entrées dans un tableau (count). Si elle n'existe pas, pouvez-vous m'expliquer comment la créer ?
Merci d'avance .
Quand tu manipules un tableau, il te faut toujours avoir une variable qui contient le nombre d'éléments dans le tableau. Cette variable doit être mise à jour à chaque insertion et suppression d'un ou plusieurs éléments dans le tableau.
Ok, et merci pour ton aide express.
Salut,
Je n'arrive pas a bien comprende ton post.
As tu un tableau de taille fixe disons TailleMax, et que tu veux utiliser comme tableau dynamique? si c'est le cas, la reponse wormful_sickfoot repond bien a ton inquietude. Et pour avoir un code propre, tu pourras ecrire les fonction ajouterElement(), supprimerElement(), et obtenirTaille() pour te faciliter la tache.
Mais si l'idee de ton post n'est pas de faire un tableau dynamique, il faudra donner plus details.
generalement pour:
on utilise la fonction Length() (TP/FP/Delphi) pour connaitre la "profondeur" du tableau.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 type D = array of [type]; T = array[0..15] of [type];
Length() ne renvois donc pas le nombre d'element "entrés" dans le tableau.
par exemple :
si l'on veut connaitre le nombre d'elements entrés dans le tableau, il faut initialiser le tableau avec une valeur non-usitée -1 par exemple.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12 type T = array[0..15] of integer; var vT : T; begin vT[0] := 1; vT[1] := 2; vT[2] := 3; write(Length(vT)); // affiche 16 end;
pour
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 function CountNot(const aT : T; const iV: integer = -1): integer; var N : integer; begin CountNot := 0; for N := low(aT) to high(aT) do if aT[N] = iV then inc(CountNot); end; var vT : T; begin FillChar(vT, -1, Length(vT)); vT[0] := 1; vT[1] := 2; vT[2] := 3; write(CountNot(vT),' éléments entrés sur ', Length(vT)); // affiche : 3 éléments entrés sur 16 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
16
17
18
19 type pMT = ^MT; MT = array[0..0] of [type]; const MaxMemory = (32 shl 20); // 32Mo MaxLength = MaxMemory div SizeOf([type dans MT]); var ptr : pMT; begin ptr := AllocMem(MaxMemory); write('nombre d''elements : ', MaxLength); // affiche : nombre d'elements : 8470528 (pour type = integer par exemple) FreeMem(ptr, MaxMemory); end;
Nie,
Ce n'est pas la meilleure solution, ne serait-ce que par sa consommation de calcul pour trouver la valeur, et aussi et surtout parce qu'elle implique qu'on réserve une valeur, qui est donc interdite pour l'utilisation.
La bonne solution est de conserver une variable qui tient à jour le nombre d'éléments ajoutés dans le tableau, ce qui implique d'écrire les fonctions/procédures gérant ça, et, pour simplifier les paramètres à passer, fait partie du type.
À ceci, 2 principales solutions :
N étant le nombre maximum d'éléments prévus ==>
- Faire un tableau d'indices 0 à N, et utiliser la case d'indice 0 pour stocker le nombre d'éléments effectivement présents, qui disposeront des indices 1 à N
- Définir un nouveau type avec 2 champs
. Le compteur
. Le tableau, avec des indices de 1 à N.
Aussi, il est à noté que l'auteur du post à préciser qu'il debute en pascal. Lui proposer une solution contenant des pointeurs, des operation de rotation de bit conduira sans doute à l'ennuyer
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager