IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

 C Discussion :

Problème de compréhension d'un programme C


Sujet :

C

  1. #1
    Membre habitué

    Inscrit en
    Avril 2004
    Messages
    646
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 646
    Points : 145
    Points
    145
    Par défaut Problème de compréhension d'un programme C
    Salut,

    Voilà, je suis entrain de tenter de comprendre un programme écrit en C, et je bute sur l'instruction suivante :

    sachant que q est un entier.

    ou celle-ci qui est de la même veine :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    for (jj=0;((jj < size[ii] && (!test); jj++)
    Que veut dire (!test) ? <> de ?

    Merci par avance si vous pouvez m'éclairer.

  2. #2
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    79
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 79
    Points : 39
    Points
    39
    Par défaut
    la première est si i est different de q {alors}

    et la seconde c'est une boucle for où jj = 0 premierement on lui ajoute 1 à chaque "passe" et cela temps qu'il re specte la condition
    ((jj < size[ii] && (!test) qi signifit que jj ne doit pas depassé la "cellule" nommé ii du tableau size[] et tant que jj n'est pas different de test

    mais tu ne peut pas poster le code entier??

  3. #3
    Membre habitué

    Inscrit en
    Avril 2004
    Messages
    646
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 646
    Points : 145
    Points
    145
    Par défaut
    Salut,

    Merci pour vos éclaircissements, je comprends mieux. Pour la 1ère, c'est bien si q est <> 0, et la seconde la 1ère condition et vrai et test est <> 0.

    C'était le !q ou !test qui posait problème.

    le code est le suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    if (!q) {	root[count] = i;
    					loc[count] = n - i;
    					count++;
    					printf("%3d ", n - i);
    				}
    Et pour l'autre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    for (jj = 0; ((jj < size[ii]) && (!test)); jj++)
    			for (root = 1; ((root < d) && (!test)); root++)
    				if (root == cycle[ii][jj])  {
    					test = 1;
    					min[kaux] = ii;
    				}

  4. #4
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par Porteuris Voir le message
    la première est si i est différent de q {alors}
    Pas vraiment non, je crois que tu as mal lu.... Le ! est l'opérateur de négation logique. Donc
    équivaut à
    (soit nul)
    Dernière modification par Invité ; 28/01/2009 à 16h30. Motif: je corrige ma boulette

  5. #5
    Expert confirmé

    Inscrit en
    Août 2006
    Messages
    3 942
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 3 942
    Points : 5 654
    Points
    5 654
    Par défaut
    Bao,
    Citation Envoyé par Porteuris Voir le message
    la première est si i est different de q {alors}

    et la seconde c'est une boucle for où jj = 0 premierement on lui ajoute 1 à chaque "passe" et cela temps qu'il re specte la condition
    ((jj < size[ii] && (!test) qi signifit que jj ne doit pas depassé la "cellule" nommé ii du tableau size[] et tant que jj n'est pas different de test

    mais tu ne peut pas poster le code entier??
    Aïe !
    Si les cons volaient, il ferait nuit à midi.

  6. #6
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Septembre 2007
    Messages
    7 368
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 7 368
    Points : 23 620
    Points
    23 620
    Par défaut
    Citation Envoyé par kuzco Voir le message
    Pas vraiment non, je crois que tu as mal lu.... Le ! est l'opérateur de négation logique. Donc
    équivaut à
    q différent de 0 (soit non nul)
    Absolument pas ! Relis-toi !

    if() et l'opérateur « ! » (not) attendent tous les deux un booléen. L'expression qui leur est associée sera donc d'abord convertie en booléen. Donc, un entier vaudra false s'il contient 0 et true si sa valeur n'est pas nulle. L'opérateur NOT n'est donc vrai que si son expression associée est fausse et vice-versa.

    Et ça se tient complètement, même au niveau sémantique : on peut dire que « q » existe ou pas (en tant que scalaire par exemple) si sa valeur est significative ou si elle est nulle (bon, c'est le mauvais exemple. La variable q existe toujours en C même si son contenu est nul). Dans le même esprit, on peut faire ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    if (DetecteurFumeeSonne())
    {
        incendie = 1;
    }
    else
    {
        incendie = 0;
    }
    
    /* En cas d'incendie */
    if (incendie) 
    {
        Paniquer();
    }
    
    /* En cas de non-incendie */
    if (!incendie)
    {
        ResterVigilant();
    }

  7. #7
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 518
    Points
    41 518
    Par défaut
    Citation Envoyé par kuzco Voir le message
    Pas vraiment non, je crois que tu as mal lu.... Le ! est l'opérateur de négation logique. Donc
    équivaut à
    q différent de 0 (soit non nul)
    TU SORS!

    q équivaut à q!=0,
    donc !q équivaut à q==0.
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  8. #8
    Invité
    Invité(e)
    Par défaut


    Oui bon, y'avait un ! de trop .... ça arrive...

    if (!q) signifie si q est nul

  9. #9
    Membre régulier Avatar de krieg
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    75
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 75
    Points : 92
    Points
    92
    Par défaut
    Citation Envoyé par Porteuris Voir le message
    la première est si i est different de q {alors}

    et la seconde c'est une boucle for où jj = 0 premierement on lui ajoute 1 à chaque "passe" et cela temps qu'il re specte la condition
    ((jj < size[ii] && (!test) qi signifit que jj ne doit pas depassé la "cellule" nommé ii du tableau size[] et tant que jj n'est pas different de test

    mais tu ne peut pas poster le code entier??
    Salut, je ne veux pas en ajouter mais (jj < size[ii] && (!test)) est une expression booléenne jj < size[ii] aussi et (!test) aussi.
    Tous ça pour dire que on test si jj n'a pas dépassé size[ii](qui est une valeur) et que test est faux.
    bye

Discussions similaires

  1. Problème installation SQL Server 2000 (programme antérieur)
    Par 404Found dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 25/04/2005, 10h24
  2. Réponses: 5
    Dernier message: 11/04/2005, 10h21
  3. [C#] Problème de compréhension de System.Convert ET Provider
    Par papouAlain dans le forum Windows Forms
    Réponses: 5
    Dernier message: 18/11/2004, 21h52
  4. onclipevent (problème de compréhension)
    Par stephane eyskens dans le forum Flash
    Réponses: 8
    Dernier message: 24/09/2003, 15h09
  5. Problème de compréhension des ensembles
    Par Cornell dans le forum Langage
    Réponses: 6
    Dernier message: 07/02/2003, 22h07

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo