Institutionen för informationsteknologi

Inlämningsuppgifter

Inlämningsuppgifterna finns beskrivna i föreläsningsanteckningarna.
Uppgifterna är av ökande svårighetsgrad så det underlättar förmodligen att göra uppgifterna i tur och ordning.

Alla uppgifter är delar av ett program: Kortspelet Klondike.
Ni får redan från början en fullt fungerande version av spelet och ni kommer att successivt byta ut olika delar av programmet. Uppgiften är att skriva filen cardpile.c. Observera att de delar ni ska skriva redan finns implementerade i COURSE_cardpile.o. Detta är inte en källkodsfil utan en objektfil. (Det skulle inte bli så mycket till uppgift om ni fick källkoden). Observera att det finns flera versioner av denna fil, för sparc, x86 och x86_64. Föreläsningsanteckningarna beskriver hur ni ska göra för att kompilera och länka ihop filerna. Det är att betrakta som fusk att dissassemblera den givna objektfilen, även om jag betvivlar att det skulle ge någon information som underlättar lösandet av uppgifterna.

Filer som behövs till uppgifterna

klondike.c
ansi.h
cardpile.h
COURSE_cardpile_SPARC.o -- För universitetets unix-system.
COURSE_cardpile_x86.o -- Fungerar med linux x86. Borde fungera även under Windows om Cygwin används, men inga garantier ges. Jag har inte provat Cygwin så jag kan inte hjälpa till med frågor om Cygwin eller om att kompilera under Windows.)
COURSE_cardpile_x86_64.o -- För 64-bitars x86. Samma kommentar som x86 ovan.
COURSE_cardpile_PPC.o -- För Mac OSX och liknande. Jag har inte testat den själv men den sägs fungera.
COURSE_cardpile_vista.o -- Fungerar med gcc under Windows Vista. Hur den fungerar under XP är det ingen som vet.

Testning och testverktyg

Under utvecklingen kan ni testköra er kod med hjälp av det givna spelet. Öppna källkoden till klondike.c och byt ut anropen till den funktion ni vill testa genom att ta bort prefixet COURSE_. Gör även motsvarande förändring i cardpile.h enligt uppgiftsbeskrivningen.

Ni får även tillgång till ett testverktyg som provkör er kod och talar om ifall er lösning uppfyller specifikationen eller ej. Testverktyget fungerar bara på universitetets unix-system. Ni hittar testverktyget i min hemkatalog, /home/jesperw/testtool/cardpiletester.sh
Använd alltid testverktyget innan ni lämnar in för att verifiera att ni inte har några onödiga fel. Jag kommer bara att rätta uppgifter som passerar testverktyget utan anmärkning.

Anropa verktyget med filnamnet på er källkodsfil (cardpile.c) och en siffra som anger vilken inlämningsuppgift som ska rättas. Exempel:

/home/jesperw/testtool/cardpiletester.sh cardpile.c 1

Notera att varken spelet eller testverktyget ger några garantier för att alla fel hittas. Jag kommer att uppdatera verktyget kontinuerligt under kursen om någon hittar nya fel som verktyget inte hittar. Detta betyder att det är högst olämpligt (och onödigt) att kopiera testverktyget till er egen katalog eftersom ni då går miste om uppdateringarna.

Stopptider

Notera att detta är hårda deadlines. Ett "seriöst försök" till lösning måste lämnas in innan stopptiden för att få godkänt. Samtliga uppgifter måste vara godkända för att få godkänt på kursen. Läs mer om detta i föreläsningsanteckningarna.

Uppgift 1 Villkorliga satser och case. Funktioner att skriva: colormatch, suittochar, ranktostring, successor. Stopptid: Tisdag 13/2 2007 kl 13:10.

Uppgift 2 Utskrifter, hantera strukturer. Funktioner att skriva: printcard, printcardpile, countcards, unmarkpile. Stopptid: Tisdag 20/2 2007 kl 13:10.

Uppgift 3 Pekarhantering. Funktioner att skriva: placeontop, drawone, shuffle, movemarked. Stopptid: Tisdag 27/2 2007 kl 13:10.

Uppgift 4 Minnesallokering och makron. Funktioner att skriva: initdeck, cleanupdeck. Plus ett antal makron. Stopptid: Tisdag 6/3 2007 kl 13:10.

Inlämning

Inlämning sker via epost, skicka brevet till Jesper Wilhelmsson. I de tre första uppgifterna är det endast en fil, vid namn cardpile.c, som ska lämnas in. Filerna ska vara välkommenterade och följa reglerna för inlämningsuppgifter enligt kurskraven. Skicka filerna okomprimerade i rent textformat (gärna utf-8 för den som vet vad det betyder).

Endast en person per grupp ska lämna in uppgiften men se till att alla gruppmedlemmars namn finns med BÅDE i brevet ni skickar OCH i själva källkodsfilen.

Alternativ uppgift

Om det skulle vara så att ni redan kan C och vill ha en större utmaning eller helt enkelt inte står ut med att skriva ett kortspel, så går det bra att definiera sin egen uppgift. Om ni till exempel redan har ett program som ni håller på att utveckla är detta ett lysande tillfälle att få konstruktiv kritik på detta. Om ni väljer att utveckla för något specifikt OS annat än linux eller Solaris så kräver jag att ni har tillgång till bärbar dator och kan demonstrera att programmet kompilerar och kör på min begäran. Den som tror att detta är ett enkelt sätt att komma undan genom att hitta ett färdigt program på nätet och lämna in tror fel. Följande gäller för egna uppgifter:

  • Uppgiften ska skrivas i C (inte C++!).
  • Uppgiften ska vara icketrivial i den meningen att den ska innefatta eget kodskrivande av motsvarande slag som originaluppgiften (till exempel ska det finnas strukturer och icketrivial pekararitmetik). Om koden arbetar mot externa bibliotek (till exempel med grafik) ska detta INTE vara tyngden i själva uppgiften. Jag har inte möjlighet att rätta eller felsöka kod av det slaget, tyngden ska ligga i de källkodsfiler ni lämnar in.
  • Programmet som ska skrivas ska bestå av minst två .c-filer och en .h-fil.
  • Presentera ditt förslag för mig i samband med föreläsning två, (onsdag 7/2 2007). Jag förbehåller mig rätten att ge avslag på uppgiftsförslag om uppgiften är för trivial eller rent bedrövligt avancerad (så att jag inte har möjlighet att sätta mig in i den).
  • Närvara på den första laborationen (obligatoriskt). Om uppgiften innefattar redan skriven kod ska denna presenteras på laborationen. Inga ändringar i koden som görs innan denna presentation får räknas till uppgiften. (Håll fingrarna i styr medan du väntar alltså! Winking smiley )
  • Inlämningsuppgift ett blir att formulera problemet som ska lösas och skriva en uppgiftsbeskrivning som tydligt förklarar vad du tänker göra, vilka förutsättningar som finns, vad du förväntar dig att lära dig på uppgiften samt vilken typ av hjälp du förväntar dig få av mig som handledare. Här ska även finnas en tidsplan på vad som ska göras inför varje delinlämning.
  • Man följer de ordinarie stopptiderna och den egna uppgiften ska alltså bestå av tre delar utöver den skriftliga specifikationen.
  • När ni väljer att skriva ett eget projekt som uppgift förbinder ni er även att åtgärda de eventuella kompletteringsanvisningar som jag ger er. Jag vill poängtera detta eftersom det ibland kan vara känsligt för lite mer erfarna programmerare att få kritik på den egna koden. En ganska trolig första uppgift är att städa i koden så att den följer kursens kodstandard.

Uppdaterad  2007-02-26 10:38:29 av Jesper Wilhelmsson.