web-dev-qa-db-fra.com

Pourquoi les variables "i" et "j" sont-elles utilisées pour les compteurs?

Je sais que cela peut sembler une question absolument stupide à poser, mais je suis trop curieux pour ne pas le demander ...

Pourquoi "i" et "j" sont-ils devenus LES variables à utiliser comme compteurs dans la plupart des structures de contrôle?

Bien que le sens commun me dise qu’ils sont comme X, utilisé pour représenter des valeurs inconnues, je ne peux pas m'empêcher de penser qu’il doit y avoir une raison pour que tout le monde soit enseigné de la même façon, encore et encore.

Est-ce parce que c'est en fait recommandé pour les meilleures pratiques, ou une convention, ou est-ce qu'il a une raison obscure derrière?

Juste au cas où, , je sais que je peux leur donner le nom que je veux et que les noms de variables ne sont pas pertinents.

179
Carlos

Cela vient finalement des mathématiques: la notation de sommation utilise traditionnellement i pour le premier indice, j pour le second, et ainsi de suite. Exemple (de http://en.wikipedia.org/wiki/Summation ):

\sum_{i=1}^{n} i = \frac{n^2 + n}{2}

C'est aussi utilisé pour les collections d'objets, comme si vous aviez un tas de variables x1, X2, ... Xn, alors un arbitraire sera appelé xje.

En ce qui concerne la raison pour laquelle c'est ainsi, j'imagine que SLaks est correct et c'est parce que j'est la première lettre d'Index.

330
zwol

Je crois que cela remonte à Fortran. Les variables commençant par I à Q étaient des nombres entiers par défaut, les autres étaient réelles. Cela signifiait que I était la première variable entière et J la seconde, etc., de sorte qu'ils étaient utilisés dans les boucles.

200

Les mathématiciens utilisaient i, j, k pour désigner des nombres entiers en algèbre (indices, séries, sommations, etc.) bien avant (par exemple 1836 ou 1816 ) Origine des valeurs par défaut du type de variable FORTRAN). L’habitude d’utiliser des lettres à partir de la fin de l’alphabet (..., x, y, z) pour les variables inconnues et depuis le début (a, b, c ...) pour les constantes est généralement attribué = à Rene Descartes , (voir aussi ici ) donc je suppose que i, j, k ... n (au milieu de l'alphabet) pour les entiers est probablement dû à lui aussi.

195
timday

i = entier

Vient de Fortran où les variables entières devaient commencer par les lettres I à N et les variables réelles commencées par les autres lettres. Ainsi, j'étais le premier et le plus court nom de variable entier. Fortran était l'un des premiers langages de programmation largement utilisés et les habitudes développées par les programmeurs qui les utilisaient étaient reportées dans d'autres langages.

EDIT : Je n'ai aucun problème avec la réponse qu'elle dérive des mathématiques. C'est sans doute là que les concepteurs Fortran ont trouvé leur inspiration. En fait, quand j’ai commencé à programmer en Fortran, j’ai utilisé I, J, K, ... pour les compteurs de boucle car ils étaient courts et les premiers noms de variable légalement autorisés pour les entiers. En deuxième année dans H.S. J'avais probablement entendu parler de Descartes (et de très peu d'autres), mais je n'avais que très peu de liens avec les mathématiques lors de la programmation. En fait, le premier cours que j'ai suivi s'appelait "Fortran for Business" et n'était pas enseigné par la faculté de mathématiques, mais par la faculté des affaires/économie.

Pour moi, du moins, la dénomination des variables n'a pas grand chose à voir avec les mathématiques, mais tout à cause des habitudes que j'ai prises en écrivant le code Fortran que j'ai porté dans d'autres langues.

129
tvanfosson

i signifie Jendex.
j vient après i.

91
SLaks

Ces symboles ont été utilisés comme index matriciels en mathématiques bien avant l’invention des ordinateurs électroniques.

63
erickson

Je pense que cela est probablement dérivé de index (au sens mathématique ) - il est couramment utilisé comme index dans les sommes ou autres opérations basées sur les ensembles, et la plupart a probablement été utilisé de cette manière depuis qu’il existait des langages de programmation.

52
Michael Borgwardt

Les maths préfèrent utiliser des lettres consécutives dans l'alphabet pour des variables "anonymes" utilisées de la même manière. Par conséquent, non seulement "i, j, k", mais aussi "f, g, h", "p, q, r", "x, y, z" (rarement avec "u, v, w" en préfixe), et "α, β, γ".

Maintenant, "f, g, h" et "x, y, z" ne sont pas utilisés librement: le premier est pour les fonctions, le dernier pour les dimensions. "p, q, r" sont également souvent utilisés pour les fonctions.

Ensuite, il existe d'autres contraintes sur les séquences disponibles: "l" et "o" sont évités, car ils ressemblent trop à "1" et "0" dans de nombreuses polices. "t" est souvent utilisé pour le temps, "d & δ" pour les différentiels et "a, s, m, v" pour les mesures physiques d'accélération, de déplacement, de masse et de vitesse. Cela ne laisse pas tant de lacunes de trois lettres consécutives sans associations indésirables en mathématiques pour les indices.

Puis, comme plusieurs autres l’ont remarqué, les conventions mathématiques ont eu une grande influence sur les conventions de programmation précédentes, et "α, β, γ" n’était pas disponible dans de nombreux jeux de caractères anciens.

47
Charles Stewart

J'ai trouvé une autre réponse possible qui pourrait être que i, j et k viennent de Hamilton's Quaternions.

alt text

Euler a choisi i pour l'unité imaginaire.

Hamilton avait besoin de deux autres racines carrées de -1: ii = jj = kk = ijk = -1

Hamilton exerçait une grande influence et les quaternions étaient le moyen habituel de faire de l’analyse 3D avant 1900. À ce moment-là, les mathématiciens avaient l’habitude de penser à (ijk) comme un ensemble assorti. Le calcul vectoriel a remplacé l'analyse quaternionique dans les années 1890, car c'était une meilleure façon d'écrire les équations de Maxwell. Mais les gens avaient tendance à écrire les quantités vectorielles comme ceci: (3i-2j+k)au lieu de(3,-2,1). Donc (ijk) est devenu la base standard des vecteurs dans R ^ 3.

Enfin, les physiciens ont commencé à utiliser la théorie des groupes pour décrire les symétries dans les systèmes d’équations différentielles. Alors (ijk) a commencé à parler de "vecteurs qui sont intervertis par des groupes de permutation", puis a dérivé vers "des choses similaires à des index qui prennent toutes les valeurs possibles dans un ensemble spécifié", qui signifie dans une boucle.

32
Carlos

en jetant (un peu biaisé)

a seems an array
b seems another array 
c seems a language name
d seems another language name
e seems exception
f looks bad in combination with "for" (for f, a pickup?)
g seems g force
h seems height

i seems an index                    
j seems i (another index)

k seems a constant k
l seems a number one (1) 
m seems a matrix
n seems a node
o seems an output
p sounds like a pointer
q seems a queue
r seems a return value
s seems a string
t looks like time
u reserved for UVW mapping or electic phase 
v reserved for UVW mapping or electic phase or a vector
w reserved for UVW mapping or electic phase or a weight
x seems an axis (or an unknown variable)
y seems an axis
z seems a third axis
30
Hernán Eche

Un après-midi ensoleillé, Archimedes réfléchit (comme d'habitude pour les après-midis ensoleillés) et rencontra son ami Eratosthenes.

Archimède a dit: "Salut d'Archimède à Eratosthenes! J'essaie de trouver une solution au ratio de plusieurs corps rigides sphériques en équilibre. Je souhaite parcourir plusieurs fois ces corps, mais j'ai du mal à garder la trace de combien d'itérations j'ai fait! "

Eratosthenes dit: "Pourquoi Archimède, vous mûrissez un Prunier, vous pouvez simplement marquer des rangées successives de lignes dans le sable, chacune gardant une trace du nombre d'itérations que vous avez effectuées dans les itérations!"

Archimède a crié au monde que son grand ami était indéniablement un phare d’intelligence pour avoir proposé une solution aussi simple. Mais Archimède a fait remarquer qu'il aime marcher en rond autour de son sablier pendant qu'il réfléchit. Ainsi, il y avait un risque de perdre la trace de la rangée en haut et de celle en bas.

"Peut-être que je devrais marquer ces rangées avec une lettre de l'alphabet juste à côté pour que je sache toujours quelle rangée est laquelle! Qu'est-ce que vous en pensez?" demanda-t-il, puis ajouta: "Mais Eratosthenes ... quelles lettres dois-je utiliser?"

Eratosthenes était certain de ne pas savoir quelles lettres conviendraient le mieux et l'a dit à Archimède. Mais Archimède était insatisfait et continuait de pousser le pauvre bibliothécaire à choisir, au moins, les deux lettres dont il aurait besoin pour sa solution d’équilibre de sphère actuelle.

Eratosthenes, finalement fatigué de la demande incessante de deux lettres, cria: "JE NE SAIS PAS !!!"

Archimède choisit donc les deux premières lettres de la phrase d’exclamation d’Eratosthène et remercia son ami pour sa contribution.


Ces symboles ont été rapidement adoptés par les développeurs grecs Java), et le reste appartient, eh bien ... à l'histoire.

21
Brendan

je pense que c'est parce que beaucoup de boucles utilisent une variable de type Int pour faire le comptage, comme

for (int i = 0; etc

et quand vous tapez, vous le dites réellement dans votre tête (comme lorsque vous lisez), alors dans votre esprit, vous dites 'int ....'

et quand vous devez composer une lettre juste après 'int ....', vous dites/tapez le 'i' car c'est la première lettre à laquelle vous pensez quand vous venez de dire 'int'

comme si vous épeliez un mot pour les enfants qui commencent à apprendre à lire vous épeler des mots pour eux en utilisant des noms, comme ceci:

Le mot s'écrit William W, Ok O, Ruby R, Fait D

Donc, vous dites Int I, Double d, Float f, string s etc. sur la base de la première lettre.

Et j est utilisé parce que quand vous avez terminé int I, J le suit juste après.

15
Michel

Je pense que c'est une combinaison des autres raisons mentionnées:

Pour commencer, "i" était couramment utilisé par les mathématiciens dans leur notation, et aux débuts de l'informatique avec des langages non binaires ainsi que des mathématiciens (... et des scientifiques et ingénieurs), la notation a donc été utilisée dans les langages informatiques pour la programmation en boucle et est restée en suspens depuis.

Si vous combinez cela avec le fait que l’espace de l’écran à ces débuts était très limité, de même que la mémoire, il était logique de conserver des noms de variable plus courts.

14
Alex Marshall

Eh bien de mathématiques: (pour les lettres latines)

a, b: utilisés comme constantes ou comme nombres entiers pour un nombre rationnel
c: une constante
d: dérivé
e: numéro d'Euler
f, g, h: fonctions
i, j, k: sont des index (également des vecteurs unitaires et les quaternions)
l: généralement pas utilisé. ressemble à 1
m, n: sont des lignes et des colonnes de matrices ou des nombres entiers pour des nombres rationnels
o: également non utilisé (sauf si vous êtes en notation o)
p, q: souvent utilisé comme nombre premier
r: parfois un changement spatial de variable, d'autres temps liés aux nombres premiers
s, t: les variables spatiales et temporelles ou s est utilisé comme changement de variable pour t
u, v, w: changement de variable
x, y, z: variables

13
MaDMaD Mad

i = itérateur, i = index, i = entier

Quel que soit le résultat, "i" signifie toujours "convient parfaitement".

De plus, à moins que vous ne disposiez que d'une seule ligne de code dans cette boucle, vous devriez probablement nommer la variable itérateur/index/entier en quelque chose de plus significatif. Comme: employeeIndex

BTW, j'utilise généralement "i" dans mes boucles d'itérateur simples; à moins bien sûr qu'il contienne plusieurs lignes de code.

13

i = iota, j = jot; les deux petits changements.

iota est la plus petite lettre de l'alphabet grec; dans la langue anglaise, sa signification est liée à de petits changements, comme dans "pas un iota" (d'une phrase du Nouveau Testament: "jusqu'à ce que le ciel et la terre disparaissent, pas un iota, ni un point, ne passera de la loi" (Mt 5:18)).

Un compteur représente un petit changement dans une valeur.

Et de iota vient jot (iot), qui est également synonyme de petit changement.

cf. http://en.wikipedia.org/wiki/Iota

13
Stephen

Peut-être historique?

FORTRAN, le premier langage de haut niveau, a défini i, j, k, l, m comme types de données Integer par défaut et les boucles ne pouvaient être contrôlées que par une variable entière, poursuit la convention?

par exemple:

faire 100 i = j, 100,5 .... 100 continuer ....

13
brett

Plusieurs raisons principales possibles, je suppose:

  • les mathématiciens utilisent i et j pour nombres naturels dans les formules (celles qui utilisent nombres complexes rarement, au moins), à la programmation
  • de C , i fait allusion à int. Et si vous avez besoin d’un autre int alors i2 est trop long, vous décidez donc d’utiliser j.
  • il y a des langues où la première lettre décide du type, et i est alors un integer.
11
towi

Il vient de Fortran, où i, j, k, l, m, n sont implicitement des entiers.

10
Walter Bright

Cela vient certainement des mathématiques, qui ont longtemps précédé la programmation informatique.

Alors, d'où vient si vient en maths? Ma conjecture totalement inculte est que, comme l’a dit un collègue, les mathématiciens aiment utiliser des grappes alphabétiques pour des choses similaires - f, g, h pour des fonctions; x, y, z pour les variables numériques; p, q, r pour les variables logiques; u, v, w pour d’autres ensembles de variables, en particulier dans le calcul; a, b, c pour beaucoup de choses. i, j, k est pratique pour les variables itératives, et cela épuise les possibilités. Pourquoi pas m, n? Bien, ils sont utilisés pour les entiers, mais le plus souvent les points finaux des itérations plutôt que les variables itératives elles-mêmes.

Quelqu'un devrait demander à un historien des mathématiques.

7
David Lewis

Les compteurs sont si fréquents dans les programmes, et dans les premiers jours de l'informatique, tout était à une prime ...
Les programmeurs ont naturellement essayé de conserver les pixels et le "i" nécessitait moins de pixels que toute autre lettre à représenter. (Les mathématiciens, étant paresseux, l'ont choisi pour la même raison - comme le plus petit glyphe).
Comme indiqué précédemment, j’ai tout naturellement suivi ...

:)

6
Gerrat

J'ai appris le Fortran sur un Control Data Corp. 3100 en 1965. Les variables commençant par 'I' à 'N' étaient implicitement des entiers. Ex: "IGGY" et "NORB" étaient des entiers, "XMAX" et "ALPHA" étaient des nombres à virgule flottante. Cependant, vous pouvez remplacer ceci par une déclaration explicite.

4
Pierre

Je l'utilise pour un certain nombre de raisons.

  • Habituellement, mes boucles sont basées sur int, vous créez donc un triangle complet sur le clavier en tapant "int i" à l'exception de l'espace que je gère avec mon pouce. C'est une séquence très rapide à taper.

  • Le "i" peut représenter un itérateur, un entier, un incrément ou un index, qui ont tous un sens logique.

Avec mes utilisations personnelles mises de côté, la théorie selon laquelle elle est dérivée de FORTRAN est correcte, où vars entier utilise les lettres I - N.

4
John T