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

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

Marsh Posté le 06-07-2002 à 18:25:40    

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
Reply

Marsh Posté le 06-07-2002 à 18:25:40   

Reply

Marsh Posté le 06-07-2002 à 18:30:44    

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

Reply

Marsh Posté le 06-07-2002 à 18:33:26    

Oki merci pour continue.
:)

Reply

Marsh Posté le 06-07-2002 à 20:36:27    

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.

Reply

Marsh Posté le 06-07-2002 à 20:47:58    

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. :)

Reply

Marsh Posté le 07-07-2002 à 12:06:56    

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  
Reply

Marsh Posté le 07-07-2002 à 12:08:52    

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. -- No jab ? No job ! -- (╯°□°)╯︵ ┻━┻
Reply

Marsh Posté le 07-07-2002 à 12:18:33    

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
Reply

Marsh Posté le 07-07-2002 à 12:30:39    

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

Reply

Marsh Posté le 07-07-2002 à 12:51:36    

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
Reply

Marsh Posté le 07-07-2002 à 12:51:36   

Reply

Marsh Posté le 07-07-2002 à 13:28:06    

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  
Reply

Marsh Posté le 07-07-2002 à 13:32:06    

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
Reply

Marsh Posté le 07-07-2002 à 13:44:53    

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  
Reply

Marsh Posté le 07-07-2002 à 14:19:40    

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.

Reply

Marsh Posté le 07-07-2002 à 15:02:26    

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  
Reply

Marsh Posté le 07-07-2002 à 15:04:40    

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.

Reply

Marsh Posté le 07-07-2002 à 15:08:41    

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.

Reply

Marsh Posté le 07-07-2002 à 15:18:54    

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.

Reply

Marsh Posté le 07-07-2002 à 15:19:24    

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  
Reply

Marsh Posté le 07-07-2002 à 15:20:03    

R3g a écrit a écrit :

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




 
Serieux ? T'as une url pour ma culture ?

Reply

Marsh Posté le 07-07-2002 à 16:01:57    

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.

Reply

Marsh Posté le 07-07-2002 à 16:41:57    

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
Reply

Marsh Posté le 07-07-2002 à 16:49:28    

>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  
Reply

Marsh Posté le 07-07-2002 à 16:51:07    

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
Reply

Marsh Posté le 07-07-2002 à 16:55:53    

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:
Reply

Marsh Posté le 07-07-2002 à 16:56:31    

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  
Reply

Marsh Posté le 07-07-2002 à 17:00:03    

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
Reply

Marsh Posté le 07-07-2002 à 17:04:06    

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  
Reply

Marsh Posté le 07-07-2002 à 17:06:40    

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
Reply

Marsh Posté le 07-07-2002 à 17:23:49    

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
Reply

Marsh Posté le 07-07-2002 à 17:36:55    

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  
Reply

Marsh Posté le 07-07-2002 à 17:39:53    

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
Reply

Marsh Posté le 07-07-2002 à 17:41:28    

pardon
#define true 1
#define false 0


---------------
Ils veulent la jouer hard, on va la jouer hard  
Reply

Marsh Posté le 07-07-2002 à 17:53:35    

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:
Reply

Marsh Posté le 07-07-2002 à 17:57:11    

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:
Reply

Marsh Posté le 07-07-2002 à 18:14:57    

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
Reply

Marsh Posté le 07-07-2002 à 18:16:09    

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


---------------
Ils veulent la jouer hard, on va la jouer hard  
Reply

Marsh Posté le 07-07-2002 à 18:17:35    

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


---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
Reply

Marsh Posté le 07-07-2002 à 18:21:41    

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  
Reply

Marsh Posté le 07-07-2002 à 18:36:14    

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


---------------
Ils veulent la jouer hard, on va la jouer hard  
Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed