Dlaczego zmienne „i” i „j” są używane do liczników?


179

Wiem, że może to wydawać się absolutnie głupie pytanie, ale jestem zbyt ciekawy, aby nie zadawać ...

Dlaczego „i” i „j” stały się zmiennymi używanymi jako liczniki w większości struktur kontrolnych?

Chociaż zdrowy rozsądek mówi mi, że są one jak X, który służy do reprezentowania nieznanych wartości, nie mogę nie myśleć, że musi istnieć powód, dla którego wszyscy uczą się w ten sam sposób od nowa.

Czy to dlatego, że tak naprawdę jest zalecane dla najlepszych praktyk lub konwencji, czy może ma jakiś niejasny powód?

Na wszelki wypadek wiem, że mogę nadać im dowolną nazwę i że nazwy zmiennych nie są istotne.


17
i = iteracja podczas gdy j = po interakcji
ajreal

7
dziwne „c” nie zostało wybrane? jak w rejestrze licznika Intel „cx”.


16
Dlaczego rzeczywiste pytania stają się stronami społecznościowymi tylko dlatego, że są popularne? To bardzo przypomina komunizm. Jeśli ktoś wymyśli coś naprawdę fajnego, rząd kradnie wynalazek, aby podzielić się nim ze społecznością.
orokusaki,

9
Zamknięte w niewłaściwy sposób: odpowiedzi tutaj są bardziej pouczające niż inne qn ...
Charles Stewart

Odpowiedzi:


330

Ostatecznie pochodzi z matematyki: notacja podsumowująca tradycyjnie używa i dla pierwszego indeksu, j dla drugiego i tak dalej. Przykład (z http://en.wikipedia.org/wiki/Summation ):

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

Jest również używany w ten sposób do zbierania rzeczy, np. Jeśli masz kilka zmiennych x 1 , x 2 , ... x n , to dowolna będzie znana jako x i .

Co do tego, dlaczego tak jest, wyobrażam sobie, że SLaks jest poprawny i to dlatego, że jestem pierwszą literą w indeksie.


93
@Sott: A dlaczego jest iużywany w matematyce?
SLaks,

13
@Slaks: To dobre pytanie. Właściwie myślę, że „i” może pochodzić z liczby całkowitej większej niż indeks. Myślę też, że łatwo jest pisać na tablicy. W latach 70-tych ostrzegano nas, aby mieć pewność, że napisaliśmy nasze „i” i „j” w całkowicie charakterystyczny sposób. Rzeczywiście, powiedziano nam, aby narysować nasze „i” dokładnie jak odwrócone „j”, aby być całkowicie jasnym.
S.Lott,

26
@ S.Lott: Wątpię, żeby pochodziło z liczby całkowitej. Używamy ℤ (tablica pogrubiona Z) dla liczb całkowitych, ponieważ oznacza niemieckie słowo Zahlen , co oznacza liczby . Zakładając, że notacja sumująca powstała mniej więcej w tym samym czasie, należy oczekiwać notacji niemieckiej - a niemieckim słowem indeksu jest Indeks , który również zaczyna się od i . I nie mogę myśleć o wielu listach, które są szczególnie trudne do napisania na tablicy. Cóż, z wyjątkiem ξ :-)
Antal Spector-Zabusky

14
„Ta konwencja istnieje, ponieważ ta konwencja istniała wcześniej”. Tak działa etymologia: nikt nie wie, dlaczego dany hałas miał szczególne znaczenie w SROCE. Byłoby miło wyjaśnić konwencję matematyczną, ale pytanie brzmi: „dlaczego są one używane jako liczniki w strukturach kontrolnych”, więc dopóki ktoś nie przedstawi odpowiedzi, która sięga dalej, jest to najlepsze. Przynajmniej spekuluje, dlaczego jest stosowany w matematyce. Właściwy historyk matematyki mógłby się dowiedzieć, być może za pomocą binarnego kotletu. Euclid tego nie użył, założę się, że von Neumann tego użył. Co powiesz na Cauchy? Często korzystał z indeksów
Steve Jessop

14
Myślę, że to Lagrange zalecił użycie a, b, c dla stałych funkcji oraz x, y, z dla zmiennych funkcji. i, j, k oznaczają „kierunki” wektora, a czynniki takiej formalnej sumy można interpretować jako stopnie swobody [kierunki, pod inną nazwą] równania.
David

200

Wierzę, że pochodzi z Fortran. Zmienne zaczynające się od I do Q były domyślnie liczbami całkowitymi, pozostałe były rzeczywiste. Oznaczało to, że Ibyła to pierwsza zmienna całkowita, a Jdruga itd., Więc zaczęły używać pętli.


53
Myślę, że wynika to ze sposobu, w jaki matematycy lubią używać i, j, k jako przydatnych indeksów dolnych do wskaźników sumowania i mnożenia macierzy, a co nie. Pamiętam, jak czytałem we wczesnej instrukcji Fortran II coś na ten temat. (Tak, Fortran II.)
S.Lott,

5
Tak, FORTRAN wywodzi się z tych konwencji.
Jé Queue

9
Uczono mnie Iprzez Nnie Q. Google wydaje się w większości zgodzić. (różne wersje FORTRAN?)
Hugh Allen

2
A wszystko inne w Fortranie było domyślnie prawdziwe. Co prowadzi do żartu: „Bóg jest prawdziwy, chyba że jest deklarowany jako liczba całkowita”.
Lagerbaer,

4
@learnvst - ponieważ matematycy używali i, j przez co najmniej sto lat wcześniej.
Martin Beckett,

195

Matematycy używali i, j, k do oznaczania liczb całkowitych w algebrze (indeksy dolne, serie, sumowania itp.) Na długo przed (np. 1836 lub 1816 ) komputerami (to jest pochodzenie domyślnych typów zmiennych FORTRAN). Zwyczaj używania litery z końca alfabetu (..., x, y, z) z nieznanych zmiennych i od początku (A, B, C ...) dla stałych jest powszechnie przypisywane do Rene Descartes , (patrz także tutaj ), więc zakładam, że i, j, k ... n (w środku alfabetu) dla liczb całkowitych prawdopodobnie również z jego powodu.


17
Dla mnie jest to zdecydowanie najlepsza odpowiedź. (Wyróżnienie za odpowiedź Michaela Borgwardta, która również przytacza konwencję matematyczną, ale nie jest tak konkretna.) Przepraszam, że twoja nie jest zaakceptowana. Wszystko, co mogę zrobić, to wyrazić swoją opinię.
John Y

3
To jest właśnie powód, dla którego musimy głosować na odpowiedź zaakceptowaną przez społeczność (i tak, wiem, że należy do faktury użytkownika).
Kredns

Heh Od czasu do czasu aktualizuję link do starej książki google w tej odpowiedzi, ponieważ Google ciągle coś rozdrabnia. Przez przypadek zauważam, że dokument z 1816 r., Do którego teraz dołączono, obejmuje Charlesa Babbage'a (przypuszczalnie, że ma on inną sławę silnika / silnika analitycznego) jako autora. Prawdopodobnie jest to przykład pierwszego użycia zmiennej całkowitej „i” przez programistę komputerowego: ^)
dzisiaj

..OK link 1816 nie prowadzi do strony z literą „i”, ale już tam są.
dnia

129

i = liczba całkowita

Pochodzi z Fortran, gdzie zmienne całkowite musiały zaczynać się od liter I do N, a rzeczywiste zmienne zaczynały się od innych liter. Byłem więc pierwszą i najkrótszą nazwą zmiennej całkowitej. Fortran był jednym z najwcześniejszych języków programowania w powszechnym użyciu, a nawyki opracowane przez programistów używających go przeniesiono na inne języki.

EDYCJA : Nie mam problemu z odpowiedzią, która pochodzi z matematyki. Niewątpliwie to właśnie tam zainspirowali się projektanci Fortrana. Faktem jest, że i tak dla mnie, kiedy zacząłem programować w Fortranie, użyliśmy I, J, K, ... dla liczników pętli, ponieważ były one krótkie i pierwsze prawnie dozwolone nazwy zmiennych dla liczb całkowitych. Jako student drugiego stopnia w HS prawdopodobnie słyszałem o Kartezjuszu (i kilku innych), ale podczas programowania nie miałem żadnego związku z matematyką. W rzeczywistości pierwszy kurs, który wziąłem, nazywał się „Fortran for Business” i nie był nauczany przez wydział matematyki, ale przez wydział biznesu / ekon.

Dla mnie przynajmniej nazywanie zmiennych miało niewiele wspólnego z matematyką, ale wszystko ze względu na nawyki, które nauczyłem się pisać kod Fortran, który nosiłem w innych językach.


4
Jestem prawie pewien, że to był FORTRAN.
Cade Roux,

4
Ya, fortran ..... Gnije umysł. Mamy programistę, który używa i ii i iii jako nazw zmiennych pętli. Innym objawem jest 6-znakowa nazwa zmiennej / funkcji bez samogłosek.
EvilTeach

4
@tvan, jestem całkiem pewien, że zmienne zaczynające się od I do N domyślnie przyjmują wartość całkowitą, ale nadal możesz je zadeklarować jako prawdziwe, stąd żart „Bóg jest prawdziwy, chyba że zadeklarowana liczba całkowita”. W każdym razie +1, ponieważ moje wspomnienie sprzed wielu lat może NIE być idealne.
paxdiablo

10
Hej, chłopaki z FORTRAN-a dostali to od matematyków!
dnia

6
Zgadzam się z @timday. Używanie i jako indeksu szeregu było matematyką praktyką przez co najmniej 2 stulecia.
Scottie T

91

ioznacza I ndex.
jprzychodzi po i.


12
Myślę, że mówił o alfabecie, spróbuj użyć wyobraźni :)
Jack

33
@Jack: Myślę, że @Pete żartował ;-)
Chris Pfohl,

13
@Cffohl: tak, po prostu chciałem się nudzić: D
Jack

4
@Pete Kirkham: Dziękuję bardzo Pete, to był najlepszy śmiech, jaki miałem w zeszłym miesiącu.
AMissico,

@SLaks ... Wierzę, że masz rację, że robi i = Indeks, który pochodzi z notacji indeksu używanej w Math en.wikipedia.org/wiki/Index_notation lub tutaj jest fajna referencja physics.ucsb.edu/~physCS31/fall2010/index- notation.pdf
John Hartsock

63

Symbole te były używane jako indeksy macierzy w matematyce na długo przed wynalezieniem komputerów elektronicznych.


52

Myślę, że najprawdopodobniej pochodzi od indeksu (w sensie matematycznym ) - jest powszechnie używany jako indeks sum lub innych operacji opartych na zbiorze, i najprawdopodobniej był używany w ten sposób, odkąd istniały języki programowania.


Dobra odpowiedź. To (dla mnie) rzeczywiście wydaje się najbardziej prawdopodobnym wyjaśnieniem.
Noldorin

3
Tak. Notacja matematyczna sumy jak Y = Σ Xipoprzedza każdy język programowania.
Treb

Myślę o indeksie przy każdym użyciu i. Ale pierwotnie używam go głównie dlatego, że cały kod patrzę gdzie indziej go używać, i które mogą być dziedziczone od programistów Fortran ...
awe

47

Matematyka preferuje stosowanie kolejnych liter w alfabecie dla zmiennych „anonimowych” używanych w podobny sposób. Stąd nie tylko „i, j, k”, ale także „f, g, h”, „p, q, r”, „x, y, z” (rzadko z dodanym „u, v, w”), i „α, β, γ”.

Teraz „f, g, h” i „x, y, z” nie są używane swobodnie: pierwsze dotyczy funkcji, drugie dotyczy wymiarów. „p, q, r” są również często używane dla funkcji.

Są też inne ograniczenia dotyczące dostępnych sekwencji: unika się „l” i „o”, ponieważ w wielu czcionkach wyglądają one zbyt podobnie do „1” i „0”. „t” jest często używane dla czasu, „d & δ” dla różnic, a „a, s, m, v” dla fizycznych miar przyspieszenia, przemieszczenia, masy i prędkości. To pozostawia tak wiele luk w trzech kolejnych literach bez niechcianych skojarzeń matematycznych dla indeksów.

