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 ?
Version imprimable
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 ?
Ç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 ;)
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.
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.
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:
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:
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.