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

  FORUM HardWare.fr
  Programmation
  C++

  [C++] Peut-on faire ça avec for?

 


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

[C++] Peut-on faire ça avec for?

n°172350
Alload
Posté le 06-07-2002 à 18:25:40  profilanswer
 

Peut-on sauter toute un tour d'un for pour le continuer plus loin sans passer par un gros if?
 
Genre remplacer ça par quelque chose de plus présentable:

Code :
  1. for (int i = 0; i < n; i++)
  2. {
  3. if (i != x)
  4. {
  5. ...
  6. }
  7. }


Du genre:

Code :
  1. for (int i = 0; i < n; i++)
  2. {
  3. if (i == x)
  4. on passe le reste de la boucle pour cette fois-ci
  5. ...
  6. }


 
Peut-être en utilisant break... Mais c'est de la pure théorie :D


Message édité par Alload le 06-07-2002 à 18:26:34
mood
Publicité
Posté le 06-07-2002 à 18:25:40  profilanswer
 

n°172353
lorill
Posté le 06-07-2002 à 18:30:44  profilanswer
 

break sort de la boucle
continue passe a l'itération suivante si je me souviens bien

n°172355
Alload
Posté le 06-07-2002 à 18:33:26  profilanswer
 

Oki merci pour continue.
:)

n°172373
kjus
Posté le 06-07-2002 à 20:36:27  profilanswer
 

continue marche très bien dans ce cas.
Mais niveau rapidité c'est kif-kif avec un test if dans ta boucle dans tous les cas.

n°172376
Alload
Posté le 06-07-2002 à 20:47:58  profilanswer
 

kjus a écrit a écrit :

 
Mais niveau rapidité c'est kif-kif avec un test if dans ta boucle dans tous les cas.



Ca ca m'embete pas, je voulais juste un moyen d'éviter quelques {} trop long. :)

n°172440
Hercule
Posté le 07-07-2002 à 12:06:56  profilanswer
 

et ca (j'ai pas testé):
 

Code :
  1. for(int i=0;i<n;i+=(i==x+1));


---------------
Ils veulent la jouer hard, on va la jouer hard  
n°172442
gilou
Modérateur
Modosaurus Rex
Posté le 07-07-2002 à 12:08:52  profilanswer
 

Hercule a écrit a écrit :

et ca (j'ai pas testé):
 

Code :
  1. for(int i=0;i<n;i+=(i==x+1));






Parce que tu ajoutes des booleens a des entiers, toi?
Bravo!
A+,


---------------
There's more than what can be linked! --  Le capitaine qui ne veut pas obéir à la carte finira par obéir aux récifs. -- Il ne faut plus dire Sarkozy, mais Sarkozon -- (╯°□°)╯︵ ┻━┻
n°172443
antp
Super Administrateur
Champion des excuses bidons
Posté le 07-07-2002 à 12:18:33  profilanswer
 

en effet c'est dangereux :)
 
faudrait faire ça je suppose:
 

Code :
  1. for(int i=0;i<n;i+=((i==x+1)?1:0));


Message édité par antp le 07-07-2002 à 12:18:41

---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
n°172448
Kristoph
Posté le 07-07-2002 à 12:30:39  profilanswer
 

On est parti pour une joli boucle infinie comme ça :)

n°172451
antp
Super Administrateur
Champion des excuses bidons
Posté le 07-07-2002 à 12:51:36  profilanswer
 

en effet :D
j'avais même pas fait attention, je corrigeais juste l'ajout du booléen


---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
mood
Publicité
Posté le 07-07-2002 à 12:51:36  profilanswer
 

n°172456
Hercule
Posté le 07-07-2002 à 13:28:06  profilanswer
 

J'ajoute des booleen à des entier, comme on ajoute de float à des entier ou à des unsigned char.
On utilise des entiers comme booleen, ca vous choque pas pourtant :) .
true=1
false=0 (ca c'est sur)
je sais pas si c'est ANSI, mais dans gcc et sous visual ca marche comme ca.
 
Pas de boucle ininie, évidement j'avais oublié des parenthéses:
for(int i=0;i<n;i+=((i==x)+1))
et ca marche (testé)
 
C'est juste du style, et ca ajoute une adition en plus, donc c'est pas top, mais ca marche.
 
 


---------------
Ils veulent la jouer hard, on va la jouer hard  
n°172457
antp
Super Administrateur
Champion des excuses bidons
Posté le 07-07-2002 à 13:32:06  profilanswer
 

ha ok j'avais pas lu ça comme ça
 
ça devient ça alors:
 
  for(int i=0;i<n;i+=((i==x)?2:1));  
 
true = n'importe quoi différent de 0
 
Je ne sais pas si tous les compilateurs mettent d'office 1 pour true.
Il me semble qu'il y a une histoire de -1 parfois... enfin je mélange peut-être avec autre chose...


---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
n°172458
Hercule
Posté le 07-07-2002 à 13:44:53  profilanswer
 

Dans ce cas la manière précedement donné, autre que la mienne est meilleur.


---------------
Ils veulent la jouer hard, on va la jouer hard  
n°172461
R3g
fonctionnaire certifié ITIL
Posté le 07-07-2002 à 14:19:40  profilanswer
 

En effet, normalement false == 0, et true == !0. En fait la valeur de true n'est meme pas sensée etre la meme à chaque fois.

n°172480
Hercule
Posté le 07-07-2002 à 15:02:26  profilanswer
 

true est stocké sur 1 bit à 1, donc le cast s'il est bien fait
sa passe à 1.


---------------
Ils veulent la jouer hard, on va la jouer hard  
n°172483
bjone
Insert booze to continue
Posté le 07-07-2002 à 15:04:40  profilanswer
 

antp a écrit a écrit :

ha ok j'avais pas lu ça comme ça
 
ça devient ça alors:
 
  for(int i=0;i<n;i+=((i==x)?2:1));  
 
true = n'importe quoi différent de 0
 
Je ne sais pas si tous les compilateurs mettent d'office 1 pour true.
Il me semble qu'il y a une histoire de -1 parfois... enfin je mélange peut-être avec autre chose...




 
nan nan, true est -1 des fois.

n°172488
lorill
Posté le 07-07-2002 à 15:08:41  profilanswer
 

Hercule a écrit a écrit :

true est stocké sur 1 bit à 1, donc le cast s'il est bien fait
sa passe à 1.




 
Ca m'étonnerait franchement que ce soit stocké sur un seul bit. Les machines fonctionnent généralement par octets, vaut mieux perdre 7 bits que de faire une exception.
 
Enfin peut-etre que je dis n'importe quoi, mais je pense pas.

n°172497
R3g
fonctionnaire certifié ITIL
Posté le 07-07-2002 à 15:18:54  profilanswer
 

lorill a écrit a écrit :

 
 
Ca m'étonnerait franchement que ce soit stocké sur un seul bit. Les machines fonctionnent généralement par octets, vaut mieux perdre 7 bits que de faire une exception.
 
Enfin peut-etre que je dis n'importe quoi, mais je pense pas.



En java, les boolean son stockés sur 1 bit. En C/C++ (il me semble que) les bool sont stockés dans des char.

n°172498
Hercule
Posté le 07-07-2002 à 15:19:24  profilanswer
 

en c++ le compilo le stock sur 1 bit. Sur un octet tu stock 8 boolean,  c'est l'avantage du type booleen du c++ sur le c.


---------------
Ils veulent la jouer hard, on va la jouer hard  
n°172499
lorill
Posté le 07-07-2002 à 15:20:03  profilanswer
 

R3g a écrit a écrit :

En java, les boolean son stockés sur 1 bit.  




 
Serieux ? T'as une url pour ma culture ?

n°172515
R3g
fonctionnaire certifié ITIL
Posté le 07-07-2002 à 16:01:57  profilanswer
 

Hercule a écrit a écrit :

en c++ le compilo le stock sur 1 bit. Sur un octet tu stock 8 boolean,  c'est l'avantage du type booleen du c++ sur le c.



A ok, j'ignorais ;)
 
lorill -> psa d'url comme ça, ça me viens d'un de mes premiers cours de java à la fac.

n°172524
antp
Super Administrateur
Champion des excuses bidons
Posté le 07-07-2002 à 16:41:57  profilanswer
 

Hercule a écrit a écrit :

en c++ le compilo le stock sur 1 bit. Sur un octet tu stock 8 boolean,  c'est l'avantage du type booleen du c++ sur le c.




 
ça m'étonnerais qu'une variable bool soit stockée sur 1 bit, à moins que tu en aies plusieurs déclarées l'une après l'autre.
y a pas moyen d'allouer moins de 1 octet, la mémoire est découpée en octets...
 
D'ailleurs les structures avec des "bit fields", si ça ne tombe pas sur un nombre de bits multiple de 8, il arondit au multiple supérieur en occupation mémoire.


Message édité par antp le 07-07-2002 à 16:42:34

---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
n°172527
Hercule
Posté le 07-07-2002 à 16:49:28  profilanswer
 

>D'ailleurs les structures avec des "bit fields", si ça ne tombe pas sur un nombre de bits multiple de 8, il arondit au multiple
>supérieur en occupation mémoire.
 
ben oui, c'est comme ca que ca fonctionne,
je viens de le relire ce matin, sinon il n'y a aucun  
interêt à avoir un vrai type BOOL, autant utiliser un char.
 
Et quand en java on dit qu'un boolean prend 1 bit, ca doit être pareil, mais il faut compter  
la structure du garbage collector en plus.


---------------
Ils veulent la jouer hard, on va la jouer hard  
n°172528
zion
Plop
Posté le 07-07-2002 à 16:51:07  profilanswer
 

On aura tout lu...
 
Vas y que je te push un boolean de 1 bit sur le stack, ou que j'alloue 1 boolean de 1 bit...
 
Mais faut arrêter la cocaine les mecs!
 
De plus, sous windows, les booleans sont d'offices sur 32 bits pour des raisons de popotte interne avec Microsoft qui les utilise comme des booleans ou comme des valeurs de retours pour des handle, etc, etc...
 
Un champ de bits pour foutre plusieurs boolean, la a la limite tu pourrais, mais tu ne sais jamais allouer un truc plus petit qu'un byte.
 
Quel bon délire  :D


---------------
Informaticien.be - Lancez des défis à vos amis
n°172530
[SDF]Poire
Vive Grumly
Posté le 07-07-2002 à 16:55:53  profilanswer
 

Hercule a écrit a écrit :

>D'ailleurs les structures avec des "bit fields", si ça ne tombe pas sur un nombre de bits multiple de 8, il arondit au multiple
>supérieur en occupation mémoire.
 
ben oui, c'est comme ca que ca fonctionne,
je viens de le relire ce matin, sinon il n'y a aucun  
interêt à avoir un vrai type BOOL, autant utiliser un char.
 
Et quand en java on dit qu'un boolean prend 1 bit, ca doit être pareil, mais il faut compter  
la structure du garbage collector en plus.
 




 :lol:  :lol:  :lol:  
[:skylight]
 
tu confond pas bit et byte par hasard ?


---------------
Des bons sites pour Delphi? http://forum.hardware.fr/forum2.php3?post=16838&cat=10 -- informaticien -- http://www.z0rglub.com/phpwebgallery/ -- Delphi :love:
n°172532
Hercule
Posté le 07-07-2002 à 16:56:31  profilanswer
 

Il faut lire les gas, j'ai jamais dit qu'on foutait qu'un bit dans le stack.
 
si t'as un booleen tu le stock dans un octet
si t'as 4 booleen toujour dans le même octet
si t'as 9 boolean tu les stock dans 2 octets.
Si t'a 512 boolean tu les stock dans 64 octet (miracle 1 booleen = 1 bit ).
 
 
 


---------------
Ils veulent la jouer hard, on va la jouer hard  
n°172533
zion
Plop
Posté le 07-07-2002 à 17:00:03  profilanswer
 

Merde il insiste  :ouch:  
 
Dans un champ de bits ouai, mais sinon tu peux toujours courir mon coco  :D  
 
Et c'est quoi le registre pour stocker 1 bit?
ah/8?   :lol:


---------------
Informaticien.be - Lancez des défis à vos amis
n°172534
Hercule
Posté le 07-07-2002 à 17:04:06  profilanswer
 

Ce que vous être en train de dire c'est que c'est mieux d'utiliser les char que les bool, pour stocker un bool !


---------------
Ils veulent la jouer hard, on va la jouer hard  
n°172535
antp
Super Administrateur
Champion des excuses bidons
Posté le 07-07-2002 à 17:06:40  profilanswer
 

bhen non char et bool c'est pareil, un octet
mais bool c'est plus pratique pour s'y retrouver


---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
n°172540
zion
Plop
Posté le 07-07-2002 à 17:23:49  profilanswer
 

Hercule a écrit a écrit :

Ce que vous être en train de dire c'est que c'est mieux d'utiliser les char que les bool, pour stocker un bool !
 




 
Sans blague, mais alors pourquoi tu utilises un hwnd plutot qu'un longint? Hein? Parce que c'est tous les 2 4 octets... Tout simplement parce qu'on apelle ca un type  :D  
 


---------------
Informaticien.be - Lancez des défis à vos amis
n°172544
Hercule
Posté le 07-07-2002 à 17:36:55  profilanswer
 

je fait  
 
#define bool char
#define true 0
#define false 1
 
et j'ai crée le type bool du c++ en c, je suis fort...
C'est dans la norme ansi qu'il dise que les bool
 peuvent être stocké dans un bitset, c'est pas moi.
Un compilo qui respecte la norme ansi ca cour pas les rues je suis d'accord.
 
Sinon il n'y a aucun interêt à avoir un vrai type bool.
 
Moi j'utilise un long pour passer plusieur booleen
à une fonction en même temps (comme opengl).  
 
Si le compilo lui ne veux pas optimiser il n'optimise pas.
 
hwnd plutot qu'un longint?
Parce que longint est un type de base et pas hwnd (gcc il connait pas si tu fais pas include ..).
 
Bool n'était pas un type de base en c et il l'est en c++, c'est ca toute la différence.
 


---------------
Ils veulent la jouer hard, on va la jouer hard  
n°172545
Kristoph
Posté le 07-07-2002 à 17:39:53  profilanswer
 

Hercule a écrit a écrit :

je fait  
 
#define bool char
#define true 0
#define false 1
 
(...)
 




 
C'est un type bool fort interessant que voila. Et il marche ? :D
 
PS: Si tu veux vraiment reproduire le type bool du C++ en C, je ne peux que te conseiller d'utiliser un enum, ca sera beaucoup plus ressemblant.


Message édité par Kristoph le 07-07-2002 à 17:40:40
n°172546
Hercule
Posté le 07-07-2002 à 17:41:28  profilanswer
 

pardon
#define true 1
#define false 0


---------------
Ils veulent la jouer hard, on va la jouer hard  
n°172548
[SDF]Poire
Vive Grumly
Posté le 07-07-2002 à 17:53:35  profilanswer
 

Hercule a écrit a écrit :

pardon
#define true 1
#define false 0  




niporte nawak


---------------
Des bons sites pour Delphi? http://forum.hardware.fr/forum2.php3?post=16838&cat=10 -- informaticien -- http://www.z0rglub.com/phpwebgallery/ -- Delphi :love:
n°172549
[SDF]Poire
Vive Grumly
Posté le 07-07-2002 à 17:57:11  profilanswer
 

The four predefined Boolean types are Boolean, ByteBool, WordBool, and LongBool. Boolean is the preferred type. The others exist to provide compatibility with other languages and operating system libraries.
A Boolean variable occupies one byte of memory, a ByteBool variable also occupies one byte, a WordBool variable occupies two bytes (one word), and a LongBool variable occupies four bytes (two words).
 
Boolean values are denoted by the predefined constants True and False. The following relationships hold.
 
Boolean ByteBool, WordBool, LongBool
False < True False <> True
Ord(False) = 0 Ord(False) = 0
Ord(True) = 1 Ord(True) <> 0
Succ(False) = True Succ(False) = True
Pred(True) = False Pred(False) = True
A value of type ByteBool, LongBool, or WordBool is considered True when its ordinality is nonzero. If such a value appears in a context where a Boolean is expected, the compiler automatically converts any value of nonzero ordinality to True.
The remarks above refer to the ordinality of Boolean values?not to the values themselves. In Object Pascal, Boolean expressions cannot be equated with integers or reals. Hence, if X is an integer variable, the statement
 
if X then ...;
 
generates a compilation error. Casting the variable to a Boolean type is unreliable, but each of the following alternatives will work.
 
if X <> 0 then ...;        { use longer expression that returns Boolean value }
var OK: Boolean            { use Boolean variable }
 
 ...
if X <> 0 then OK := True;
if OK then ...;


Message édité par [SDF]Poire le 07-07-2002 à 17:58:02

---------------
Des bons sites pour Delphi? http://forum.hardware.fr/forum2.php3?post=16838&cat=10 -- informaticien -- http://www.z0rglub.com/phpwebgallery/ -- Delphi :love:
n°172553
antp
Super Administrateur
Champion des excuses bidons
Posté le 07-07-2002 à 18:14:57  profilanswer
 

Ouais mais bon là tu parles de Pascal, il va te sortir qu'en C++ ça ne prend qu'un bit contrairement au Pascal.


---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
n°172554
Hercule
Posté le 07-07-2002 à 18:16:09  profilanswer
 

ben non son code c'est de l'ansi :)


---------------
Ils veulent la jouer hard, on va la jouer hard  
n°172555
antp
Super Administrateur
Champion des excuses bidons
Posté le 07-07-2002 à 18:17:35  profilanswer
 

De l'ANSI :heink: C'est du pascal plutôt...


---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
n°172556
Hercule
Posté le 07-07-2002 à 18:21:41  profilanswer
 

c'était ironique...
 
Dans la norme true c'est bien 1 en entier, et 0 pour false.


---------------
Ils veulent la jouer hard, on va la jouer hard  
n°172559
Hercule
Posté le 07-07-2002 à 18:36:14  profilanswer
 

http://www.eastcoastgames.com/cpp/chapter2.html
 
a+


---------------
Ils veulent la jouer hard, on va la jouer hard  
mood
Publicité
Posté le   profilanswer
 

 Page :   1  2
Page Précédente

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

  [C++] Peut-on faire ça avec for?

 

Sujets relatifs
Plus de sujets relatifs à : [C++] Peut-on faire ça avec for?


Copyright © 1997-2025 Groupe LDLC (Signaler un contenu illicite / Données personnelles)