• No results found

Tentamen i Programmeringsteknik MN

N/A
N/A
Protected

Academic year: 2022

Share "Tentamen i Programmeringsteknik MN"

Copied!
9
0
0

Loading.... (view fulltext now)

Full text

(1)

Tentamen i

Programmeringsteknik MN1 001204

Skrivtid : 14.00-19.00

Hjälpmedel : Skansholm, Java direkt eller motsvarande Pärt-Enander mfl , Anv. handledning för Matlab.

Matlab-material utdelat på lektion.

Tentamen är uppdelad i två delar. Del I består av fem uppgifter och del II av tre uppgifter. Varje uppgift kan ge upp till 5 poäng.

För att bli godkänd på tentamen krävs minst 17 av 25 poäng på del I. Eventuella poäng på del II tillgodoräknas inte.

För att bli väl godkänd på tentamen krävs dels minst 17 poäng på del I, dels minst 8 poäng på del II.

Programmen skall vara skriva i Java om inte annat anges.

Programmen skall vara skriva med vettig layout och kommenterade!

Skriv varje uppgift på nytt papper. Skriv inte på baksidan av papperet. Lägg uppgifterna i rätt ordning. Skriv namn på alla papper. Skriv INTE med röd färg!

Läs uppgiften noga så du vet vad som skall göras. Gör inte mer än det som efterfrågas. Om du inte förstår en uppgift eller om du är tveksam hur den ska tolkas, fråga någon av lärarna.

Om inget annat anges får du använda klasser ut paketen java.lang, lava.text, java.awt, java.awt.event, java.io, java.util, java.applet samt Skansholms extra.

Resultatet anslås på anslagstavla på plan 1(utanför 2103) och på kursens hem- sida om du kryssar i aktuell ruta på försättsbladet. Endast godkända resultat anslås.

Lösningsförslag kommer att finnas på kursens hemsida.

Lycka till!

(2)

Del I

Uppgift 1

Efter att du klarat denna kurs inleder du en ny karriär som bilhandlare. Du vill då naturligtvis skapa ett datoriserat register över ditt billager. En första åtgärd är att skapa en bilklass som beskriver en bil. Den ser ut som (saknade delar mar- keras med ... nedan, det är inte en del av koden):

public class Bil {

private String bilmärke; // vilken sorts bil

private String modell; // modellnamn

private int årsmodell; // årsmodell

private String registeringnummer; //

private int pris; // försäljningspris

// konstruktorer public Bil() {...}

public Bil(String märke, String mod, int år, String reg, int p) {...}

// hämta försäljningspriset public int bilpris() {...}

// skriv ut

public void skrivut() {...}

// och så vidare

public static void main(String [] args) {

Bil b = new Bil(“Ford”, “Anglia”, 1959, “ABC456”, 5000);

b.skrivut():

int p = b.bilpris();

System.out.println(“Bilen kostar “ + p + “ kronor”);

} }

Dina uppgifter är att:

a) Skriva metoden bilpris i klassen ovan. Den ska lämna ut bilens pris. Se mainmetoden ovan för exempel på hur den ska fungera.

(1p)

(3)

b) Skriva den konstruktor som har fem parametrar i vår deklaration.

Den skall fylla i bilens egenskaper med hjälp av de parametrar du har. Se main-metoden för exempel på användning.

(1p) c) Skriva metoden skrivut i klassen. Den skall skriva ut bilens attri-

but (tillståndsvariabler) på något sätt på datorns monitor. Se main- metoden för exempel på anrop.

(1p) d) Du vill nu skapa en klass Lager som beskriver alla bilar du har.

Visa vilka instansvariabler en sådan klass kan innehålla. In- stansvariabler är de variabler som deklareras i klassen och som är gemensamma för alla metoder, exempelvis bilmärke i bilklassen. Du behöver inte skriva några metoder.

(1p) e) Antag att du (exempelvis i main) vill kunna göra

Lager bilpark = new Lager(100); // skapar lager med 100 platser // här fylls lagret med bilar på något vis.

int värde = bilpark.totalvärde(); // värdet för alla bilar Skriv metoden totalvärde i klassen Lager som summerar priset för alla bilar i lagret. Bygg på det du svarat i deluppgift d.

(1p) Uppgift 2

Ett litet enkel bankkontor kan fungera enligt nedanstående beskrivning public class Bank {

private String kund; // kundens namn private int kontonr; // kontonummer private int saldo; // saldo på kontot public Bank(String namn, int konto) {

kund = namn;

kontonr = konto;

saldo = 0;

} // konstruktor

