Toute question de débutant, afin de ne pas encombrer le forum. Professionnels, ne passez pas à côté. Nulle part sans toi - 6. - page 890

 
evillive:

Ça donne quelque chose comme ça :


Merci, mais ce n'est pas tout à fait ça. Vous avez plusieurs conditions de clôture pour un magicien et vous voulez le contraire.

J'ai trouvé ça :

void CritCloseBuy()
   {
    if (OrderSelect(Ord, SELECT_BY_POS, MODE_TRADES)==true)
    {
      if ((OrderMagicNumber()==10011&&10033)&&(...условия1...)
      {
        ord_close=OrderClose(OrderTicket(),0.1, Bid, 0, Red);
          if (ord_close = false)
          {
            Comment("Закрытие позиции БАЙ завершилось с ошибкой #",GetLastError());
          }
            else 
              {           
              Ord=0;              
              }
           return;
           }
           if ((OrderMagicNumber()==10022&&10044&&10066)&&(...новые условия...))
      {
        ord_close=OrderClose(OrderTicket(),0.1, Bid, 0, Red);
          if (ord_close = false)
          {
            Comment("Закрытие позиции БАЙ завершилось с ошибкой #",GetLastError());
          }
            else 
              {           
              Ord=0;              
              }
           return;
           }           
          }
         }
Est-ce que ça va marcher ? Ou qu'est-ce qui ne va pas ?
 
rapid_minus:


Merci, mais ce n'est pas tout à fait ce dont vous avez besoin. Vous avez plusieurs conditions de clôture pour un magicien, mais vous avez besoin de l'inverse.

C'est comme ça que je l'ai trouvé :

Est-ce que ça va marcher ? Ou qu'est-ce qui ne va pas ?

C'est... Comment puis-je dire ça délicatement...

A quoi sert l'interrupteur alors, si le code est pour un seul magicien ?

Mais vous pouvez utiliser des "si" si vous voulez, mais il faudrait réfléchir aux conditions.

Par exemple

if ((OrderMagicNumber()==10011&&10033)&&(...)

ne serait-il pas reproché au moment de la compilation ?

 
evillive:

C'est... Comment puis-je le dire gentiment...

A quoi sert l'interrupteur alors, si le code est pour un seul magicien ?

Peut-être que je ne comprends pas l'interrupteur, mais dans son expression il y a un magicien, qui est comparé à plusieurs variantes de conditions de fermeture.

ZS : a vu la suite. Je ne l'ai pas encore compilé car je n'ai pas fini le code. Les nombres ne peuvent pas être énumérés en utilisant une opération AND ?

Alors comment je m'en sors ? Répéter pour chaque magicien ?

ZZZY : En fait, ce n'est pas AND, mais OR.

 
rapid_minus:

Alors comment s'en sortir ? Le répéter pour chaque sorcier ?

Ouais.


Et à propos d'un switch encore vous devriez lire un abécédaire, là au contraire, n'importe quel nombre de variantes est traité (cas 0 :..., cas 1 :..., cas N :..., où nombre = valeur d'un magicien). J'étais trop paresseux pour écrire dans l'exemple, donc je n'ai eu le temps d'écrire que deux magiciens et la variante par défaut ;)

 
evillive:
Oui

Je suppose que vous n'avez pas besoin d'écrire le bloc opératoire de chaque magicien après tout ?
 
rapid_minus:

Je suppose que vous n'avez pas besoin d'écrire un bloc pour chaque magicien, n'est-ce pas ?
Nous devrions, Fedya, nous devrions (c)
 
evillive:

Ouais.


Et encore lire un abécédaire sur un switch, là au contraire, un nombre quelconque de variantes est traité (cas 0 :..., cas 1 :..., cas N :..., où nombre = valeur d'un magicien). J'étais trop paresseux pour écrire dans l'exemple, donc je n'ai eu le temps d'écrire que deux magiciens et la variante par défaut ;)

Merci pour la clarification de l'interrupteur. Je l'ai mal compris.
 

Et pourtant, dans l'échange, vous obtenez la même répétition de la même condition de clôture pour différents mages que pour les si.

La seule question est de savoir quelle variante mangera le plus de morceaux.

 
rapid_minus:

Et pourtant, dans l'échange, vous obtenez la même répétition de la même condition de clôture pour différents mages que pour les si.

La seule question est de savoir quelle variante mangera le plus de morceaux.

J'ai raté quelque chose - est-ce que nous optimisons déjà le code ?
 
rapid_minus:

Et pourtant, dans l'échange, vous obtenez la même répétition de la même condition de clôture pour différents mages que pour les si.

La seule question est de savoir quelle variante mangera le plus de morceaux.

Il s'agit du même branchement que if(), mais il est plus propre et plus facile à coder s'il y a au moins trois choix uniques d'entiers parmi lesquels choisir. S'il n'y a que deux options, ou si des expressions non numériques sont comparées, alors seulement if(). Et par if() vous pouvez combiner plusieurs options (if( option1 && option2 || option3 ) {action;}), alors que switch ne peut pas être utilisé directement, seulement une à la fois.

commutateur
si()
interrupteur (x)
{
cas 1 : agir sur l'option 1 ; pause ;
cas 2 : action sur l'option 2 ; rupture ;
cas 3 : action sur l'option 3 ; rupture ;
default : action par défaut ; break ;
}
if( option1 ) { action dans l'option 1 ; }
else if( option2 ) { actions by option 2 ; }
else if( option3 ) { actions by option 3 ; }
else { action par défaut ; }
Raison: