Lösningsförslag tentamen Programmeringsteknik I, ES, vt2010
Uppgift 1
public class StegRaknare {
private int antal;
private String ägare;
private int total;
public StegRaknare() {
this.antal=0;
this.ägare="NoName";
this.total=0;
}
public StegRaknare(String ä, int a, int t) {
this.antal=a;
this.ägare=ä;
this.total=t;
}
public void stega() {
this.antal++;
this.total++;
}
public void nollställ() {
this.antal=0;
}
public String toString() {
return "Ägare="+this.ägare + ". Antal steg="+this.antal + ". Totalt antal steg="+this.total;
}
} // Slut klassen StegRaknare
// En klass med en mainmetod som testar klassen StegRaknare
public class Test_StegRaknare
public static void main( String[] arg) {
StegRaknare s = new StegRaknare("Kim",0,0);
for (int i=1; i<=1000; i++) {
s.stega();
}
System.out.println(s);
s.nollställ();
System.out.println(s);
for (int i=1; i<=500; i++) {
s.stega();
}
System.out.println(s);
} // Slut main-metoden
} // Slut klassen Test_StegRaknare
Uppgift 2
a-uppgiften
public static void main(String[] args) {
EnKlass e = new EnKlass();
int[] x = {4, 5, 6};
int tal = 2;
e.metodA(tal); // (1)
// Sats (2) är fel: x[3] existerar inte, ty index är 0-2 i arrayen x
e.metodA(x[3]); // (2)
e.metodA(x[tal]); // (3)
// Sats (4) är fel: metodA kan inte ha en array som parameter
e.metodA(x); // (4)
// Sats (5) är fel: metodA returnerar inget, dvs kan inte ingå i en addition
int y = e.metodA(2) + 7; // (5)
int z = e.metodB() + 8; // (6)
} // main-metoden
b-uppgiften
Utskriften blir:
x=0.0 y=0.0
x=10.0 y=30.0
c-uppgiften
public class SpecialPartikel extends Partikel {
private double vikt;
public SpecialPartikel (double x, double y, double r, double v) {
super(x,y,r);
this.vikt=v;
}
} // Slut klassen SpecialPartikel
Uppgift 3
public class Aktie {
// Aktiens namn
private String id;
// Array med kapacitet på 10000 dagars kurser
private double [] kurs = new double[10000];
// räknare för hur många dagars kurser som är lagrade i arrayen
private int dagar;
public Aktie () {
this.id="NoName";
this.dagar=0;
}
public Aktie (String s, double k) {
this.id=s; // Sätt aktiens namn
this.kurs[0]=k; // Lagra första kursen på index noll i arrayen
this.dagar=1; // Sätt räknaren
}
// Parametern k är den nya kursen
public void nyKurs(double k) {
// Om arrayen räcker till...
if (kurs.length>this.dagar) {
this.kurs[this.dagar]=k; // Lagra kursen k i arrayen
this.dagar++; // Uppdatera räknaren
}
}
public double max () {
// Hypotesen är att maxvärdet finns på index noll
double max=this.kurs[0];
// Loopa igenom alla lagrade kurser och uppdatera värdet på max
for (int i=1; imax) {
max=this.kurs[i];
}
}
return max;
}
public void skrivUt() {
// Loopa igenom alla lagrade kurser
for (int i=0; i
Uppgift 4
a-uppgiften
public boolean kollision(Partikel other) {
double dx = this.x-other.x; // Skillnad i x-led
double dy = this.x-other.y; // Skillnad i y-led
double dist = Math.sqrt(dx*dx + dy*dy); // Avstånder
if (dist< this.r + other.r) {
return true;
}
else {
return false;
}
}
b-uppgiften
public static void main (String[] arg) {
// Skapa en array med kapacitet för 50 Partikel-objket
Partikel [] p = new Partikel[50];
for (int i=1; i<=50; i++) {
// Slumpa position och radie
double x = Math.random()*100.0;
double y = Math.random()*100.0;
double r = 1.0+Math.random()*5.0;
p[i-1] = new Partikel(x,y,r); // Skapa Partikel-objekt på index i-1
} // for i
int antal=0; // Räknare för antalet krockar
// En dubbelloop för att få till alla kombinationer av krockar
// mellan partikel i och partikel j så att
// i=0: j=1...49
// i=1: j=2...49
// i=2: j=3...49
// ...
// i=47: j=48...49
// i=48: j=49...49
for (int i=0; i<49; i++) {
for (int j=i+1; j<50; j++) {
if ( p[i].kollision(p[j])) {
antal++;
}
} // for j
} // for i
System.out.println(antal);
} // Slut main
Slut lösningsförslag tentamen Programmeringsteknik I, ES, vt2010