Kirjautuminen

Haku

Tehtävät

Keskustelu: Yleinen keskustelu: Indeksi 0: Nollas vai ensimmäinen indeksi?

Sivun loppuun

Ihme_kala [25.01.2019 16:21:30]

#

Ohjelmoinnin MOOC 2019 kurssilla eli avoimella verkkokurssilla materiaalissa puhutaan taulukon indeksistä 1 ensimmäisenä indeksinä. Indeksistä 0 (joka on tietenkin taulukon indekseistä ensimmäinen) puhutaan "nollantena" indeksinä.

Googlailin ja esim. TAMKin jossain materiaalissa (linkki PDF) sanotaan että "Taulukon ensimmäinen indeksi on 0."

Kysyin tuosta asiasta (MOOCin tiimiltä) ja totesivat että ei ole virhettä materiaalissa. Haluaisin vaan kysyä onko tuosta jotain "virallista" kantaa? Ymmärtäisin jos lukusanalla sanottaisiin että indeksi nolla ja indeksi yksi, mutta järjestyssana ensimmäinen viittaa tietenkin ensimmäiseen indeksiin joka on 0.

Ehkä vähän lillukanvarsiin takertumista, mutta haluaisin tiedustella työkseen ohjelmoivilta: Mihin alkioon laitatte vaikkapa arvon 2314, jos pomo käskee laittamaan arvon 2314 taulukon ensimmäiseen indeksiin?

Metabolix [25.01.2019 19:21:38]

#

"Ensimmäinen" on looginen termi. Esimerkiksi taulukko voidaan järjestää niin, että pienin luku tulee ensimmäiseksi. Se, onko ensimmäisen indeksin numero 0 vai 1, on kielestä riippuvainen sivuseikka, ja esimerkiksi Javan kohdalla ensimmäinen indeksi on 0. On myös kieliä, joissa taulukko voi alkaa muusta indeksistä, ja voidaan sanoa vaikka, että taulukon ensimmäinen indeksi on 10.

Mitä jos MOOC-tehtävässä käsketään vaikka lukea käyttäjältä lukuja ja tulostaa ensimmäinen luku, joka on suurempi kuin 3? Toteatko silloin, että yksi suurempi luku ohitetaan, koska se on nollas, ja vasta seuraava on ensimmäinen? Riippuuko lopputulos siitä, toteutatko ratkaisun suoraan lukusilmukassa if-lauseella vai luetko ensin luvut taulukkoon ja sieltä sitten otat kohdasta 1 "ensimmäisen" luvun? Eihän tässä ole mitään järkeä.

MOOCissa on ehkä ajateltu, että tällä "nollannella" indeksillä jotenkin selvennettäisiin tilannetta, mutta mielestäni tästä tulee vain lisää epäselvyyttä.

Grez [25.01.2019 20:55:04]

#

Ihme_kala kirjoitti:

Ehkä vähän lillukanvarsiin takertumista, mutta haluaisin tiedustella työkseen ohjelmoivilta: Mihin alkioon laitatte vaikkapa arvon 2314, jos pomo käskee laittamaan arvon 2314 taulukon ensimmäiseen indeksiin?

Eipä missään firmassa ole pomoa joka takertuisi noin yksityiskohtiin. Pomo voi tietysti sanoa että pitää koodata softa joka noudattaa jotain speksiä ja/tai standardia ja niissä voi olla mainittuna että jotain tulee taulukon ensimmäiseen indeksiin. Siinä tapauksessa väittäisin että jokainen ammattikoodari käyttäisi indeksiä 0, ainakin jos käytetyssä kielessä taulukot alkaa nollasta.

Antti Laaksonen [25.01.2019 22:18:04]

#

Ilmeisesti kyseessä on tämä kohta?

https://ohjelmointi-19.mooc.fi/osa-3/3-taulukot

Olen samaa mieltä, että "nollas indeksi" ja "ensimmäinen indeksi" eivät ole hyviä sanavalintoja vaan aiheuttavat sekaannusta. En käyttäisi niitä itse oppimateriaalissa.

Ei ole kuitenkaan virallista tahoa, joka voisi kommentoida asiaa, enkä pitäisi tätä virheenä vaan vain epätavallisena käytäntönä.

