Tentamen, EDAA20/EDA501 Programmering

Relevanta dokument
Tentamen Programmeringsteknik för BME, C, D, E, F, I, N & Pi

Tentamen, EDAA10 Programmering i Java

Tentamen i Programmering

Tentamen EDA501/EDAA20 M L TM W K V

Tentamen, EDA501/EDAA20 Programmering M MD W BK L

Tentamen, EDAA20/EDA501 Programmering

Tentamen, EDA017, Programmeringsteknik för C, E, I och Pi

Tentamen, EDAA20/EDA501 Programmering

Tentamen, EDA501 Programmering M L TM W K V

Tentamen, Programmeringsteknik för BME, F och N

Tentamen, EDAA20/EDA501 Programmering

Tentamen, EDAA10 Programmering i Java

Tentamen, EDA501 Programmering M L TM W K V

Tentamen, EDAA20/EDA501 Programmering

Tentamen, EDAA10 Programmering i Java

Tentamen i EDA011 Programmeringsteknik för F, E, I, π och N

TENTAMEN OOP

Tentamen, EDAA20/EDA501 Programmering

Lösningsförslag till tentamen i EDA011, lördagen den 16 december 2006

Tentamen EDAA45 Programmering, grundkurs

Dagens program. Programmeringsteknik och Matlab. Objektorienterad programmering. Vad är vitsen med att ha både metoder och data i objekten?

Tentamen i Grundläggande programmering STS, åk 1 lördag

Tentamen FYTA11 Javaprogrammering

Det finns en referensbok (Java) hos vakten som du får gå fram och läsa men inte ta tillbaka till bänken.

DAT043 Objektorienterad Programmering

Lösningsförslag tentamen FYTA11 Java

Omtentamen för TDA540 Objektorienterad Programmering. Institutionen för Datavetenskap CTH HT-16, TDA540. Dag: , Tid:

Grundkurs i programmering, 6 hp (725G61) Dugga 2 tillfälle 2

EDAA20 Föreläsning Klassen ArrayList. Viktiga operationer på ArrayList. Generisk klass

OBJEKTORIENTERAD PROGRAMVARUUTVECKLING. Övningstentamen 1

Anmälningskod: Lägg uppgifterna i ordning. Skriv uppgiftsnummer (gäller B-delen) och din kod överst i högra hörnet på alla papper

Lite om felhantering och Exceptions Mer om variabler och parametrar Fält (eng array) och klassen ArrayList.

JAVA Mer om klasser och objektorientering

PROGRAMMERING-Java TENTAMINA

LÖSNINGSFÖRSLAG Programmeringsteknik För Ing. - Java, 5p

OOP Tentamen

Anmälningskod: Lägg uppgifterna i ordning. Skriv uppgiftsnummer (gäller B-delen) och din kod överst i högra hörnet på alla papper

Omtentamen för TDA540 Objektorienterad Programmering. Institutionen för Datavetenskap CTH HT-16, TDA540. Dag: , Tid:

Föreläsning 3-4 Innehåll

Objektorienterad Programkonstruktion, DD1346. Tentamen , kl

OOP Omtenta

a. Vilka av följande påståenden är riktiga? Observera att felaktigt valda påståenden ger poängavdrag. (4p)

OOP Tentamen

TDDC77 Objektorienterad Programmering

Tentamen för TDA540 Objektorienterad Programmering. Institutionen för Datavetenskap CTH HT-17, TDA540. Dag: , Tid:

Tentamen i Grundläggande programmering STS, åk 1 fredag

Del A (obligatorisk för alla)

Omtentamen för TDA540 Objektorienterad Programmering. Institutionen för Datavetenskap CTH HT-17, TDA540. Dag: , Tid:

Tentamen, Algoritmer och datastrukturer

TENTAMEN PROGRAMMERING I JAVA, 5P SOMMARUNIVERSITETET

Laboration A Objektsamlingar

DI-institutionen Sid 1 av 6 Hans-Edy Mårtensson Sten Sundin

Tentamen i Grundläggande programmering STS, åk 1 fredag

Föreläsning 5 (6) Metoder. Metoder Deklarera. Metoder. Parametrar Returvärden Överlagring Konstruktorer Statiska metoder tostring() metoden javadoc

TENTAMEN OOP

Tänk på följande: Det finns en referensbok (Java) hos tentavakten som du får gå fram och läsa men inte ta tillbaka till bänken.

OOP Omtenta

Tentamen i Programmeringsteknik I

TENTAMEN I PROGRAMMERING. På tentamen ges graderade betyg:. 3:a 24 poäng, 4:a 36 poäng och 5:a 48 poäng

Det finns en referensbok (Java) hos tentavakten som du får gå fram och läsa men inte ta tillbaka till bänken.

Anmälningskod: Lägg uppgifterna i ordning. Skriv uppgiftsnummer (gäller B-delen) och din kod överst i högra hörnet på alla papper

Objektorienterad Programkonstruktion, DD1346 FACIT. Tentamen , kl

Grundläggande programmering med C# 7,5 högskolepoäng

OOP Tenta

Saker du ska kunna Föreläsning 13 & 14

OBJEKTORIENTERAD PROGRAMMERING för Z1 (TDA540)

Objektorienterad Programmering (TDDC77)

Tenta (TEN3) i kursen 729G04 Programmering och diskret matematik 5 feb 2016, kl 14:00-18:00

OOP Tentamen

Högskolan Dalarna sid 1 av 7 DI-institutionen Hans-Edy Mårtensson Sten Sundin

Omtentamen för TDA540 Objektorienterad Programmering. Institutionen för Datavetenskap CTH HT-15, TDA540. Dag: , Tid:

Det finns en referensbok (Java) hos vakten som du får gå fram och läsa men inte ta tillbaka till bänken.

Föreläsning 3-4 Innehåll. Diskutera. Metod. Programexempel med metod

Omtentamen för TDA540 Objektorienterad Programmering. Institutionen för Datavetenskap CTH HT-17, TDA540. Dag: , Tid:

Laboration 13, Arrayer och objekt

Anmälningskod: Lägg uppgifterna i ordning. Skriv uppgiftsnummer (gäller B-delen) och din kod överst i högra hörnet på alla papper

Det finns en referensbok (Java) hos tentavakten som du får gå fram och läsa men inte ta tillbaka till bänken.

Tentamen för kursen Objektorienterad programvaruutveckling GU (DIT010)

Tentamen Programmeringsteknik II Skrivtid: Hjälpmedel: Java-bok (vilken som helst) Skriv läsligt! Använd inte rödpenna!

Tentamen. Datalogi I, grundkurs med Java 10p, 2D4112, Lördagen den 30 november 2002 kl , salar E33, E34

Tentamen i Grundläggande programmering STS, åk

Det finns en referensbok (Java) hos tentavakten som du får gå fram och läsa men inte ta tillbaka till bänken.

Tentamen , Grundläggande programmering i Java

Föreläsning 2 Objektorienterad programmering DD1332. Typomvandling

Idag. Exempel, version 2. Exempel, version 3. Ett lite större exempel

732G Linköpings universitet 732G11. Johan Jernlås. Översikt. Repetition. Muddy. Funktioner / metoder. Punktnotation. Evalueringsordning

PROGRAMMERING-JAVA TENTAMINA

Programmeringsteknik och Matlab. Dagens program. Viktiga datum. Repetitionsexempel. Repetition av if/else, for, while och Scanner

LÖSNINGSFÖRSLAG TILL Tentamen i objektorienterad programmering i C++ I

Att skriva till och läsa från terminalfönstret

Kort repetition. Programmeringsteknik för Bio1 och I1. Vad ska vi lära oss idag? Ett exempel

Tentamen EDAA45 Programmering, grundkurs

Att deklarera och att använda variabler. Föreläsning 10. Synlighetsregler (2) Synlighetsregler (1)

TDDI14 Objektorienterad programmering

Lösningsförslag till tentamen i EDA011/EDA017 Programmeringsteknik för F, E, I, π och N 25 maj 2009

Lösningar för tenta 3 DAT043,

TENTAMEN OOP

DEL 1 För att få godkänt på tentan (betyg 3) måste du lösa minst fem av sju uppgifter i denna del.

729G04 Programmering och diskret matematik

DUGGA: Objektorienterade applikationer. Läs detta! Uppgifterna är inte avsiktligt ordnade efter svårighetsgrad.

Transkript:

LUNDS TEKNISKA HÖGSKOLA Institutionen för datavetenskap Tentamen, EDAA20/EDA501 Programmering 2016 01 13, 08:00 13:00 Anvisningar: Denna tentamen består av tre uppgifter. Preliminärt ger uppgifterna 6 + 18 + 16 = 40 poäng. För godkänt betyg krävs 20 poäng. Tillåtet hjälpmedel: Java-snabbreferens. Lösningsförslag kommer att finnas på kursens hemsida senast dagen efter tentamen. När rättningen är klar meddelas detta på kursens hemsida. Tentamensvillkor för EDA501: Om du tenterar utan att vara tentamensberättigad annulleras din skrivning. För att undvika att någon skrivning annulleras av misstag kommer alla som, enligt institutionens noteringar, tenterat utan att vara tentamensberättigade att kontaktas via epost. Felaktigheter i institutionens noteringar kan därefter påtalas fram till nästa tentamenstillfälle då resterande skrivningar annulleras. 1

2(5) Bakgrund och indata En kursansvarig lärare i programmering har gjort en enkät bland sina studenter om deras förkunskaper. Du ska skriva kod som hjälper läraren att analysera enkäten. De uppgifter du ska göra finns på sista sidan i tentamen men läs igenom alla beskrivningar och exempel i hela tentamen och se till att du verkligen förstår hur alla klasser hänger ihop innan du börjar lösa uppgifterna! Läraren har genomfört enkäten med hjälp av en molntjänst. Följande frågor har ställts: 1. Vilken är din STIL-identitet? 2. Vilket är ditt förnamn? 3. Vilket är ditt efternamn? 4. Vilket program går du? 5. 6. Om Ja, vilket programspråk har du använt mest? Från molntjänsten levereras en textfil vid namn data.csv med nedan innehåll. eko13rsv,robin,svensson,w,nej dat15kbo,kim,bengtsson,d,ja,python dat15evl,edvard,persson,d,nej eko13nin,nils,nilsson,w,nej dat14nni,nils,nilsson,d,ja,java dat15was,walter,skogsbäck,d,ja,python dat15svs,sverker,smith,d,nej dat15ame,angela,merkel,d,ja,c++ eko13aki,anna,kindberg,w,ja,java dat15stl,stefan,löfven,d,ja,java dat15ggr,gusten,grodslukare,d,ja,java dat15odc,oddput,clementin,d,nej dat15vio,viktor,oval,d,nej dat15stt,stina,triangelsson,d,ja,cobol Varje rad motsvarar ett enkätsvar från en person. Raderna består av svarskolumner separerade av ett komma. De personer som svarat Nej på näst sista frågan har ett färre antal kolumner. Textfilen är indata till lärarens program. Huvudprogram och utdata Läraren vill få reda på antal och procentfördelning gällande programtillhörighet, förkunskaper och programspråk för alla program. Läraren vill även för varje program få en separat lista med de som svarat och även se hur det skiljer sig i förkunskaper mellan programmen. För att åstadkomma detta har läraren skrivit ett program, som använder följande klasser: Klassen StudentSurvey har hand om det som är specifikt för just denna enkät. Klassen Survey är en generell enkätklass med metoder för registrering och utskrift. Klassen Table kan lagra och filtrera enkätsvar i tabellform. En tabell består av rader, där varje rad motsvarar ett enkätsvar som i textfilen ovan. Klassen Row lagrar en rad med texter. En rad kan bestå av flera strängar. Varje enskild sträng motsvarar ett svar på en delfråga i exemplet ovan. Kommatecknet som separerar svaren i textfilen ovan lagras ej.

3(5) Lärarens huvudprogram ser ut som följer. public static void main(string[] args) { ArrayList<String> lines = readlinesfromfile("data.csv"); Table input = new Table(lines, ","); StudentSurvey survey = new StudentSurvey(input); StudentSurvey surveyd = new StudentSurvey(input.filter(StudentSurvey.PROGRAM, "D")); StudentSurvey surveyw = new StudentSurvey(input.filter(StudentSurvey.PROGRAM, "W")); StudentSurvey surveyyes = new StudentSurvey(input.filter(StudentSurvey.PROGRAMMED, "Ja")); System.out.println("*** ALLA ***"); survey.printprogramstatistics(); survey.printprogrammedstatistics(); surveyyes.printlanguagestatistics(); System.out.println("\n*** W-programmet ***"); surveyw.printparticipants(); surveyw.printprogrammedstatistics(); System.out.println("\n*** D-programmet ***"); surveyd.printparticipants(); surveyd.printprogrammedstatistics(); Metoden public static ArrayList<String> readlinesfromfile(string filename), är redan implementerad av läraren och tar hand om inläsningen av textraderna från fil. När huvudprogrammet ovan körs ska det ge följande utskrift (kolumnerna nedan ska egentligen skrivas efter varandra, men texten är här uppdelad för att inte slösa med papper): *** ALLA *** Vilket program går du? W 3 21% D 11 78% Ja 8 57% Nej 6 42% Vilket programspråk har du använt mest? Java 4 50% C++ 1 12% OTHER 3 37% *** W-programmet *** STIL ID Namn eko13rsv Svensson, Robin eko13nin Nilsson, Nils eko13aki Kindberg, Anna Ja 1 33% Nej 2 66% *** D-programmet *** STIL ID Namn dat15kbo Bengtsson, Kim dat15evl Persson, Edvard dat14nni Nilsson, Nils dat15was Skogsbäck, Walter dat15svs Smith, Sverker dat15ame Merkel, Angela dat15stl Löfven, Stefan dat15ggr Grodslukare, Gusten dat15odc Clementin, Oddput dat15vio Oval, Viktor dat15stt Triangelsson, Stina Ja 7 63% Nej 4 36% Klassen StudentSurvey och specifikationer av Survey, Row och Table Läraren har också skapat specifikationer av klasserna Survey, Row och Table. Klassen Survey använder klassen Table som i sin tur använder klassen Row. Genom arv kan Survey utökas med specifika enkätmetoder och data. Läraren har, speciellt för denna förkunskapsenkät, implementerat klassen StudentSurvey. Du ska implementera klasserna Survey, Row och Table (se uppgifterna på sista sidan i tentamen).

4(5) public class StudentSurvey extends Survey { public static final int STIL = 0; public static final int NAME1 = 1; public static final int NAME2 = 2; public static final int PROGRAM = 3; public static final int PROGRAMMED = 4; public static final int LANGUAGE = 5; public StudentSurvey(Table data) { super(data); public void printparticipants() { System.out.println("\nSTIL ID Namn"); for (int row = 0; row < data.getnumberofrows(); row++) { System.out.println(data.get(row, STIL) + " " + data.get(row, NAME2) + ", " + data.get(row, NAME1)); public void printprogramstatistics() { System.out.println("\nVilket program går du?"); String[] param = {"W","D"; printregistration(program, param); public void printprogrammedstatistics() { System.out.println("\n"); String[] param = {"Ja","Nej"; printregistration(programmed, param); public void printlanguagestatistics() { System.out.println("\nVilket programspråk har du använt mest?"); String[] param = {"Java","C++"; printregistration(language, param); /** Skapar en ny enkät utifrån tabellen data. */ Survey(Table data); /** Registrerar förekomst av värdena values i kolumnen col. * Returnerar en heltalsvektor där sista elementet innehåller antalet * övriga värden som inte förekommer i values. */ int[] register(int col, String[] values); /** Skriver ut statistik över förekomsten av värdena i values i kolumnen col. * För varje värde i values och för övriga värden skrivs en rad med värdet, * frekvensen och procentandelen. Se utskriftsexempel på sid. 3. */ void printregistration(int col, String[] values); /** Skapar en rad med strängar från s. Radens strängar skapas genom att s * delas upp baserat på separatorn delimiter. Separatorn lagras ej. */ Row(String s, String delimiter); /** Returnerar strängen på plats col, räknat från 0 till size()-1. * Om col indexerar utanför gränserna returneras en tom sträng. */ String get(int col); /** Returnerar antalet strängar som denna rad innehåller. */ int size();

5(5) /** Skapar en tom tabell. */ Table(); /** Skapar en tabell med data utifrån rader i lines. Värdena på varje rad * avgränsas med separatorn delimiter */ Table(ArrayList<String> lines, String delimiter); /** Returnerar maxbredden (det maximala antalet kolumner bland alla rader). */ int getmaxwidth(); /** Returnerar antalet rader i tabellen. */ int getnumberofrows(); /** Returnerar strängen på rad row och kolumn col räknat från 0. * Om row eller col indexerar utanför gränserna returneras en tom sträng. */ String get(int row, int col); /** Lägger till raden r sist i tabellen. */ void append(row r); /** Sätter in raden r på plats pos i tabellen (efterföljande rader flyttas). */ void insert(int pos, Row r); /** Returnerar en ny tabell som enbart innehåller de rader som har värdet value * i kolumnen col. */ Table filter(int col, String value); Uppgift 1. Implementera klassen Row. Använd metoden split som finns i klassen String (se snabbreferensen). Vid anrop av split(",") på strängen "hej,på,dej" skapas denna strängvektor: 0 1 2 hej på dej Uppgift 2. Implementera klassen Table. Du ska använda en ArrayList för att lagra tabellens rader. Uppgift 3. Implementera klassen Survey. Metoden printregistration ska använda metoden register. Antag att man anropar register med följande argument för att registrera värdena i sjätte kolumnen i tabellen i surveyyes på sidan 3: String[] param = {"Java","C++"; register(5, param); Då tolkas innehållet i följande returvektor enligt nedan: 0 1 2 4 1 3 På plats 0 registrerades 4 förekomster av Java, på plats 1 registrerades 1 förekomst av C++, och på plats 2 registrerades 3 förekomster av övriga värden. Totalt registrerades 8 värden. Vid utskrift i printregistration ska du förutsätta att kolumntexterna är tillräckligt korta för att det ska räcka med att separera dessa med ett tabulatortecken \t för automatisk kolumnutjämning. Procentandelar ska anges som heltal utan avrundning. Exempel: Om du någonstans inne i en loop går igenom några tidigare deklarerade vektorer, i detta exempel kallade values och reg, och du tidigare har beräknat percentage, kan statistikutskriften för en rad göras så här: System.out.println(values[i] + "\t" + reg[i] + "\t" + percentage + "%");