C++Talk.NET Forum Index C++Talk.NET
C++ language newsgroups
 
Archives   FAQFAQ   SearchSearch   MemberlistMemberlist   UsergroupsUsergroups   RegisterRegister 
 ProfileProfile   Log in to check your private messagesLog in to check your private messages   Log inLog in 

probleme tableaux
Goto page 1, 2, 3  Next
 
Post new topic   Reply to topic    C++Talk.NET Forum Index -> C++ (French)
View previous topic :: View next topic  
Author Message
giovanni
Guest





PostPosted: Tue Apr 05, 2005 1:28 pm    Post subject: probleme tableaux Reply with quote



j ai ces ligne la
int * num=new * int[100,100,100,100,100];
int* nb=new int[999,999,999,999,999];
int* ok=new int[999,999,999,999,999];
t valeur variable de 1 a 999
nb[t][0][0][0][0]=nb_1;
le probleme et que dans nb[t][0][0][0][0] il y a pas la valeur nb_1 ?
pourquoi?j ai mis 999 ne sachant pas taille des donnee j ai mis le max...


Back to top
giovanni
Guest





PostPosted: Tue Apr 05, 2005 1:30 pm    Post subject: Re: probleme tableaux Reply with quote



me dit erreur a la ligne
nb[t][0][0][0][0]=nb_1;
41 E:sauveDev-Cppok7.cpp invalid types `int[int]' for array subscript

petite erreur corriger:
int * num=new int[100,100,100,100,100];
int* nb=new int[999,999,999,999,999];
int* ok=new int[999,999,999,999,999];
et non comme avant
"giovanni" <giovannisch (AT) hotmail (DOT) com> a écrit dans le message de news:
4252928a (AT) ews20 (DOT) ..
Quote:
j ai ces ligne la
int * num=new * int[100,100,100,100,100];
int* nb=new int[999,999,999,999,999];
int* ok=new int[999,999,999,999,999];
t valeur variable de 1 a 999
nb[t][0][0][0][0]=nb_1;
le probleme et que dans nb[t][0][0][0][0] il y a pas la valeur nb_1 ?
pourquoi?j ai mis 999 ne sachant pas taille des donnee j ai mis le max...





Back to top
Vincent Lascaux
Guest





PostPosted: Tue Apr 05, 2005 1:52 pm    Post subject: Re: probleme tableaux Reply with quote



Quote:
int * num=new * int[100,100,100,100,100];
int* nb=new int[999,999,999,999,999];
int* ok=new int[999,999,999,999,999];

Ca n'est pas comme ca qu'on reserve de la mémoire.
En C++, on utiliserait plutot std::vector, ou peut être std::map en fonction
des besoins.
Est ce que tu te rends compte que tu es en train d'allouer plus de 1800 tera
octets de mémoire vive. Je veux bien que tu aies de l'avance sur ton temps,
mais aujourd'hui, il ne faut pas trop compter sur le fait qu'un ordinateur
ait autant de mémoire disponible (bien que ce soit théoriquement possible
sur des machines 64 bits Wink)
Qu'est ce que tu essaies de faire ?

--
Vincent



Back to top
Jean-Marc Bourguet
Guest





PostPosted: Tue Apr 05, 2005 1:54 pm    Post subject: Re: probleme tableaux Reply with quote

"Vincent Lascaux" <nospam (AT) nospam (DOT) org> writes:

Quote:
int * num=new * int[100,100,100,100,100];
int* nb=new int[999,999,999,999,999];
int* ok=new int[999,999,999,999,999];

Ca n'est pas comme ca qu'on reserve de la mémoire.
En C++, on utiliserait plutot std::vector, ou peut être std::map en fonction
des besoins.
Est ce que tu te rends compte que tu es en train d'allouer plus de 1800 tera
octets de mémoire vive.

Ou tu as vu ca?

A+

--
Jean-Marc
FAQ de fclc++: http://www.cmla.ens-cachan.fr/~dosreis/C++/FAQ
C++ FAQ Lite en VF: http://www.ifrance.com/jlecomte/c++/c++-faq-lite/index.html
Site de usenet-fr: http://www.usenet-fr.news.eu.org

Back to top
Jean-Marc Bourguet
Guest





PostPosted: Tue Apr 05, 2005 2:06 pm    Post subject: Re: probleme tableaux Reply with quote

"giovanni" <giovannisch (AT) hotmail (DOT) com> writes:

Quote:
j ai ces ligne la
int * num=new * int[100,100,100,100,100];

Ca compile? Ca m'etonne: *int n'est pas un type.


Quote:
int* nb=new int[999,999,999,999,999];
Alloue un tableau de 999 entiers: , est l'operateur , qui evalue les

expressions en sequence donc les 4 premiers 999 sont en pratique ignores.
C'est la meme chose que

int* nb = new int[999];

(Ce ne le serait pas si les expressions avaient des effets de bord,
mais ce serait de tres mauvais style).

Quote:
int* ok=new int[999,999,999,999,999];
t valeur variable de 1 a 999
nb[t][0][0][0][0]=nb_1;

Ca compile? Ca m'etonne: nb[t] est un int qui ne peut pas etre
indexe.

--
Jean-Marc
FAQ de fclc++: http://www.cmla.ens-cachan.fr/~dosreis/C++/FAQ
C++ FAQ Lite en VF: http://www.ifrance.com/jlecomte/c++/c++-faq-lite/index.html
Site de usenet-fr: http://www.usenet-fr.news.eu.org

Back to top
Cyrille
Guest





PostPosted: Tue Apr 05, 2005 2:11 pm    Post subject: Re: probleme tableaux Reply with quote

giovanni a écrit :
Quote:
me dit erreur a la ligne
nb[t][0][0][0][0]=nb_1;

Bon, je vois que vous désirez accéder à un tableau de tableau de
tableau, etc.

Quote:
41 E:sauveDev-Cppok7.cpp invalid types `int[int]' for array subscript

Oui, nb étant un simple pointeur sur un int, le déréférencer 5 fois n'a
aucun sens et ça ne compile heureusement pas.

Quote:
petite erreur corriger:
int* nb=new int[999,999,999,999,999];

Ici, vous créez un tableau de 999 ints, rien de plus. Si votre but est
de créer un tableau de tableau de ... etc, ce n'est certainement pas la
bonne syntaxe qui serait plutôt:
int nb[999][999][999][999][999];

La raison pour laquelle vous créez un simple tableau est que la virgule
est en C++ un opérateur qui évalue chaque opérande puis renvoye celle de
droite. Ici, "999,999,999,999,999" est donc évalué à 999.

Mais en fait il y a de fortes chances que vous n'arriviez pas à allouer
votre tableau même avec la syntaxe correcte: en effet reserver de
l'espace pour 999^5, c'est un peu moins de 100 millions de milliards,
d'entiers, si les entiers font quatre octets, il vous faudrait une RAM
de 400 millions de giga-octets, et un système 64-bits pour l'adresser
correctement (et du coup, les entiers feraient 8 octets, et on
approcherait pour vos besoin de 0,8 milliard de giga-octets, ou 0,8
exa-octet).

Quote:
j ai mis 999 ne sachant pas taille des donnee j ai mis le max...

Si vous ne connaissez pas la taille de vos données, utilisez
std::vector, n'allouez pas des tableaux de taille faramineuse! :)

--
win the yes need the no to win against the no!

Back to top
Cyrille
Guest





PostPosted: Tue Apr 05, 2005 2:16 pm    Post subject: Re: probleme tableaux Reply with quote

Cyrille a écrit :
Quote:

Mais en fait il y a de fortes chances que vous n'arriviez pas à allouer
votre tableau même avec la syntaxe correcte: en effet reserver de
l'espace pour 999^5, c'est un peu moins de 100 millions de milliards,
d'entiers, si les entiers font quatre octets, il vous faudrait une RAM
de 400 millions de giga-octets, et un système 64-bits pour l'adresser
correctement (et du coup, les entiers feraient 8 octets, et on
approcherait pour vos besoin de 0,8 milliard de giga-octets, ou 0,8
exa-octet).

