Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1610 connectés 

  FORUM HardWare.fr
  Programmation
  C++

  défi de la semaine : fonction retournant la taille d'un tableau

 


 Mot :   Pseudo :  
 
 Page :   1  2  3  4
Page Précédente
Auteur Sujet :

défi de la semaine : fonction retournant la taille d'un tableau

n°573326
Taz
bisounours-codeur
Posté le 22-11-2003 à 17:25:47  profilanswer
 

je les vois venir les boolays et newbies du C++ et vous autres qui affirmaient qu'on ne peut pas écrire de fonction qui retourne la taille d'un tableau en C++ (je ne parle __pas__ du C).
 
Manque de bol, pour vous, on peut, et ça fait 3 lignes. Taupe !


Message édité par Taz le 22-11-2003 à 18:17:05
mood
Publicité
Posté le 22-11-2003 à 17:25:47  profilanswer
 

n°573335
Taz
bisounours-codeur
Posté le 22-11-2003 à 17:35:05  profilanswer
 

R3g a écrit :

Ca depends de ce que tu connais, non ? parce-que sizeof(array)/sizeof(int), ca te donne la taille de array si array est un tableau d'entiers, non ?

personne ne comprenant pas le concept de fonction, s'abstenir
 
j'en profite
 
sizeof variable
sizeof(type)
 
la taille d'un tableau t
sizeof tab / sizeof tab[0]

n°573340
chrisbk
-
Posté le 22-11-2003 à 17:36:59  profilanswer
 

http://www.lgml.net/HFR/img/gordon%20shumway.gif

n°573344
Taz
bisounours-codeur
Posté le 22-11-2003 à 17:38:20  profilanswer
 

R3g a écrit :

j'y connais rien en C++

dehors

n°573347
chrisbk
-
Posté le 22-11-2003 à 17:39:06  profilanswer
 


 
 
faut que t'arretes toi, t'es completement grotesque
On dirait une mauvaise parodie d'un dictateur de foire

n°573351
Taz
bisounours-codeur
Posté le 22-11-2003 à 17:40:52  profilanswer
 

bah je pose un petit problème sérieux, si ça part en blabla direct dès le premier message, c'est pas terrible.

n°573352
Taz
bisounours-codeur
Posté le 22-11-2003 à 17:41:51  profilanswer
 

R3g a écrit :

Si je sors à chaque fois qu'il y a qqchose à apprendre, je vais progresser très vite...

je demande une fonction tu me sors sizeof ... je dis tableau, tu me dis vector ...

n°573353
chrisbk
-
Posté le 22-11-2003 à 17:43:03  profilanswer
 

Taz a écrit :

bah je pose un petit problème sérieux, si ça part en blabla direct dès le premier message, c'est pas terrible.


 
bah
 
*t'es pas obligé de faire ton constipé chronique
*c t pas du blabla
*file la solution au lieu de faire du suspens alacon a tendance masturbatoire (moua je sais et pas vous [:udok])

n°573354
R3g
fonctionnaire certifié ITIL
Posté le 22-11-2003 à 17:43:04  profilanswer
 

Taz a écrit :

bah je pose un petit problème sérieux, si ça part en blabla direct dès le premier message, c'est pas terrible.

Et t'as eu combien de reponses serieuses ? T'as fais le topic juste pour le plaisir de pouvoir poster ta reponse une fois que tout le monde aura dit qu'il ne sait pas...
Bon je vais être sympa, j'efface mes posts :D


---------------
Au royaume des sourds, les borgnes sont sourds.
n°573358
Taz
bisounours-codeur
Posté le 22-11-2003 à 17:47:25  profilanswer
 

bah je vais pas filer la réponse directement quand même. La majorité des programmeurs C++ pense que c'est impossible, alors qu'il existe une solution en 3 lignes. Le but c'est de faire un peu réfléchir, je pense que ça c'est interessant, de comprendre ce qui ne marche, et ce qui peut marcher, et surtout pourquoi

mood
Publicité
Posté le 22-11-2003 à 17:47:25  profilanswer
 

n°573361
R3g
fonctionnaire certifié ITIL
Posté le 22-11-2003 à 17:50:46  profilanswer
 

Taz a écrit :

bah je vais pas filer la réponse directement quand même. La majorité des programmeurs C++ pense que c'est impossible, alors qu'il existe une solution en 3 lignes. Le but c'est de faire un peu réfléchir, je pense que ça c'est interessant, de comprendre ce qui ne marche, et ce qui peut marcher, et surtout pourquoi

