C-tutorial

Här skriver vi inga frågor. Här finns svaren.
Användarvisningsbild
mri
Inlägg: 1165
Blev medlem: 15 mars 2007, 13:20:50
Ort: Jakobstad, Finland
Kontakt:

Re: C-tutorial

Inlägg av mri »

OK, nu har jag gått igenom de 11 första kapitlen, fortsätter med resten sen. Jag har koncentrerat mig på sakfel. Eftersom jag inte är sverige-svensk kommenterar jag inte er svenska, förutom svenska programmeringstermer. Ej heller ert pedagogiska upplägg kommenterar jag eftersom ni säkert har en känsla av vem ni vill nå med texten. Jag tror det kan finnas en styrka i ert oformella och ibland galna språk. Läsningen blir ju då inte tråkig eller högtravande. :)
Vissa fel återkommer många gånger, som jag endast kommenterat de första gångerna.
Jag har inte läst sodjans långa inlägg, så jag kanske upprepar vad han redan skrivit.



1. Absoluta grunderna

"samt något som kan göra koden till en körbar programfil. Det senare kallas en kompilator"

Kompilatorn gör inte allt jobb. Kompilatorn kompilerar koden till objekfiler (maskinkod), länkaren länkar ihop med andra objekfiler och objektkod från bibliotek till en programfil (exe-fil).


"#include <stdio.h> är en instruktion till kompilatorn som säger åt den att inkludera ett bibliotek som innehåller massvis med funktioner för in- och utmatning."

Nej, fel att säga bibliotek. Instruktionen inkluderar all text i filen stdio.h (copy/paste) så att kompilatorn också kompilerar den koden. Kompilatorn inkluderar inte några bibliotek, det gör länkaren, OM man använt en standardfuktion som printf() i sin kod. stdio.h innehåller bara deklarationer av vad som finns i biblioteken.


"Eftersom det är main-funktionen så vart den anropad av systemet, och systemet tar nollan som ett tecken på att allt gick bra och programmet avslutades utan fel."

Nja, det finns ingen generell regel att man måste returnera 0 om allt går bra. Man kan returnera vilket värde som helst, och ett annat program kan kolla i ett script vad det här programmet returnerade för värde.


2. Variabler

"Det första nya i detta program är raden int heltalsvariabel."

... och det kallas för en definition av en variabel.


"Det finns ett gäng olika typer av variabler tillsammans med heltal."

Det är oftast bättre att tala om en variabels 'datatyp' än bara 'typ'. Typ är ett för allmänt ord och kan missförstås vad man avser.


"Notera här hur initialiseringen av variabeln (int heltalsvariabel) endast får göras en gång per variabel."

Nej. Det är definitionen som endast får göras en gång.


3. Inmatning av tal

"Ampersand betyder före ett varibelnamn att vi utför en referencing, mer om det kommer senare när vi går in på pekare. Tills vidare får du nöja dig med att man måste göra så när man använder scanf."

Nej det måste man inte.
scanf() förväntar att man skickar variablernas adress (pekare i C terminologi) som argument, så att scanf() kan lagra den inlästa informatione på rätt plats i minnet. För en enkel int, char eller float variabel får man fram variabelns adress med ampersand tecknet.

Men snälla, gör den första C introduktionen i historien som skippar scanf() helt och hållet! scanf() är en riktig skifunktion som ingen vettig människa använder i praktiken. Och, varför krångla till det såhär i början av introduktionen med att blanda in pekare...


4. if-satser

"if (323 == 323)"

Fruktansvärt dåligt exempel. Byt ut en sidan till en variabel åtminstone!


"== jämför två värden/variabler"

== jämför två värden, inget mer. De två värdena kan givetvis hämtas ur variabler, eller beräknas på annat sätt.


"If utför något konditionellt (villkorat), alltså, om ett villkor stämmer kör den delarna inom måsvingar. Om värdet inte stämmer,"

Aningen missvisande beskrivning. if kollar inte "om ett villkor stämmer". if kollar endast om utrycket inom parentes (som kan vara ett "logiskt" eller "matematiskt" uttryck) evalueras till 0. Notera att C betraktar heltalsvärdet 0 som "falskt" och alla heltalsvärden som inte är 0 som "sant". Sen så har jag aldrig hört ordet villkorat tidigare, men nog 'villkorligt'.


"if (! 45 == 22)"

Operatorn ! är starkare än == så det här evalueras nog inte som du tänkt.


5. Loopar

"en så kallad infinite loop"

oändlig loop


"Alla värden över 0 räknas som sanna"

Alla heltalsvärden som inte är lika med 0 räknas som sanna


6. Arrays

"Arrays har många namn på svenska, däribland lista, fält, vektor, serie"

lista och serie tycker jag inte passar in här, men nog fält och vektor. Array är inte svenska om jag inte misstar mig.


"Den första raden initialiserar en array"

Det är en 'definition' av ett fält.


"index, men den variabeln måste vara av heltalstyp"

Det går nog bra med en flyttal också. Kompilatorn kommer att automatiskt konvertera flyttalet till ett heltal, dvs kapa bort decimaldelen och indexera med heltalsdelen.


7. char-typen


8. Strängar - grunderna


9. Funktioner

"Sedan inom parentes anges hur många argument den tar, samt av vilken sort"

använd 'datatyp' istället för 'sort'.


10. switch-sats


11. Typer

Använd hellre 'Datatyper'


"Hur mycket varje sorts variabel rymmer beror helt på din kompilator"

En int lagras i minimum 16 bit. int kan vara större, t.ex. 32, 64 eller ännu mer beroende på systemet.
short lagras i minimum 16 bit. I system med t.ex. 32 bitars int brukar short vara mindre än int, dvs 16 bit.
long lagras i minimum 32 bit.
Alltså, C specificerar minimum storlekar!
Nu minns jag inte vad C specificerar för char, men jag vet att det finns platformar som har 32 bitars char, eftersom CPU'n endast kan hantera 32 bitars tal.


"Tyvärr har vi inga exakta siffror på precisionen"

float ger ca 7 siffrors noggranhet och double ger ca 15 siffrors noggranhet.


"Detta är för att void-typen inte har någon funktion i variabelsammanhang"

'void' är engelska och betyder ungefär 'tomrum' eller 'ingenting'.


"Experimentera gärna för att ta reda på exakt hur hög prioritet casting har, jag vet inte själv"

"casting" är i nästhögsta prioritetsgruppen, på samma nivå som t.ex.: sizeof, ++, --, !, ~, osv.
kqr
Inlägg: 11
Blev medlem: 4 augusti 2009, 12:05:04

Re: C-tutorial

Inlägg av kqr »

Trevlans & jättebra! Ska gå igenom vad du skrivit lite mer på djupet när jag får tid! :D
Användarvisningsbild
AndLi
Inlägg: 17134
Blev medlem: 11 februari 2004, 18:17:59
Ort: Knivsta
Kontakt:

Re: C-tutorial

Inlägg av AndLi »

Jag var ju tvungen att göra en undersökning hos en stor grupp stockholmsungdomar (okej, okej, 2 st då...)

Nr1 var 18 och hade full koll. Nr2 var 13 och hade inte en susning :)
Användarvisningsbild
psynoise
EF Sponsor
Inlägg: 7158
Blev medlem: 26 juni 2003, 19:23:36
Ort: Landvetter

Re: C-tutorial

Inlägg av psynoise »

TS: Kan kanske vara på plats att skriva in din tutorial i wikin om du har kommit fram till någon bra text. I wikin som för övrigt fungerar igen kan folk ändra om något skulle vara fel.
johano
Inlägg: 1943
Blev medlem: 22 januari 2008, 10:07:45
Ort: Stockholm

Re: C-tutorial

Inlägg av johano »

DM i trådlyft?
Användarvisningsbild
psynoise
EF Sponsor
Inlägg: 7158
Blev medlem: 26 juni 2003, 19:23:36
Ort: Landvetter

Re: C-tutorial

Inlägg av psynoise »

Hoppas jag leder isf, nee kom just på att tänka på denna tråd och att följa upp ämnen är alltid bra. Tiden sen senaste meddelande kan ju ha lätt till något bra också.
Användarvisningsbild
slaeshjag
Inlägg: 458
Blev medlem: 16 april 2008, 15:17:19
Ort: 10.0.0.10

Re: C-tutorial

Inlägg av slaeshjag »

Kan säga att ingen av oss har haft tid eller ork att fortsätta sedan sist, men kan inte utesluta att updateringar kommer ske. Och har någon överdrivet mycket tid och lust till övers så är det väl bara att slänga in på wikin? It's copyleft you know...
Användarvisningsbild
sodjan
EF Sponsor
Inlägg: 43178
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping
Kontakt:

Re: C-tutorial

Inlägg av sodjan »

> ingen av oss har haft tid eller ork att fortsätta sedan sist,...

Det sammanfattar nog väldigt bra status för 99.99% av allt material på Internet... :-) :-)
larsp
Inlägg: 10
Blev medlem: 19 november 2010, 14:38:06

Re: C-tutorial

Inlägg av larsp »

Har inte läst er tutorial men måste säga att det är jättebra att ni försöker skriva en.

Några kommentarer till kommentarerna:

Spelar väl ingen roll att C kanske inte är det bästa nybörjarspråket. Kanske kan man redan programmera och vill lära sig C. Vill man använda C som sitt första språk så är det ens val.

Som vanligt när man frågar om råd och feedback så hänger folk upp sig på enstaka ord. Tutorial tycker jag är ett bra ord även på svenska, nybörjarguide går väl också bra.

Till sist då druknar diskussionen i en massa onödiga inlägg tycker jag.

Kom med saklig kritik.

Rent allmänt kan jag säga att många tutorials börjar bra med att sakta lotsa nybörjaren in i ämnet (särskilt programmering) men sedan snabbt blir för komplicerat.

Ett annat fel i programmeringsböcker är att när man kommer till övningar så övar man sig inte på det man lärt sig bara. Istället skapas avancerade övningar där man måste leta upp en massa annan info för att klara av dem.

Tanken är väl att man ska få "tänka till" lite men jag tycker att detta inte är bra. Låt övningarna bara handla om det man lärt sig tidigare i boken och inget annat. Då fastnar kunskaperna bättre tror jag.
Användarvisningsbild
sodjan
EF Sponsor
Inlägg: 43178
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping
Kontakt:

Re: C-tutorial

Inlägg av sodjan »

> Som vanligt när man frågar om råd och feedback så hänger folk upp sig på enstaka ord.

The devil is in the details.

Jag tycker att det är viktigt att begrepp och uttryck är korrekta och att
beskrivningar inte är tvetydliga eller enkelt kan misstolkas. Mri's genomgång
t.ex pekar på flera fall där det har gått lite för fort, så att säga.
Nej, det är inte enkelt att skriva utbildningsmaterial.

Problemet med tutorials "på nätet" generellt är att de inte är skriva av de
som borde skriva dom (de har sällan tid och/eller vill ha betalt för det), utan
av andra nybörjare som i förtjusningen över att ha lärt sig något nytt känner
att en tutorial nog är rätt sätt att berätta det för hela världen. Ungefär... :-)
Skriv svar