public void sättin(int summa) {...} // sätt in pengar

(4)

public void taut(int summa) {...} // ta ut pengar public void växla(int summa) {...} // växla pengar }

Vi tänker oss att växel lämnas i valörerna 100, 50, 20, 10, 5 och 1 krona på sånt sätt att det blir så höga valörer som möjigt. Exempelvis skall summan 273 kronor väx- las till 2x100, 1x50, 1x20 och 3x1 krona

Uppgifter:

a) Skriv metoderna sättin och taut som ändrar saldot enligt givna data.

(1p) b) Skriv metoden växla som växlar given summa enligt reglerna

ovan. Metoden ska skriva ut resultatet på skärmen.

Tips: Heltalsdivision och restoperatorn (%) kanske kan användas.

(3p) c) Hur ska växla ändras så att den istället för att skriva ut resultatet

returnerar resultatet till den som anropade den?

(1p)

Uppgift 3

Du har ett Javaprogram som har åstadkommit följande grafiska gränsnitt för en färgblandare.

(5)

Den fungerar så att reglagens läge ger den färgblandning som visas i den tomma rutan till höger.

a) Som du ser är detta en applet. Vad skiljer en applet från ett van- ligt program?

(1p) b) Beskriv vilka komponenter som har använts för att bygga upp

detta. Rita och berätta, du behöver inte skriva någon Javakod.

Ange också vilka LayoutManagers som använts.

Notera att området längst ned med texten “Applet started” och området i överkanten med texten “Applet” inte hör till komponen- ten utan de har lagts dit av appletviewern.

(2p) c) Skriv den lyssnare som behövs för att en förändring av något

reglage ska ge en ny färg i rutan. Du behöver bara skriva själva lyssnarmetoden, du får själv döpa de grafiska komponenter som du använder i metoden.

(2p) Uppgift 4

I denna uppgift ska vi använda en personklass, den ser ut som:

public class Person {

private String namn; // Personens namn private String adress; // Personens adress private int födelseår; // Personens födelseår private int inkomst; // Personens inkomst public Person(String n, String a, int år, int ink) {

namn = n;

adress = a;

födelseår = år;

inkomst = ink;

}

public boolean equals(Person p) {...}

}

Din uppgift är att:

a) Skriva en main-metod i klassen som skapar två personer m. h. a. given konstruktor och som jämför dem m. h. a. equals-metoden (se deluppgift b) i klassen. Resultatet av jämförelsen skall skrivas ut.

(2p)

(6)

b) Skriv metoden equals i klassen. Den skall jämföra om två personer är lika.

Vi definierar likhet så att två personer är lika om de har exakt samma namn, övriga attribut spelar ingen roll.

Du får inte använda metoden equals ur klassen String utan du skall

jämföra namnen tecken för tecken. Om namnen är olika långa är de inte lika.

Tips: Det i:e tecknet i strängen s kan hämtas med metoden s.charAt(i).

(3p) Uppgift 5

November månad år 2000 utmärks av ovanligt mycket regn och av ovanligt höga temperaturer. Den lokala avdelningen av SMHI vill ha lite statistik över dessa fenomen. Vi har en lista med mätvärden för nederbörd och medeltempera- tur för varje dygn, totalt 30 x 2 mätvärden. För att lagra dessa skapar vi en klass Väder:

public class Väder {

private double [] temp = new double[30]; // temp i grader

private double [] nederbörd = new double[30]; // nederbörd i millimeter public Väder() {...}

public void läsin() {

// läs in temperatur och nederbörd för varje dag och lägg på // plats. Du skriver in värdena på datorns tangentbord }

public double max_temp() {

// returnera det största av alla temperaturvärden } }

Dina uppgifter är:

a) Skriv metoden max_temp som letar upp det högsta temperaturvärdet bland de 30 och som returnerar det.

(2p) b) Skriv metoden läsin som frågar efter alla temperatur och nederbörds-

värden och som lägger in dem på plats.

(1p) c) Antag att du lagrar värdena i en fil men namnet Väder.dat, två värden

(temp och nederbörd) per rad, trettio rader. Skriv om metoden läsin så att den läser in data från denna fil istället för från tangentbordet.

(2p)

(7)

Del II

Uppgift 6

Antag att du har en klass som innehåller ett antal talpar som representerar punk- ter i ett x-y system. Varje talpar representeras som ett objekt av typen Point, och alla talparen blir då en array av Point-objekt.

public class Koordinater { private Point [] talpar;

private int antal; // antal talpar lagrade public Koordinater() {...} // standardkonstruktor public Koordinater(int n){...} // plats för n talpar public void läggin(Point p) {...} // Lägg in ett talpar public void sortera() {...} // sortera talparen // osv

}

Din uppgift är att skriva samtliga metoder deklarerade ovan. Konstruktorerna skall skapa plats för ett antal talpar. Metoden läggin skall lägga in ett talpar utan hänsyn till ordning, om det är fullt skall arrayen utökas. Metoden sortera skall sor- tera talparen i stigande ordning med avseende på x-koordinaten.

Klassen Point har två publika instansvariabler, x och y.

Eftersom klassen Point inte implementerar interfacet Comparable så fungerar ingen av de i Java inbyggda sorteringsmetoderna, exempelvis java.util.Arrays.sort.

Du måste alltså skriva en egen!

Uppgift 7

Du har följande grafiska program som fungerar som en fickräknare. Det är upp- byggt av ett antal knappar och ett textfält (ett ExtendedTextField).

(8)

Den ska fungera så att man först skriver in ett tal i displayen, trycker på en opera- tor (+, -, * eller /), varpå talet försvinner från displayen och ett nytt tal kan skrivas in. Därefter trycker man på resultatknappen (=) och operationens resultat visas på displayen Exempelvis

Tryck på 5 1 2, talet 512 ska då synas på displayen Tryck på +, då skall displayen rensas

Tryck på 6 4, talet 64 ska då synas på displayen Tryck på =, då skall talet 576 visas

Din uppgift är att skriva en lyssnare som kan utföra detta. Det räcker om du kan hantera operationen addition (+) med enbart positiva tal. Du får anta (men för- klara dina val) namn på de grafiska komponenterna. Du måste också förklara vilka instansvariabler du använder.

Uppgift 8

Antag att du har följande klass deklarerad:

public class Matris {

private double [][] matris;

private int rader; // antal rader private int kolonner; // antal kolonner

public Matris() {...} // standardkonstruktor public Matris(int r, int k) {...} // konstruktor med storlek

public boolean symmetrisk() {...} // testa om symmetrisk public Matris transponera() {...} // transponera

public Matris addera(Matris b) {...} // addera två matriser public Matris subtrahera(Matris b) {...} // subtrahera två matriser public Matris multiplicera(Matris b) {...} // multiplicera -”-

}

(9)

Skriv metoderna symmetrisk och transponera samt de båda konstruktorerna.

Att en matris är symmetrisk innebär dels att den är kvadratisk (lika många rader som kolonner), dels att den i:e raden är lika med den i:e kolonnen för alla i, eller alternativt uttryckt, matrisen m är symmetrisk om elementen m[i][j] och m[j][i] är lika för alla i och j.

Exempelvis är matrisen nedan symmetrisk:

Att transponera en matris innebär att spegla den. Det betyder att raderna blir kolonner och kolonnerna blir rader. Om du har en matris med m rader och n kolonner så ska alltså resultatet bli en matris med n rader och m kolonner.

Nedan finns en 3x2 matris och dess transponat som är en 2x3 matris 3 – 121

1

– 2 8

12 8 2

2 1– 8 5 12 3

2 8 12 1 – 5 3

References

Related documents

(KVK - an agricultural research institute under the Department of Agricultural Research and Education) and Swarnajayanti Gram Swarozgar Yojana (SGSY - a government

It was interesting for us now six years later to re-use this actual material in a new context as the work Koordi- nater / Coordinates is both a performance in itself, but also

The result from the empirical study conducted in Tanzania reveals that Public-Private Partnerships were quite successful to facilitate empowerment among poor people

Board dummy is a dummy variable taking the value of 1 if the lead public investor (in case of public investment) or the lead VC investor (in case the company is solely backed

The participants of this research are 44 teachers 21 from public and 23 from private , 471 students of all grad six from both private and public schools and

Sustainable Småland and Sustainable Sweden Southeast both placed emphasis on the collaboration between the three sectors of public, private and academia, where the latter was seen

In fact, the industry response to the COVID-19 crisis has been overwhelming with numerous initiatives, with over 250 public-private data collaboratives worldwide to improve

BASER OCH KOORDINATER FÖR VEKTORER SOM LIGGER PÅ EN RÄT LINJE Vi betraktar vektorer som ligger på en rät linje L ( eller är parallella med L).. BASER OCH KOORDINATER FÖR VEKTORER