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

  FORUM HardWare.fr
  Programmation
  C++

  [C/C++] Affectation ou test ? Quel est le mieux ?

 


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

[C/C++] Affectation ou test ? Quel est le mieux ?

n°414289
antsite
Je me souviens
Posté le 03-06-2003 à 13:42:46  profilanswer
 

Salut,
On a une boucle
 
int toto;
 
for(i=0;i<50;i++)
{
if(var[i] == 6)
   toto = 6;
}
 
ce qui fait qu'à chaque fois que var[i] == 6 on affecte à toto la valeur 6; mais mettons que var[] contiennent dix 6, on affectera à toto dix fois la même valeur, donc ne vaut-il mieux pas tester si toto == 6 et si ce n'est pas le cas on affecte, plutot que d'affecter à chaque fois ?
merci
    ANT


Message édité par antsite le 03-06-2003 à 13:45:50
mood
Publicité
Posté le 03-06-2003 à 13:42:46  profilanswer
 

n°414293
chrisbk
-
Posté le 03-06-2003 à 13:45:32  profilanswer
 

non

n°414308
Harkonnen
Modérateur
Un modo pour les bannir tous
Posté le 03-06-2003 à 13:52:59  profilanswer
 

de toute façon, toto ne doit être affecté que si au moins une valeur de ton tableau == 6, donc pas besoin de tester tout le tableau :
 

Code :
  1. int i = 0;
  2. while ((i<50) || (toto != 6))
  3. {
  4.    if (var[i] == 6)
  5.       toto = 6;
  6.    i++;
  7. }


 
edit: parenthèses


Message édité par Harkonnen le 03-06-2003 à 13:55:02

---------------
J'ai un string dans l'array (Paris Hilton)
n°414309
chrisbk
-
Posté le 03-06-2003 à 13:53:53  profilanswer
 

perso j'aurais fait un break [:ciler]

n°414311
skeye
Posté le 03-06-2003 à 13:55:00  profilanswer
 

Harkonnen a écrit :

de toute façon, toto ne doit être affecté que si au moins une valeur de ton tableau == 6, donc pas besoin de tester tout le tableau :
 

Code :
  1. int i = 0;
  2. while ((i<50) || (toto != 6))
  3. {
  4.    if var[i] == 6
  5.       toto = 6;
  6.    i++;
  7. }




c'est moyen non, tu testes toto sans l'initialiser...et à chaque tour de boucle!
Il suffit de rajouter un break dans son if, non?
 
[edit]
Grillaid par chrisbk...mais moi j'ai esspliké  :whistle:


Message édité par skeye le 03-06-2003 à 13:56:32
n°414312
LetoII
Le dormeur doit se réveiller
Posté le 03-06-2003 à 13:55:37  profilanswer
 

chrisbk a écrit :

perso j'aurais fait un break [:ciler]


 
Argh, pas beau le break, si ton for ressemble à un while, met un while.


---------------
Le Tyran
n°414313
antsite
Je me souviens
Posté le 03-06-2003 à 13:56:12  profilanswer
 

C'est vrai que pas besoin de tester tout le tableau dans ce cas, mais pour mon affaire c'est pas 6 mais c'est 1 2 3 4 5 6, donc je peux pas y couper?

n°414314
Harkonnen
Modérateur
Un modo pour les bannir tous
Posté le 03-06-2003 à 13:56:15  profilanswer
 

skeye a écrit :


c'est moyen non, tu testes toto sans l'initialiser...et à chaque tour de boucle!
Il suffit de rajouter un break dans son if, non?
 


oui, toto doit bien évidemment être initialisé, oubli de ma part.
je suis pas fan des break, ça a tendance à faire du code spaghetti.


---------------
J'ai un string dans l'array (Paris Hilton)
n°414315
polo021
Posté le 03-06-2003 à 13:56:29  profilanswer
 

int i=0;
while (i<50)
{
   if (tab[i++] == 6)
      {
          toto = 6;
          break; // ou i=50;
      }
}
 
EDIT : le break fonctionne aussi avec une boucle for comme celle que t'avais au depart


Message édité par polo021 le 03-06-2003 à 13:58:34
n°414316
chrisbk
-
Posté le 03-06-2003 à 13:56:41  profilanswer
 

LetoII a écrit :


 
Argh, pas beau le break, si ton for ressemble à un while, met un while.


pas du tout, je trouve ca elegant, et dans son cas c plutot son while qui ressemble a un for que l'inverse
 
le break est injustement diabolisé :O

mood
Publicité
Posté le 03-06-2003 à 13:56:41  profilanswer
 

