Facit till uppgifter
Uppgifter
Dessa uppgifter borde du kunna lösa.
- En metod som beräkna kvadraten av ett tal.
- En metod som beräkna upphöjd. Vad är in-parameter, vad borde returneras? Se till att den kan negativa exponenter.
- En metod som beräkna minsta delaren. int md = minstaDelare(391) borde returnera 17. Ska returnera -1 om det är ett primtal.
- Två tärningar. Ett program som simulera kast av två tärningar och notera summan (2 – 12). Vilken summa kommer oftast efter 10.000 kast? Skriv i detta samband en metod som har fältet som in-parameter och returnera största elementet. Till exempel kunde den anropas så här:
int[] minaTal = new int[13];
// kod som fyller fältet enligt uppgiften
int max maxElementInArray(minaTal);
- En metod returnera true eller false beroende om ett fält innehåller ett visst element, ett exempel för anropet:
boolean finnsMed = checkForElement(minaTal, ettVisstTal)
if(finnsMed) { …
Lösningar
//Variabler
import java.util.Random; // behövs för uppgift 4 och 5
void setup() {
int x = 12;
float res = kvadratAvEttTal(x); // anrop uppg 1
println("kvadrat av " + x + " är " + res);
res = upphojd(x, 5); // anrop uppg 2
println(x + " upphöjd 5 är " + res);
x = 391;
int md = minstaDelare(x); // anrop uppg 3
println("minsta delare av " + x + " är " + md);
// 10.000 tärningskast
int[] utfall = new int[13]; // vi behöver 2 ...12. 0,1 försumras
Random rnd = new Random();
int t1, t2;
for (int i = 0; i < 10000; i++) {
t1 = rnd.nextInt(6)+1;
t2 = rnd.nextInt(6)+1;
utfall[t1+t2]++;
}
println(utfall);
int max = maxElementInArray(utfall); // anrop uppg 4
println("Ögonsumma " + max + " kommer oftast!");
int[] slumpfelt = fyllFaltetMedSlumptal(100, 1, 10000);
if ( checkForElement(slumpfelt, 1337) ) { // anrop direkt i if-satsen
println("1337 finns med i fältet!");
} else {
println("1337 finns tyvärr inte med i fältet!");
}
}
// === metoddefinition uppgift 1 ===============================
float kvadratAvEttTal(float a) {
return a*a;
}
// === metoddefinition Uppgift 2 ===============================
float upphojd(float bas, int expo) {
float svar = bas;
for (int i = 1; i< expo; i ++) {
svar = svar * bas;
}
if ( expo < 0 ) svar = 1 / svar; //
if (expo == 0 ) svar = 1;
return svar;
}
// === metoddefinition Uppgift 3 ===============================
int minstaDelare(int tal) {
int svar = 1;
for (int d = tal; d > 1; d--) {
if (tal % d == 0) svar = d;
}
return svar;
}
// === metoddefinition Uppgift 4 ===============================
int maxElementInArray(int[] utfall) {
int maxPlats = 0;
for (int i = 1; i < utfall.length; i++) {
if (utfall[maxPlats] < utfall[i]) {
maxPlats = i;
}
}
return maxPlats;
}
// === metoddefinition Uppgift 5 ===============================
boolean checkForElement(int[] f, int someNumber) {
boolean svar = false;
for (int i = 0; i < f.length; i++) {
if(f[i] == someNumber) svar = true;
break;
}
return svar;
}
// === hjälpmetod ==============================================
int[] fyllFaltetMedSlumptal(int n, int min, int max) {
Random rnd = new Random();
int[] svar = new int[n];
int i = 0;
while ( i < svar.length ) {
int slmp = rnd.nextInt(max - min) + min; // generera slumptal min .... max och spara i slmp
svar[i] = slmp; // och spara i slmp
i++;
}
return svar;
} // end fyllFaltetMedSlumptal