Bon alors essayons de reflechir : la fonction dont tu parles prendrait donc en paramètre un pointeur (je suppose). D'après les faibles connaissances que j'ai, le pointeur est juste variable dont la valeur est une adresse memoire.
Or , à priori, seul le système qui a alloué cette mémoire peut connaitre la taille de la plage, puisque le pointeur ne donne que l'adresse de début. J'ai bon jusque là ou pas ?


---------------
Au royaume des sourds, les borgnes sont sourds.
n°573363
polo021
Posté le 22-11-2003 à 17:52:35  profilanswer
 

R3g a écrit :

Bon alors essayons de reflechir : la fonction dont tu parles prendrait donc en paramètre un pointeur (je suppose). D'après les faibles connaissances que j'ai, le pointeur est juste variable dont la valeur est une adresse memoire.
Or , à priori, seul le système qui a alloué cette mémoire peut connaitre la taille de la plage, puisque le pointeur ne donne que l'adresse de début. J'ai bon jusque là ou pas ?


c'est ce que je pense aussi, lecture de la mémoire jusqu'à atteindre une valeur qui n'est pas du type de celles contenues dans le tableau  :D ?
 
[:neowen]

n°573365
R3g
fonctionnaire certifié ITIL
Posté le 22-11-2003 à 17:54:28  profilanswer
 

polo021 a écrit :


c'est ce que je pense aussi, lecture de la mémoire jusqu'à atteindre une valeur qui n'est pas du type de celles contenues dans le tableau  :D ?
 
[:neowen]

Ou alors écrire dedans et catcher l'exception levée par une acces violation ?


---------------
Au royaume des sourds, les borgnes sont sourds.
n°573366
Taz
bisounours-codeur
Posté le 22-11-2003 à 17:54:44  profilanswer
 

oui et non
un pointeur c'est un pointeur .| si tu l'a eu via un new, alors l'allocateur mémoire en connait la taille de plage allouée, mais cette information n'est pas disponible. si ton pointeur vient d'ailleurs aucun moyen. et un pointeur n'est pas en tableau, bien que ton compilateur sache convertir un tableau tab en pointeur, par exemple

Code :
  1. int tab[10];
  2. int *p = tab;


est en fait

Code :
  1. int tab[10];
  2. int *p = &tab[0];


qui est correctement typé
 
donc ta première piste, elle semble pas très concluante ...


Message édité par Taz le 22-11-2003 à 17:55:23
n°573367
R3g
fonctionnaire certifié ITIL
Posté le 22-11-2003 à 17:56:29  profilanswer
 

Taz a écrit :

oui et non
un pointeur c'est un pointeur .| si tu l'a eu via un new, alors l'allocateur mémoire en connait la taille de plage allouée, mais cette information n'est pas disponible. si ton pointeur vient d'ailleurs aucun moyen. et un pointeur n'est pas en tableau, bien que ton compilateur sache convertir un tableau tab en pointeur, par exemple

Code :
  1. int tab[10];
  2. int *p = tab;


est en fait

Code :
  1. int tab[10];
  2. int *p = &tab[0];


qui est correctement typé
 
donc ta première piste, elle semble pas très concluante ...

Ok mais alors (c'est là que j'y connais rien en C++), pour passer le tableau en paramètre, il faut uiliser un pointeur, ou on peut le passer par référence ?


---------------
Au royaume des sourds, les borgnes sont sourds.
n°573368
Taz
bisounours-codeur
Posté le 22-11-2003 à 17:58:13  profilanswer
 

R3g a écrit :

Ou alors écrire dedans et catcher l'exception levée par une acces violation ?

