Lösningsförslag, tentamen FYTA11 Javaprogrammering



Relevanta dokument
Tentamen FYTA11 Javaprogrammering

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.

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.

1 Uppgift 1. a) Skapar ett Company-objekt med hjälp av den överlagrade konstruktorn. Du kan själv välja värden på instansvariablerna.

Tentamen för kursen Objektorienterad programvaruutveckling GU (DIT010)

Kompilering och exekvering. Föreläsning 1 Objektorienterad programmering DD1332. En kompilerbar och körbar java-kod. Kompilering och exekvering

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

Tentamen i Objektorienterad programmering

Lösningsförslag FYTA11 Javaprogrammering

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

Föreläsning 1 & 2 INTRODUKTION

Tentamen FYTA11 Javaprogrammering

Föreläsning 14. Filhantering

Objektorienterad programmering i Java

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

trafiksimulering Intro OU5 trafiksimulering

Föreläsnings 9 - Exceptions, I/O

Lösningsförslag tentamen FYTA11 Java

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

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

F4. programmeringsteknik och Matlab

Laboration 13, Arrayer och objekt

Redovisning av inlämningsuppgifter

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

Lösningar för tenta 2 DAT043,

Chapter 3: Using Classes and Objects

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

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

Programmering med Java. Grunderna. Programspråket Java. Programmering med Java. Källkodsexempel. Java API-exempel In- och utmatning.

Föreläsning 2 Objektorienterad programmering DD1332. Typomvandling

DD2310. Javaprogrammering för Pythonprogrammerare. Johan Boye

Algoritmanalys. Genomsnittligen behövs n/2 jämförelser vilket är proportionellt mot n, vi säger att vi har en O(n) algoritm.

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

TENTAMEN PROGRAMMERINGSMETODIK MOMENT 2 - JAVA, 4P

OOP Objekt-orienterad programmering

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

Examination i. PROGRAMMERINGSTEKNIK F1/TM1 TIN212 (Dugga) Dag: Onsdag Datum: Tid: (OBS 3 tim) Rum: V

PROGRAMMERING-Java TENTAMINA

DAT043 Objektorienterad Programmering

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

Fördjupad Java. Undantagshantering. Fel

TENTAMEN OOP

Objektorienterad Programmering (TDDC77)

Övningar Dag 2 En första klass

Command line argumenter. Objektorienterad Programmering (TDDC77) Vad blir resultatet? Nu då? Ahmed Rezine. Hösttermin 2016

Tentamen, EDAA20/EDA501 Programmering

SMD 134 Objektorienterad programmering

1 Uppgift 1. a) Skapar ett Company-objekt med hjälp av den överlagrade konstruktorn. Du kan själv välja värden på instansvariablerna.

Tentamen , Introduktion till Java, dtaa98, dtea53

Tentamen, EDA501 Programmering M L TM W K V

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

Parsing med Recursive Descent, Avbildningsklasser. Syntaxdiagram. Syntaxdiagram och kodning expression. Betrakta följande uttryck

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

Lösningsförslag till tentamen FYTA11 Javaprogrammering

D0010E. Hello world! Nedräkning. Sågtand. Övningsuppgifter i Eclipse. Skapa ett program som skriver ut "Hello world" på skärmen.

PROG2 Tenta Gäller SP:PROG2, DSK2:PROG2, FK:PROG2, FK:OOP, DSV1:P2 och ITK:P2

Lösningsförslag till tentamen

Språkkonventioner och redigering av tal.

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

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

DAT043 Objektorienterad programmering för D, DIT011 Objektorienterad programvaruutveckling för GU

Tentamen FYTA11 Javaprogrammering

Det är principer och idéer som är viktiga. Skriv så att du övertygar examinatorn om att du har förstått dessa även om detaljer kan vara felaktiga.

Tentamen FYTA11 Javaprogrammering

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

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

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

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

Kompilera och exekvera Javakod

Dagens program. Programmeringsteknik och Matlab. Vad är arv? Vi ärver från GregorianCalendar. Kan vi bygga vidare på existerande klasser?

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

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

Programmering för Språkteknologer II. Innehåll. Associativa datastrukturer. Associativa datastrukturer. Binär sökning.

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

Editering, Kompilering och Exekvering av Javaprogram

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

Programstruktur och terminologi. Programmet producerar följande utskrift i terminalfönstret: Ett Javaprogram består av en eller flera 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

Objektorienterad programmering i Java Undantag Sven-Olof Nyström Uppsala Universitet Skansholm: Kapitel 11

DELPROV 1 I DATAVETENSKAP

Lösningar till tentauppgifterna sätts ut på kurssidan på nätet idag kl 19. Omtentamen i Programmering C, 5p, fristående, kväll,

Objektorienterad programmering i Java Undantag Sven-Olof Nyström Uppsala Universitet Skansholm: Kapitel 11

Lite mer om Javas stöd för fält. Programmering. Exempel: vad är det största talet? hh.se/db2004. Fält samt Input/Output

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

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

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

732G Linköpings universitet 732G11. Johan Jernlås. Översikt. Repetition. Exempelduggan. Luffarschack. Koda spel

Föreläsning 3. Stack

732G Linköpings universitet 732G11. Johan Jernlås. Översikt. Repetition. Felsökning. Datatyper. Referenstyper. Metoder / funktioner

OOP Objekt-orienterad programmering

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

Presentation av trafiksimuleringsprojektet

Kapitel 6. Hakparenteser fšr att ange index MŒnga všrden av samma typ

Lösningsförslag tentamen FYTA11 Javaprogrammering

Textsträngar från/till skärm eller fil

Lösningsförslag till tentamen

Att använda pekare i. C-kod

Objektsamlingar i Java

Transkript:

Lunds universitet FYTA11 Institutionen för Astronomi och Teoretisk fysik HT 12 Lösningsförslag, tentamen FYTA11 Javaprogrammering Onsdag 9 januari 2013, 10:15 14:15 Instruktioner Hjälpmedel: Papper och penna. Behandla högst en uppgift per papper och sätt ditt namn och uppgiftens nummer på varje papper. Skriv läsligt och kommentera utförligt vad du gör det kan ge dig poäng även om resultatet blir fel. Tentamen omfattar fyra uppgifter som vardera kan ge upp till tio poäng. För G och VG krävs 20 respektive 30 poäng, inräknat de högst fem bonuspoängen från simuleringsövningarna. Uppgift 1: Små fel Korrigera felen i följande kodstycken där felens natur anges av kommentarer i koden. Felmeddelandet från kompilering eller körning av programmet visas direkt under raden som orsakade felet. a. b. c. d. for(int i = 0; i < 10; i++) /*...*/ //for(i = 0; i < 10; i++) /*...*/ // cannot find symbol // symbol: variable i double step = 0.1; double end = 1.0; for(double t = 0; t <= end; t += step) /*...*/ //for(double t = 0; t!= end; t += step) /*...*/ // Programmet hänger sig här och kommer inte vidare public static void main(string[] args) if(args.length < 1) return; double d = Double.parseDouble(args[0]); //double d = parsedouble(args[0]); // symbol: method parsedouble(java.lang.string) System.out.println("Roten ur sexton är " + Math.sqrt(16)); //System.out.println("Roten ur sexton är " + sqrt(16)); // symbol: method sqrt(int)

e. f. g. h. i. j. public class Sample private long id; public long getid() return id; // I en annan fil: public class Experiment private String name; private Sample sample; //... public void print() System.out.println("Experiment " + name + " uses sample #" + sample.getid()); // System.out.println("Experiment " + name + " uses sample #" + sample.id); // error: id has private access in Sample // boolean insidefigure(double) is defined elsewhere double randx; do randx = Math.random(); while(!insidefigure(randx)); //while(insidefigure(randx)) // double randx = Math.random(); // // symbol: variable randx public void paint(graphics g) g.setcolor(color(255, 200, 200)); //g.setcolor(color(255, 200, 200)); // symbol: method Color(int,int,int) System.out.println("There are "+42+" spoons"); //System.out.println("There are"+42+"spoons"); // problem: Det saknas mellanslag runt 42 i utskriften if(a > 10) System.out.println("a > 10"); a = 10; else //if(a > 10) // System.out.println("a > 10"); // a = 10; //else // error: else without if System.out.println("a <= 10"); double[] weights = new double[10]; //double[] weights = new double[](10); // error: array dimension missing

Uppgift 2: Statistikklass Ponera att du behöver skriva ett program som samlar statistik över ett antal doubles som t.ex. kommer från en simulering. Du behöver en klass som kan matas med värden och sedan returnera information om antalet värden, det största värdet, medelvärdet och standardavvikelsen. Ett interface Statistics finns definierat, men du behöver skriva en klass MyStats som implementerar det i enlighet med kommentarerna som är givna i koden. Din klass skall fungera även om den matas med miljardtals datapunkter, och den skall dessutom ha väldefinierad felhantering om det saknas data. Minns att standardavvikelsen σ kan uppskattas genom provets standardavvikelse utan systematiskt fel (unbiased sample variance), s, som ges av s 2 = n ( x 2 x 2) (1) n 1 som alltså kräver minst två prover. Se bifogad javadoc-dokumentation för IllegalStateException som skall kastas om man försöker anropa en metod som behöver mer data än vad som matats in. /* Detta interface representerar en statistiksamlare som man kan mata med värden. * Därefter kan man få ut antalet värden, deras medelvärde och standardavvikelse samt * det största och minsta värdet. * * Om en metod inte kan returnera ett väldefinierat värde på grund av att det saknas * data så skall metoden kasta ett IllegalStateException med ett passande felmeddelande. */ public interface Statistics /* Lägg till ett mätvärde. */ void addvalue(double value); /* Returnerar antalet värden som lagts till. */ long getn(); /* Returnerar det högsta tillagda värdet. */ double getmax(); /* Returnerar medelvärdet av de tillagda värdena. */ double getmean(); /* Returnerar standardavvikelsen, beräknad som om de tillagda värdena är * ett stickprov. Den skall alltså inkludera faktorn n/(n-1) i variansen. */ double getstddev();

Lösningsförslag: public class MyStats implements Statistics // Dessa sätts till 0 i konstruktorn private long n; private double x, x2, max; public void addvalue(double v) x += v; x2 += v * v; if(n > 0) max = Math.max(max, v); else max = v; ++n; public long getn() return n; public double getmax() if(n < 1) throw new IllegalStateException("No data for getmax()!"); return max; public double getmean() if(n < 1) throw new IllegalStateException("No data for getmean()!"); return x / n; public double getstddev() if(n < 2) throw new IllegalStateException("No data for getstddev()!"); double var = (x2 - x * x / n) / (n - 1); return Math.sqrt(var);

Uppgift 3: Statistikprogram I föregående uppgift definierades ett interface för att samla statistik. Du skall nu skriva ett program som heter StatsProg och använder klassen MyStats som implementerar Statistics. När ditt program körs kommer det att få namnet på en eller flera filer som argument på kommandoraden. I dessa filer finns tal, och alla giltiga doubles) som går att hitta i filerna skall inkluderas i statistiken. För att öppna filerna och söka efter tal får du använda java.util.scanner som beskrivs på en bifogad nerkortad javadoc-sida. Läs dokumentationen noga. Det kan hända att en angiven fil saknas, och i så fall skall ett felmeddelande skrivas ut och programmet skall sedan genast avslutas. Det kan också hända att något ord i en fil inte är ett tal. I så fall skall det bara hoppas över, och resterande tal i filen skall ändå användas. Det kan vara bra att veta att FileNotFoundException finns i paketet java.io och ärver av IOException som ärver av Exception. Övriga exceptions som nämns i dokumentationen finns i java.lang eller java.util och ärver av RuntimeException. Programmet skall skriva ut det totala antalet tal, det största talet, medelvärdet och standardavvikelsen. Om någon av dessa storheter inte kan beräknas är det acceptabelt att programmet terminerar och skriver ut en stack trace som visar vad som gick fel du behöver alltså inte fånga en eventuell IllegalStateException. Lösningsförslag: import java.io.*; import java.util.*; public class StatsProg public static void main(string[] args) Statistics s = new MyStats(); for(int i = 0; i < args.length; ++i) try Scanner sc = new Scanner(new File(args[i])); while(sc.hasnext()) try double d = sc.nextdouble(); s.addvalue(d); catch(inputmismatchexception e) sc.next(); catch(ioexception e) System.out.println("failed to open file " + args[i]); return; System.out.println("n: " + s.getn()); System.out.println("max: " + s.getmax()); System.out.println("mean: " + s.getmean()); System.out.println("stddev: " + s.getstddev());

Uppgift 4: Strängar och stjärnor Text, grafik och spelplaner har en del gemensamt. Alla kan de bestå av ett rektangulärt rutnät vars innehåll behöver manipuleras på olika vis. Objekt av klassen String kan inte modifieras, enbart bytas ut. Om man vill göra många ändringar inuti en sträng är det därför lämpligt att tillfällig representera strängen som ett fält av tecken. En rektangel av w h värden kan representeras som ett tvådimensionellt fält, men den kan också representeras som ett endimensionellt fält av storlek wh, där värdet från koordinaterna (x,y) exempelvis lagras i element nummer yb+x. Detta blir ofta enklare. Ditt jobb är att skriva en metod static char[] starstring(string s) som tar in en sträng (t.ex. HEJ ) och returnerar ett fält som innehåller tecken motsvarande det som visas i rutan ovan. Den som anropar din metod kan t.ex. komma att skriva ut fältet med System.out.print. Om strängen har längden n så skall det bli 3n 3n tecken som visas. Varje rad måste dessutom sluta med en radbrytning (linefeed, \n). Vartannat tecken skall vara * i ett schackmönster med start på det första tecknet på den första raden. Strängen som skall visas skall gå längs diagonalen, centrerad som i exemplet. Metoden skall klara att hantera strängar av längd 1. String har en metod som kan vara bra att komma ihåg: char charat(int index); Lösningsförslag: public static char[] starstring(string s) int w = 3 * s.length(); char[] c = new char[w * (w + 1)]; // w hög, w+1 bred for(int y = 0; y < w; ++y) for(int x = 0; x < w; ++x) if(x % 2 == y % 2) // båda jämna eller båda udda? c[y*(w+1)+x] = * ; else c[y*(w+1)+x] = ; c[y*(w+1)+w] = \n ; for(int i = 0; i < s.length(); ++i) // Börja på (w+1) * s.length() + s.length() och lägg till // (w+1) + 1 för varje ny bokstav. c[(w+1 + 1) * (s.length() + i)] = s.charat(i); return c;