Bon, en fait mon calcul est inexact (je me suis planté d'un facteur
100), mais l'idée est là quand même: votre tableau est trop énorme pour
n'importe quel machine.

--
win the yes need the no to win against the no!

Back to top
Vincent Lascaux
Guest





PostPosted: Tue Apr 05, 2005 2:38 pm    Post subject: Re: probleme tableaux Reply with quote


"Jean-Marc Bourguet" <jm (AT) bourguet (DOT) org> a écrit dans le message de news:
[email]pxbk6nhba6m.fsf (AT) news (DOT) bourguet.org[/email]...
Quote:
"Vincent Lascaux" <nospam (AT) nospam (DOT) org> writes:

int * num=new * int[100,100,100,100,100];
int* nb=new int[999,999,999,999,999];
int* ok=new int[999,999,999,999,999];

Ca n'est pas comme ca qu'on reserve de la mémoire.
En C++, on utiliserait plutot std::vector, ou peut être std::map en
fonction
des besoins.
Est ce que tu te rends compte que tu es en train d'allouer plus de 1800
tera
octets de mémoire vive.

Ou tu as vu ca?

Même si le compilateur comprend pas ce qu'il veut faire, moi je comprends
qu'il essaie d'allouer un tableau à 5 dimensions... Mais tu as raison : je
me suis trompé, ce qu'il veut c'est un truc 4 fois plus grand (parceque ce
sont des ints souvent sur 4 octets). Ca ferait donc plutot 7200 tera octets.

Au passage, ca m'ennerve un peu la "mode" qu'il y a sur fclc++ à répondre à
une question sans apporter aucune information. Je suis convaincu que tu
savais de quoi je parlais (franchement, s'il l'auteur savait qu'il y avait
un opérateur ',', est ce qu'il allouerait un tableau de 100 ou de 999
entiers avec le code qu'il a présenté ?)

--
Vincent



Back to top
Jean-Marc Bourguet
Guest





PostPosted: Tue Apr 05, 2005 3:12 pm    Post subject: Re: probleme tableaux Reply with quote

"Vincent Lascaux" <nospam (AT) nospam (DOT) org> writes:

Quote:
Au passage, ca m'ennerve un peu la "mode" qu'il y a sur fclc++ à
répondre à une question sans apporter aucune information.

Generalement, quand je reponds aussi laconiquement c'est que soit j'ai
donne ou compte donner l'info par ailleurs (ce qui a mon avis etait le
cas ici, j'ai donne l'info dans un autre message qui a ete poste juste
apres). Parfois il y a un delai long -- et si l'info a ete donneepar
quelqu'un d'autre au moment ou je reviens sur le pb je ne la redonne
pas. Ce n'est pas toujours l'ideal mais je prefere ca a laisser des
erreurs trainer sans etre contredites. J'essaye aussi de ne pas le
faire avec des messages en tete de fil.

A+

--
Jean-Marc
FAQ de fclc++: http://www.cmla.ens-cachan.fr/~dosreis/C++/FAQ
C++ FAQ Lite en VF: http://www.ifrance.com/jlecomte/c++/c++-faq-lite/index.html
Site de usenet-fr: http://www.usenet-fr.news.eu.org

Back to top
Vincent Lascaux
Guest





PostPosted: Tue Apr 05, 2005 3:23 pm    Post subject: Re: probleme tableaux Reply with quote

Quote:
Au passage, ca m'ennerve un peu la "mode" qu'il y a sur fclc++ à
répondre à une question sans apporter aucune information.

Generalement, quand je reponds aussi laconiquement c'est que soit j'ai
donne ou compte donner l'info par ailleurs (ce qui a mon avis etait le
cas ici, j'ai donne l'info dans un autre message qui a ete poste juste
apres). Parfois il y a un delai long -- et si l'info a ete donneepar
quelqu'un d'autre au moment ou je reviens sur le pb je ne la redonne
pas. Ce n'est pas toujours l'ideal mais je prefere ca a laisser des
erreurs trainer sans etre contredites. J'essaye aussi de ne pas le
faire avec des messages en tete de fil.

OK, même si c'est à ton message que je répondais, tu n'étais pas directement
destiné. C'est une impression générale que j'ai : souvent les contributeurs
qui savent ont tendance à répondre de façon exacte, mais sans apporter
l'information qui va permettre de débloquer la personne qui a posé la
question.

Mets toi à la place de l'auteur du message qui ne connait pas l'opérateur
,. Je pense qu'il aurait été plus efficace (et pas moins laconique) de dire
"Non : 100,100,100,100,100 vaut 100", où "Non : cf mon autre message" plutot
que "Où tu as vu ca ?" qui ne contredit pas totalement. Enfin... en même
temps, c'est vrai qu'il y a tellement d'erreurs dans le code initial que
c'est difficile d'apporter un commentaire très constructif en moins de ligne
que ne le fait un bon bouquin de C++ :)

--
Vincent



Back to top
Michael
Guest





PostPosted: Tue Apr 05, 2005 3:46 pm    Post subject: Re: probleme tableaux Reply with quote

Jean-Marc Bourguet <jm (AT) bourguet (DOT) org> wrote in
news:pxbekdpb9nq.fsf (AT) news (DOT) bourguet.org:

Quote:
int* nb=new int[999,999,999,999,999];
Alloue un tableau de 999 entiers: , est l'operateur , qui evalue les
expressions en sequence donc les 4 premiers 999 sont en pratique ignores.
C'est la meme chose que

int* nb = new int[999];

Quelle utilisation "pratique" peut-on avoir de l'operateur , ???

Back to top
Vincent Lascaux
Guest





PostPosted: Tue Apr 05, 2005 3:59 pm    Post subject: Re: probleme tableaux Reply with quote

Quote:
Quelle utilisation "pratique" peut-on avoir de l'operateur , ???

Ca peut être utilisé dans les boucles for, par exemple pour incrémenter
plusieurs variables

for(int i = 0, j = 0; i<100; i++, j+=2)
std::cout << "Le double de " << i << " est " << j << std::endl;

Il doit bien avoir un ou deux cas où il est utile de surcharger un tel
opérateur pour faire un sucre syntaxique approprié, mais ca doit être assez
rare à mon avis...

--
Vincent



Back to top
Pierre Maurette
Guest





PostPosted: Tue Apr 05, 2005 5:26 pm    Post subject: Re: probleme tableaux Reply with quote

Michael a écrit :
Quote:
Jean-Marc Bourguet <jm (AT) bourguet (DOT) org> wrote in
news:pxbekdpb9nq.fsf (AT) news (DOT) bourguet.org:


int* nb=new int[999,999,999,999,999];

Alloue un tableau de 999 entiers: , est l'operateur , qui evalue les
expressions en sequence donc les 4 premiers 999 sont en pratique ignores.
C'est la meme chose que

int* nb = new int[999];


Quelle utilisation "pratique" peut-on avoir de l'operateur , ???
La lisibilité des C++-ismes (ou C-ismes) comme i++, i >>= 2, opérateur

