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 :

condition (1 < 11) et (1 <= 10)


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre très actif
    Homme Profil pro
    root
    Inscrit en
    Janvier 2013
    Messages
    174
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : root

    Informations forums :
    Inscription : Janvier 2013
    Messages : 174
    Par défaut condition (1 < 11) et (1 <= 10)
    Salut à tous.
    Dans une condition, on peut obtenir le même résultat avec (1 < 11) et (1 <= 10).

    Il doit y avoir une raison de choix je supposes, savez vous lequel et pourquoi ?

  2. #2
    Membre Expert Avatar de Trademark
    Profil pro
    Inscrit en
    Février 2009
    Messages
    762
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 762
    Par défaut
    Ça dépend du style du programmeur, j'aurais tendance à préfèrer (i < 11) mais je suppose que ça dépend. En tout cas l'idée est de pas mixer les deux dans un programme pour le garder le plus clair et cohérent possible

  3. #3
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Chercheur d'emploi
    Inscrit en
    Septembre 2007
    Messages
    7 495
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Chercheur d'emploi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 7 495
    Par défaut
    Citation Envoyé par kripteks Voir le message
    Salut à tous.
    Dans une condition, on peut obtenir le même résultat avec (1 < 11) et (1 <= 10).

    Il doit y avoir une raison de choix je supposes, savez vous lequel et pourquoi ?
    Les expressions « 1 < 11 » et « 1 <= 10 » n'ont aucun intérêt puisque l'on connaît le résultat à l'avance et qu'il est immuable. En revanche, lorsque que tu utilises une variable comme indice dans une boucle, ça donne « i < 11 » ou « i <= 10 », ce qui a déjà beaucoup plus de sens. La différence, dans ce cas, apparaît quand i n'est plus un entier mais un flottant. Le premier cas est valide jusqu'à 10,99999... tandis que le deuxième s'arrête à 10 exactement. Au programmeur de savoir exactement ce qu'il veut et quand sa condition doit être effectivement valide.

    Ensuite, c'est vrai qu'on a en général tendance à faire disparaître le « = » pour ne garder qu'un seul opérateur. Sur le plan technique, ça ne change rien puisque même au niveau électronique, l'égalité et l'infériorité sont évaluées exactement au même moment par la même instruction. En revanche, il est assez fréquent de faire démarrer un indice de boucle à 0. Dix tours correspondent alors aux chiffres de 0 à 9, et la valeur « 10 » correspond justement à la fin du processus. Si bien que la plupart du temps, on se retrouve avec « < » seul.

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

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 397
    Par défaut
    Généralement, on voit ce genre de condition dans une boucle, où l'on dépend d'une taille. Quand on a un tableau indexé de zéro à taille-1, on écrira la boucle sous la forme for(i=0 ; i<taille ; i++) plutôt que mettre un <= qui gène plus qu'autre chose.
    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.

  5. #5
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 848
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 848
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par Médinoc Voir le message
    Quand on a un tableau indexé de zéro à taille-1, on écrira la boucle sous la forme for(i=0 ; i<taille ; i++) plutôt que mettre un <= qui gène plus qu'autre chose.
    Bonjour
    Surtout que si on écrit <=, on écrira alors for(i=0 ; i <= (taille - 1) ; i++) ce qui, en dehors d'une soustraction supplémentaire effectuée à chaque itération, accentue encore une complexification inutilement inutile.

    Ceci dit, le cas peut se produire qu'on désire afficher non seulement le contenu du tableau mais aussi une référence "humaine" aux éléments (style "élément n° 1"). Dans ce cas, en partant du tableau suivant char *tab[5]={"toto", "titi", "tata", "tutu", "plop"}, il y a deux facons de voir
    1) on utilise des indices "humains" et on décale l'indice pour le tableau
    Code c : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    for (i=1; i <= 5; i++)
        printf("Elément %d/%d: [%s]", i, 5, tab[i-1]);

    2) on utilise des indices "machine" et on décale l'indice pour l'affichage humain
    Code c : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    for (i=0; i < 5; i++)
        printf("Elément %d/%d: [%s]", i+1, 5, tab[i]);

    Perso je préfère cette seconde solution, considérant que ce qui prime c'est la façon dont le C travaille (en commençant à 0) et en considérant que le coté "humain" de l'affichage n'est finalament que secondaire. On a en effet généralement plus souvent besoin de travailler une ou plusieurs fois sur tab[i] que de l'afficher (en plus généralement qu'une fois) et donc mettre du tab[i-1] à chaque fois qu'on s'en sert rejoint la remarque initiale.
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  6. #6
    Expert confirmé
    Homme Profil pro
    Analyste/ Programmeur
    Inscrit en
    Juillet 2013
    Messages
    4 774
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Analyste/ Programmeur

    Informations forums :
    Inscription : Juillet 2013
    Messages : 4 774
    Par défaut
    Citation Envoyé par Obsidian Voir le message
    La différence, dans ce cas, apparaît quand i n'est plus un entier mais un flottant.
    Il faut faire attention avec les flottants

    Dans ce cas, il faut mieux faire un test de ce style: "fabs(i - 10.0) < EPSILON"

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Condition If multiple
    Par M1000 dans le forum ASP
    Réponses: 2
    Dernier message: 01/03/2004, 13h46
  2. [MYSQL] conditions et requetes
    Par sebos63 dans le forum SQL Procédural
    Réponses: 3
    Dernier message: 26/02/2004, 16h41
  3. Condition sur debug et release
    Par xave dans le forum MFC
    Réponses: 3
    Dernier message: 04/02/2004, 15h04
  4. Condition et contenu TImage
    Par Detlev_linux dans le forum Langage
    Réponses: 6
    Dernier message: 23/12/2003, 01h00
  5. boucle avec condition d'arret changeante
    Par NicoH dans le forum Langage
    Réponses: 3
    Dernier message: 10/06/2003, 11h48

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