Dlaczego zmienne " i "I" j " są używane do liczników?

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

Dlaczego "i "I" j " stały się zmiennymi używanymi jako liczniki w większości struktur sterowania?

Chociaż zdrowy rozsądek mówi mi, że są one jak X, który jest używany do reprezentowania nieznanych wartości, nie mogę przestać myśleć, że musi być jakiś powód, dla którego wszyscy są nauczani w ten sam sposób w kółko.

Czy to dlatego, że jest rzeczywiście zalecane dla najlepsze praktyki, konwencja, a może ma jakiś niejasny powód?

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

Author: Carlos, 2010-11-09

23 answers

Pochodzi ostatecznie z matematyki: notacja sumacyjna tradycyjnie używa i {[2] } 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 dla zbiorów rzeczy, na przykład jeśli masz kilka zmiennych x1, x2, ... xn, wtedy dowolny będzie znany jako x i .

A dlaczego tak jest no tak, wyobrażam sobie, że SLaks jest poprawny i to dlatego, że ja jestem pierwszą literą w indeksie.

 330
Author: zwol,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-11-09 19:54:58

Wydaje mi się, że pochodzi z Fortranu. Zmienne zaczynające się od I do Q były domyślnie liczbami całkowitymi, pozostałe były prawdziwe. Oznaczało to, że I była pierwszą zmienną całkowitą, a J drugą, itd., więc spadły w kierunku użycia w pętlach.

 200
Author: Ignacio Vazquez-Abrams,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-11-09 19:48:34

Matematycy używali i,j,k do wyznaczania liczb całkowitych w algebrze (indeksy, szeregi, sumacje itp.) długo wcześniej (np. 1836 lub 1816) komputery były w pobliżu (to jest pochodzenie wartości domyślnych typu zmiennej FORTRAN). Zwyczaj używania liter z końca alfabetu (..., x, y, z) dla zmiennych nieznanych i od początku (a,b,c...) dla stałych jest na ogół przypisywane René Descartes , (patrz też tutaj ) więc zakładam i, j, k...n (w środek alfabetu) dla liczb całkowitych jest prawdopodobnie jego zasługą.

 195
Author: timday,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-07-01 12:57:55

I = liczba całkowita

Pochodzi z Fortran, gdzie zmienne całkowite musiały zaczynać się od liter od I do N, A zmienne rzeczywiste zaczynały się od pozostałych liter. Tak więc byłem pierwszą i najkrótszą nazwą zmiennej całkowitej. Fortran był jednym z pierwszych języków programowania w powszechnym użyciu, a zwyczaje rozwijane przez programistów korzystających z niego przeniesione do innych języków.

EDIT: nie mam problemu z odpowiedzią, że wywodzi się ona z matematyki. Niewątpliwie jest to skąd inspiracje czerpali projektanci Fortran. Faktem jest, że dla mnie tak czy inaczej, kiedy zacząłem programować w Fortranie, użyliśmy I, J, K, ... dla liczników pętli, ponieważ były krótkie i pierwsze prawnie dozwolone nazwy zmiennych dla liczb całkowitych. Jako student drugiego roku w H. S. prawdopodobnie słyszałem o Kartezjuszu( i kilku innych), ale bardzo mało łączył się z matematyką podczas programowania. W rzeczywistości pierwszy kurs, który wziąłem, nazywał się "Fortran dla biznesu" i był nauczany nie przez wydział matematyki, ale Wydział biznesu / econ.

Przynajmniej dla mnie nazewnictwo zmiennych miało niewiele wspólnego z matematyką, ale wszystko dzięki przyzwyczajeniom, które podniosłem pisząc kod Fortran, który przenosiłem do innych języków.

 129
Author: tvanfosson,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-06-18 03:22:12

i oznacza I ndex.
j przychodzi po i.

 91
Author: SLaks,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-11-09 19:47:19

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

 63
Author: erickson,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-11-09 19:52:57

Myślę, że najprawdopodobniej pochodzi od indeksu (w sensie matematycznym ) - jest powszechnie używany jako indeks w Sumach lub innych operacjach opartych na zestawach i najprawdopodobniej był używany w ten sposób od czasów, gdy istniały języki programowania.

 52
Author: Michael Borgwardt,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-01-17 23:56:42

W matematyce preferowane jest używanie kolejnych liter w alfabecie dla" anonimowych " zmiennych 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 przedrostkiem "u, V, W") i "α, β, γ".

Teraz "f, g, h" I "x, y, z" nie są używane swobodnie: pierwsze jest dla funkcji, drugie dla wymiarów. "p, q, r" są również często używane do funkcji.

Wtedy są inne ograniczenia NA dostępne sekwencje: "l" I " o" są unikane, ponieważ wyglądają zbyt podobnie do "1 "i" 0 " w wielu czcionkach. "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 nie tyle luki trzech kolejnych liter bez niechcianych skojarzeń w matematyce dla indeksów.

Potem, jak zauważyło kilku innych, konwencje z matematyki miały silny wpływ na wczesne konwencje programowania, a "α, β, γ" nie były dostępne w wielu wczesnych zestawach postaci.

 47
Author: Charles Stewart,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-11-18 07:16:08

Znalazłem inną możliwą odpowiedź, która może być taka, że ja, j I k pochodzą z Hamilton's Quaternions.

alt text

Euler wybrał i dla jednostki urojonej.

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

Hamilton był bardzo wpływowy, a czwartorzędy były standardowym sposobem analizy 3D przed 1900 rokiem. Do tego czasu matematycy byli przyzwyczajeni do myślenia o (ijk)jako dopasowanym zbiorze. rachunek wektorowy zastąpił analizę czwartorzędową W latach 90. lepszy sposób aby napisać równania Maxwella. Ale ludzie zwykle zapisywali ilości wektorowe tak: (3i-2j+k) zamiast (3,-2,1). Tak (ijk) stały się standardowymi wektorami bazowymi w R^3.

W końcu fizycy zaczęli używać teorii grup do opisu symetrii w układach równań różniczkowych. Więc (ijk) zaczął kojarzyć "wektory, które są zamieniane przez grupy permutacji", a następnie dryfował w kierunku " rzeczy podobnych do indeksów, które przyjmują wszystkie możliwe wartości w pewnych określonych set, " który {[15] } jest w zasadzie tym, co oznaczają w pętli for.
 32
Author: Carlos,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-12-05 17:49:15

Przez odrzucenie (trochę stronnicze)

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
Author: Hernán Eche,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-11-18 11:58:04

Pewnego słonecznego popołudnia Archimedes rozmyślał (Jak zwykle w słoneczne popołudnia) i natknął się na swojego kumpla Eratostenesa.

Archimedes powiedział: "Archimedes pozdrowił Eratostenesa! Próbuję znaleźć rozwiązanie stosunku kilku kulistych sztywnych ciał w równowadze. Chciałbym powtórzyć te ciała wiele razy, ale mam przerażający czas na śledzenie, ile iteracji zrobiłem!"

Eratostenes powiedział: "Dlaczego Archimedes, ty dojrzała śliwko z żartownisia można było jedynie oznaczać kolejne rzędy linii na piasku, z których każda śledzi liczbę iteracji, które wykonaliście w iteracji!"

Archimedes zawołał do świata, że jego wielki przyjaciel był niezaprzeczalnie lśniącą latarnią inteligencji, że wymyślił tak proste rozwiązanie. Ale Archimedes zauważył, że lubi chodzić w kółko wokół swojej piaskownicy, gdy się zastanawia. W ten sposób istniało ryzyko utraty śladu, który rząd był na szczycie, a który na dno.

" Być może powinienem oznaczyć te wiersze literą alfabetu tuż obok, tak, że zawsze będę wiedział, który rząd jest który! Co o tym myślisz?- zapytał, a potem dodał-Ale Eratostenes... jakich listów mam użyć?"

Eratostenes był pewien, że nie wie, które litery będą najlepsze, i powiedział To Samo Archimedesowi. Ale Archimedes był niezadowolony i nadal popytywał biednego bibliotekarza, aby wybrał przynajmniej dwa listy, które będą mu potrzebne do jego aktualne rozwiązanie równowagi sfery.

Eratostenes, w końcu zmęczony nieustanną prośbą o dwa listy, krzyknął: "po prostu nie wiem!!!"

Więc Archimedes wybrał dwa pierwsze litery w wykrzykniku Eratostenesa i podziękował swojemu przyjacielowi za wkład.


Te symbole zostały szybko przyjęte przez starożytnych greckich programistów Javy, a reszta jest, No cóż... historia.

 21
Author: Brendan,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-11-18 17:45:31

Myślę, że to dlatego, że wiele pętli używa zmiennej typu Int do zliczania, jak

for (int i = 0; etc

I kiedy piszesz, mówisz to w swojej głowie (jak kiedy czytasz), więc w swoim umyśle mówisz " int....'

I kiedy musisz wymyślić list zaraz po tym ' int....', mówisz / wpisz 'i', ponieważ jest to pierwsza litera, o której myślisz, gdy właśnie powiedziałeś ' int '

Jak piszesz słowo do dzieci, które zaczynają uczyć się czytania, piszesz słowa dla nich przez używanie nazw, jak to:

Zaklęcia słowne William W, Ok O, Ruby R, Done D

Więc mówisz Int i, Double d, Float f, string s itd. na podstawie pierwszej litery.

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

 15
Author: Michel,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-11-17 21:30:31

Myślę, że to połączenie innych wymienionych powodów:

Na początek, 'i' było powszechnie używane przez matematyków w ich notacji, a we wczesnych czasach komputerów z językami, które nie były binarne (tj. musiały być parsowane i lexed w jakiś sposób), zdecydowana większość użytkowników komputerów byli również matematycy (... i naukowców i inżynierów), więc notacja wpadła do użycia w językach komputerowych do programowania pętli, i tak jakby po prostu tkwiła w od tamtej pory.

Połącz to z faktem, że przestrzeń ekranu w tych bardzo wczesnych dniach była bardzo ograniczona, podobnie jak pamięć, rozsądnie było zachować krótsze nazwy zmiennych.

 14
Author: Alex Marshall,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-11-17 23:36:33

Być może historyczne ?

FORTRAN, pierwszy język wysokiego poziomu, domyślnie definiowany i, j, k, l, m jako typy danych całkowitych, a pętle mogą być sterowane tylko przez zmienną całkowitą, konwencja jest kontynuowana ?

Eg:

Do 100 i= j, 100, 5 .... 100 Kontynuuj ....

 13
Author: brett,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-01-17 23:48:30

I = iterator, i = index, i = integer

Które kiedykolwiek myślisz, że " ja "oznacza to nadal " pasuje do rachunku".

Poza tym, jeśli nie masz tylko jednej linii kodu w tej pętli, prawdopodobnie powinieneś nazwać zmienną iterator / index / integer czymś bardziej znaczącym. Like: employeindex

BTW, zwykle używam "i" w prostych pętlach iteratora, chyba że zawiera wiele linii kodu.

 13
Author: Chris Pietschmann,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-06-02 01:24:44

I = iota, j = jot; obie małe zmiany.

Jota jest najmniejszą literą alfabetu greckiego; w języku angielskim jej znaczenie jest związane z małymi zmianami, jak w" ani Jota "(od wyrażenia w Nowym Testamencie: "dopóki niebo i ziemia nie przeminą, ani Jota, ani kropka nie odejdą od prawa "(Mt 5, 18)).

Licznik reprezentuje małą zmianę wartości.

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

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

 13
Author: Stephen,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-11-18 14:38:03

Dobrze 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: functions
i, j, k: są indeksami (także wektorami jednostkowymi i czwartorzędami)
l: ogólnie nie używany. wygląda jak 1
m, n: są wierszami i kolumnami macierzy lub jako liczby całkowite dla liczb wymiernych
o: również nie używane (chyba, że jesteś w małej notacji o)
p, q: często używane jako liczby pierwsze
r: czasami a przestrzenna zmiana zmiennej inne czasy związane z liczbami pierwszymi
s, t: zmienne przestrzenne i czasowe lub S jest używane jako zmiana zmiennej dla t
u, v, w: zmiana zmiennej
X,y, z: zmienne

 13
Author: MaDMaD Mad,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-12-05 17:53:25

Wiele możliwych głównych powodów, jak sądzę:

  • matematycy używają i i jdla liczb naturalnych w formułach (tych, które używają liczb zespolonych rzadko, przynajmniej), więc to przeniesione do programowania
  • od C, i wskazówki do int. A jeśli potrzebujesz innego int to i2 jest po prostu zbyt długi, więc zdecydujesz się użyć j.
  • są języki, w których pierwsza litera decyduje o typie, a i jest wtedy integer.
 11
Author: towi,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-11-18 12:44:22

Pochodzi z Fortranu, gdzie i, j, k, l,m, n są w domyśle całkowitymi liczbami całkowitymi.

 10
Author: Walter Bright,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-12-05 19:32:11

To zdecydowanie pochodzi z matematyki, która długo poprzedzała programowanie komputerowe.

Więc, skąd się wzięło if z matematyki? Mój zupełnie niewykształcony domysł jest taki, że jak powiedział jeden z kolegów, matematycy lubią używać klastrów alfabetycznych dla podobnych rzeczy-f, g, h dla funkcji; x, y, z dla zmiennych numerycznych; p, q, R dla zmiennych logicznych; u, v, w dla innych zestawów zmiennych, szczególnie w rachunku różniczkowym; a, b, c dla wielu rzeczy. i, j, k przydaje się dla zmiennych iteracyjnych, a to wyczerpuje możliwości. Dlaczego nie m, n? Cóż, są one używane dla liczb całkowitych, ale częściej punkty końcowe iteracji, a nie same zmienne iteracyjne.

Ktoś powinien zapytać historyka matematyki.

 7
Author: David Lewis,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-12-05 14:10:49

Liczniki są tak powszechne w programach, a w pierwszych dniach obliczeń, Wszystko było na wagę złota...
Programiści naturalnie próbowali oszczędzać piksele, a " i " wymagało mniejszej liczby pikseli niż jakakolwiek inna litera do reprezentowania. (Matematycy, będąc leniwi, wybrali go z tego samego powodu - jako najmniejszy glif).
Jak wspomniano wcześniej, " j " po prostu naturalnie...

:)

 6
Author: Gerrat,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-11-17 21:40:20

Używam go z wielu powodów.

  • Zwykle moje pętle są oparte na int, więc tworzysz kompletny trójkąt na klawiatura wpisująca "int i" z wyjątek od przestrzeni, z którą się zajmuję mój kciuk. To jest bardzo szybki Sekwencja do wpisania.

  • "i" może oznaczać iterator, integer, increment lub index, z których każdy tworzy logiczny sens.

Z moich osobistych zastosowań odłóżmy na bok teorię, że pochodzi z FORTRAN jest poprawna, gdzie liczba całkowita vars używał liter I-n.

 4
Author: John T,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-01-17 23:42:41

Nauczyłem się FORTRAN Na Control Data Corp. 3100 w 1965 roku. Zmienne zaczynające się od " I " do " N " były zakładane jako liczby całkowite. Ex: 'IGGY' i 'NORB' były liczbami całkowitymi, 'XMAX' I 'ALPHA' były zmiennoprzecinkowe. Można to jednak zastąpić poprzez jawną deklarację.

 4
Author: Pierre,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-12-05 14:44:02