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

Relevanta dokument
Tentamen, EDAA20/EDA501 Programmering

Tentamen, EDAA10 Programmering i Java

Tentamen i Programmering

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

Tentamen EDA501/EDAA20 M L TM W K V

Tentamen, EDAA20/EDA501 Programmering

Tentamen, EDA501/EDAA20 Programmering M MD W BK L

Tentamen, EDAA20/EDA501 Programmering

Tentamen, EDA501 Programmering M L TM W K V

Tentamen, EDAA10 Programmering i Java

Tentamen, Programmeringsteknik för BME, F och N

Tentamen, EDAA20/EDA501 Programmering

Tentamen, EDA501 Programmering M L TM W K V

Tentamen, EDAA10 Programmering i Java

Tentamen, EDAA20/EDA501 Programmering

Tentamen EDAA45 Programmering, grundkurs

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

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

TENTAMEN OOP

Tentamen FYTA11 Javaprogrammering

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

Föreläsning 3-4 Innehåll

OBJEKTORIENTERAD PROGRAMVARUUTVECKLING. Övningstentamen 1

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

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

Tentamen, EDAA20/EDA501 Programmering

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:

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

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

Tentamen, Algoritmer och datastrukturer

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.

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

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

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

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

DAT043 Objektorienterad Programmering

JAVA Mer om klasser och objektorientering

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

PROGRAMMERING-Java TENTAMINA

OBJEKTORIENTERAD PROGRAMMERING för Z1 (TDA540)

Tentamen i Programmeringsteknik I

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.

Laboration 13, Arrayer och objekt

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

TENTAMEN PROGRAMMERING I JAVA, 5P SOMMARUNIVERSITETET

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

Lösningsförslag tentamen FYTA11 Java

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

TDDC77 Objektorienterad Programmering

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

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

Föreläsning REPETITION & EXTENTA

OOP Tentamen

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

Del A (obligatorisk för alla)

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

TENTAMEN: Objektorienterad programmering. Läs detta! Skriv din tentamenskod på varje blad (så att vi inte slarvar bort dem).

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

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

Objektorienterad Programkonstruktion, DD1346. Tentamen , kl

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

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

Diagnostiskt Prov. Antaganden Om förutsättningar saknas I en uppgift skall rimliga antaganden göras och nedtecknas.

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

Objektorienterad Programmering (TDDC77)

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

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

Föreläsning ALGORITMER: SÖKNING, REGISTRERING, SORTERING

DIAGNOSTISKT PROV. Tid. Hjälpmedel. Antaganden. Rättning. Övrigt. Diagnostiskt Prov. Klockan Inga

Omtentamen för TDA540 Objektorienterad Programmering. Institutionen för Datavetenskap CTH HT-16, 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.

Sortering. Om du följt dessa steg korrekt så ska böckerna nu vara sorterade.

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

TENTAMEN PROGRAMMERINGSMETODIK MOMENT 2 - JAVA, 4P

Föreläsning 1 & 2 INTRODUKTION

Föreläsning 10 OM DELMÅLSKONTROLLEN ; VARIABLERS SYNLIGHET STRING OCH STRINGBUILDER

Algoritmer. Två gränssnitt

Tentamen: Datordel Programmeringsteknik

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

Föreläsning 8 SLUMPTAL, SIMULERING + INTRODUKTION TILL VEKTORER

Fält av referenser. Konstruktorerna används för att skapa Bilar och Trafikljus.

OOP Tentamen

PROGRAMMERING-JAVA TENTAMINA

Laboration A Objektsamlingar

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

Johan Karlsson Datavetenskap för teknisk kemi, 10p, moment 1 Datavetenskap Umeå Universitet. Tentamen

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

Institutionen för TENTAMEN CTH VT-15 Datavetenskap TDA540. Tentamen för TDA540 Objektorienterad programmering

PROGRAMMERING-Java Omtentamina

Föreläsning 9-10 Innehåll

Lägg uppgifterna i ordning. Skriv uppgiftsnummer och din kod överst i högra hörnet på alla papper.

TDDI14 Objektorienterad programmering

Objektorienterad Programkonstruktion, DD1346 FACIT. Tentamen , kl

I ett program hantera man ofta samlingar av objekt av samma typ.

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

Uppgiften är att beskriva en kvadrat i ett Java program. En första version av programmet skulle kunna se ut så här:

Instuderingsfrågor, del D

kl Tentaupplägg

Transkript:

LUNDS TEKNISKA HÖGSKOLA Institutionen för datavetenskap Tentamen Programmeringsteknik för BME, C, D, E, F, I, N & Pi EDA011 / EDA016 / EDA017 2016 01 13, 08:00 13:00 Anvisningar: Preliminärt ger uppgifterna 6 + 23 + 16 = 45 poäng. För godkänt betyg krävs 22,5 poäng. Tillåtet hjälpmedel: snabbreferens för Java. Läs igenom hela tentamen och skapa dig en förståelse för hur alla klasser hänger ihop innan du sätter igång. De uppgifter du ska göra finns på sista sidan i tentamen. Tveka inte att fråga om något är oklart. Tentamensvillkor: 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. 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. Läraren har genomfört enkäten med hjälp av en molntjänst. Följande frågor har ställts: (1) Vad är din STIL-identitet? (2) Vad är ditt förnamn? (3) Vad ä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 följande 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. 1

2(5) 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, efternamnssorterad 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, sortera 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. 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, ","); Table sorted = input.sort(studentsurvey.name2); StudentSurvey survey = new StudentSurvey(sorted); StudentSurvey surveyd = new StudentSurvey(sorted.filter(StudentSurvey.PROGRAM, "D")); StudentSurvey surveyw = new StudentSurvey(sorted.filter(StudentSurvey.PROGRAM, "W")); StudentSurvey surveyyes = new StudentSurvey(sorted.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 eko13aki Kindberg, Anna eko13nin Nilsson, Nils eko13rsv Svensson, Robin Ja 1 33% Nej 2 66% *** D-programmet *** STIL ID Namn dat15kbo Bengtsson, Kim dat15odc Clementin, Oddput dat15ggr Grodslukare, Gusten dat15stl Löfven, Stefan dat15ame Merkel, Angela dat14nni Nilsson, Nils dat15vio Oval, Viktor dat15evl Persson, Edvard dat15was Skogsbäck, Walter dat15svs Smith, Sverker dat15stt Triangelsson, Stina Ja 7 63% Nej 4 36%

3(5) 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. 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); Survey /** Skapar en ny enkätanalys 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. 2. */ void printregistration(int col, String[] values);

4(5) Row /** 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(); Table /** 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). Om tabellen är tom returneras 0. */ 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); /** Skapar en ny tabell sorterad i bokstavsordning enligt kolumnen col. */ Table sort(int col);

5(5) 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 vektor: 0 1 2 hej på dej Uppgift 2. Implementera klassen Table. Sorteringen görs lämpligen genom insättningssortering till en ny Table med hjälp av metoden insert. Jämför strängars sorteringsordning med metoden compareto i klassen String (se snabbreferensen). Du behöver ej göra någon specialhantering av svenska tecken. 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 2: 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 (närmast lägre) heltal. 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 + "%");