Dessa sidor har två huvudavdelningar, där den första innehåller allmän information, och den andra innehåller inlämningsuppgifter och andra övningsuppgifter.

SMD134 lp2 2003: Allmän information

Nyheter och påpekanden

Under denna rubrik kommer det att läggas in sådan information som blir aktuell under kursens gång och som inte finns med från början.

Föreläsningen 4/11 är inställd.

Den femte inlämningsuppgiften finns nu upplagd.

På grund av oklarheter i definitionen av klassen Manniska har två ändringar gjorts vad gäller redovisningen av fjärde inlämningsuppgiften: för det första är det tillåtet att redovisa uppgiften den 8/1. För det andra får i stället uppgift 7 labb 4 väljas som inlämningsuppgift.

Om kursens uppläggning.

Kursen har följande moment:

Huvudsidan för kursen innehåller allmänna kommentarer om kurslitteratur och annat.

Schema

Vecka 45
Måndag     2003-11-03  Pass 1   SMD134     Lektion              D235 
Måndag     2003-11-03  Pass 2   SMD134     Lab                  A2510
Tisdag     2003-11-04  Pass 2   SMD134     Lektion              D235 
Tisdag     2003-11-04  Pass 4   SMD134     Lab                  A2510
Tisdag     2003-11-04  Pass 5   SMD134     Lab                  A2510
Torsdag    2003-11-06  Pass 2   SMD134     Lektion              D235 
Torsdag    2003-11-06  Pass 3   SMD134     Lab                  A2510
Fredag     2003-11-07  Pass 1   SMD134     Lab                  A2510
Fredag     2003-11-07  Pass 3   SMD134     Lab                  A2510

Vecka 46
Måndag     2003-11-10  Pass 3   SMD134     Lektion              D235 
Måndag     2003-11-10  Pass 4   SMD134     Lab                  A2510
Måndag     2003-11-10  Pass 5   SMD134     Lab                  A2510
Tisdag     2003-11-11  Pass 2   SMD134     Lektion              D235 
Onsdag     2003-11-12  Pass 3   SMD134     Lab                  A2510
Onsdag     2003-11-12  Pass 4   SMD134     Lab                  A2510

Vecka 47
Måndag     2003-11-17  Pass 1   SMD134     Lektion              D235 
Måndag     2003-11-17  Pass 2   SMD134     Lab                  A2510
Tisdag     2003-11-18  Pass 2   SMD134     Lab                  A2510
Onsdag     2003-11-19  Pass 3   SMD134     Lab                  A2510
Fredag     2003-11-21  Pass 1   SMD134     Lektion              D231 

Vecka 48
Måndag     2003-11-24  Pass 1   SMD134     Lab                  A2510
Måndag     2003-11-24  Pass 3   SMD134     Lab                  A2510
Tisdag     2003-11-25  Pass 1   SMD134     Lektion              D235 
Tisdag     2003-11-25  Pass 4   SMD134     Lab                  A2510
Tisdag     2003-11-25  Pass 5   SMD134     Lab                  A2510
Torsdag    2003-11-27  Pass 1   SMD134     Lektion              D235 
Torsdag    2003-11-27  Pass 3   SMD134     Lab                  A2510
Fredag     2003-11-28  Pass 1   SMD134     Lab                  A2510

Vecka 49
Måndag     2003-12-01  Pass 1   SMD134     Lektion              D235 
Måndag     2003-12-01  Pass 2   SMD134     Lab                  A2510
Tisdag     2003-12-02  Pass 2   SMD134     Lab                  A2510
Torsdag    2003-12-04  Pass 2   SMD134     Lektion              D235 
Torsdag    2003-12-04  Pass 3   SMD134     Lab                  A2510
Fredag     2003-12-05  Pass 3   SMD134     Lab                  A2510

Vecka 50
Tisdag     2003-12-09  Pass 2   SMD134     Lektion              D235 
Tisdag     2003-12-09  Pass 3   SMD134     Lab                  A2510
Onsdag     2003-12-10  Pass 3   SMD134     Lab                  A2510
Torsdag    2003-12-11  Pass 3   SMD134     Lektion              D235 
Fredag     2003-12-12  Pass 1   SMD134     Lab                  A2510
Fredag     2003-12-12  Pass 4   SMD134     Lab                  A2510

Vecka 51
Måndag     2003-12-15  Pass 1   SMD134     Lektion              D235 
Måndag     2003-12-15  Pass 2   SMD134     Lab                  A2510
Tisdag     2003-12-16  Pass 2   SMD134     Lab                  A2510

Vecka 2
Torsdag    2004-01-08  Pass 1   SMD134     Lektion              D235 
Torsdag    2004-01-08  Pass 2   SMD134     Lab                  A2510
Torsdag    2004-01-08  Pass 3   SMD134     Lab                  A2510
Fredag     2004-01-09  Pass 4   SMD134     Lab                  A2510

Om föreläsningarna

Det är femton föreläsningar allt som allt. Föreläsningarna kommer att ägnas åt allmänt prat om Java och objektorienterad programmering, i stort sett i enlighet med följande beskrivning. För varje föreläsning kommer det också i efterhand att läggas upp en kortare sammanfattning av huvudpunkterna i föreläsningen. Syftet med föreläsningarna är att hjälpa studenterna på kursen få överblick över ämnet, och att särskilt belysa sådant som erfarenheten visar är knepigt för de flesta. Det är därför i högsta grad önskvärt att kursdeltagarna kommer med frågor och önskemål om vad som ska tas upp. Sådana frågor och önskemål kan skickas i mail eller framföras muntligen.
  1. (3/11) Förklaring av grundbegrepp vid programmering: processor, binära data, arbetsminne, I/O-enheter. Begreppet högnivåspråk. Kompilering och interpretering. Användningen av Emacs för att skriva källkod i Java, av javac för att kompilera källkoden till bytekod, av java för att exekvera en klass. Sammanfattning.
  2. (4/11) Föreläsningen inställd.
  3. (6/11) Översiktlig beskrivning av analys-design-programmering-testnings-cykeln. Typer i Java: genomgång av de primitiva datatyperna, variabler och variabeltilldelningar med primitiva typer. Konstanter av de olika typerna. Heltalsräkning och flyttalsräkning. Sammanfattning.
  4. (10/11) Typer i Java: referenstyper. Hanteringen av referenstyper i Java förklaras med arrayer som grundexempel.
    Användningen av = för att göra tilldelningar av värden till variabler och av == och equals för att jämföra värden.
    Tre sätt att få in data till ett Javaprogram: hårdlödning, inmatning vid programstart, inhämtning under programexekvering.
    Sammanfattning.
  5. (11/11) Begreppet algoritm illustreras med användning av sökning i och sortering av arrayer. Genomgång av de olika typerna av uttryck i Java och av if-satser, for-satser, while-satser.
    Sammanfattning.
  6. (17/11) Metoder i Java. Om hur man formulerar algoritmer och implementerar dem med användning av if, for och while. Strukturerad programmering.
    Sammanfattning.
  7. (21/11) Sammanfattande beskrivning och exempel på iterativ och rekursiv programmering av metoder. Sammanfattning.
  8. (25/11) Klasser i Java: exekverbara klasser, samlingar av statiska metoder, definierade datatyper. Begreppet paket. Ett exempel på en klass som definierar en ny datatyp: en "struct" i vilken man kan stoppa in värden av olika typ. Sammanfattning.
  9. (27/11) Fortsatt beskrivning av klasser. Instansmetoder och instansvariabler. Begreppet inkapsling och åtskillnaden mellan privata, offentliga och pakettillgängliga medlemmar av klasser. Fler exempel på definierade datatyper. Klassvariabler och klassmetoder. Sammanfattning.
  10. (1/12) Arv och överskuggning. Programexempel. Sammanfattning.
  11. (4/12) Sammanfattande kommentarer om klasser och typer, instansmetoder och klassmetoder, utvidgningar av klasser, olika grader av tillgänglighet. Lista av begrepp.
  12. (9/12) Användningen av undantag. Förklaring av klasserna IOException och RuntimeException. Sammanfattning.
  13. (11/12) Gränssnitt och abstrakta klasser. Exempel från Javas klassbibliotek. I/O-klasserna i Java och deras användning.Sammanfattning.
  14. (15/12) Mer om I/O-klasserna i Java och deras användning.Sammanfattning.
  15. (8/1) Mer om typer, gränssnitt och abstrakta klasser. Exempel från Javas klassbibliotek. Användningen av Comparable och Comparator i samband med sortering.

Om laborationstillfällena

Dessa används för arbete med valfria övningsuppgifter samt med inlämningsuppgifterna. Vid varje labbtillfälle finns det normalt tre labbhandledare - se till att utnyttja dem.

Förutom de schemalagda labbtillfällena bör ni tillbringa så mycket tid ni hinner framför datorn med programmeringsövningar - antingen på hemdator eller vid en ledig dator på skolan.

Kursen har fem inlämningsuppgifter, varav de första fyra redovisas vid labbtillfällena för någon av labbhandledarna. Den femte uppgiften redovisas i email enligt anvisningar som kommer på denna sida.

Sjuk farmor etc

Det krävs särskilda skäl - besök hos sjuk farmor i Skåne, brutet ben, osv - för att få redovisa lösningar av inlämningsuppgifter senare än angivet datum. Om någon vill redovisa en lösning tidigare än angivet senaste datum för redovisning är detta tillåtet i den mån labbhandledaren har tid med detta. För att kunna redovisa efter angivet datum måste studenten först överenskomma om detta med labbhandledare.

Om tentamen

Tentamen kommer att följa samma mönster som de senaste tentorna på kursen.

Kursutvärdering

Information kommer.

Länkar och allmän information

SMD134 lp2 2003: Laborationer

Lösningarna av de fyra första inlämningsuppgifterna ska ligga i filkataloger vid namn uppgift1, uppgift2, uppgift3, uppgift4. Dessa ska i sin tur vara underkataloger till en filkatalog vid namn smd134, och smd134 ska ligga överst på ditt användarkonto, det vill säga inte inne i någon ytterligare katalog.

Efter att du har redovisat din lösning på en uppgift och fått den godkänd ska lösningen ligga kvar i filkatalogen och får inte ändras eller flyttas förrän efter läsperiodens slut.

Varje laboration innehåller ett antal uppgifter som ska lösas. Uppgifterna som är märkta (Redovisning) ska redovisas för en labhandledare under något laborationstillfälle.

Redovisning av laborationerna

Så här går redovisningen av Lab 1-4 till:

  1. Beskriv din lösning, rad för rad, för labhandledaren. Du kan även bli ombedd att förklara något parti mer ingående.
  2. Kör programmet och visa att det löser uppgiften.
  3. Ta fram blanketten Examinering av laborationer och låt labhandledaren signera att laborationen är godkänd.

Laboration 5 redovisas enligt särskilda instruktioner.

Alla uppgifter ska lösas individuellt. Det betyder att det är fullt tillåtet att diskutera olika problem och deras lösning med andra, men alla svar på frågor och all programkod måste skrivas individuellt av varje student på kursen.

Det går att skriva tentan även om laborationskursen inte är avslutad.

Ett flertal labtillfällen finns inbokade på schemat. Vid dessa tidpunkter finns labhandledare närvarande som man kan fråga om hjälp. Erfarenheter visar dock att många studenter behöver mer tid än de inbokade tillfällena för att lära sig laborationsinnehållet och därför uppmuntras ni att besöka labbet även då det inte är någon schematid lagd. Labbet har öppet dygnet runt, men efter kontorstid krävs passerkort för att komma in.

Har du problem att logga in? I A3002 hittar du administratörerna, de kan hjälpa dig med det.

Lab 1

Redovisas senast 12/11

  1. Det första Javaprogrammet: Skriv ett program som vid exekvering ger utskriften "Lysande!".

  2. Skriv ett program som skriver ut dina initialer med stora bokstäver gjorda av asterisker. Exempel:
     *    *   *****
     *   *    *    *
     ****     *    *
     *  *     *****
     *   *    *
     *    *   *
    
    Ledning: för att utforma bokstäverna kan du ta hjälp av kommandot banner.

  3. Skriv ett program som beräknar och skriver ut värdet av 63781139*58673*1050.

  4. (Redovisning) Skriv ett program som anropas med en bokstav på kommandoraden och skriver ut den som en stor bokstav gjord av asterisker. Exempel:
    >java Skriv k 
     *    *
     *   * 
     ****  
     *  *  
     *   * 
     *    *
    
    Programmet behöver bara kunna hantera bokstäverna k-p. (Om programmet anropas med något annat än en av bokstäverna k,l,m,n,o,p på kommandoraden får det bete sig hur som helst.)

  5. Skriv ett program som räknar ut vilket av 3,141592*1.0398 och 3,159228*1.008404 som är störst, och skriver ut svaret.


Lab 2

Redovisas senast 27/11

  1. Skriv en metod
    public static boolean tvåLika(int a,int b,int c)
    
    som returnerar true om minst två av talen a,b,c är lika, och annars false.

  2. Skriv en metod
    public static int miniMax(int[] a, int[] b)
    
    som returnerar det minsta av de två talen m och n, där m är det största talet i a och n är det största talet i b.

  3. Skriv ett program som beräknar och skriver ut det minsta heltalet k för vilket k*(k-1)*(k-2)*(k-3) är större än 101091.

  4. Skriv en metod
    public static int längsta(String[] a)
    
    som returnerar längden av den längsta strängen i arrayen a, eller 0 om arrayen a är tom. Om a har värdet null ska metoden returnera -1.

  5. Skriv ett program Konkatenera (som alltså är namnet på klassen som innehåller main) som när det exekveras skriver ut hopslagningen av de strängar som följer efter klassnamnet på kommandoraden. Exempelvis ska anropet
    java Konkatenera a b c Kalle Kajsa
    
    ge utskriften
    abcKalleKajsa
    

  6. (Redovisning) Skriv spelprogrammet "Gissa nuffran". Användaren får gissa vilket tal datorn "tänker" på. Efter varje försök får han veta om gissningen var för stor eller för liten. Programmet avslutas när användaren gissar rätt eller när han skriver in ett negativt tal. Talet datorn väljer ligger i intervallet [0,X], där X ges på kommandoraden. Talet slumpas fram varje gång programmet körs. När programmet med namnet Lab2 körs ska det alltså se ut ungefär såhär:
    >java Lab2 100
    Gissa nuffran:42
    För litet!
    Gissa nuffran:80
    För stort!
    Gissa nuffran:60
    För stort!
    Gissa nuffran:53
    Rätt!
    
    >java Lab2 100
    Gissa nuffran:-1
    Hejdå!
    

  7. Skriv en metod
    public static boolean tvåLika(String[] a)
    
    som returnerar true om det i arrayen a finns (minst) två strängar som är lika, och annars false.

  8. Skriv en metod
    public static double geoMedel(double[] a)
    
    som returnerar det geometriska medelvärdet av talen i a, under förutsättning att alla talen i a är större än 0. Om något tal är mindre än 0 ska metoden returnera -1. Med det geometriska medelvärdet av talen x1,..,xn menas (x)1/n, där x är produkten av de n talen. (Ledning: använd klassen java.lang.Math.)

  9. Skriv en metod
    public static String taBort(char a,String s)
    
    som returnerar den sträng som fås om man i strängen s tar bort alla förekomster av tecknet a. Anropet
    taBort('p',"Arbetsplatsombud")
    
    ska alltså returnera "Arbetslatsombud". Alla metoder i klassen String får användas.

Lab 3

Redovisas senast 5/12

  1. Skriv en metod likbentTriangel(int n) som skriver ut en likbent triangel av asterisker vars bas består av n asterisker, under förutsättning att n är ett udda heltal mindre än 80. För att triangeln ska bli vacker i asteriskgrafik måste varje rad i triangeln innehålla ett udda antal asterisker. Ett anrop likbentTriangel(7) ska alltså ge utskriften
       *
      ***
     *****
    *******
    
    Skriv ett program som använder sig av metoden för att skriva ut en triangel vars bas ges i ett argument på kommandoraden. Skriv programmet så att det testar om det tal som står på kommandoraden är positivt, udda och mindre än 80, och skriver ut ett felmeddelande om dessa villkor inte är uppfyllda.

  2. Definera en klass Stream som har två attribut data och index. index är ett heltal och data är en teckenarray. Konstrueraren ska ta en array av char som enda argument. Klassen ska också innehålla en metod read som returnerar ett tecken. Första anropet av read returnerar första tecknet i data-arrayen, andra anropen ger andra tecknet i arrayen, o.s.v. tills sista tecknet returnerats. Alla följande anrop ger tecknet '\0' i retur.

  3. Skriv en metod
    public static int[] sort(int arr[]){...
    
    som tar en heltalsarray som argument, sorterar talen i stigande ordning i denna array. Följande anrop
    int radda[] = {3,50,10,4,2};
    int svar[] = sort(radda);
    
    skulle resultera i att arrayen svar fick heltalsvärdena {2,3,4,10,50}. Du kan använda valfri algoritm men ange gärna i en kommentar vilken du använder.

  4. (Redovisning) Definiera en klass Stack som fungerar som en stapel. Man kan lägga och plocka textsträngar från stapeln. När man lägger en sträng till stapeln så hamnar den alltid överst. När man plockar från stapeln så är det alltid den senast lagrade strängen man hämtar.

    Klassen har två attribut stapel och senaste. Attributet stapel är en array av teckensträngar och attributet senaste är ett heltal som pekar ut den senast lagrade strängen i arrayen. Klassen har två instansmetoder

    public boolean push(String str){...
    
    och
    public String pop(){...
    
    där metoden push tar en sträng som ett argument och lagrar på stapeln och ökar attributet senaste med ett. Den returnerar true om allt gick bra och annars false, d.v.s. om stapel var full. Metoden pop() plockar bort den senaste strängen och returnerar denna. Attributet senaste ska minskas med ett. Om stapeln är tom returnerar metoden null. Konstrueraren ska ta ett heltal som argument som bestämmer stapelns höjd.

    Följande rader i en main-metod testar om stacken kan lagra och returnera två strängar.

    //test av stacken
    Stack stack = new Stack(5);
    stack.push("Hej");
    stack.push("du");
    	
    System.out.println(stack.pop());
    System.out.println(stack.pop());
    
    Skriv en test av din Stack-klass som utökar ovanstående exempel. Förutom att lagra och läsa ska testet visa vad som händer när:

  5. Definiera en klass Manniska. En Manniska har attributen pappa, mamma, födelseår, ålder, förnamn, efternamn och om personer lever. Välj lämpliga datatyper för de olika attributen och lägg till instansmetoder för att läsa attributen och en metod ålder som tar ett årtal och returnerar människans ålder vid detta årtal. Använd konstrueraren för att sätta alla värden på attributen. D.v.s. skicka med förnamn, efternamn, födelseår, ålder, levande, pappa, mamma som argument till konstrueraren. Se kodsnutten nedan.

    Testa följande kodsnutt för att bygga upp en släkt:

    public class Main{
        public static void main(String argv[]){
            Manniska m7 = new Manniska("Svea","Hill",1880,84,false,null,null);
            Manniska m6 = new Manniska("Gustav","Hängsel",1870,45,false,null,null);
            Manniska m5 = new Manniska("Amanda","Ericsson",1914,82,false,null,null);
            Manniska m4 = new Manniska("Kuno","Hill",1910,76,false,null,null);
            Manniska m3 = new Manniska("Gullan","Brorsdotter",1952,51,true,m6,m7);
            Manniska m2 = new Manniska("Gustav","Grape",1947,56,true,m4,m5);
            Manniska m1 = new Manniska("Fredrik","Grape",1973,30,true,m2,m3);
        }
    }
    
    Metoden
    public int ålder(int årtal){...
    
    ska returnera årtal-födelseår för levande människor och enbart ålder för döda människor.

  6. Definiera en metod
    static int inversioner(int[] a)
    
    som returnerar som värde antalet inversioner i arrayen a. En inversion är ett par i,j av index sådana att i>j men a[i]<a[j]. Exempelvis gäller att en array med medlemmarna

    9 24 70 19 94

    har 2 inversioner, medan

    27 67 78 15 7 15 81 22

    har 14 inversioner.


Lab 4

Redovisas senast 16/12 Se emellertid kommentar under "nyheter och påpekanden"

  1. Skriv en metod som sorterar en lista av strängar med avseende på strängarnas längd. En kortare sträng kommer alltså före en längre sträng i ordningen. Skriv ett program som testar metoden genom att kopiera över argv till en lista, sortera listan och skriva ut resultatet. Se klassen ArrayList med metoder för att lägga till, läsa av och plocka bort ur listan.

  2. Skriv ett program som beräknar och skriver ut antalet primtalstvillingar mindre än 1000000. En primtalstvilling är ett par (k,k+2) av heltal där både k och k+2 är primtal. (Svar: 8169)

  3. Använd klassen java.math.BigInteger för att skriva ett program som givet ett positivt heltal n på kommandoraden beräknar och skriver ut det exakta värdet av
    1 + 1/2 + 1/3 + .... +1/n
    
    som ett bråk i förkortad form (dvs som m/n, där m och n är positiva heltal vars största gemensamma delare är 1).

  4. En faroblandning (perfekt riffelblandning) av en kortlek går till på följande vis: kortleken kuperas precis på mitten så att man får två högar k1,..,k26 och k27,k28,..,k52. Därefter slås högarna ihop så att man omväxlande tar ett kort från vardera högen, med början i den första: k1,k27,k2,k28,...,k26,k52. Skriv ett program som räknar ut hur många faroblandningar som krävs för att kortleken ska återfå sin ursprungliga ordning. (Svar: 8)

  5. Skriv ett program Orm som fungerar på följande sätt. När programmet anropas med ett argument på kommandoraden som är en sträng innehållande tecknen / \ ritas en motsvarande slingrande orm ut på skärmen. Vad detta betyder illustreras bäst av ett par exempel:
    > java Orm "\/\\\\\////"
    \
    /
    \
     \
      \
       \
        \
        /
       /
      /
     /
    > java Orm "\\\\\\\\\\\///\\\/\/\/\\\/"
    \
     \
      \
       \
        \
         \
          \
           \
            \
             \
              \
              /
             /
            /
            \
             \
              \
              /
              \
              /
              \
              /
              \
               \
                \
                /
    > 
    
    Om ormen skulle hamna utanför raden vid utskrift (förutsätt en radlängd på 80 tecken) hoppas motsvarande tecken i strängen bara över. Likaså hoppas alla tecken i strängen som inte är \ eller / bara över. Inga felmeddelanden behöver ges av programmet

  6. Skriv ett program som skriver ut alla permutationer av tecknen i en sträng på kommandoraden. Till exempel ska anropet
    java Perm abc
    
    ge till exempel utskriften
    abc
    acb
    bac
    bca
    cba
    cab
    
    eller vilken som helst annan utskrift som i någon godtycklig ordning ger samtliga permutationer.

  7. (Alternativ redovisning.) Skriv en rekursiv metod
    public static double summa(int n){...
    
    som beräknar summan av 1/1 + 1/2 + ... + 1/n där n är ett positivt heltal. Skriv en main-metod som demonstrerar metoden på lämpligt sätt, t.ex.
    public static void main(String argv[]){
        int n = Integer.parseInt(argv[0]);
        System.out.println("Summan = " + summa(n));
    }
    

  8. (Redovisning) Skriv en rekursiv metod
    public static void sökNamn (...
    
    som tar ett förnamn och en människa och söker genom denna människas släktträd. Metoden skriver ut namn, födelse- och ev. dödsårtal vid samma namn. Ett exempel på körning skulle kunna se ut så här:
    >java Leta Gustav
    Gustav Grape, född 1947
    Gustav Hängsel, född 1870, död 1915
    >
    
    Denna uppgift bygger på lab 3 (uppgift 5), där klassen Manniska definieras. Tips: börja med att identifiera ett slutvillkor, titta sedan vad som ska hända annars. Se kommentar under "nyheter och påpekanden".


Lab 5

Redovisas senast 12/1, enligt anvisningar nedan

Skriv ett program Tarning som tar input från kommandoraden i form av ett tal från 1 till 5 och ritar ut det angivna antalet tärningar på skärmen, där varje tärning visar en slumpmässig översta sida från 1 till 6 och en likaså slumpmässig framsida. Tre sidor av tärningen ska vara synliga, som i exemplet nedan. Alla tärningarna ska rymmas på en rad (80 tecken). Tärningarna ska följa en enda konsekvent modell, så att de sidor som visas alltid överensstämmer med vad någon bestämd fysisk tärning skulle visa. Vidare gäller att summan av prickarna (här:talen) på motsatta sidor av en tärning alltid är 7. I exemplet nedan kan vi alltså från utseendet av den första tärningen dra slutsatsen att det måste stå en tvåa på högra sidan i den andra tärningen, givet att översta sidan är en trea och framsidan en etta.
>java Tarning 3

        -------------          -------------          -------------
       /           /|         /           /|         /           /|
      /    6      / |        /    3      / |        /    4      / |
     /-----------/  |       /-----------/  |       /-----------/  |
     |           |2 |       |           |2 |       |           |2 |
     |           |  /       |           |  /       |           |  /
     |     3     | /        |     1     | /        |     6     | /
     |           |/         |           |/         |           |/
     |-----------/          |-----------/          |-----------/
Observera följande:

Regler för redovisningen

Din lösning av uppgiften, som består av källkodsfilen Tarning.java och klassfilen Tarning.class sparas i filkatalogen smd134. Kom ihåg att katalogen måste vara allmänt läslig för att jag ska kunna komma åt lösningen. När du är färdig med uppgiften (vilket också betyder att du har genomfört en fullständig testning av din lösning) skickar du ett email till torkel@sm.luth.se för att meddela detta. För detta meddelande gäller:
  1. Subject-raden ska vara "Uppgift 5 SMD134"
  2. Om du inte skickar ditt mail från ditt konto på skolan, bifoga i meddelandet din emailadress på skolan.
  3. Skriv namn och personnummer.
  4. Skicka ditt mail senast 12/1 2004.
Inom några dagar efter att ha skickat ditt meddelande får du svar från mig. Detta svar är antingen ett meddelande om att du har blivit godkänd på uppgiften, eller kommentarer om vilka brister i din lösning som behöver åtgärdas. Spara all kommunikation med mig om uppgiften. Om du behöver rätta eller ändra i uppgiften, bifoga i ditt nästa email, där du rapporterar att du gjort ändringarna, mitt tidigare mail där det framgår vad jag klagar på. När du får meddelande att du blivit godkänd på uppgiften, spara detta meddelande tills du ser att du har fått dina poäng för laborationsdelen av kursen. Efter att din inlämning blivit godkänd ska källkoden ligga kvar oförändrad i uppgift5 till slutet av läsperioden.