Grez [25.01.2019 22:58:26]

#

Lähinnä tuo on suomen kieliopillisesti virheellistä tekstiä.

Saman olisi voinut kirjoittaa suomeksikin:

lainaus:

Lohkossa määritellyt arvot asetetaan taulukkoon järjestestyksessä siten, että ensimmäinen arvo asetetaan indeksiin nolla, toinen arvo indeksiin yksi jne.

Nollas "indeksi" olisi indeksiarvo ennen ensimmäistä, eli sanoisin että taulukko[-1] olisi aikalailla nollas indeksi, jos siis sallitaan taulukon ulkopuolelle osoittaminen.

Ihme_kala [26.01.2019 01:05:12]

#

Antti Laaksonen kirjoitti:

Ilmeisesti kyseessä on tämä kohta?
https://ohjelmointi-19.mooc.fi/osa-3/3-taulukot

Tuossakin siitä puhutaan, mutta itse huomasin asian outouden vasta seuraavan alaosan eli "Merkkijonot" tehtävässä 33 "Joka Toinen Sana". Siinä käsketään tulostaa ensimmäisestä indeksistä lähtien syötetyn tekstin joka toinen sana. Ensimmäinen indeksi tarkoittaa...toista indeksiä.

L2-K2 [26.01.2019 01:31:00]

#

Ihme_kala kirjoitti:

(26.01.2019 01:05:12): ”– –” Tuossakin siitä puhutaan, mutta itse huomasin...

Minun mielestäni tuo on naurettavaa ja tyhmää kielenkäyttöä kurssin toteuttaneelta taholta. Luonnollisen kielessämme ensimmäinen tarkoittaa ensimmäistä, ei toista. Tästä syystä jos yksitoista-alkioisen taulukon ensimmäiseen indeksiin laitetaan vaikka ”vastaus kysymykseen”, niin se olisi C:llä

int taulukko[11];
taulukko[0] = 42;

mutta vastaavasti modernilla Fortranilla

integer, dimension (11) :: taulukko
taulukko(1) = 42

tai vaikka

integer, dimension (0 : 10) :: taulukko
taulukko(0) = 42

tai jos oikein sikaillaan, niin jopa

integer, dimension (-5 : 5) :: taulukko
taulukko(-5) = 42

Sillä että eri ohjelmointikielissä käytetään eriäviä tapoja merkitä ensimmäistä (tai viimeistä, tai N:ttä) alkiota ei pitäisi olla vaikutusta luonnollisen kielen käyttöön. Ohjelmointikieli on työkalu, ei itsetarkoitus. Nuo erivät käytännöt kun juontavat juurensa pitkälti siihen mihin käyttöön kutakin kieltä on aikoinaan kehitetty.

Matematiikkaa jos pitäisi paljon kirjoittaa, niin ykkösestä alkava indeksointi on monesti kätevää (koska esimerkiksi N alkion taulukon viimeinen indeksi on N). Toisaalta, C ja se osoitinalgebra tykkää siitä että

taulukko[i] == *(taulukko + i)

PS/EDIT. Koodia ei kannattane yrittää kirjoittaa koodi-tägien ulkopuolelle. Hakasulkeissa olevalla i:llä oli joku muukin merkitys.

The Alchemist [26.01.2019 15:10:32]

#

Ihme_kala kirjoitti:

Tuossakin siitä puhutaan, mutta itse huomasin asian outouden vasta seuraavan alaosan eli "Merkkijonot" tehtävässä 33 "Joka Toinen Sana". Siinä käsketään tulostaa ensimmäisestä indeksistä lähtien syötetyn tekstin joka toinen sana. Ensimmäinen indeksi tarkoittaa...toista indeksiä.

Pitäisi tietää teksti sanatarkasti, jotta voisi sanoa, onko se vain kieliopillisesti väärin vai onko siinä myös oikea merkityksellinen virhekin. Laaksosen linkkaamassa tekstikappaleessa asia on kyllä ilmoitettu riittävän selkeästi vaikka on harmi, että koodarinalkioille valehdellaan oppimateriaalissa syöttämällä heille itse keksittyjä termejä.


Sivun alkuun

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta