Affectation ou test ? Quel est le mieux ? [C/C++] - C++ - Programmation
Marsh Posté le 03-06-2003 à 13:52:59
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 : 
 | 
 
 
edit: parenthèses
Marsh Posté le 03-06-2003 à 13:55:00
| 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 :  
   | 
 
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é   
 
Marsh Posté le 03-06-2003 à 13:55:37
| chrisbk a écrit : perso j'aurais fait un break  | 
 
 
Argh, pas beau le break, si ton for ressemble à un while, met un while.
Marsh Posté le 03-06-2003 à 13:56:12
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?
Marsh Posté le 03-06-2003 à 13:56:15
| skeye a écrit :   | 
 
oui, toto doit bien évidemment être initialisé, oubli de ma part. 
je suis pas fan des break, ça a tendance à faire du code spaghetti.
Marsh Posté le 03-06-2003 à 13:56:29
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
Marsh Posté le 03-06-2003 à 13:56:41
| LetoII 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é 
Marsh Posté le 03-06-2003 à 13:56:44
| LetoII a écrit :   | 

Marsh Posté le 03-06-2003 à 13:57:15
| polo021 a écrit : int i=0;  | 
 
 
c moche et c'est nul, tu sors  
 
Marsh Posté le 03-06-2003 à 13:58:00
| polo021 a écrit : int i=0;  | 
 
bouh j'aime pas le tab[i++]...je trouve pas ca lisible, même si ca n'engage que moi!
Marsh Posté le 03-06-2003 à 13:58:32
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
Marsh Posté le 03-06-2003 à 13:59:42
| skeye a écrit :   | 
 
 
Moi j'ai une préférence pour: 
 
| Code : 
 | 
 
 
Après comme on sait pas ce qu'il veut en faire...
Marsh Posté le 03-06-2003 à 13:59:55
| 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?
Marsh Posté le 03-06-2003 à 14:00:03
| chrisbk a écrit :   | 
 
 
je suis bien d'accord   c'est le cas typique où un for+break est très pratique.
  c'est le cas typique où un for+break est très pratique.
Marsh Posté le 03-06-2003 à 14:00:06
| 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 : 
 | 
 
 
nul, zero, tu sors 
 
| Code : 
 | 
 
 
c deja mieux 
 
| Code : 
 | 
 
la c encore mieux ![[:aloy] [:aloy]](https://forum-images.hardware.fr/images/perso/aloy.gif) 
 
Marsh Posté le 03-06-2003 à 14:01:24
| skeye a écrit :   | 
 
plus efficace que celui d'ant. j'avais posté sans voir le code de polo
Marsh Posté le 03-06-2003 à 14:01:42
| LetoII a écrit :   
   | 
 
Tu fais tjrs des comparaisons inutiles, à mon sens... ![[:spamafote] [:spamafote]](https://forum-images.hardware.fr/images/perso/spamafote.gif)
Marsh Posté le 03-06-2003 à 14:03:34
| 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] [:sinclaire]](https://forum-images.hardware.fr/images/perso/sinclaire.gif)
Marsh Posté le 03-06-2003 à 14:03:56
| LetoII 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   
 
Marsh Posté le 03-06-2003 à 14:04:16
| Harkonnen a écrit :   | 
 
 
le while pour les nuls s'impose  
 
 
la tu va tjs parcourir ton tableau en integralite 
Marsh Posté le 03-06-2003 à 14:05:29
| skeye a écrit :   | 
 
 
Ben non.
Marsh Posté le 03-06-2003 à 14:05:39
| Harkonnen a écrit :   | 
 
  
  
ca: 
| Code : 
 | 
 
Si ya pas de 6 dans le tableau tu sors jamais... ![[:timour] [:timour]](https://forum-images.hardware.fr/images/perso/timour.gif) 
 
Marsh Posté le 03-06-2003 à 14:05:59
| chrisbk a écrit :   | 
 
ouais  
harko >  meme si tu as un 6 dans le tableau, avec ton || on ne sortira que si i vaut 50.   meme moi je sais ca
 meme moi je sais ca 
Marsh Posté le 03-06-2003 à 14:07:00
| LetoII 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!
Marsh Posté le 03-06-2003 à 14:07:46
| polo021 a écrit :   | 
 
 
Dans son code toto à pas de valeur avant la boucle donc on s'en fout. Et les affectations par raport aux tests c rapide.
Marsh Posté le 03-06-2003 à 14:08:52
autant pour moi pour le while  ![[:yamusha] [:yamusha]](https://forum-images.hardware.fr/images/perso/yamusha.gif) 
 
Marsh Posté le 03-06-2003 à 14:08:56
| skeye a écrit :   | 
 
 
Ben ouia, mais je fais pas de comparaison inutile, des affectations ça se discute mais les omparaisons c bon 
Marsh Posté le 03-06-2003 à 14:09:09
| skeye 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   
 
Marsh Posté le 03-06-2003 à 14:09:22
franchement, hein : 
 
 
 
| Code : 
 | 
 
et basta 
Marsh Posté le 03-06-2003 à 14:10:27
| LetoII a écrit :   | 
 
J'ai rien dit, parlé trop vite!  
 
Marsh Posté le 03-06-2003 à 14:11:10
| chrisbk a écrit : franchement, hein :  
   | 
 
+1
Marsh Posté le 03-06-2003 à 14:11:25
| polo021 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   
 
Marsh Posté le 03-06-2003 à 14:12:20
| Harkonnen a écrit :   | 
 
 
figure 1 : Comment se tirer d'un mauvais par le truchement d'une excuse bidon et foireuse
Marsh Posté le 03-06-2003 à 14:12:44
| Harkonnen a écrit :   | 
 
On t'accordera les circonstances attnuantes...  
 
Marsh Posté le 03-06-2003 à 14:13:18
| Harkonnen a écrit :   | 
 
et si tu prenais un cours accelere d'excuses bidon chez antp ![[:spamafote] [:spamafote]](https://forum-images.hardware.fr/images/perso/spamafote.gif) 
 
 
 ![[:toto le hros] [:toto le hros]](https://forum-images.hardware.fr/images/perso/toto le hros.gif) 
 
 
EDIT : tu as repondu trop vite petit filou. Bon allez j'arrete
Marsh Posté le 03-06-2003 à 13:42:46
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