Citat:
Ursprungligen postat av
Tigaz
Hejsan! Har kikat på din kod, intressant. Inte för att jag faktiskt är intresserad av usa och det är ett roligt program, MEN varför gör du inte koden mer lättläslig? Det är exakt det här jag blir galen på med skansholm. Tro mig jag vill inte låta arg eller vara elak men på det här sättet lär du ju kommentera typ varje rad för att nån ska förstå(iaf enligt mig) Lite jag reflekterat över är dina variabler? vad är i? Vad är a? Som det är nu skulle nån som skulle felsöka din kod bli galen på dig. Jag har iaf lärt mig att man ska skriva sina varibler så att man förstår vad det är förnågot. Förstår du vad jag menar?
#define IO 6
#define OH 18
#define NC 15
#define GA 16
#define FL 29
#define ME 4
#define NE 5
#define N 100
#define BIG 100
int main()
{
int a[N], i,j; <- Varför inte deklarera dom så att man förstår vad det hela handlar om?
srand(time(NULL));
for(i=0; i < N; i++) a[i] = rand()%BIG;
int blue_sum=0, red_sum=0;
for(j=0; j< 90; j+=7)
{
int blue=0, red=0;
if (a[0+j]>50) blue=blue+IO; else red=red+IO; <- Borde man inte kunna använda funktion till detta istället?
if (a[1+j]>50) blue=blue+OH; else red=red+OH;
if (a[2+j]>50) blue=blue+NC; else red=red+NC;
if (a[3+j]>50) blue=blue+GA; else red=red+GA;
if (a[4+j]>50) blue=blue+FL; else red=red+FL;
if (a[5+j]>50) blue=blue+ME; else red=red+ME;
if (a[6+j]>50) blue=blue+NE; else red=red+NE;
som sagt jag menar absolut inte att vara elak. Men det är exakt det här jag menar med att det är svårt att lära sig, jag förstår på ett ungefär vad koden gör, Det hade vart kul att förstå exakt vad den gör, men det hade vart så mycket enklare om du hade gjort koden mer lättläst, Det är vad vi har lärt oss iaf och det är exakta motsatsen till vad Skansholm gör i sina exempel, han gör exakt så här
Defines bör man inte använda på detta sättet när det ändå handlar om konstanter som är integers.
Defines är mest avsedda för att underlätta preprocessorns arbete.
Konditionell kompilering tex,
#if defined(WIN32_EXE)
/* kod */
#if defined(WIN64_EXE)
/* kod */
Bara för att ta ett exempel
Citat:
Ursprungligen postat av
Psychotronix
Jo, det är konstigt att börja med maskinnära som intro till programmering idag. Som intro till datorteknik kan jag se vitsen med det, men när det gäller programmering är det bättre att lära sig logiskt tänkande först, först därefter kan man börja pyssla med att sitta i debuggern och leta efter typ-fel och vilda pekare.
På Chalmers börjar man (åtminstone för ca 30 år sedan) med funktionell programmering (Haskell) för att lära sig logiken och lite senare lägger man till assembler och CPU-konstruktion inkl micro-kod parallellt. Jag tycker det är en bra uppdelning: högnivå för att lära sig programmering, lågnivå för att lära sig vad som händer under huven.
Typfel ska kompilatorn varna för, eller ge ett felmeddelande.
Ingen idé för kompilatorn att tugga vidare om den hittar sådana typfel.
Att hitta vilda pekare med debuggern är vanligen ett tröstlöst arbete,
som inte alltid ger resultat.
Alltså den pekaren kan peka vart som helst och att man helt enkelt missar den.
I vanliga stora program finns det 100-tals pekare, man kan inte kolla alla i debuggern,
det tar alldeles för lång tid.
Nej debuggern brukar svara på på vilken kodrad i programmet
som ditt program ballar ur helt.
Debuggern har två lägen, dels läget där man ser sin källkod i fönstret och kan
stega igenom varje rad.
Det andra läget visar motsvarande assemblerkod, men den kan skilja sig åt
beroende om kompilatorn har skapat kod för olika CPU-modeller.
Beroende på tex minnesmodell, om den är 32-bit eller 64-bit...