Następnie, jak zauważyło kilka innych, konwencje matematyczne miały silny wpływ na konwencje wczesnego programowania, a „α, β, γ” nie były dostępne w wielu wczesnych zestawach znaków.


2
Zgoda. Chociaż a, b, cjest to dość powszechnie stosowana sekwencja, mimo że ama wiele znaczeń ...
Stobor,

32

Znalazłem inną możliwą odpowiedź, którą może być to, że ja, j i k pochodzą Hamilton's Quaternions.

alternatywny tekst

Euler wybrał i dla wyimaginowanej jednostki.

Hamilton potrzebował jeszcze dwóch pierwiastków kwadratowych z -1: ii = jj = kk = ijk = -1

Hamilton był naprawdę wpływowy, a czwartorzędy były standardowym sposobem przeprowadzania analiz 3D przed 1900 r. Do tego czasu matematycy byli przyzwyczajeni do myślenia o (ijk) jako dopasowanym zestawie. Rachunek wektorowy zastąpił analizę czwartorzędową w latach 90. XIX wieku, ponieważ był to lepszy sposób na zapisanie równań Maxwella. Ale ludzie pisali wielkości wektorów w ten sposób: (3i-2j+k) zamiast (3,-2,1) . Tak więc (ijk) stało się standardowymi wektorami podstawowymi w R ^ 3.

W końcu fizycy zaczęli używać teorii grup do opisywania symetrii w układach równań różniczkowych. Więc (ijk) zaczął łączyć się z „wektorami, które są zamieniane przez grupy permutacji”, a następnie dryfował w kierunku „rzeczy podobnych do indeksu, które przyjmują wszystkie możliwe wartości w określonym zestawie”, co w zasadzie oznacza to w pętli for.


11
w końcu inne podejście do pytania, interesujący punkt +1
Fabian

30

odrzucając (trochę stronniczy)

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

3
Widzę n jako number, zwykle liczbę elementów w zestawie.
Tom Leys,

6
Och, ludzie, a czym wydaje się być XXX? )) +1 za kreatywność;)
Hovhannes Grigoryan

Czasami cieszę się, że przez większość czasu nie muszę zawracać sobie głowy tym, jakie mnemoniki wymyślają inni ludzie w takich sprawach ...
Thies Heidecke

21

Pewnego słonecznego popołudnia Archimedes zastanawiał się ( jak zwykle w słoneczne popołudnia ) i wpadł na swojego kumpla Eratostenesa.

Archimedes powiedział: „Pozdrowienia od Archimedesa do Eratostenesa! Próbuję znaleźć rozwiązanie stosunku kilku sztywnych ciał sztywnych znajdujących się w równowadze. Chciałbym iterować po tych ciałach wiele razy, ale mam straszny czas na śledzenie ile wykonałem iteracji! ”

Eratosthenes powiedział: „Dlaczego Archimedesie, dojrzała śliwko porywacza, możesz po prostu zaznaczyć kolejne rzędy linii na piasku, z których każdy śledzi liczbę iteracji, które wykonałeś w ramach iteracji!”

Archimedes zawołał do świata, że ​​jego wielki przyjaciel był niezaprzeczalnie lśniącym światłem inteligencji za wymyślenie tak prostego rozwiązania. Ale Archimedes zauważył, że lubi chodzić w kółko wokół swojej piaskownicy, gdy się zastanawia. Tak więc istniało ryzyko utraty ścieżki, który rząd był na górze, a który na dole.

„Być może powinienem zaznaczyć te rzędy literą alfabetu tuż obok, aby zawsze wiedzieć, który wiersz jest który! Co o tym sądzisz?” zapytał, a następnie dodał: „Ale Eratostenes ... jakich liter mam użyć?”

Eratostenes był pewien, że nie wie, które listy będą najlepsze, i powiedział to samo Archimedesowi. Archimedes był jednak niezadowolony i nadal naciskał na biednego bibliotekarza, aby wybrał przynajmniej dwie litery, których potrzebowałby do swojego obecnego rozwiązania równowagi sfery.

Eratostenes, w końcu zmęczony nieustanną prośbą o dwie litery, krzyknął: „NIE WIEM !!!”

Archimedes wybrał więc pierwsze dwa litery w zdaniu wykrzyknika Eratostenesa i podziękował przyjacielowi za wkład.


Symbole te zostały szybko przyjęte przez starożytnych greckich programistów Javy, a reszta to ... no cóż ... historia.


6
... i miał list j.
Andrew Grimm,

Wow, to prawie brzmi jak historia Żółwia i Achillesa z GEB Hofstadtera
ProfK

15

myślę, że dzieje się tak, ponieważ wiele pętli używa zmiennych typu Int do liczenia

for (int i = 0; etc

a kiedy piszesz, wypowiadasz to w swojej głowie (tak jak podczas czytania), więc w myślach mówisz „int ....”

a kiedy musisz stworzyć literę zaraz po tym „int ....”, wymawiasz / wpisujesz „i”, ponieważ jest to pierwsza litera, o której myślisz, kiedy właśnie powiedziałeś „int”

na przykład przeliteruj słowo dla dzieci, które zaczynają uczyć się czytać, przeliteruj dla nich słowa, używając imion:

WORD pisze William W, Ok O, Ruby R, Gotowe D.

Więc mówisz Int I, Double d, Float f, string s itp. Na podstawie pierwszej litery.

A j jest używane, ponieważ gdy wykonałeś int I, J następuje zaraz po nim.


7
ipoprzedza tę składnię.
SLaks,

1
To świetny sposób na zmieszanie badziewia z dzieckiem; Naprawdę uczysz się tak pisać ?!
Wyścigi lekkości na orbicie

14

Myślę, że jest to kombinacja innych wymienionych powodów:

Po pierwsze, „i” było powszechnie używane przez matematyków w ich notacji, a we wczesnych dniach pracy z językami, które nie były binarne (tj. Musiały być w jakiś sposób analizowane i leksykowane), zdecydowana większość użytkowników komputerów była także matematyków (... oraz naukowców i inżynierów), więc notacja ta zaczęła być używana w językach komputerowych do programowania pętli i od tego czasu po prostu utknęła w miejscu.

Połącz to z faktem, że przestrzeń ekranu w tych bardzo wczesnych dniach była bardzo ograniczona, podobnie jak pamięć, sensowne było utrzymywanie krótszych nazw zmiennych.


13

Być może historyczny?

FORTRAN, oczywiście pierwszy język wysokiego poziomu, domyślnie zdefiniował i, j, k, l, m jako typy danych liczb całkowitych, a pętle mogły być kontrolowane tylko przez zmienną całkowitą, czy konwencja trwa?

na przykład:

do 100 i = j, 100,5 .... 100 kontynuuj ....


FWIW, zwykle pomijam literę l, ponieważ wygląda ona zbyt podobnie do cyfry 1.
Nosredna

13

i = iterator, i = indeks, i = liczba całkowita

To, co kiedykolwiek wymyślisz, „i” oznacza, że ​​„pasuje do rachunku”.

Ponadto, chyba że masz tylko jedną linię kodu w tej pętli, prawdopodobnie powinieneś nazwać zmienną iterator / index / integer na coś bardziej znaczącego. Jak: pracownikIndeks

BTW, zwykle używam „i” w moich prostych pętlach iteratora; chyba że zawiera wiele wierszy kodu.


13

i = jota, j = jot; obie małe zmiany.

iota to najmniejsza litera w greckim alfabecie; w języku angielskim jego znaczenie jest powiązane z drobnymi zmianami, jak w „not one iota” (od frazy w Nowym Testamencie: „dopóki niebo i ziemia nie przeminą, ani jota, ani kropka nie przeminą od Prawa” (Mt 5, 18)).

Licznik reprezentuje niewielką zmianę wartości.

A z iota pochodzi jot (iot), który jest również synonimem małej zmiany.

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


13

Studnia z matematyki: (dla liter łacińskich)

a, b: używane jako stałe lub jako liczby całkowite dla liczby wymiernej
c: stała
d: pochodna
e: liczba Eulera
f, g, h: funkcje
i, j, k: są indeksami (również wektorami jednostkowymi i czwartorzędami)
l: generalnie nieużywany. wygląda na to, że 1
m, n: są wierszami i kolumnami macierzy lub jako liczby całkowite dla liczb wymiernych
o: również nieużywane (chyba że masz małą notację)
p, q: często używane jako liczby pierwsze
r: czasami przestrzenna zmiana zmiennej inne czasy związane z liczbami pierwszymi
s, t: zmienne przestrzenne i czasowe lub s stosuje się jako zmianę zmiennej dla t
u, v, w: zmiana zmiennej
x, y, z: zmienne


11

Chyba wiele możliwych głównych powodów:

  • matematycy używają ii jdla liczb naturalnych w formułach (tych, które używają liczb zespolonych przynajmniej rzadko), więc przeniesiono to do programowania
  • z C , iwskazówki do int. A jeśli potrzebujesz innego, intto i2jest po prostu zbyt długo, więc zdecydujesz się użyć j.
  • istnieją języki, w których pierwsza litera decyduje o typie, a inastępnie jest integer.


7

Z pewnością pochodzi z matematyki, która długo poprzedza programowanie komputerowe.

Skąd więc wziął się matematyka? Moje całkowicie niewykształcone przypuszczenie jest takie, że jak powiedział jeden z matematyków, matematyki lubią używać klastrów alfabetycznych do podobnych rzeczy - f, g, h dla funkcji; x, y, z dla zmiennych numerycznych; p, q, r dla zmiennych logicznych; u, v, w dla innych zbiorów zmiennych, szczególnie w rachunku różniczkowym; a, b, c dla wielu rzeczy. i, j, k przydaje się w przypadku zmiennych iteracyjnych, a to o wyczerpaniu możliwości. Dlaczego nie m, n? Cóż, są one używane do liczb całkowitych, ale częściej punkty końcowe iteracji niż same zmienne iteracyjne.

Ktoś powinien zapytać historyka matematyki.


6

Liczniki są tak powszechne w programach, a na początku obliczeń wszystko było na wagę złota ...
Programiści naturalnie próbowali zachować piksele, a „i” wymagało mniejszej liczby pikseli niż jakakolwiek inna litera do przedstawienia. (Matematyk, będąc leniwym, wybrał go z tego samego powodu - jako najmniejszy glif).
Jak wspomniano wcześniej, „j” po prostu naturalnie nastąpiło ...

:)


24
We wczesnych dniach komputerów piksele nie istniały .
SLaks,

1
@Slaks, to jeden zwycięski komentarz. Po prostu zobacz uśmiech na mojej twarzy i głos. Miły!
ProfK,

„Programiści naturalnie próbowali zachować piksele, a„ i ”wymagało mniejszej liczby pikseli niż jakakolwiek inna litera do przedstawienia.” <<< to jest przezabawne.
ocodo

1
... i tak narodziła się przedwczesna optymalizacja!
Gerrat

4

Używam go z wielu powodów.

  • Zwykle moje pętle są oparte na liczbach całkowitych, więc tworzysz pełny trójkąt na klawiaturze, wpisując „int i”, z wyjątkiem miejsca obsługiwanego kciukiem. Jest to bardzo szybka sekwencja do wpisania.

  • „I” może oznaczać iterator, liczbę całkowitą, przyrost lub indeks, z których każdy ma logiczny sens.

Odkładając na bok moje osobiste zastosowania, teoria wyprowadzania z FORTRAN jest poprawna, gdzie zmienne całkowite używały liter I - N.


4

Nauczyłem się FORTRAN na Control Data Corp. 3100 w 1965 roku. Zmienne zaczynające się od „I” do „N” miały być liczbami całkowitymi. Np .: „IGGY” i „NORB” były liczbami całkowitymi, „XMAX” i „ALPHA” były zmiennoprzecinkowe. Można to jednak zastąpić w drodze jawnej deklaracji.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.