Si j'appelle cette fonction, elle n'affiche pas la ligne vers sdout.
void set(int n)
{
std::cout<< "in set " << (bits[n >> 3] |= 1 << (n & 7)) << std::endl;
bits[n >> 3] |= 1 << (n & 7);
}
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
Laurent DELEPINE
Québec wrote:
Bonjour,
Si j'appelle cette fonction, elle n'affiche pas la ligne vers sdout. void set(int n) { std::cout<< "in set " << (bits[n >> 3] |= 1 << (n & 7)) << std::endl; bits[n >> 3] |= 1 << (n & 7); }
Chez moi si. Peut etre un probleme avec ton shell unix.
A+
LD
Québec wrote:
Bonjour,
Si j'appelle cette fonction, elle n'affiche pas la ligne vers sdout.
void set(int n)
{
std::cout<< "in set " << (bits[n >> 3] |= 1 << (n & 7)) << std::endl;
bits[n >> 3] |= 1 << (n & 7);
}
Chez moi si. Peut etre un probleme avec ton shell unix.
Si j'appelle cette fonction, elle n'affiche pas la ligne vers sdout. void set(int n) { std::cout<< "in set " << (bits[n >> 3] |= 1 << (n & 7)) << std::endl; bits[n >> 3] |= 1 << (n & 7); }
Chez moi si. Peut etre un probleme avec ton shell unix.
A+
LD
Alexandre
"Québec" a écrit dans le message de news:WnSzb.35898$
Bonjour,
Si j'appelle cette fonction, elle n'affiche pas la ligne vers sdout. void set(int n) { std::cout<< "in set " << (bits[n >> 3] |= 1 << (n & 7)) << std::endl; bits[n >> 3] |= 1 << (n & 7); }
Tu devrais avoir une ligne encore plus compacte, la lecture en serait encore
plus difficile ;-) Enfin, chez moi la ligne affiche quelque chose... c'est quoi ton compilo/système ?
"Québec" <notAgain@enough.ca> a écrit dans le message de
news:WnSzb.35898$lG3.522335@weber.videotron.net...
Bonjour,
Si j'appelle cette fonction, elle n'affiche pas la ligne vers sdout.
void set(int n)
{
std::cout<< "in set " << (bits[n >> 3] |= 1 << (n & 7)) << std::endl;
bits[n >> 3] |= 1 << (n & 7);
}
Tu devrais avoir une ligne encore plus compacte, la lecture en serait encore
plus difficile ;-)
Enfin, chez moi la ligne affiche quelque chose... c'est quoi ton
compilo/système ?
"Québec" a écrit dans le message de news:WnSzb.35898$
Bonjour,
Si j'appelle cette fonction, elle n'affiche pas la ligne vers sdout. void set(int n) { std::cout<< "in set " << (bits[n >> 3] |= 1 << (n & 7)) << std::endl; bits[n >> 3] |= 1 << (n & 7); }
Tu devrais avoir une ligne encore plus compacte, la lecture en serait encore
plus difficile ;-) Enfin, chez moi la ligne affiche quelque chose... c'est quoi ton compilo/système ?
C'est quoi, bits ? Sans savoir le type de bits, impossible à savoir le type de ton expression (qui est, en passant, un merveilleux exemple de l'offuscation). Dans savoir le type de l'expression, c'est impossible à savoir même s'il doit afficher quelque chose.
Mais j'imagine que le problème est ailleurs.
-- James Kanze mailto: Conseils en informatique orientée objet/ Beratung in objektorientierter Datenverarbeitung 11 rue de Rambouillet, 78460 Chevreuse, France +33 1 41 89 80 93
"Québec" <notAgain@enough.ca> writes:
|> Si j'appelle cette fonction, elle n'affiche pas la ligne vers sdout.
C'est quoi, bits ? Sans savoir le type de bits, impossible à savoir
le type de ton expression (qui est, en passant, un merveilleux exemple
de l'offuscation). Dans savoir le type de l'expression, c'est impossible
à savoir même s'il doit afficher quelque chose.
Mais j'imagine que le problème est ailleurs.
--
James Kanze mailto:kanze@gabi-soft.fr
Conseils en informatique orientée objet/
Beratung in objektorientierter Datenverarbeitung
11 rue de Rambouillet, 78460 Chevreuse, France +33 1 41 89 80 93
C'est quoi, bits ? Sans savoir le type de bits, impossible à savoir le type de ton expression (qui est, en passant, un merveilleux exemple de l'offuscation). Dans savoir le type de l'expression, c'est impossible à savoir même s'il doit afficher quelque chose.
Mais j'imagine que le problème est ailleurs.
-- James Kanze mailto: Conseils en informatique orientée objet/ Beratung in objektorientierter Datenverarbeitung 11 rue de Rambouillet, 78460 Chevreuse, France +33 1 41 89 80 93
Québec
À l'écran: 2 3 4 5 7
4 primes 0 milliseconds
0--test 10010101100--set 00010101100--reset 1 in test (n-1)/8 + 1 = 2
es tu sûr que dans ton cas stdout est bien dirigé vers la sortie écran console ?
int count = 0; int i; for (i = 2; i <= N; i++) b.set(i); i = 2; while (i * i <= N) { if (b.test(i)) { int k = 2 * i; while (k <= N) { b.reset(k); k += i; } } i++; } for (i = 2; i <= N; i++) { if (b.test(i)) { //#ifdef PRINT cout << i << "n"; //#endif count++; } }
int count = 0;
int i;
for (i = 2; i <= N; i++)
b.set(i);
i = 2;
while (i * i <= N)
{
if (b.test(i))
{
int k = 2 * i;
while (k <= N)
{ b.reset(k);
k += i;
}
}
i++;
}
for (i = 2; i <= N; i++)
{
if (b.test(i))
{
//#ifdef PRINT
cout << i << "n";
//#endif
count++;
}
}
int count = 0; int i; for (i = 2; i <= N; i++) b.set(i); i = 2; while (i * i <= N) { if (b.test(i)) { int k = 2 * i; while (k <= N) { b.reset(k); k += i; } } i++; } for (i = 2; i <= N; i++) { if (b.test(i)) { //#ifdef PRINT cout << i << "n"; //#endif count++; } }
"Québec" a écrit dans le message de news:lhlAb.77976$
J'oubliais. int main est en dehorsde la classe.
Borland C++ Builder 5
et c'est bien une appli console (pas GUI) ?
kanze
"Québec" wrote in message news:<J4nAb.114969$...
À l'écran: 2 3 4 5 7
4 primes 0 milliseconds
0--test 10010101100--set 00010101100--reset 1 in test (n-1)/8 + 1 = 2
Ce qui correspond à ce que je m'attendrais avec ton programme, à une exception près. (Ça m'étonne un peu que tu as réelement affiché le troisième ligne.)
es tu sûr que dans ton cas stdout est bien dirigé vers la sortie écran console ?
int count = 0; int i; for (i = 2; i <= N; i++) b.set(i); i = 2; while (i * i <= N) { if (b.test(i)) { int k = 2 * i; while (k <= N) { b.reset(k); k += i; } } i++; } for (i = 2; i <= N; i++) { if (b.test(i)) { //#ifdef PRINT cout << i << "n"; //#endif count++; } }
Et voilà la preuve que AVOID_STANDARD_BITSET n'est pas défini. Parce que dans ton bitset à toi, set renvoie void, et l'expression ci-dessus serait illégale.
-- James Kanze GABI Software mailto: Conseils en informatique orientée objet/ http://www.gabi-soft.fr Beratung in objektorientierter Datenverarbeitung 11 rue de Rambouillet, 78460 Chevreuse, France, +33 (0)1 30 23 45 16
"Québec" <notAgain@enough.ca> wrote in message
news:<J4nAb.114969$3l5.1427349@wagner.videotron.net>...
À l'écran:
2
3
4
5
7
4 primes
0 milliseconds
0--test
10010101100--set
00010101100--reset
1 in test (n-1)/8 + 1 = 2
Ce qui correspond à ce que je m'attendrais avec ton programme, à une
exception près. (Ça m'étonne un peu que tu as réelement affiché le
troisième ligne.)
es tu sûr que dans ton cas stdout est bien dirigé vers la sortie
écran console ?
int count = 0;
int i;
for (i = 2; i <= N; i++)
b.set(i);
i = 2;
while (i * i <= N)
{
if (b.test(i))
{
int k = 2 * i;
while (k <= N)
{ b.reset(k);
k += i;
}
}
i++;
}
for (i = 2; i <= N; i++)
{
if (b.test(i))
{
//#ifdef PRINT
cout << i << "n";
//#endif
count++;
}
}
Et voilà la preuve que AVOID_STANDARD_BITSET n'est pas défini. Parce que
dans ton bitset à toi, set renvoie void, et l'expression ci-dessus
serait illégale.
--
James Kanze GABI Software mailto:kanze@gabi-soft.fr
Conseils en informatique orientée objet/ http://www.gabi-soft.fr
Beratung in objektorientierter Datenverarbeitung
11 rue de Rambouillet, 78460 Chevreuse, France, +33 (0)1 30 23 45 16
0--test 10010101100--set 00010101100--reset 1 in test (n-1)/8 + 1 = 2
Ce qui correspond à ce que je m'attendrais avec ton programme, à une exception près. (Ça m'étonne un peu que tu as réelement affiché le troisième ligne.)
es tu sûr que dans ton cas stdout est bien dirigé vers la sortie écran console ?
int count = 0; int i; for (i = 2; i <= N; i++) b.set(i); i = 2; while (i * i <= N) { if (b.test(i)) { int k = 2 * i; while (k <= N) { b.reset(k); k += i; } } i++; } for (i = 2; i <= N; i++) { if (b.test(i)) { //#ifdef PRINT cout << i << "n"; //#endif count++; } }
Et voilà la preuve que AVOID_STANDARD_BITSET n'est pas défini. Parce que dans ton bitset à toi, set renvoie void, et l'expression ci-dessus serait illégale.
-- James Kanze GABI Software mailto: Conseils en informatique orientée objet/ http://www.gabi-soft.fr Beratung in objektorientierter Datenverarbeitung 11 rue de Rambouillet, 78460 Chevreuse, France, +33 (0)1 30 23 45 16
Québec
Si n'est pas défini. #ifndef AVOID_STANDARD_BITSET donc #include <bitset.h> n'est pas utilisé?
(Ça m'étonne un peu que tu aies réellement affiché le troisième ligne.) 0--test
10010101100--set 00010101100--reset ---->pourquoi plus cele-ci que la précédente qui est void aussi? 1 in test (n-1)/8 + 1 = 2
Alors, ce qui est affiché, vient d'où? Des trois fonctions de la classe bitset ou de cette macro?
bitset() : bits(new char[(N - 1) / 8 + 1]) {}?
Si n'est pas défini.
#ifndef AVOID_STANDARD_BITSET
donc
#include <bitset.h>
n'est pas utilisé?
(Ça m'étonne un peu que tu aies réellement affiché le
troisième ligne.)
0--test
10010101100--set
00010101100--reset ---->pourquoi plus cele-ci que la précédente qui est
void aussi?
1 in test (n-1)/8 + 1 = 2
Alors, ce qui est affiché, vient d'où? Des trois fonctions de la classe
bitset ou de cette macro?
Si n'est pas défini. #ifndef AVOID_STANDARD_BITSET donc #include <bitset.h> n'est pas utilisé?
(Ça m'étonne un peu que tu aies réellement affiché le troisième ligne.) 0--test
10010101100--set 00010101100--reset ---->pourquoi plus cele-ci que la précédente qui est void aussi? 1 in test (n-1)/8 + 1 = 2
Alors, ce qui est affiché, vient d'où? Des trois fonctions de la classe bitset ou de cette macro?
bitset() : bits(new char[(N - 1) / 8 + 1]) {}?
kanze
"Québec" wrote in message news:<XR0Bb.26743$...
Si n'est pas défini. #ifndef AVOID_STANDARD_BITSET donc #include <bitset.h> n'est pas utilisé?
Je ne connais pas les options de compilation qui t'ont servi, mais le code que tu as écris par la suite ne doit pas se compiler avec ton bitset à toi, mais est parfaitement légal avec le bitset standard. J'en conclus donc que la compilation conditionnelle prenait le bitset standard.
(Ça m'étonne un peu que tu aies réellement affiché le troisième ligne.)
Au début, tu as affiché :
2 3 4 5 7
L'algorithme en question, c'est le crible d'Ératosthène, pour trouver les nombres premiers. Je n'ai pas vérifié ton implémentation en détail, mais à côté de l'affichage qui génère les nombres ci-dessus, il y avait aussi un compteur, et tu affichais aussi qu'il y avait quatre premiers trouvés. Or, ci-dessus, il y a cinq lignes, non quatre. Et le nombre 4 n'est pas premier. J'ai donc des doutes qu'il a été réelement affiché.
0--test 10010101100--set 00010101100--reset ---->pourquoi plus cele-ci que la précédente qui est void aussi?
Ce sont ces deux lignes qui me convainc que tu te sers du bitset standard, et non le tien. Dans le tien, les fonctions set et reset ont un type de retour de void -- les expressions « cout << b.set(N) » ou « cout << b.reset(N) » ne sont pas valides, n'importe quel compilateur les réfusera. Avec le bitset standard, elles ne sont pas valide non plus, mais le problème est uniquement un des bornes -- tu as un comportement indéfini qui ne pose aucun problème pour le compilateur, et qui risque même de marcher la plupart du temps.
1 in test (n-1)/8 + 1 = 2
Alors, ce qui est affiché, vient d'où? Des trois fonctions de la classe bitset ou de cette macro?
bitset() : bits(new char[(N - 1) / 8 + 1]) {}?
Quel macro ?
Si je régarde le code que tu as posté, il ne se compile pas si AVOID_STANDARD_BITSET est défini. Et s'il n'est pas défini, ce que tu présentes comme sortie me paraît juste, à l'exception près du 4. S'il n'est pas défini, ton bitset à toi n'est même pas compilé ; c'est donc normal que les sorties qu'il contient ne s'effectuent.
-- James Kanze GABI Software mailto: Conseils en informatique orientée objet/ http://www.gabi-soft.fr Beratung in objektorientierter Datenverarbeitung 11 rue de Rambouillet, 78460 Chevreuse, France, +33 (0)1 30 23 45 16
"Québec" <notAgain@enough.ca> wrote in message
news:<XR0Bb.26743$pQ1.782726@wagner.videotron.net>...
Si n'est pas défini.
#ifndef AVOID_STANDARD_BITSET
donc
#include <bitset.h>
n'est pas utilisé?
Je ne connais pas les options de compilation qui t'ont servi, mais le
code que tu as écris par la suite ne doit pas se compiler avec ton
bitset à toi, mais est parfaitement légal avec le bitset standard. J'en
conclus donc que la compilation conditionnelle prenait le bitset
standard.
(Ça m'étonne un peu que tu aies réellement affiché le
troisième ligne.)
Au début, tu as affiché :
2
3
4
5
7
L'algorithme en question, c'est le crible d'Ératosthène, pour trouver
les nombres premiers. Je n'ai pas vérifié ton implémentation en détail,
mais à côté de l'affichage qui génère les nombres ci-dessus, il y avait
aussi un compteur, et tu affichais aussi qu'il y avait quatre premiers
trouvés. Or, ci-dessus, il y a cinq lignes, non quatre. Et le nombre 4
n'est pas premier. J'ai donc des doutes qu'il a été réelement affiché.
0--test
10010101100--set
00010101100--reset ---->pourquoi plus cele-ci que la précédente qui est
void aussi?
Ce sont ces deux lignes qui me convainc que tu te sers du bitset
standard, et non le tien. Dans le tien, les fonctions set et reset ont
un type de retour de void -- les expressions « cout << b.set(N) » ou
« cout << b.reset(N) » ne sont pas valides, n'importe quel compilateur
les réfusera. Avec le bitset standard, elles ne sont pas valide non
plus, mais le problème est uniquement un des bornes -- tu as un
comportement indéfini qui ne pose aucun problème pour le compilateur, et
qui risque même de marcher la plupart du temps.
1 in test (n-1)/8 + 1 = 2
Alors, ce qui est affiché, vient d'où? Des trois fonctions de la
classe bitset ou de cette macro?
bitset() : bits(new char[(N - 1) / 8 + 1]) {}?
Quel macro ?
Si je régarde le code que tu as posté, il ne se compile pas si
AVOID_STANDARD_BITSET est défini. Et s'il n'est pas défini, ce que tu
présentes comme sortie me paraît juste, à l'exception près du 4. S'il
n'est pas défini, ton bitset à toi n'est même pas compilé ; c'est donc
normal que les sorties qu'il contient ne s'effectuent.
--
James Kanze GABI Software mailto:kanze@gabi-soft.fr
Conseils en informatique orientée objet/ http://www.gabi-soft.fr
Beratung in objektorientierter Datenverarbeitung
11 rue de Rambouillet, 78460 Chevreuse, France, +33 (0)1 30 23 45 16
Si n'est pas défini. #ifndef AVOID_STANDARD_BITSET donc #include <bitset.h> n'est pas utilisé?
Je ne connais pas les options de compilation qui t'ont servi, mais le code que tu as écris par la suite ne doit pas se compiler avec ton bitset à toi, mais est parfaitement légal avec le bitset standard. J'en conclus donc que la compilation conditionnelle prenait le bitset standard.
(Ça m'étonne un peu que tu aies réellement affiché le troisième ligne.)
Au début, tu as affiché :
2 3 4 5 7
L'algorithme en question, c'est le crible d'Ératosthène, pour trouver les nombres premiers. Je n'ai pas vérifié ton implémentation en détail, mais à côté de l'affichage qui génère les nombres ci-dessus, il y avait aussi un compteur, et tu affichais aussi qu'il y avait quatre premiers trouvés. Or, ci-dessus, il y a cinq lignes, non quatre. Et le nombre 4 n'est pas premier. J'ai donc des doutes qu'il a été réelement affiché.
0--test 10010101100--set 00010101100--reset ---->pourquoi plus cele-ci que la précédente qui est void aussi?
Ce sont ces deux lignes qui me convainc que tu te sers du bitset standard, et non le tien. Dans le tien, les fonctions set et reset ont un type de retour de void -- les expressions « cout << b.set(N) » ou « cout << b.reset(N) » ne sont pas valides, n'importe quel compilateur les réfusera. Avec le bitset standard, elles ne sont pas valide non plus, mais le problème est uniquement un des bornes -- tu as un comportement indéfini qui ne pose aucun problème pour le compilateur, et qui risque même de marcher la plupart du temps.
1 in test (n-1)/8 + 1 = 2
Alors, ce qui est affiché, vient d'où? Des trois fonctions de la classe bitset ou de cette macro?
bitset() : bits(new char[(N - 1) / 8 + 1]) {}?
Quel macro ?
Si je régarde le code que tu as posté, il ne se compile pas si AVOID_STANDARD_BITSET est défini. Et s'il n'est pas défini, ce que tu présentes comme sortie me paraît juste, à l'exception près du 4. S'il n'est pas défini, ton bitset à toi n'est même pas compilé ; c'est donc normal que les sorties qu'il contient ne s'effectuent.
-- James Kanze GABI Software mailto: Conseils en informatique orientée objet/ http://www.gabi-soft.fr Beratung in objektorientierter Datenverarbeitung 11 rue de Rambouillet, 78460 Chevreuse, France, +33 (0)1 30 23 45 16