compéhension d'un programme

Voir le sujet précédent Voir le sujet suivant Aller en bas

compéhension d'un programme

Message  oreo95 le Lun 20 Jan 2014 - 1:00

Bonsoir, je dois essayer de comprendre un programme en langage C mais pour moi cette partie du programme est incomprehensible et je dois également la modifier mais qu'elle affiche dans le cas ou par exemple nbR1>nbR2 il doit afficher O

Code:

  if( nbR1*nbR2 != 0 ) mal += (nbR1>nbR2)? nbR2 : nbR1;
       if( nbJ1*nbJ2 != 0 ) mal += (nbJ1>nbJ2)? nbJ2 : nbJ1;
       if( nbV1*nbV2 != 0 ) mal += (nbV1>nbV2)? nbV2 : nbV1;
       if( nbB1*nbB2 != 0 ) mal += (nbB1>nbB2)? nbB2 : nbB1;
       if( nbO1*nbO2 != 0 ) mal += (nbO1>nbO2)? nbO2 : nbO1;
Pourriez vous m'aider s'il vous plait ?


merci d'avance !


Dernière édition par -ed- le Lun 1 Sep 2014 - 2:06, édité 2 fois (Raison : typos, présentation ...)

oreo95

Messages : 1
Date d'inscription : 20/01/2014

Voir le profil de l'utilisateur

Revenir en haut Aller en bas

Re: compéhension d'un programme

Message  -ed- le Lun 1 Sep 2014 - 2:31

oreo95 a écrit:Bonsoir, je dois essayer de comprendre un programme en langage C mais pour moi cette partie du programme est incompréhensible et je dois également la modifier mais qu'elle affiche dans le cas ou par exemple nbR1>nbR2 il doit afficher O

Code:

  if( nbR1*nbR2 != 0 ) mal += (nbR1>nbR2)? nbR2 : nbR1;
       if( nbJ1*nbJ2 != 0 ) mal += (nbJ1>nbJ2)? nbJ2 : nbJ1;
       if( nbV1*nbV2 != 0 ) mal += (nbV1>nbV2)? nbV2 : nbV1;
       if( nbB1*nbB2 != 0 ) mal += (nbB1>nbB2)? nbB2 : nbB1;
       if( nbO1*nbO2 != 0 ) mal += (nbO1>nbO2)? nbO2 : nbO1;
Ce code est assez obscur et fait appel, dans un premier temps (partie la plus à droite de l'instruction), aux propriétés de l'opérateur ternaire ?:

Il se compose de 3 parties :

'évaluation' ? 'résultat si vrai' : 'résultat si faux'

'évaluation' est une expression binaire qui retourne 'résultat si faux' (l'expression est fausse) ou 'résultat si vrai' (l'expression est vraie).

Si on prend la première ligne,

(nbR1>nbR2) ? nbR2 : nbR1;

et qu'on retourne le résultat dans une variable (appelons la x pour le moment),

Code:

x = (nbR1>nbR2) ? nbR2 : nbR1;
on a donc l'expres​sion(nbR1>nbR2) qui retourne nbR2 si nbR1 > nbR2 ou nbR1 si nbR1 <= nbr2 .

C'est donc une forme condensée de
Code:

  if (nbR1 > nbR2)
  {
      x = nbR2;
  }
  else
  {
      x = nbR1;
  }
Maintenant, si on reprend l'instruction initiale :

Code:
if( nbR1*nbR2 != 0 ) mal += (nbR1>nbR2)? nbR2 : nbR1;
Nous pouvons la présenter sous cette forme :
Code:

 if (nbR1*nbR2 != 0 )
  mal += (nbR1>nbR2)? nbR2 : nbR1;
Qui se lit (en supposant que 'mal' a préalablement été initialisé),

"Si le produit de nbR1 par nbR2 n'est pas égal à 0,
augmenter la valeur de 'mal' de la valeur de nbR2 si nbR1 est supérieure à la valeur de nbR2
sinon, augmentez la de la valeur de nbR1."

et c'est le même genre de raisonnement avec les 4 autres instructions ...





_________________
C is a sharp tool !

-ed-
Admin
Admin

Messages : 289
Date d'inscription : 26/05/2008
Age : 60
Localisation : Paris 6eme arrondissement (75, France)

Voir le profil de l'utilisateur http://bien-programmer.fr

Revenir en haut Aller en bas

Voir le sujet précédent Voir le sujet suivant Revenir en haut

- Sujets similaires

 
Permission de ce forum:
Vous ne pouvez pas répondre aux sujets dans ce forum