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

C, C++, Pascal, Assembly, Raspberry, Java, Matlab, Python, BASIC, SQL, PHP, etc.
Nerre
Inlägg: 26725
Blev medlem: 19 maj 2008, 07:51:04
Ort: Upplands väsby

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

Inlägg 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.
Användarvisningsbild
sodjan
EF Sponsor
Inlägg: 43178
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping
Kontakt:

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

Inlägg 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...
Användarvisningsbild
Icecap
Inlägg: 26153
Blev medlem: 10 januari 2005, 14:52:15
Ort: Aabenraa, Danmark

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

Inlägg 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å.
Användarvisningsbild
sodjan
EF Sponsor
Inlägg: 43178
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping
Kontakt:

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

Inlägg 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.
gkar
Inlägg: 1454
Blev medlem: 31 oktober 2011, 15:28:29
Ort: Linköping

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

Inlägg 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!
Användarvisningsbild
sodjan
EF Sponsor
Inlägg: 43178
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping
Kontakt:

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

Inlägg 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?
ronnylov
Inlägg: 987
Blev medlem: 23 februari 2012, 12:06:19
Ort: Borås

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

Inlägg 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.
Nerre
Inlägg: 26725
Blev medlem: 19 maj 2008, 07:51:04
Ort: Upplands väsby

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

Inlägg 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?
johano
Inlägg: 1943
Blev medlem: 22 januari 2008, 10:07:45
Ort: Stockholm

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

Inlägg 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
Nerre
Inlägg: 26725
Blev medlem: 19 maj 2008, 07:51:04
Ort: Upplands väsby

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

Inlägg 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).
Användarvisningsbild
bit96
Inlägg: 2492
Blev medlem: 3 september 2007, 10:04:29
Ort: Säffle

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

Inlägg 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:
Användarvisningsbild
sodjan
EF Sponsor
Inlägg: 43178
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping
Kontakt:

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

Inlägg 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.
SeniorLemuren
Inlägg: 7812
Blev medlem: 26 maj 2009, 12:20:37
Ort: Kristinehamn

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

Inlägg 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. :)
Nerre
Inlägg: 26725
Blev medlem: 19 maj 2008, 07:51:04
Ort: Upplands väsby

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

Inlägg av Nerre »

Vi var bara N0llor nån månad, sen blev vi ettor:)
ronnylov
Inlägg: 987
Blev medlem: 23 februari 2012, 12:06:19
Ort: Borås

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

Inlägg 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.
Skriv svar