Sida 4 av 5

Re: Vad är det som skapar en "död punkt" i denna loop?

Postat: 23 november 2014, 12:46:19
av Nerre
Det är logiskt för MÄNNISKOR att numrera den första saken med 1. Ett, första, två, andra. Hur logiskt som helst.

Re: Vad är det som skapar en "död punkt" i denna loop?

Postat: 23 november 2014, 14:27:02
av sodjan
> Det är logiskt för MÄNNISKOR att numrera den första saken med 1.

Visst är det så, och det finns ingen anledning till att inte
programeringsspråk också ska vara logiska *för oss*.

Men som sagt, det hela handlar ju bara om att C är 0ett dåligt språk
för generell programmering, det fungerade säkert helt OK till det som
det var avsett till från början, systemprogrammering på en låg nivå.

Det kan aldrig vara logiskt att kalla första medlemmen i en lista för "nummer 0".

> Det motsvarar i grunden till att man ska märka upp 100 steg...

Första steget är ju just det, steg nr 1.
Man tar ju inte ett steg och räknar "0, 1, 2...".
Ingen står still och börjar räkna "0" och *sedan* tar första steget.
Dumheter...

Re: Vad är det som skapar en "död punkt" i denna loop?

Postat: 23 november 2014, 14:34:24
av Icecap
Intressant.

Ingen verkar tycka att "här är här där man är", "alla" verkar vilja ha det till att man inte kan befinna sig där det behövs.

Om jag ska beskriva avståndet till något som ligger under mina fötter på skattkarta-manér lär mina instruktioner inte vara "Gå noll steg, gräv där". Inte heller "Gå ett steg" osv.

För mig är 1 steg att jag rör bort mig från platsen jag startar på men tydligen är jag ganska ensam om att anse att det kan finnas något på platsen man börjar på.

Re: Vad är det som skapar en "död punkt" i denna loop?

Postat: 23 november 2014, 15:09:22
av sodjan
Om du lägger upp 5 äpplen i en rad på bordet
så kallar du ju inte dom för "äpple 0" - "äpple 4".

Säg att du vill spara vikten på 5 st äpplen i en lista.

unsigned int apple_weight[5]

Det naturliga är sedan att vikten på varje äpple
heter: apple_weight[1] - apple_weight[5].

Fullständigt självklart egentligen.

Enda fallet då en array som börjar på 0 är användbart är när
man håller på med system programmering och det hela motsvarar
något slags minnesbuffert eller liknande. Vid normal programmering
(då en array normalt representerar något "verkligt") så är numrering
från noll onaturligt.

Igen, det hela har med C's bakgrund att göra.

Re: Vad är det som skapar en "död punkt" i denna loop?

Postat: 23 november 2014, 16:21:40
av gkar
pekare[offset]
Det som skiljer C mot andra språk är att det inte är index som står innanför hakarna, utan offset, precis som Icecap poängterar.
(C har ingen arrayhantering, bara pekararitmetik)
Andra språk har normalt index för arrayer, C har offset och pekare.
Så vi ska inte jämföra med gatunummer utan med avstånd ifrån där du befinner dig.

Så för att jämföra äpplen och päron!

- Hur många mil skall du åka?
- 1 mil.
- Aha, du skall stå kvar!
Här har vi tydlig fråga om avstånd, dvs samma som C.

Hur fungerar det i andra språk där man använder pekare?

I Freepascal tex, fungerar det som i C.
http://www.freepascal.org/docs-html/ref/refse15.html

I C-fallet skulle det vara mycket klumpigt och svårt att föröka få till att det vi kallar arrayer skulle börja på 1.

Nu släpper jag det här!

Re: Vad är det som skapar en "död punkt" i denna loop?

Postat: 23 november 2014, 16:36:16
av sodjan
Ja, hela pekar grejen ställer ju till det. :-)
Man skulle kunna ha separata typer för pekare och mer
normala listor/arrayer. Men så är det ju inte, och som
sagt så har ju C en annan bakgrund än för generell
programmering. Då blir det så här...

> - Hur många mil skall du åka?
> - 1 mil.
> - Aha, du skall stå kvar!

Var det ett skämt eller varför ska man stå kvar
om man ska åka en mil?

Re: Vad är det som skapar en "död punkt" i denna loop?

Postat: 24 november 2014, 13:39:23
av ronnylov
Om man tittar på en tumstock så börjar den med första värdet vid punkten 0 och vid punkten 1 har man den andra markeringen som visar 1 cm när man "färdats" 1 cm. Jag brukar tänka likadant när jag programmerar i C att starten är i punkten 0. Men sedan blir det ju ändå förvirrat när man deklarerar storleken.

int tal[100];

Detta säger ju att arrayen tal har 100 värden men placerar man ut dem på tumstocken med första värdet vid 0 cm så hamnar sista värdet vid 99 cm. Så för att skapa en Array med alla värden från 0 cm upp till och med 100 cm på tumstocken så får man deklarera:

int tal[101];

Jag förstår logiken bakom men det händer ju ändå att man gör fel emellanåt.

Re: Vad är det som skapar en "död punkt" i denna loop?

Postat: 24 november 2014, 14:00:55
av Nerre
Vi säger att du står i en korsning och ska räkna bilar som passerar, börjar du räkna med noll eller ett?

Vi säger att du ska inventera hur många hyllor som är lediga på lagret, börjar du räkna med noll eller ett?

Vi säger att du ska betala nåt 500 spänn med hundralappar, börjar du räkna med noll eller ett?

Vi säger att du ska borra 4 hål, börjar du räkna med noll eller ett?

Re: Vad är det som skapar en "död punkt" i denna loop?

Postat: 24 november 2014, 14:11:39
av johano
Vi säger att du står i den första av en lång rad av öppna flyttkartonger och ska förflytta dig till den fjärde,
hur många kartonger måste du då kliva igenom för att komma dit?

/johan

Re: Vad är det som skapar en "död punkt" i denna loop?

Postat: 24 november 2014, 14:16:38
av Nerre
Jag står I den första, ska TILL den fjärde. Logiskt, 4-1.

Ser du själv att du sa att jag står i den första? Du sa inte att jag står i låda noll. Du sa också att jag ska ta mig till låda fyra, inte låda tre (som det hade blivit om index börjat på noll).

Re: Vad är det som skapar en "död punkt" i denna loop?

Postat: 24 november 2014, 14:28:47
av bit96
Haha.
Jag minns när man var liten skit och vi tävlade om vem som t.ex. sprang fortast runt huset.
Någon klocka hade vi inte utan någon räknade sekunder högt.
Alla brukade började räkna på 'ett' när starten gick utom jag som började på 'noll'.

"Vadå 'noll', fan, du måste ju börja på 'ett'".
"Nej 'noll' eftersom det tar en stund innan det gått en sekund"
"???"
Ja, det blev ibland en del diskussioner om detta.
:)
---
Angående om arrayer skall börja på 0 eller 1 så får man skilja på uppräkning och index.
Som tekniker och programmerare av asm och C är '0' fullt naturligt eftersom det matchar pekare och offset perfekt.
Lätt att förstå som tekniker, naturligt i pekar-aritmetik, array-funktioner blir lätta att hantera rent programmeringsmässigt.

Skall man göra en uppräkning eller presentation för användaren måste/bör det dock översättas till att börja på 1.

Och vill man börja på '1' i C så får man väl deklarera arrayen som [ANTAL+1] och strunta i att använda första positionen.
Men efter ett tag brukar man trassla in sig i justeringar med +1 och -1 på olika ställen som innebär risk för buggar. :humm:

Re: Vad är det som skapar en "död punkt" i denna loop?

Postat: 24 november 2014, 14:34:00
av sodjan
C är ett tekniskt orienterat språk primärt för att skriva
lågnivåruiner i operativsystem och liknande. Det var aldrig
tänkt till generell programmering där man hanterar "verkliga"
objekt som äpplen eller lagerhyllor är vad det nu är.

Andra språk klarar galant av en mer naturlig indexering med 1 för
att representera det första objektet i en lista eller matris.

Re: Vad är det som skapar en "död punkt" i denna loop?

Postat: 24 november 2014, 14:36:45
av SeniorLemuren
Nerre skrev:Det är logiskt för MÄNNISKOR att numrera den första saken med 1. Ett, första, två, andra. Hur logiskt som helst.
När jag började min ingenjörsutbildning så var vi nollor hela första terminen. När jag sågar av en bräda till båtbygget så börjar jag att mäta från noll. :)

Re: Vad är det som skapar en "död punkt" i denna loop?

Postat: 24 november 2014, 14:38:16
av Nerre
Vi var bara N0llor nån månad, sen blev vi ettor:)

Re: Vad är det som skapar en "död punkt" i denna loop?

Postat: 24 november 2014, 16:39:49
av ronnylov
LabVIEW är förresten likadant som C. Arrayerna indexeras från 0 där också. Har programmerat mycket LabVIEW i jobbet så det sitter liksom i ryggmärgen oavsett om det är rätt eller fel att tänka så.

Men hade C börjat räkna från 1 hade väl många andra programspråk också gjort det. Spelar liksom ingen roll hur mycket vi tjafsar om det, man får försöka lära sig hur det funkar bara. Det är väl litegrann som att en byte har 256 värden men högsta värdet är 255 (om man tänker unsigned char) eftersom nollan ska få plats också bland dessa 256 olika värden.