Kommunauty
Connexion
Inscription

!trouve(langage C#)


Faandemanga Messages : 35

Bonjour,

Il y a un truc qui m'intrigue...

string[] jours = new string[] { "Lundi", "Mardi", "Mercredi", "Jeudi", "Vendredi", "Samedi", "Dimanche" };
int i = 0;
bool trouve = false;
while (i < jours.Length && !trouve)
{
    string valeur = jours[i];
    if (valeur == "Jeudi")
    {
        trouve = true;
    }
    else
    {
        i++;
    }
}
if (!trouve)
    Console.WriteLine("Valeur non trouvée");
else
    Console.WriteLine("Trouvé à l'indice " + i);

Ça se lit comment par l'ordinateur?:

while (i < jours.Length && !trouve)

Tant que trouve = true?

Mais ce n'est pas le cas dès le départ!

Ou bien tant que trouve = false?

Mais le ! ne devait il pas inverser la condition?

Si quelqu'un pouvait m'éclaircir.

vendredi 11 octobre 2013 (Dernière édition vendredi 11 octobre 2013)

Vanyali Messages : 1298

Alors je n'ai jamais fait de C# mais bon globalement étant une suite au C++ et au java, je pense qu'il a conservé le ! pour indiquer l'opérateur logique non.

donc le !trouve donnera true si trouve est à false et false si trouve est à true.

Quel est le problème avec ce code en fait ? ça aiderait pour trouver l'erreur X)

vendredi 11 octobre 2013

Homer Messages : 1862

Devancer de quelques secondes

vendredi 11 octobre 2013

Faandemanga Messages : 35

Il y a pas d'erreur, le programme marche, c'est juste que je trouvais l'utilisation d'une variable seule un peu mystérieuse.

Si j'ai bien compris. En faite pour toute opération conditionnelle dans laquelle on utilise une variable seule, l'ordinateur lit non pas EGALE, mais PAS EGALE. Ainsi while (!trouve) signifie:

Tant que trouve PAS EGALE à !trouve(=true).

De même pour if (!trouve) on a:

Si trouve PAS EGALE à !trouve.

C'est bien ça?

samedi 12 octobre 2013

Vanyali Messages : 1298

non on devrais traduire par tant que !trouve est vrai car !trouve ce n'est pas trouve c'est non-trouve si tu parle en terme de logique. Je pense qu'il faudrait que tu lise quelques truc su la logique booléenne et ses opérateurs (oui, non, ou, et , non ou, non et , ou exclusif,...) ça pourrait t'aider à comprendre la logique.

mais dans le cas présent si on doit essayer de se placer à la place de l'interpréteur, il va d'abords chercher la valeur de trouve. il voit que c'est false, mais ils voit aussi qu'il y a un ! donc il inverse le booléen et dit que !trouve est à true et il donne ça au while qui fait ok c'est bon c'est true alors je continue !

Mais tu pourrais aussi écrire trouve == false ça ferais exactement la même chose ( c'est peut être = en C# pour tester l'égalité je sais plus X) )

samedi 12 octobre 2013 (Dernière édition lundi 14 octobre 2013)

Faandemanga Messages : 35

Merci pour l'explication.

Sinon oui en C# c'est toujours == qu'on utilise pour tester l'égalité.

samedi 12 octobre 2013

Faandemanga Messages : 35

En gros sa revient à:

Tant que !trouve == true

samedi 12 octobre 2013

Faandemanga Messages : 35

Mais du coup ça aurait revenu au même si on avait écrit:

while(trouve)

samedi 12 octobre 2013

Homer Messages : 1862

non, au contraire, si c'est !trouve, c'est donc équivalent à while(trouve == false)

samedi 12 octobre 2013

Vanyali Messages : 1298

en fait while attends un boolean avec la valeur true ou sinon il quitte, donc !trouve ça équivaut à !trouve == true (parce que faire !trouve == true ça renvoie aussi un booleen, le même que !trouve parce qu'on lui demande si c'est true et si !trouve est true alors ils renvoie true parce que c'est égal et dans le cas contraire false parce que ce n'est pas vrai c'est donc redondant. c'est pas très parlant dans ce cas car on manipule des booléens mais l'opérateur ! ne s'applique que sur des booléens en fait )

lundi 14 octobre 2013

Répondre Pour répondre, tu dois d'abord t'inscrire rapidement sur Kommunauty. Rejoins-nous vite !