Tentamen, EDAA20/EDA501 Programmering

Relevanta dokument
Tentamen, EDAA20/EDA501 Programmering

Tentamen, EDA501 Programmering M L TM W K V

Tentamen, EDA501 Programmering M L TM W K V

Tentamen, EDAA20/EDA501 Programmering

Tentamen i Programmering

Tentamen, EDAA10 Programmering i Java

Tentamen EDA501/EDAA20 M L TM W K V

OOP Objekt-orienterad programmering

Tentamen, EDA501/EDAA20 Programmering M MD W BK L

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

Tentamen på kursen DA7351, Programmering , kl Malmö högskola Teknik och samhälle. DA7351, Programmering

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

Tentamen i Objektorienterad programmering

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

Tentamen OOP

Tentamen DE12, IMIT12, SYST12, ITEK11 (även öppen för övriga)

Tentamen, EDAA20/EDA501 Programmering

"if"-satsen. Inledande programmering med C# (1DV402)

Objektorienterad programmering D2

Tentamen. 2D4135 vt 2005 Objektorienterad programmering, design och analys med Java Lördagen den 28 maj 2005 kl

Föreläsning 1 & 2 INTRODUKTION

Del A (obligatorisk för alla)

Föreläsning 3-4 Innehåll

Tentamen för kursen Objektorienterad programvaruutveckling GU (DIT010)

Redovisning av inlämningsuppgifter

Laboration A Objektsamlingar

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

Vem är vem på kursen. Objektorienterad programvaruutveckling GU (DIT011) Kursbok Cay Horstmann: Big Java 3rd edition.

2. Betrakta följande program, där fyra heltal läses från tangentbordet och några (ointressanta) beräkningar görs:

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.

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

Föreläsning 2 Objektorienterad programmering DD1332. Typomvandling

Kungliga Tekniska Högskolan Ämneskod 2D4134 Nada Tentamensdag maj - 19 Tentamen i Objektorientering och Java Skrivtid 5 h

Objektorienterad programmering i Java

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

Tentamen, EDAA20/EDA501 Programmering

TENTAMEN PROGRAMMERINGSMETODIK MOMENT 2 - JAVA, 4P

Tentamen Programmeringsteknik II Inledning. Anmälningskod:

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

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

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

Kungliga Tekniska Högskolan Ämneskod 2D4134 Nada Tentamensdag aug - 23 Tentamen i Objektorientering och Java Skrivtid 5 h

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

DAT043 Objektorienterad Programmering

Tentamen, EDAA10 Programmering i Java

Del A (obligatorisk för alla)

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

TENTAMEN OOP

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

Tentamen Programmeringsteknik II och NV2 (alla varianter) Skriv bara på framsidan av varje papper.

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

Föreläsning REPETITION & EXTENTA

Objektsamlingar i Java

OBJEKTORIENTERAD PROGRAMVARUUTVECKLING

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

Tentamen, EDAA20/EDA501 Programmering

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

DELPROV 1 I DATAVETENSKAP

Föreläsning Innehåll. Hantera många element. Exempel: polygon Godtyckligt antal element. Exempel: polygon forts

4 13 / %.; 8 </" '': " / //&' " " ' * TelefonKostnad +,-%&. #!" $% " &' . > / ' 5 /' * 13/ &' static Math 1+" &'/ % 12 "" static "' * 1 /") %& &

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

Tentamen. Lösningsförslag

Interface. Interface. Tobias Wrigstad (baserat på bilder från Tom Smedsaas) 3 december 2010

Föreläsning 10. ADT:er och datastrukturer

Lösningsförslag till tentamen

Att bekanta dig med NetBeans programmeringsmiljö och skriva några enkla program med programmeringsspråket Java.

Att öva på och förstå ett program med flera samverkande klasser.

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

Programmering för språkteknologer II, HT2014. Rum

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

Variabler som hör till enskilda objekt. Deklareras på översta nivån i klassen och i regel som private.

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

Föreläsning 7. Träd och binära sökträd

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

2 b) Följande finns definierat: public class Käk String titel = "Chili con carne"; Krydda[] kryddor = new Krydda[10]; kryddor[0] = new Krydda("Svartpe

Bankkonto - övning. Övning 2 Skriv en metod, geträntan, som returnerar räntan.

Tentamen. Grundläggande programmering i Java A 5p, DTAA

2 b) Följande finns definierat: public class Spel String titel = "Spel"; Dice[] tärningar = new Dice[10]; tärningar[0] = new Dice("Röd"); tärningar[1]

Lösningsförslag till tentamen för TDA540 Objektorienterad Programmering

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

Lösningsförslag till tentamen i EDA690 Algoritmer och Datastrukturer, Helsingborg

Lösningsförslag till tentamen i EDAA01 programmeringsteknik fördjupningkurs

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

Föreläsning 6: Introduktion av listor

TENTAMEN OOP

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

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

Påminnelse: en datatyp för bilder. Programmering. En datatyp för bilder. Spegelbild. hh.se/db2004

Malmö högskola 2007/2008 Teknik och samhälle

Tentamen EDAA45 Programmering, grundkurs

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

Tentamen, EDAA10 Programmering i Java

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

Malmö högskola 2007/2008 Teknik och samhälle

Exempel på listor (klassen ArrayList). Ett exempel med fält. Avbildning är en speciell typ av lista HashMap.

Föreläsning 4 Innehåll. Abstrakta datatypen lista. Implementering av listor. Abstrakt datatypen lista. Abstrakt datatyp

Lösningsförslag, tentamen FYTA11 Javaprogrammering

Chapter 4: Writing Classes/ Att skriva egna klasser.

Programmering A C# VT Ett kompendie över Programmering A (50p) i c# Stefan Fredriksson

Tentamen, EDA690 Algoritmer och Datastrukturer, Helsingborg

Transkript:

LUNDS TEKNISKA HÖGSKOLA 1(4) Institutionen för datavetenskap Tentamen, EDAA20/EDA501 Programmering 2011 10 19, 8.00 13.00 Anvisningar: Denna tentamen består av fem uppgifter. Preliminärt ger uppgifterna 11 + 8 + 8 + 2 + 11 = 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. Klassen Article (se specifikation nedan) beskriver en tidskriftsartikel. Klassen är tänkt att användas i ett program där man kan söka efter artiklar. Varje artikel har ett eller flera nyckelord som ger en uppfattning om vad artikeln handlar om. Exempel: Artikeln När lämmeltåget spårar ur från tidskriften Forskning och framsteg från år 2011 skulle kunna ha nyckelorden lämmel, lämmeltåg, populationscykel och fjäll. Vid sökning efter artiklar anger man några nyckelord och får en lista över de artiklar som innehåller nyckelorden. Din uppgift är att implementera klassen Article. Ledning: Nyckelorden bör lagras i en lista. Använd klassen ArrayList för detta. Om du vill får du gärna använda metoden contains för att söka i denna lista (se Java snabbreferens). Article /** Skapar en artikel med titeln title, författaren author, tidskriften journal och publiceringsåret year. */ Article(String title, String author, String journal, int year); /** Returnerar titeln. */ String gettitle(); /** Lägger till nyckelordet word till artikeln om det inte redan finns. */ void addkeyword(string word); /** Returnerar true om alla orden i listan words ingår bland artikelns nyckelord, annars false. */ boolean allkeywordsmatch(arraylist<string> words); /** Returnerar en sträng som innehåller titel, författare, tidskrift och publiceringsår med blanktecken emellan. */ String tostring();

2(4) 2. I den här uppgiften ska du implementera klassen ArticleSearcher som innehåller en metod för att söka efter artiklar: ArticleSearcher /** Skapar ett objekt som kan användas för att söka efter artiklar i registret articles. */ ArticleSearcher(ArticleRegister articles); /** Returnerar en lista med alla artiklar för vilka det gäller att alla orden i listan words ingår bland artikelns nyckelord. */ ArrayList<Article> findmatchingarticles(arraylist<string> words); Artiklarna hämtas från ett objekt av typen ArticleRegister. Klassen ArticleRegister är färdigskriven (du ska alltså inte implementera den). Klassen ArticleRegister fungerar på motsvarande sätt som t.ex. klassen Scanner med metoder hasnext och next som används för att ta reda på om det finns fler artiklar att hämta respektive för att hämta nästa artikel. För att man ska kunna starta hämtningen från början finns det även en metod reset. ArticleRegister /** Skapar ett objekt som håller reda på artiklar. Information om artiklarna läses från filen filename. */ ArticleRegister(String filename); /** Returnerar true om det finns fler artiklar att hämta, annars false. */ boolean hasnext(); /** Hämtar nästa artikel. */ Article next(); /** Återställer objektet, d.v.s. gör så att man vid nästa anrop av next börjar om och hämtar den första artikeln. */ void reset(); 3. Skriv ett huvudprogram som låter en användare skriva in ett valfritt antal sökord och som därefter skriver ut de artiklar för vilka det gäller att alla de inlästa orden ingår bland artikelns nyckelord. Filen med artiklarna har namnet artikeldata.txt. Se till att att ditt program skriver ut ordentliga hjälptexter så att användaren vet vad som ska skrivas på tangentbordet.

3(4) 4. Betrakta följande klasser: public class Person { private String name; public Person(String name) { this.name = name; public void setname(string name) { this.name = name; public String tostring() { return name; public class PersonHandler { public static void changename1(person p, String s) { p = new Person(s); public static void changename2(person p, String s) { p.setname(s); public class Main { public static void main(string[] args) { Person p1 = new Person("Lisa"); PersonHandler.changeName1(p1, "Mona"); System.out.println(p1); Person p2 = new Person("Bo"); PersonHandler.changeName2(p2, "Kalle"); System.out.println(p2); Vad skrivs ut när man kör programmet Main? Förklara vad som händer.

4(4) 5. En transportfirma ska lasta varor i en container. Varorna är packade i kartonger med standardmått: alla kartonger är lika breda och djupa, men de kan ha olika höjd. Containern är indelad i ett antal fack som är lika breda och djupa som kartongerna. En container med fem fack kan se ut så här när den är färdigpackad (de grå rutorna är kartongerna, siffrorna under containern är fackens nummer, siffrorna till vänster är höjden): Här har man packat 12 kartonger (1 med höjden 5, 2 med höjden 4, 5 med höjden 3, 3 med höjden 2 och 1 med höjden 1), och den totala höjden har blivit 8. Man vill att den totala höjden ska bli så liten som möjligt, och man packar därför kartongerna i storleksordning, med de största först, och lägger varje kartong i det fack som har mest plats. Kartongerna, facken i containern och containern beskrivs av följande klasser (bara de operationer som är intressanta i denna uppgift har tagits med): Box /** Tar reda på kartongens höjd. */ int getheight(); // Används inuti Bin Bin /** Skapar ett tomt fack. */ Bin(); /** Tar reda på kartongernas totala höjd i facket. */ int getheight(); /** Lägger kartongen b överst i facket. */ void put(box b); Container /** Skapar en container med nbrbins fack. */ Container(int nbrbins); /** Packar containern med kartongerna i vektorn boxes. Kartongerna är sorterade efter avtagande höjd. */ void pack(box[] boxes); Implementera klassen Container. Använd den beskrivna metoden för att packa kartongerna. Du ska naturligtvis utnyttja klasserna Box och Bin, som är färdigskrivna.

LUNDS TEKNISKA HÖGSKOLA 1(3) Institutionen för datavetenskap Lösningsförslag till tentamen i EDAA20/EDA501 2011 10 19 1. public class Article { private String title; private String author; private String journal; private int year; private ArrayList<String> keywords; /** Skapar en artikel med titeln title, författaren author, tidskriften journal och publiceringsåret year. */ public Article(String title, String author, String journal, int year) { this.title = title; this.author = author; this.journal = journal; this.year = year; keywords = new ArrayList<String>(); /** Returnerar titeln. */ public String gettitle() { return title; /** Lägger till nyckelordet word till artikeln om det inte redan finns. */ public void addkeyword(string word) { if (!keywords.contains(word)) { keywords.add(word); /** Returnerar true om alla orden i listan words ingår bland artikelns nyckelord, annars false. */ public boolean allkeywordsmatch(arraylist<string> words) { for (int i = 0; i < words.size(); i++) { if (!keywords.contains(words.get(i))) { return false; return true; /** Returnerar en sträng som innehåller titel, författare, tidskrift och publiceringsår med blanktecken emellan. */ public String tostring() { return title + " " + author + " " + journal + " " + year;

2(3) 2. public class ArticleSearcher { private ArticleRegister articles; /** Skapar ett objekt som kan användas för att söka efter artiklar i registret articles. */ public ArticleSearcher(ArticleRegister articles) { this.articles = articles; /** Returnerar en lista med alla artiklar för vilka det gäller att alla orden i listan words ingår bland artikelns nyckelord. */ public ArrayList<Article> findmatchingarticles(arraylist<string> words) { ArrayList<Article> list = new ArrayList<Article>(); articles.reset(); while (articles.hasnext()) { Article a = articles.next(); if (a.allkeywordsmatch(words)) { list.add(a); return list; 3. public class ArticleSearchMain { public static void main(string[] args) { ArticleRegister reg = new ArticleRegister("artikeldata.txt"); ArticleSearcher search = new ArticleSearcher(reg); ArrayList<String> wordlist = new ArrayList<String>(); Scanner scan = new Scanner(System.in); System.out.println("Skriv ett antal nyckelord. Avsluta med!"); String word = scan.next(); while (! word.equals("!")) { wordlist.add(word); word = scan.next(); System.out.println("Följande artiklar innehåller nyckelorden:"); ArrayList<Article> list = search.findmatchingarticles(wordlist); for (int i = 0; i < list.size(); i++) { System.out.println(list.get(i)); Det finns flera olika sätt att lösa problemet med hur användaren avslutar inläsningen av ord. I lösningen ovan skriver användaren in ett utropstecken sist efter orden för att markera slut på orden. Man kan också be användaren att först skriva in antal ord och därefter orden. I detta fall kan en for-sats användas för inläsningen. Ytterligare en variant är att använda hasnext.

3(3) 4. Utskriften från programmet ser ut så här: Lisa Kalle Förklaring till att Lisa skrivs ut (och inte Mona ): När referensen p1 skickas med som parameter till metoden changename1, kopieras den till p. p refererar alltså först till samma objekt som p1 (Lisa). Inuti metoden får sedan referensen p ett nytt värde. Den refererar nu till ett annat Person-objekt. Men p1 ändras inte. Förklaring till att Kalle skrivs ut: Som ovan, p2 kopieras till p. p refererar alltså till samma objekt som p2 (Bo). I metoden anropas sedan metoden changename2 för den person som p refererar till. Det resulterar i att denna person får nytt namn, Kalle. Därför kommer Kalle att skrivas ut. 5. public class Container { private Bin[] bins; /** Skapar en container med nbrbins fack */ public Container(int nbrbins) { bins = new Bin[nbrBins]; for (int i = 0; i < bins.length; i++) { bins[i] = new Bin(); /** Packar containern med kartongerna i vektorn boxes. Kartongerna är sorterade efter avtagande höjd. */ public void pack(box[] boxes) { for (int i = 0; i < boxes.length; i++) { int index = indexofsmallestbin(); bins[index].put(boxes[i]); /* Tar reda på numret på facket med minst höjd. */ private int indexofsmallestbin() { int min = Integer.MAX_VALUE; int minindex = -1; for (int i = 0; i < bins.length; i++) { int height = bins[i].getheight(); if (height < min) { min = height; minindex = i; return minindex;