n°414317
Harkonnen
Modérateur
Un modo pour les bannir tous
Posté le 03-06-2003 à 13:56:44  profilanswer
 

LetoII a écrit :


 
Argh, pas beau le break, si ton for ressemble à un while, met un while.

:jap:


---------------
J'ai un string dans l'array (Paris Hilton)
n°414318
chrisbk
-
Posté le 03-06-2003 à 13:57:15  profilanswer
 

polo021 a écrit :

int i=0;
while (i<50)
{
   if (tab[i++] == 6)
      {
          toto = 6;
          break; // ou i=50;
      }
}


 
c moche et c'est nul, tu sors :O

n°414319
skeye
Posté le 03-06-2003 à 13:58:00  profilanswer
 

polo021 a écrit :

int i=0;
while (i<50)
{
   if (tab[i++] == 6)
      {
          toto = 6;
          break; // ou i=50;
      }
}


bouh j'aime pas le tab[i++]...je trouve pas ca lisible, même si ca n'engage que moi!

n°414320
Harkonnen
Modérateur
Un modo pour les bannir tous
Posté le 03-06-2003 à 13:58:32  profilanswer
 

sorry, mais en terme de perfs, mon code est plus efficace ! je n'écrit qu'une seule fois dans la RAM !
 
edit: en dehors de l'incrémentation de i bien entendu


Message édité par Harkonnen le 03-06-2003 à 14:00:19

---------------
J'ai un string dans l'array (Paris Hilton)
n°414322
LetoII
Le dormeur doit se réveiller
Posté le 03-06-2003 à 13:59:42  profilanswer
 

skeye a écrit :


c'est moyen non, tu testes toto sans l'initialiser...et à chaque tour de boucle!
Il suffit de rajouter un break dans son if, non?
 
[edit]
Grillaid par chrisbk...mais moi j'ai esspliké  :whistle:  


 
Moi j'ai une préférence pour:
 

Code :
  1. int i=0;
  2. int toto;
  3. while (i<50 && (toto = tab[i++]) != 6)
  4. {
  5. }


 
Après comme on sait pas ce qu'il veut en faire...


---------------
Le Tyran
n°414323
skeye
Posté le 03-06-2003 à 13:59:55  profilanswer
 

Harkonnen a écrit :

sorry, mais en terme de perfs, mon code est plus efficace ! je n'écrit qu'une seule fois dans la RAM !  


Plus efficace que...?
En reprenant son code + un break on n'écrit qu'une fois aussi, non?

n°414324
Tetragramm​aton IHVH
dieu unique =&gt; pensée unique
Posté le 03-06-2003 à 14:00:03  profilanswer
 

chrisbk a écrit :


pas du tout, je trouve ca elegant, et dans son cas c plutot son while qui ressemble a un for que l'inverse
 
le break est injustement diabolisé :O


 
je suis bien d'accord  :jap:  c'est le cas typique où un for+break est très pratique.


---------------
"Dieu a exploité tous nos complexes d'infériorité, en commençant par notre incapacité de croire à notre propre divinité." - Emil Michel Cioran
n°414325
chrisbk
-
Posté le 03-06-2003 à 14:00:06  profilanswer
 

Harkonnen a écrit :

sorry, mais en terme de perfs, mon code est plus efficace ! je n'écrit qu'une seule fois dans la RAM !  


 
pas aussi efficace qu'un break, tu fais une incrementation et deux tests en plus
et tn plus ta condition est fausse
 
 

Code :
  1. while ((i<50) || (toto != 6))


 
nul, zero, tu sors
 

Code :
  1. while ((i<50) && (toto != 6))


 
c deja mieux
 

Code :
  1. while ((toto != 6)  && (i<50) )


la c encore mieux [:aloy]

n°414326
polo021
Posté le 03-06-2003 à 14:00:48  profilanswer
 

chrisbk a écrit :


 
c moche et c'est nul, tu sors :O
 


 :love:

n°414330
Harkonnen
Modérateur
Un modo pour les bannir tous
Posté le 03-06-2003 à 14:01:24  profilanswer
 

skeye a écrit :


Plus efficace que...?
En reprenant son code + un break on n'écrit qu'une fois aussi, non?


plus efficace que celui d'ant. j'avais posté sans voir le code de polo


---------------
J'ai un string dans l'array (Paris Hilton)
n°414331
chrisbk
-
Posté le 03-06-2003 à 14:01:31  profilanswer
 


et en plus c faux

n°414332
skeye
Posté le 03-06-2003 à 14:01:42  profilanswer
 

LetoII a écrit :


 
Moi j'ai une préférence pour:
 

Code :
  1. int i=0;
  2. int toto;
  3. while (i<50 && (toto = tab[i++]) != 6)
  4. {
  5. }


 
Après comme on sait pas ce qu'il veut en faire...


Tu fais tjrs des comparaisons inutiles, à mon sens... [:spamafote]

n°414335
Harkonnen
Modérateur
Un modo pour les bannir tous
Posté le 03-06-2003 à 14:03:34  profilanswer
 

chrisbk a écrit :

et tn plus ta condition est fausse


ben non ! tu sors de la boucle si :
 
- tu as parcouru tout le tableau sans qu'aucun de ses membres ne soit égal à 6 (i < 50)
- un de ses membres est égal à 6
 
ta condition implique que le tableau contient forcément une valeur 6, ce qui ne sera pas forcément le cas [:sinclaire]


---------------
J'ai un string dans l'array (Paris Hilton)
n°414336
polo021
Posté le 03-06-2003 à 14:03:56  profilanswer
 

LetoII a écrit :


 
Moi j'ai une préférence pour:
 

Code :
  1. int i=0;
  2. int toto;
  3. while (i<50 && (toto = tab[i++]) != 6)
  4. {
  5. }


 
Après comme on sait pas ce qu'il veut en faire...


nan paske si y a pas de 6 dans le tableau on aura une mauvaise valeur dans toto et tu affcete a chaque fois  :sweat:

n°414337
chrisbk
-
Posté le 03-06-2003 à 14:04:16  profilanswer
 

Harkonnen a écrit :


ben non ! tu sors de la boucle si :
 
- tu as parcouru tout le tableau sans qu'aucun de ses membres ne soit égal à 6 (i < 50)
- un de ses membres est égal à 6
 
ta condition implique que le tableau contient forcément une valeur 6, ce qui ne sera pas forcément le cas [:sinclaire]


 
le while pour les nuls s'impose :D
 
la tu va tjs parcourir ton tableau en integralite :O


Message édité par chrisbk le 03-06-2003 à 14:05:00
n°414338
LetoII
Le dormeur doit se réveiller
Posté le 03-06-2003 à 14:05:29  profilanswer
 

skeye a écrit :


Tu fais tjrs des comparaisons inutiles, à mon sens... [:spamafote]


 
Ben non.


---------------
Le Tyran
n°414340
skeye
Posté le 03-06-2003 à 14:05:39  profilanswer
 

Harkonnen a écrit :


ben non ! tu sors de la boucle si :
 
- tu as parcouru tout le tableau sans qu'aucun de ses membres ne soit égal à 6 (i < 50)
- un de ses membres est égal à 6
 
ta condition implique que le tableau contient forcément une valeur 6, ce qui ne sera pas forcément le cas [:sinclaire]


 :heink:  
ca:

Code :
  1. while ((i<50) || (toto != 6))


Si ya pas de 6 dans le tableau tu sors jamais... [:timour]

n°414341
polo021
Posté le 03-06-2003 à 14:05:59  profilanswer
 

chrisbk a écrit :


 
le while pour les nuls s'impose :D
 
la tu va tjs parcourir ton tableau en integralite :O


ouais  
harko >  meme si tu as un 6 dans le tableau, avec ton || on ne sortira que si i vaut 50.  :pfff: meme moi je sais ca

n°414346
skeye
Posté le 03-06-2003 à 14:07:00  profilanswer
 

LetoII a écrit :


 
Ben non.


Tu affectes toto à chaque tour, et à chaque fois tu le compares à 6...alors que ce n'est pas nécéssaire de remplir toto sans y mettre 6, auquel cas tu sais qu'il faut sortir quoi qu'il arrive!

n°414347
LetoII
Le dormeur doit se réveiller
Posté le 03-06-2003 à 14:07:46  profilanswer
 

polo021 a écrit :


nan paske si y a pas de 6 dans le tableau on aura une mauvaise valeur dans toto et tu affcete a chaque fois  :sweat:  


 
Dans son code toto à pas de valeur avant la boucle donc on s'en fout. Et les affectations par raport aux tests c rapide.


---------------
Le Tyran
n°414350
Harkonnen
Modérateur
Un modo pour les bannir tous
Posté le 03-06-2003 à 14:08:52  profilanswer
 

autant pour moi pour le while  [:yamusha]


---------------
J'ai un string dans l'array (Paris Hilton)
n°414351
LetoII
Le dormeur doit se réveiller
Posté le 03-06-2003 à 14:08:56  profilanswer
 