virgule et quelques autres est souvent affaire personnelle. Ça tombe
bien, ils sont en général d'utilisation facultative.
Comme Vincent, je trouve l'opérateur virgule pratique dans les boucles
for(;Wink, si on est raisonnable. C'est à dire si on ne joue pas à mettre
tout ce qu'on peut dans la définition de la boucle.
Je crois que l'opérateur virgule a la particularité de garantir un ordre
d'exécution des "instructions", ce qui n'est pas le cas si elles sont
séparées par des ;. Je n'ai jamais utilisé cette particularité.
--
Pierre

Back to top
Falk Tannhäuser
Guest





PostPosted: Tue Apr 05, 2005 6:13 pm    Post subject: Re: probleme tableaux Reply with quote

Pierre Maurette wrote:
Quote:
Michael a écrit :
Quelle utilisation "pratique" peut-on avoir de l'operateur , ???
La lisibilité des C++-ismes (ou C-ismes) comme i++, i >>= 2, opérateur
virgule et quelques autres est souvent affaire personnelle. Ça tombe
bien, ils sont en général d'utilisation facultative.
Comme Vincent, je trouve l'opérateur virgule pratique dans les boucles
for(;Wink, si on est raisonnable. C'est à dire si on ne joue pas à mettre
tout ce qu'on peut dans la définition de la boucle.

Un autre exemple relativement réaliste :

int a, b;
while(a = readA(), b = readB(), a > X || b < Y)
supercalifraguiextraallegoriquefrobenicate(a, b);

On note que la tentative suivante de se passer de l'opérateur virgule :

int a, b;
while((a = readA()) > X || (b = readB()) < Y)
supercalifraguiextraallegoriquefrobenicate(a, b);

ne marche pas. Au fait il faudrait dupliquer du code (ce qui est Mal !) :

int a = readA();
int b = readB();
while(a > X || b < Y)
{
supercalifraguiextraallegoriquefrobenicate(a, b);
a = readA();
b = readB();
}

en priant pour que personne ne rajoutera derrière un "continue" quelque
part dans la boucle sans s'apercevoir qu'il faut réinitialiser "a" et "b".


Quote:
Je crois que l'opérateur virgule a la particularité de garantir un ordre
d'exécution des "instructions", ce qui n'est pas le cas si elles sont
séparées par des ;. Je n'ai jamais utilisé cette particularité.

Voir ci-dessus. Cet ordre n'est cependant plus garanti lorsqu'on surcharge
l'opérateur ",", par exemple :

template {
Container& c;
public:
container_init_helper(Container& c) : c(c) {}

container_init_helper& operator=(typename Container::value_type const& v)
{ c.clear(); c.push_back(v); return *this; }

container_init_helper& operator,(typename Container::value_type const& v)
{ c.push_back(v); return *this; }
}; // class container_init_helper

template<typename Container> inline
container_init_helper<Container> container_init(Container& c)
{ return container_init_helper<Container>(c); }

Cela pourrait servir à initialiser des containers, par exemple :

std::list<double> lst;
container_init(lst) = 6.55957, 1.95583, 3.141592653589793238462643383279502884197169399375105820974944;
container_init(lst), 2.7182818284590452353602874713527, 40.3399, 166.386, 13.7603, 299792458.0;

Par contre, il ne faut pas faire :

int i = 42;
std::vector<int> vec;
container_init(vec) = 1664, i++, 4711, i;

sous peine d'avoir un comportement non défini.
Pour cette raison (comportement inconsistant entre l'opérateur prédéfini et
l'opérateur défini par l'utilisateur), les puristes banniront la surcharge
de l'opérateur ",", mais aussi et surtout de "&&" et "||".
Par ailleurs, les puristes détestent souvent aussi "continue".

Falk

Back to top
James Kanze
Guest





PostPosted: Tue Apr 05, 2005 6:51 pm    Post subject: Re: probleme tableaux Reply with quote

Michael wrote:
Quote:
Jean-Marc Bourguet <jm (AT) bourguet (DOT) org> wrote in
news:pxbekdpb9nq.fsf (AT) news (DOT) bourguet.org:

int* nb=new int[999,999,999,999,999];

Alloue un tableau de 999 entiers: , est l'operateur , qui
evalue les expressions en sequence donc les 4 premiers 999
sont en pratique ignores. C'est la meme chose que

int* nb = new int[999];

Quelle utilisation "pratique" peut-on avoir de l'operateur , ???

L'obfuscation.

--
James Kanze mailto: [email]james.kanze (AT) free (DOT) fr[/email]
Conseils en informatique orientée objet/
Beratung in objektorientierter Datenverarbeitung
9 pl. Pierre Sémard, 78210 St.-Cyr-l'École, France +33 (0)1 30 23 00 34

Back to top
Display posts from previous:   
Post new topic   Reply to topic    C++Talk.NET Forum Index -> C++ (French) All times are GMT
Goto page 1, 2, 3  Next
Page 1 of 3

 
Jump to:  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum


Powered by phpBB © 2001, 2006 phpBB Group
SEO toolkit © 2004-2006 webmedic.