Почему переменные "i" и "j" используются для счетчиков?

Я знаю, что это может показаться абсолютно глупым вопросом, но мне очень любопытно не спрашивать...

Почему "i" и "j" стали переменными, которые используются в качестве счетчиков в большинстве структур управления?

Хотя здравый смысл говорит мне, что они такие же, как X, которые используются для представления неизвестных значений, я не могу не думать, что должна быть причина, по которой все учатся одинаково снова и снова.

Это потому, что на самом деле это рекомендуется для лучших практик или конвенций или у него есть какая-то непонятная причина?

На всякий случай, я знаю, что могу дать им любое имя, которое я хочу, и что имена переменных не актуальны.

Ответ 1

В конечном итоге это происходит из математики: нотация суммирования традиционно использует я для первого индекса, j для второго и т.д. Пример (из http://en.wikipedia.org/wiki/Summation):

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

Он также использовал этот способ для коллекций вещей, например, если у вас есть куча переменных x 1, x 2,... x n, то произвольная будет известна как x i.

Что касается того, почему так, я считаю, что SLaks правильный, и потому, что я первая буква в индексе.

Ответ 2

Я считаю, что это датируется Fortran. Переменные, начинающиеся с я до Q, по умолчанию были целыми, остальные были реальными. Это означало, что I была первой целочисленной переменной, а J второй и т.д., Поэтому они упали на использование в циклах.

Ответ 3

Математики использовали i, j, k для обозначения целых чисел в алгебре (индексы, ряды, суммы и т.д.) задолго до (например, 1836 или 1816) были вокруг компьютеров (это является источником значений типа переменной FORTRAN по умолчанию). Привычка использовать буквы с конца алфавита (..., x, y, z) для неизвестных переменных и с начала (a, b, c...) для констант обычно отнесено к Rene Descartes (см. также здесь), поэтому я предполагаю, что i, j, k... n (в середине алфавита) для целых чисел, вероятно, также вызвано им.

Ответ 4

i = целое число

Приходит из Фортрана, где целочисленные переменные должны начинаться с букв от я до N, а реальные переменные начинаются с других букв. Таким образом, я был первым и самым коротким именем целочисленной переменной. Fortran был одним из самых ранних языков программирования в широком использовании, а привычки, разработанные программистами, использующими его, переносились на другие языки.

РЕДАКТИРОВАТЬ: у меня нет проблем с ответом, что он вытекает из математики. Несомненно, именно там вдохновили дизайнеры Fortran. Дело в том, что для меня в любом случае, когда я начал программировать в Fortran, мы использовали I, J, K,... для счетчиков циклов, потому что они были короткими и первые юридически разрешенные имена переменных для целых чисел. В качестве второкурсника в Х.С. Вероятно, я слышал о Декарте (и очень немногих других), но при программировании очень мало связан с математикой. Фактически, первый курс, который я взял, назывался "Fortran for Business" и преподавался не математическим факультетом, а факультетом бизнеса /econ.

Для меня, по крайней мере, имена переменных имели мало общего с математикой, но все из-за привычек, которые я взял, писал код Fortran, который я переносил на другие языки.

Ответ 5

i обозначает I ndex.
j появляется после i.

Ответ 6

Эти символы использовались в качестве матричных индексов в математике задолго до того, как были изобретены электронные компьютеры.

Ответ 7

Я думаю, что это скорее всего происходит из индекса (в математический смысл) - он обычно используется как индекс в суммах или других наборах, основанные на работе, и, скорее всего, были использованы таким образом с тех пор, как были языки программирования.

Ответ 8

В математике предпочтение отдается использованию последовательных букв в алфавите для "анонимных" переменных, используемых аналогичным образом. Следовательно, не только "i, j, k", но также "f, g, h", "p, q, r", "x, y, z" (редко с добавлением "u, v, w" ) и "& alpha;, & beta;, & gamma;".

Теперь "f, g, h" и "x, y, z" не используются свободно: первая для функций, последняя для измерений. "p, q, r" также часто используются для функций.

Тогда существуют и другие ограничения на доступные последовательности: "l" и "o" избегают, потому что они выглядят слишком много, как "1" и "0" во многих шрифтах. "t" часто используется для времени "d и & delta;" для дифференциалов и "a, s, m, v" для физических мер ускорения, смещения, массы и скорости. Это оставляет не так много пробелов из трех последовательных букв без нежелательных ассоциаций в математике для индексов.

Затем, как заметили некоторые другие, условности от математики оказали сильное влияние на ранние соглашения о программировании и "& alpha;, & beta;, & gamma;"; были недоступны во многих ранних наборах символов.

Ответ 9

Я нашел еще один возможный ответ, который может заключаться в том, что i, j и k относятся к Hamilton Quaternions.

alt text

Эйлер выбрал я для мнимой единицы.

Гамильтону понадобилось еще два квадратных корня из -1:   ii = jj = kk = ijk = -1

Гамильтон был действительно влиятельным, и кватернионы были стандартным способом 3D-анализа до 1900 года. К тому времени математики привыкли думать (ijk) как согласованный набор. Векторное исчисление заменило кватернионный анализ в 1890-х годах, потому что это был лучший способ написать уравнения Максвелла. Но люди склонны записывать векторные величины следующим образом: (3i-2j+k) вместо (3,-2,1). Итак, (ijk) стали стандартными базисными векторами в R ^ 3.

Наконец, физики начали использовать теорию групп для описания симметрий в системах дифференциальных уравнений. Итак, (ijk) начал обозначать "векторы, которые обмениваются группами перестановок", затем дрейфуют по направлению к "индексным вещам, которые принимают все возможные значения в определенном наборе", , которые в основном являются тем, что они означает в цикле for.

Ответ 10

путем отбрасывания (немного предвзятого)

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

Ответ 11

Один солнечный день, Архимед, что размышлял (как это было обычно для солнечных вечеров) и натыкался на своего приятеля Эратосфена.

Архимед сказал: "Архимед к приветствию Эратосфена! Я пытаюсь найти решение соотношения нескольких сферических твердых тел в равновесии. Я хочу повторять эти тела несколько раз, но у меня есть страшный время отслеживания того, сколько итераций я сделал!"

Эратосфен сказал: "Почему Архимед, вы созрели сливы, вы можете просто отметить ряд строк на песке, каждый из которых отслеживает количество итераций, которые вы сделали на итерации!"

Архимед взывал к миру, что его большой друг был, несомненно, ярким маяком разведки для придумывают такого простого решения. Но Архимед заметил, что ему нравится ходить по кругу вокруг своей песчаной ямы, пока он размышляет. Таким образом, существует риск потерять трек, который был сверху, и который был внизу.

"Возможно, я должен пометить эти строки буквой алфавита в стороне, чтобы я всегда знал, какая строка это! Что вы думаете об этом?" - спросил он, затем добавил: "Но Эратосфен... какие бы письма я ни использовал?"

Эратосфен был уверен, что не знает, какие письма будут лучше, и сказал так же Архимеду. Но Архимед был неудовлетворен и продолжал подталкивать бедного библиотекаря выбирать, по крайней мере, две буквы, которые он потребует для своего текущего равновесного решения сферы.

Эратосфен, наконец, усталый от непрекращающейся просьбы о двух письмах, закричал: "Я ТОЛЬКО НЕ ЗНАЮ!!!"

Итак, Архимед выбрал первые две буквы в восклицательном предложении Эратосфена и поблагодарил своего друга за вклад.


Эти символы были быстро приняты древнегреческими разработчиками Java, а остальное - хорошо... история.

Ответ 12

Я думаю, потому что много циклов использует переменную типа Int для подсчета, например

for (int i = 0; etc

и когда вы печатаете, вы на самом деле говорите это в своей голове (например, когда вы читаете), поэтому в вашем уме вы говорите "int...."

и когда вам нужно составить письмо сразу после этого "int....", вы говорите/введите "i", потому что это первая буква, о которой вы думаете, когда вы только что сказали "int"

как вы говорите слово для детей, которые начинают изучать чтение ваших слов заклинаний для них, используя имена, например:

Заклинания WORD Уильям W, Ok O, Ruby R, Done D

Итак, вы говорите, что Int I, Double d, Float f, string s и т.д. основаны на первой букве.

И j используется, потому что, когда вы сделали int I, J следует сразу после него.

Ответ 13

Я думаю, что это сочетание других упомянутых причин:

Во-первых, "i" обычно использовались математиками в их обозначениях, а в первые дни вычислений с языками, которые не были бинарными (то есть должны были разбираться и лексироваться каким-то образом), подавляющее большинство пользователей компьютеров были также математиками (... и учеными и инженерами), поэтому нотация использовалась на компьютерных языках для программирования циклов и с тех пор как-то застряла.

Объедините это с тем, что пространство экрана в те самые ранние дни было очень ограниченным, как и память, имело смысл хранить более короткие имена переменных.

Ответ 14

Возможно историческое?

FORTRAN, первоначально первый язык высокого уровня, определил i, j, k, l, m как целочисленные типы данных по умолчанию, а циклы могут управляться только целочисленной переменной, соглашение продолжается?

например:

do 100 я = j, 100,5 .... 100 продолжить ....

Ответ 15

i = итератор, я = индекс, я = целое число

Что бы вы ни выбрали, "i" означает, что он все еще "соответствует счету".

Кроме того, если в этом цикле у вас нет только одной строки кода, вероятно, вы должны назвать итератор/индекс/целочисленную переменную чем-то более значимым. Например: employeeIndex

Кстати, я обычно использую "i" в своих простых циклах итератора; если, конечно, он содержит несколько строк кода.

Ответ 16

i = iota, j = jot; оба небольших изменения.

iota - наименьшая буква в греческом алфавите; в английском языке это значение связано с небольшими изменениями, как в "не одной йоте" (из фразы в Новом Завете: "пока небо и земля не исчезнут, ни йота, ни точка, не перейдут от Закона" (Матф. 5:18)).

Счетчик представляет небольшое изменение в значении.

И из iota приходит jot (iot), что также является синонимом небольшого изменения.

ср. http://en.wikipedia.org/wiki/Iota

Ответ 17

Ну из математики: (для латинских букв)

a, b: используются как константы или целые числа для рационального числа
c: константа d: производные
e: число Эйлера
f, g, h: функции
i, j, k: индексы (также единичные векторы и кватернионы)
l: обычно не используется. выглядит как 1
m, n: являются строками и столбцами матриц или целыми числами для рациональных чисел
o: также не используется (если вы не указали маленькую ноту)
p, q: часто используется как простые числа r: иногда пространственное изменение переменной, другое время, связанное с простыми числами
s, t: пространственные и временные переменные или s используется как изменение переменной для t u, v, w: изменение переменной
x, y, z: переменные

Ответ 18

Многие возможные основные причины, я думаю:

  • математики используют i и j для натуральных чисел в формулах (те, которые используют, как минимум, комплексные числа), поэтому это переносится на программирование
  • от C, i намекает на int. И если вам нужен другой int, тогда i2 слишком длинный, поэтому вы решили использовать j.
  • существуют языки, где первая буква определяет тип, а i - это integer.

Ответ 19

Это происходит от Fortran, где i, j, k, l, m, n являются неявными целыми числами.

Ответ 20

Это определенно происходит из математики, которая долгое время предшествовала компьютерному программированию.

Итак, где же, если исходить из математики? Моя совершенно необразованная догадка заключается в том, что, как сказал один из матерей, математики любят использовать алфавитные кластеры для подобных вещей - f, g, h для функций; x, y, z для числовых переменных; p, q, r для логических переменных; u, v, w для других наборов переменных, особенно в исчислении; a, b, c для многих вещей. i, j, k пригодится для итеративных переменных, и это исчерпывает возможности. Почему бы не m, n? Ну, они используются для целых чисел, но чаще конечные точки итераций, а не сами итеративные переменные.

Кто-то должен спросить историка математики.

Ответ 21

Счетчики настолько распространены в программах, и в первые дни вычислений все было на высоте...
Программисты, естественно, пытались сохранить пиксели, а "i" потребовалось меньше пикселей, чем любая другая буква для представления. (Математики, ленивые, выбрали его по той же причине - как самый маленький глиф).
Как было сказано ранее, "j" просто следовало...

:)

Ответ 22

Я использую его по ряду причин.

  • Обычно мои петли основаны на int, поэтому вы создаете полный треугольник на клавиатура, набирая "int i" с помощью исключение пространства, с которым я обрабатываю мой большой палец. Это очень быстро последовательность для ввода.

  • "i" может стоять за итератор, целое число, приращение или индекс, каждый из которых делает логический смысл.

С учетом моих личных целей теория его, полученная из FORTRAN, верна, когда целые вары используют буквы я - N.

Ответ 23

Я изучил FORTRAN на Control Data Corp. 3100 в 1965. Переменные, начинающиеся с "I" до "N", подразумевались как целые числа. Пример: "IGGY" и "NORB" были целыми числами, "XMAX" и "ALPHA" были плавающей точкой. Однако вы можете переопределить это посредством явного объявления.