skeye a écrit :


Tu affectes toto à chaque tour, et à chaque fois tu le compares à 6...alors que ce n'est pas nécéssaire de remplir toto sans y mettre 6, auquel cas tu sais qu'il faut sortir quoi qu'il arrive!


 
Ben ouia, mais je fais pas de comparaison inutile, des affectations ça se discute mais les omparaisons c bon :D


---------------
Le Tyran
n°414352
polo021
Posté le 03-06-2003 à 14:09:09  profilanswer
 

skeye a écrit :


 :heink:  
ca:

Code :
  1. while ((i<50) || (toto != 6))


Si ya pas de 6 dans le tableau tu sors jamais... [:timour]  


ouais et tu vas lire n'importe ou dans ta memoire. Ben c'est du propre harko! toi qui dit toujours qu'il faut faire gaffe avec les acces memoire en C  :o

n°414353
chrisbk
-
Posté le 03-06-2003 à 14:09:22  profilanswer
 

franchement, hein :
 
 
 

Code :
  1. for(i=0;i<50;i++)
  2. {
  3. if(var[i] == 6)
  4. {
  5.    toto = 6;
  6. break;
  7. }
  8. }


et basta

n°414355
skeye
Posté le 03-06-2003 à 14:10:27  profilanswer
 

LetoII a écrit :


 
Ben ouia, mais je fais pas de comparaison inutile, des affectations ça se discute mais les omparaisons c bon :D


J'ai rien dit, parlé trop vite! :whistle:

n°414357
skeye
Posté le 03-06-2003 à 14:11:10  profilanswer
 

chrisbk a écrit :

franchement, hein :
 
 
 

Code :
  1. for(i=0;i<50;i++)
  2. {
  3. if(var[i] == 6)
  4. {
  5.    toto = 6;
  6. break;
  7. }
  8. }


et basta
 


+1

n°414359
Harkonnen
Modérateur
Un modo pour les bannir tous
Posté le 03-06-2003 à 14:11:25  profilanswer
 

polo021 a écrit :


ouais et tu vas lire n'importe ou dans ta memoire. Ben c'est du propre harko! toi qui dit toujours qu'il faut faire gaffe avec les acces memoire en C  :o  


je viens de me farcir une semaine de Pascal à l'insu de mon plein gré, forcément j'ai pas les idées très claires, et le rhume des foins ça aide pas  :sweat:


---------------
J'ai un string dans l'array (Paris Hilton)
n°414362
chrisbk
-
Posté le 03-06-2003 à 14:12:20  profilanswer
 

Harkonnen a écrit :


je viens de me farcir une semaine de Pascal à l'insu de mon plein gré, forcément j'ai pas les idées très claires, et le rhume des foins ça aide pas  :sweat:  


 
figure 1 : Comment se tirer d'un mauvais par le truchement d'une excuse bidon et foireuse

n°414364
skeye
Posté le 03-06-2003 à 14:12:44  profilanswer
 

Harkonnen a écrit :


je viens de me farcir une semaine de Pascal à l'insu de mon plein gré, forcément j'ai pas les idées très claires, et le rhume des foins ça aide pas  :sweat:  


On t'accordera les circonstances attnuantes... :lol:

n°414367
polo021
Posté le 03-06-2003 à 14:13:18  profilanswer
 

Harkonnen a écrit :


je viens de me farcir une semaine de Pascal à l'insu de mon plein gré, forcément j'ai pas les idées très claires, et le rhume des foins ça aide pas  :sweat:  


et si tu prenais un cours accelere d'excuses bidon chez antp [:spamafote]
 
 
[:toto le hros]
 
EDIT : tu as repondu trop vite petit filou. Bon allez j'arrete


Message édité par polo021 le 03-06-2003 à 14:13:50
mood
Publicité
Posté le   profilanswer
 

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

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

  [C/C++] Affectation ou test ? Quel est le mieux ?

 

Sujets relatifs
[PHP/HTML] vaut il mieux : bcp de echo "" ou bcp de balises <?php> ?addition affectation...
test connection visiteurTest des variables suite et fin
Affectation d'un tableau de AnsiString dans un autreIl vaut mieux faire des Iframes ou des modeles ?
BETA test REALBasic[C]Operation de test de pixel sur images.
Recup d'evenement clavier et test...[ Besoin du test de mon HTML ] Div avec overflow, quels navigateurs ?
Plus de sujets relatifs à : [C/C++] Affectation ou test ? Quel est le mieux ?


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