Facit till uppgifter

Uppgifter

Dessa uppgifter borde du kunna lösa.

  1. En metod som beräkna kvadraten av ett tal.
  2. En metod som beräkna upphöjd. Vad är in-parameter, vad borde returneras? Se till att den kan negativa exponenter.
  3. En metod som beräkna minsta delaren. int md = minstaDelare(391) borde returnera 17. Ska returnera -1 om det är ett primtal.
  4. 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);
  1. 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