tu connais vraiment pas grand chose. une erreur de segmentation ne lève pas d'exception et tu peux te ballader la ou tu ne devrais pas sans que ton système t'envoie le dit signal. surtout que si tu réfléchis, c'est un peu dommage d'essayer de calculer la taille d'un tableau à l'exécution, alors que techniquement cette information est disponible à la compilation (ce qu'exploite sizeof)

n°573369
R3g
fonctionnaire certifié ITIL
Posté le 22-11-2003 à 18:02:24  profilanswer
 

Faut m'excuser hein.. Je fais du Java, alors gérer la mémoire c'est pas mon truc. Mais ca m'intéresse beaucoup, j'essaie de me mettre au C++. Tu pourrais peut-être lacher un indice ?


---------------
Au royaume des sourds, les borgnes sont sourds.
n°573374
Taz
bisounours-codeur
Posté le 22-11-2003 à 18:09:33  profilanswer
 

ce qu'il faut bien comprendre dans le problème ici, c'est que ce n'est pas une histoire de gestion de la mémoire. un tableau Java a un attribut pour mémoriser sa taille. en C et C++, il n'en ai rien. En C, il est impossible de faire une fonction renvoyant la taille (le nombre d'éléments) d'un tableau. J'espère que tu en ai convaincu. Ton problème reg, c'est que tu débutes un peu trop quand même : je ne pense pas que tu te sois poser la question avant aujourd'hui. Quand je donnerais la solution, aussi simple soit elle, tu ne la comprendras pas.
Alors continue à apprendre. Je n'ai pas souvenir de sujet de ta part : n'hésite pas. Je suis là.

n°573377
R3g
fonctionnaire certifié ITIL
Posté le 22-11-2003 à 18:18:50  profilanswer
 

Effectivement, je ne me suis jamais posé la question : j'ai toujours été persuadé qu'on ne pouvait pas connaitre la taille d'un tableau. Je vais arrêter de pourrir ton topic, mais j'attends la réponse avec curiosité.


---------------
Au royaume des sourds, les borgnes sont sourds.
n°573382
ffluff
Challenge Everything
Posté le 22-11-2003 à 18:35:07  profilanswer
 

bon je me lance :P
 

Code :
  1. int taille(contener tab)
  2. {
  3. int n=0;
  4. while(typeid(tab[0])==typeid(tab[n]))
  5. {
  6.   n++;
  7. }
  8. return n;
  9. }


 
ok c'est pas 3 lignes mais bon  [:ffluff]


Message édité par ffluff le 22-11-2003 à 18:35:54

---------------
«Le succès consiste à aller d'échecs en échecs sans jamais perdre son enthousiasme» - Churchill
n°573383
ffluff
Challenge Everything
Posté le 22-11-2003 à 18:37:28  profilanswer
 

en fait non
on imagine un tableau de 3elt en memoire:
tab[0] = 0x01
0x01 : 1elt
0x02 : 2elt
0x03 : 3elt
0x04 : un elt du prog mais pas du tableau
 
et bam ca marche pas :/


Message édité par ffluff le 22-11-2003 à 18:37:51

---------------
«Le succès consiste à aller d'échecs en échecs sans jamais perdre son enthousiasme» - Churchill
n°573385
Taz
bisounours-codeur
Posté le 22-11-2003 à 18:40:31  profilanswer
 

bah il est bien beau ton programme seulement il boulcera indéfiniment, puisque par définition typeid(tab[0])==typeid(tab[n])

n°573389
ffluff
Challenge Everything
Posté le 22-11-2003 à 18:48:20  profilanswer
 

mais la vu que n peut depasser la capacité du tableau c'est pas vrai si n> taille du tableau


---------------
«Le succès consiste à aller d'échecs en échecs sans jamais perdre son enthousiasme» - Churchill
n°573390
Taz
bisounours-codeur
Posté le 22-11-2003 à 18:50:05  profilanswer
 

fFluFf a écrit :

mais la vu que n peut depasser la capacité du tableau c'est pas vrai si n> taille du tableau

masi biensur .. fais gaffe, on est le weekend, t'es entrain de te piéger toi même

n°573398
ffluff
Challenge Everything
Posté le 22-11-2003 à 19:09:49  profilanswer
 

t'es donc entrain de me dire :
int tab[4];
typeid(tab[5]) == typeid(tab[0])  
 
??


---------------
«Le succès consiste à aller d'échecs en échecs sans jamais perdre son enthousiasme» - Churchill
n°573399
nraynaud
lol
Posté le 22-11-2003 à 19:10:41  profilanswer
 

taz> laisse encore du temps, je suis sur une idée (tordue).


---------------
trainoo.com, c'est fini
n°573401
nraynaud
lol
Posté le 22-11-2003 à 19:15:18  profilanswer
 

ffluff > c'est sur que toutes les case d'un tableau ont le même type.


---------------
trainoo.com, c'est fini
n°573410
nraynaud
lol
Posté le 22-11-2003 à 19:33:20  profilanswer
 

Code :
  1. #include<iostream>
  2. using namespace std;
  3. template<typename T> struct len_rec {
  4.   static const int result = 0;
  5. };
  6. template<typename BASETYPE, int N> struct len_rec<BASETYPE[N]> {
  7.   static const int result =
  8.       N;
  9. };
  10. int main(int argc, char **argv) {
  11.   int var[10];
  12.   cout << len_rec<typeof(var)>::result << endl;
  13. }

Proposition candide.
 
Au passage je signale qu'en Ada, ça s'écrit table'Length.


---------------
trainoo.com, c'est fini
n°573414
Taz
bisounours-codeur
Posté le 22-11-2003 à 19:39:53  profilanswer
 

nraynaud a écrit :

ffluff > c'est sur que toutes les case d'un tableau ont le même type.

oui, c'est un peu la base de tous.
 
Fortune


Message édité par Taz le 22-11-2003 à 19:41:49
n°573416
Taz
bisounours-codeur
Posté le 22-11-2003 à 19:41:24  profilanswer
 

nraynaud > très très tordu effectivement, et typeof ne fait pas parti du C++. en l'utilisant tu tentes de contourner un problème qui n'existe pas

n°573420
nraynaud
lol
Posté le 22-11-2003 à 19:48:01  profilanswer
 

bon, relaisse du temps, je cherche une référence du C++ (dès qu'on mets template dans google, on a la STL, c'est lourd) et je regarde en détail.


---------------
trainoo.com, c'est fini
n°573429
nraynaud
lol
Posté le 22-11-2003 à 20:10:35  profilanswer
 

j'abandonne, je trouve pas de spec en lignedu langage (et il semble que ça n'existe pas http://saloon.javaranch.com/cgi-bi [...] 2&t=001713 ), j'ai pas de bouquin, et dans les tutoriaux, j'ai rien trouvé d'intéressant.


---------------
trainoo.com, c'est fini
n°573430
bossamiral​2
Ctrl+Alt+Del
Posté le 22-11-2003 à 20:11:20  profilanswer
 

euh j'y connais rien du tout en c++ mais on ne peut pas connaitre l'adresse de départ d'allocation du tableau et celle de la fin d'allocation. Avec ça on devrait pouvoir déterminé la taille du tableau donc le nombre d'élément, non
 
Je vois déjà Taz se taper la tête contre le mur. (excuse moi d'avance)

n°573432
Taz
bisounours-codeur
Posté le 22-11-2003 à 20:13:32  profilanswer
 

bossamiral2 a écrit :

Je vois déjà Taz me taper la tête contre le mur.

n°573433
bossamiral​2
Ctrl+Alt+Del
Posté le 22-11-2003 à 20:14:22  profilanswer
 


 
Au moins j'ai essayé
 
je suppose que l'on ne peut pas connaitre l'adresse de fin allocation du pointeur


Message édité par bossamiral2 le 22-11-2003 à 20:17:25
n°573440
Taz
bisounours-codeur
Posté le 22-11-2003 à 20:25:58  profilanswer
 

ce n'est pas qu'on ne peut pas, c'est quelle n'existe pas
 

Citation :

pointeur

!= tableau
de toutes façons. si vous n'avez pas intégré ça, vous faites fausse route

n°573441
nraynaud
lol
Posté le 22-11-2003 à 20:26:22  profilanswer
 

bossamiral > si il pose la question c'est que la réponse doit être un minimum élégante, donc ne repose que sur les types statiques et est entièrement résolue à la compilation.


---------------
trainoo.com, c'est fini
n°573442
ffluff
Challenge Everything
Posté le 22-11-2003 à 20:27:19  profilanswer
 

question :
tableau dynamic (int *tab= new int[10])
ou static (int tab[10])
car si le tableau est dynamic le code de nraynaud ne marche pas :P


---------------
«Le succès consiste à aller d'échecs en échecs sans jamais perdre son enthousiasme» - Churchill
n°573443
Taz
bisounours-codeur
Posté le 22-11-2003 à 20:27:54  profilanswer
 

int *tab= new int[10]
 
n'est pas un tableau :o

n°573446
usa_satria​ni
S.P.Q.R.
Posté le 22-11-2003 à 20:29:50  profilanswer
 

hs:
Un des plus gros regret de ma vie c de ne pas mettre mis a la prog jeune et de ne pas avoir geeké comme vous :cry:
fin hs.

mood
Publicité
Posté le   profilanswer
 

 Page :   1  2  3  4
Page Précédente

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C++

  défi de la semaine : fonction retournant la taille d'un tableau

 

Sujets relatifs
Redimensionnement de tableauProblem de dimension de tableau en CSS
Tri un tableau de tableaux ?VB + Classe - Tableau d'objet
[C] Taille d'un tableau d'int ?rafraichissement d'un tableau dynamique a l'aide de boutons
Modifier des éléments créé par une fonctionPassage de pointeur de fonction membre à une fonction
taille d'un char*[] avec \0 
Plus de sujets relatifs à : défi de la semaine : fonction retournant la taille d'un tableau


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR