http://www.nada.kth.se/kurser/kth/2D1310/03-04/OPEN/
KTH 2D1310 Programmeringsteknik, 2003-2004
Särskild information för öppen ingång
prgo03
Nada

Senaste nytt

Kursmål

Kursen i programmeringsteknik ger dig allmänna kunskaper om hur en dator fungerar och används, men framförallt ger kursen dig kunskaper om hur man skriver bra program. Samtidigt som du lär dig programmera tränar du upp din förmåga till logiskt tänkande och att strukturera och lösa problem. Kursen ger dig också en god bas för fortsatta studier inom området i högre årskurser.

Lärare

  Namn Datorpostadress  
Kursledare/föreläsare Alexander Baltatzis alba@nada.kth.se  
Examinator Olle Bälter balter@nada.kth.se  
Övningsgrupp 1 Thomas Sundberg tsu@nada.kth.se D34, E32, E35
Övningsgrupp 2 Alexander Baltatzis alba@nada.kth.se D33, E34
Övningsgrupp 3 Mårten Trolin marten@nada.kth.se D32, E33

Har du frågor om innehållet i föreläsningarna, prata med föreläsaren. Har du övningsfrågor, prata först med din övningsassistent. För övriga frågor, kontakta kursledaren.

Enklaste sättet att komma i kontakt med kursledaren är att skicka datorbrev, näst enklast är att lägga en lapp i postfacket på Nada, Osquars Backe 2, 4 tr eller skicka ett vanligt brev till Nada, KTH, 100 44 Stockholm. Vill man träffa kursledaren personligen, se kursledarens hemsida.

Många lärare tar hand om mer än en kurs. Var vänlig och börja alla datorbrev med subjektet "prgo03: ..." när du kontaktar en lärare i kursen.

Kurslitteratur

Kurslitteraturen ska läsas på egen hand parallellt med kursen. Föreläsningar, övningar och laborationer täcker endast en del av kursmaterialet. Kurslitteraturen består av: Överblivna papper som delas ut under kursens gång finns också att hämta i bokhyllan utanför studentexpeditionen. Efter kursens slut kastas i allmänhet alla överblivna papper som hör till kursen.

Hederskodex

På Nada används en gemensam hederskodex för alla Nadakurser. Du är själv ansvarig att läsa igenom och följa den.

Förkunskaper

Denna kurs är en nybörjarkurs i programmering. Du behöver alltså inte ha någon erfarenhet av programmering. Däremot förutsätter vi lite datorvana och att du känner till begrepp som operativsystem, filer och redigeringsprogram.

Hur hittar man en bra labbkamrat

Erfarenheter från tidigare kurser säger att man lär sig mest om man är på ungefär samma ambitions- och förkunskapsnivå. Kryssa i din egen ambition och förkunskaper i tabellen nedan och leta sedan rätt på labbkompisar med kryss på ungefär samma ställe.


Programmeringsvana
Ingen
Liten
Stor
Ambition
Lära mig allt om Java



Högre betyg



Klara kursen



Bra sätt att träffa tjejer/killar



Viktiga datum

Vecka 39 Redovisning av labb 2
Vecka 41 Redovisning av labb 3 och 4
Vecka 42 Redovisning av labb 5
Vecka 43 Inlämning av spec onsdag 22/10

Slutprov
Fredag 24/10 08.15 - 09.15 (preliminärt)
Fredag 24/10 09.45 - 10.45 (preliminärt)
vecka 44 Redovisning av j-uppgiftspecifikationen tisdag 28/10
vecka 47 Första tillfället att redovisa J-uppgiften och bli klar med kursen!!!!
vecka 49 Sista redovisningsveckan för J-uppgiften. Efter onsdag 3/12 går det inte att få mer än betyg 3.

Preliminärt detaljschema

v37 Mån 8/9 Tis 9/9 Ons 10/9 Tor 11/9 Fre 12/9
8:00Terminalövning
Grön, Orange, Röd
9:00
10:00Föreläsning D2
Grunder, in- och utmatning
11:00
v38 Mån 15/9 Tis 16/9 Ons 17/9 Tor 18/9 Fre 19/9
8:00Terminalövning
Grön, Orange, Röd
9:00
10:00Föreläsning D2
Klasser, metoder och villkor
Övning
D34, D33, D32
11:00
v39 Mån 22/9 Tis 23/9 Ons 24/9 Tor 25/9 Fre 26/9
10:00Föreläsning D2
Instanser, slingor
Övning, muntlig redovisning
E32, E34, E33
11:00
12:00
13:00Terminalövning
redovisning lab2
Grön, Orange, Röd
14:00
v40 Mån 29/9 Tis 30/9 Ons 1/10 Tor 2/10 Fre 3/10
8:00Terminalövning
Grön, Orange, Röd
9:00
10:00Föreläsning D2
Klasser och instanser
Övning, muntlig redovisning
D34, D33, D32
11:00
v41 Mån 6/10 Tis 7/10 Ons 8/10 Tor 9/10 Fre 10/10
8:00Terminalövning
redovisning lab3, lab4
Grön, Orange, Röd
9:00
10:00Föreläsning D2
Vektorer
Övning, muntlig redovisning
D34, D33, D32
11:00
v42 Mån 13/10 Tis 14/10 Ons 15/10 Tor 16/10 Fre 17/10
8:00Terminalövning
redovisning lab5
Grön, Orange, Röd
9:00
10:00Föreläsning D2
Juppgiften och specskrivning
Föreläsning D2
Inför datorprovet
Övning, muntlig redovisning
D34, D33, D32
11:00
v43 Mån 20/10 Tis 21/10 Ons 22/10 Tor 23/10 Fre 24/10
8:00Datorprov
Grön, Orange, Röd
9:00
10:00
v44 Mån 27/10 Tis 28/10 Ons 29/10 Tor 30/10 Fre 31/10
8:00Övning
E35, E34, E33
9:00
10:00Terminalövning
Grön, Gul
Föreläsning F3
Ett perfekt program, betyg 4
11:00
12:00
13:00Föreläsning D2
betyg 5 grafik
14:00
v45 Mån 3/11 Tis 4/11 Ons 5/11 Tor 6/11 Fre 7/11
10:00Terminalövning
Gul, Grön
Terminalövning
Grön, Gul, Orange
Föreläsning F3
grafik forts. Trådar.
11:00
v46 Mån 10/11 Tis 11/11 Ons 12/11 Tor 13/11 Fre 14/11
10:00Terminalövning
Gul, Grön
Terminalövning
Grön, Gul, Röd, Orange
11:00
v47 Mån 17/11 Tis 18/11 Ons 19/11 Tor 20/11 Fre 21/11
10:00Terminalövning
Röd, Grön, Orange
J-redovisning
Terminalövning
Grön, Gul, Orange
J-redovisning
Terminalövning
Grön, Gul, Orange
J-redovisning
11:00
v48 Mån 24/11 Tis 25/11 Ons 26/11 Tor 27/11 Fre 28/11
10:00Terminalövning
Röd, Grön, Orange
J-redovisning
Terminalövning
Grön, Gul, Orange
J-redovisning
Terminalövning
Grön, Gul, Orange
J-redovisning
11:00
v49 Mån 1/12 Tis 2/12 Ons 3/12 Tor 4/12 Fre 5/12
10:00Terminalövning
Grön, Gul, Orange
J-redovisning
Terminalövning
Gul, Gul, Orange
J-redovisning
11:00
12:00
13:00Terminalövning
Gul, Orange
J-redovisning
14:00

Laborationer

Kursens första moment, LAB1, består av laborationer som görs i grupper om max två personer.

Den första laborationen är en introduktion till det operativsystem och det redigeringsprogram som används i kursen. Efter första laborationen förväntas du klara dig själv i datorsalarna.

Därutöver rekommenderas du att göra frivilliga prov för att kontrollera dina kunskaper. Godkända resultat på dessa prov medför att slutprovet blir mindre omfattande.

Du kan få hjälp med labbarna utanför schemalagt labbpass från Nadas allmänhandledning. Deras schema finns på webben.

Kursens andra moment, LAB2, består av ett individiellt slutprov på grunderna i programmering.

I laboration ett behövs Maze.java som du hittar här.

Datorprov

Kursens första två moment, LAB1 och LAB2, examineras under läsåret 2003-2004 med ett webbaserat datorprov. Endast studenter som är anmälda till och följer en kursomgång är välkomna till datorprovet.

Uppsamlingstillfällen ges normalt i samband med omtentamensperioder. Anmälan till dessa prov sker via webben.

Datorprovet består av 20-25 uppgifter (beroende på svårighetsgrad på uppgifterna). Uppgifterna ger maximalt mellan en och fyra poäng och behandlar grundläggande kunskaper om programmeringsteknik och Javaprogrammering. För godkänt krävs att 80% av poängen klaras. Med bonuspoäng från labbarna kan gränsen sänkas.

Följande hjälpmedel är förbjudna: all slags kommunikationshjälpmedel/utrustning (t ex telefoner, e-post, chat); alla former av duplicering av frågor ur provsystemet (inklusive avskrifter, utskrifter, kopior på papper eller dator).

Förbered dig inför datorprovet med hjälp av de frivilliga proven som ges varje vecka.

Bonuspoäng

Bonuspoäng till datorprovet ges dels för redovisning av labbar i tid (se schema), dels för muntlig redovisning (se nedan) inför andra i övningssal. Sammanlagt kan få 14% bonus. Två procent per labb och en halv poäng per bonusuppgift i övningssal. (2*4 + 0.5*12 = 14)

Bonusuppgifter till onsdag 15/10


1.

Metoden vänd är skriven för att vända innehållet i en vektor.

   1 3 7 13 17 -> 17 13 7 3 1

Metoden fungerar dock inte som avsett. Rita och förklara
hur metoden vänd fungerar.

   int [] vänd(int [] vektor) {
       int sista = vektor.length - 1;
       for (int i = 0; i <= sista; i++) {
           vektor[i] = vektor[sista - i];
       }
       return vektor;
   }


2.

Ändra vänd-metoden så att den fungerar genom att skapa en ny
int[]-vektor, kopiera värden till den och returnera referensen till
den. Rita och förklara hur metoden fungerar nu.

3.

För att byta plats på första och andra elementet i en vektor behövs
en temporär variabel. Ge exempelkod, rita och beskriv hur det går till 
i en Vector respektive en hakvektor. Vilken typ ska den temporära 
variabeln ha i de två fallen?

    1 3 7 13 17 -> 3 1 7 13 17 

Bonusuppgifter till onsdag 8/10


1.

Följande klass är given

class Baby {
   int height;
   double weight;

   Baby (int height, double weight) {
       this.height = height;
       this.weight = weight;
   }

   void grow(int cm) {
       height += cm;
   }
       int getHeight() {
       return height;
   }
}

Vad skriver följande program ut? Rita och förklara.

public static void main(String[] args) {
       Baby kalle, johan;

       kalle = new Baby(51, 3.5);
       johan = new Baby(50, 4.3);

       kalle = johan;

       kalle.grow(5);
       johan.grow(4);

       System.out.println(kalle.getHeight());
       System.out.println(johan.getHeight());
   }
}


2.

String a = new String("Baby");
String b = new String("Baby");

if (a == b) {
   System.out.println("Yeah Baby!");
}

Hur kan man ändra villkoret i if-satsen så
att "Yeah Baby!" skrivs ut. Rita och förklara.

3.

Ge exempel på när man bör välja att implementera variabler och metoder
som klassvariabler och klassmetoder respektive instansvariabler och
instansmetoder. 

Bonusuppgifter till onsdag 1/10

1. Vad skriver följande program ut: 

class Uppgift { 

   public static void main(String[] args) { 

       int a = 1; 
       int b = 18; 

       while (a < 30) { 
           a = a * 2; 
           if (a < b) 
               System.out.println(a); 
       } 
   } 
} 

2. Hur kan klassen Uppgift ändras så att den skriver ut alla tvåpotenser under 100? 

3. Definiera en klass t.ex. Person med en konstruktor som tar 
ett par argument (parametrar). I vilken ordning utförs de olika 
delarna vid ett konstruktoranrop som t.ex. 

   Person kompis = new Person("Kalle", 08112233); 

Rita minnesbild och förklara.

Bonusuppgifter till onsdag 24/9
1. Redogör för delarna i metodhuvudet och deras funktion.

2. Följande är givet:
        int i = 17;
        int k = 31;
        i = k;
        k = i;
   Vad är:
        i
        k

3.
        String svarsRad;
        int antal = 12;
        svarsRad = "Antal = " + antal;
        System.out.println(svarsRad);

Vad skriver ovanstående program ut? 


J-del

Kursens tredje moment, LAB3, är en större, individuell programmeringsuppgift i Java; en "J-uppgift". J-delen redovisas i tre steg under kursens andra period. Uppgifterna är tänkta att vara något så när svåra och tidskrävande, räkna med ca 80 timmar om du följt med i kursen under dess första halva. Om du inte följt med finns det ingen övre gräns för hur lång tid j-uppgiften kan ta.
Specifikation
Innan programmet skrivs ska en datorskriven specifikation lämnas in. Syftet med specifikationen är att du ska tänka igenom problemet innan du försöker lösa det. Specifikationen ska vara skriven i en .java-fil, vara kompilerbar och lämnas in via webben. En handledare kommer att kommentera den och ge den betyget godkänd/underkänd. Vid återlämningen ska du ta med dig en minnesbild över programmet. Blir du underkänd på själva specen eller minnesbilden måste du dokumentera ditt färdiga program med javadoc.
Prototyper istället för specifikation
På en del kursomgångar kan man istället för att skriva en specifikation komma överens med vissa handledare om att redovisa en eller flera prototyper. Detta kan spara tid för den som vet hur man ska göra och sådana som vill prova sig fram. Om du kör fast med dina prototyper kan handledaren kräva att du skriver en specifikation i alla fall.
Granskning
Innan det färdiga programmet kan redovisas för en handledare ska det testas (granskas) av en student. Studenten får du välja själv, men för din egen skull bör det vara någon ovän, eller kritisk person. Vid testen ska teststudenten kritiskt granska ditt program, testköra det och föra ett besiktningsprotokoll (pdf, ps). Denna granskning är ett obligatoriskt moment. Varje kursdeltagare måste granska en uppgift. Alla uppgifter som ska redovisas för handledare måste granskas först. Om du inte hittar något program att granska så måste du istället utföra en fiktiv granskning. Syftet med granskningen är att du genom att kritiskt granska en annans program ska få en ökad förståelse för hur man ska (och inte ska) programmera. Erfarenhetsmässigt ökar samtidigt chansen att bli godkänd vid redovisningen med minst 50%.
Tips! Välj granskare först när du är klar att redovisa, och välj då någon som också är klar med sitt program, så att ni kan granska varandra.
Slutredovisning
Du väljer (normalt via webben) en tid för slutredovisning. Specifikationen med uppdaterad minnesbild, besiktningsprotokollet och granskaren ska medföras till slutredovisningen. Granskare som inte medföljer till slutredovisningen har ingen chans att försvara sin granskning och riskerar därmed att bli underkända om handledaren finner granskningen undermålig.

Det finns en lista på J-uppgifterna med länkar till lydelserna för att du ska kunna skumma och bestämma dig för en uppgift.

J-uppgifterna är av olika omfång vilket kräver olika mycket tid, men tidsåtgången är framförallt beroende av dina kunskaper när du börjar med J-uppgiften.

Som ett komplement till de "inbyggda" finesserna i Java så finns ytterligare Javafiler för J-uppgiften. Utnyttja gärna dessa, men tänk på att i enlighet med hederskodexen ALLTID ange varifrån koden kommer när det inte är din egen.

Efter kursens slut kan J-delen endast redovisas i omtentaperioder och ger maximalt betyget tre. Eftersom datorsystemen byts eller uppgraderas årligen så bör du vara medveten om att tiden du har på dig att redovisa din J-del är begränsad. Väntar du mer än ett år från kursstart med att redovisa kan lydelsen till din J-uppgift behöva bytas ut. Du måste då ta kontakt med kursledaren. Vi reserverar oss för att byten av datorsystem kan medföra att vissa eller samtliga J-uppgifter inte går att utföra i framtiden. Du kan alltså bara vara säker på att det går att redovisa din J-del fram till nästa kursstart.

Krav på J-uppgiftslösningen

Utöver kraven på funktionalitet som finns i uppgiftslydelsen gäller detta alltid:

Programmet ska vara användarvänligt och presentera sig vid programstart. Tydliga instruktioner ska ges på skärmen. Det ska vara lätt att förstå vad programmet skriver ut. Det är tillåtet att anta att indatafiler är felfria om inte annat anges i uppgiftslydelsen. Ingen felkoll behöver göras för att upptäcka om indatafiler verkligen existerar.

Programmet ska vara kommenterat upptill med författare, datum och ev revisionsdatum. Överkommentera inte programmet i övrigt. Tänk på att det är kvalitet och inte kvantitet på kommentarer som räknas.

Programmet ska vara vettigt uppdelat i klasser och metoder, och metoder ska inte vara alltför långa (max en skärmsida). Det ska vara lätt att i efterhand gå in och förstå och ändra i programmet. Robust, flexibelt och lättläst är nyckelord.

Varje klass, instansvariabel och metod ska vara försedd med kommentarer. Ange vad klassen och variabeln representerar och vad metoden gör. För metoder bör man också ange vad indata (parametrar) och utdata (retur-värde) betyder. Det ska räcka att läsa kommentar och metodhuvud för att förstå hur en metod ska användas.

Namn på klasser, variabler och metoder ska vara vettiga. Alla deklarerade namn ska vara på samma språk, liksom alla kommentarer (engelska namn och svenska kommentarer är OK). Koden skall vara snyggt formaterad.

Nästan identiska kodstycken ska inte upprepas. Gör i stället generella klasser och metoder. Inför inte i onödan begränsningar. Inför konstanter för sådant som man kan tänkas vilja ändra framöver (om man skulle vilja arbeta vidare med din lösning) och för tal som inte ska ändras och går att beskriva med namn.

Betyg

För att bli godkänd på kursen måste man klara av de tre momenten LAB1 (inledande arbete med labbar, PBL-uppgifter eller instuderingsfrågor beroende på kursomgång), LAB2 (prov på grunderna) och LAB3 (J-delen). Kursen ger fyra högskolepoäng uppdelat på följande sätt (moment):
1p LAB1 Labbarna, instuderingsfrågorna eller PBL-uppgift gjord. Detta tillgodoräknas om slutprovet blir godkänt.

1p LAB2 Slutprovet godkänt.

2p LAB3 J-uppgiften godkänd.

Gradering av betyget på kursen avgörs helt av J-uppgiften. Observera att många J-uppgifter har en begränsad betygsskala och kan inte användas för att få alla betyg. I övrigt gäller följande:
3 = Godkänd J-redovisning med en riktig minnesbild.

För betyg högre än tre krävs att grunduppgiften redovisas före kursomgångens slut.

4 = Kraven för 3 + ett "perfekt" program, dvs inga anmärkningar i protokollet (väl uppdelat, ingen kodupprepning, vettigt dokumenterat, dock utan krav på javadoc mm).

5 = Kraven för 4 + en extrauppgift med grafik eller avancerad algoritm.

6 = Kraven för 5 + en egen vettig extrauppgift (som godtagits av kursledaren). P g a KTHs centrala administrations sätt att hantera betygsrapporteringen rapporteras betyget sex separat efter terminsslutet.

För öppen ingång gäller att betyg 6 kommer att räknas som betyg 5 vid programvalet i januari. Först efter programval kommer betyg 6 att rapporteras in. Detta efter önskemål från studenter, studioerektorer och lärare.

Regler för plussning

På KTH finns av hävd en rätt att tenta om för att få högre betyg fast tentan redan är godkänd. I kurser med andra typer av examination (än tenta) måste vi av kostnadsskäl begränsa denna rätt. Följande regler gäller i denna kurs:

Hjälp och handledning

Hjälp finns att få (i prioritetsordning):
  1. Via hemsidans länk "vanliga frågor".
  2. Javas api dokumentation (javadoc)
  3. Från kurslitteraturen.
  4. Från referenserna på webben. Till exempel finns det ett interaktivt minnesritarexempel. Tyvärr fungerar den inte med alla kombinationer av Unix-Netscape. På PC och Mac är det inga problem.
  5. Genom diskussion med labbkamraten.
  6. Under laborationerna.
  7. Via datorbrev till en lärare. Många lärare tar hand om mer än en kurs. Var vänlig och börja alla datorbrev med ämnesraden (subject) "prgo03: ..." när du kontaktar en lärare i kursen.
  8. Under läsveckor av allmän handledare i Nadas datorsalar (Osquars Backe 2, plan 4) vardagar klockan 11-13, 17-20. Rummet finns mellan sal gul och grön (knacka och fråga efter allmänhandledare). Deras schema finns på webben.
  9. Under redovisningstillfällena.

För datorrelaterade fel (inloggningsproblem, epost, trasiga datorer etc), se "Datorsalar".

Nadas datorsalar

Nadas datorsalar sköts av Nadas systemgrupp. Man kan få hjälp med Nadas datorer Vänd dig till dem om du får problem med ditt passerkort eller konto på Nada.

Studenterna har tillträde till terminalsalarna dygnet runt, men terminalsalarna är dagtid ofta bokade för andra kurser.

Som inpasseringskort använder du din kårlegitimation (på kvällar och helger krävs även koden).

I Nadas datorsalar kan man få handledning från Nadas allmänhandledning. Deras schema finns på webben.

Synpunkter på kursen

Synpunkter på kursen vill vi väldigt gärna ha. Synpunkter kan lämnas direkt till någon lärare i samband med lektioner, via datorpost eller vanlig post. Vid kursens slut kommer en datoriserad enkätundersökning genomföras. Denna enkät är anonym och väldigt viktig för kursen såväl som för lärarna.

Kom under kursens gång ihåg att ju snabbare du kommer med kommentarer, desto snabbare kan du ta del av förbättringar!

Du kan också lämna dina synpunkter direkt till examinator Olle Bälter.