Du er her: UiO > 中国竞猜网_中国足彩网-足球推荐 > Emner > Matematikk og naturvitenskap > Informatikk > INF1000 > h08 > ukeoppgaver >

L?sningsforslag ukeoppg. 4:  15. - 18. sep (INF1000 - H?st 2008)

Teori for Oblig 2: Mer om l?kker og arrayer (kap. 4 - 5); og metoder (kap. 7.1 - 7.9)
NB! Som tidligere sagt, s? er det ingen grunn til bekymring hvis l?sningene dine ikke ligner p? de du ser her!  Det er typisk for programmering at samme oppgave kan l?ses p? mange vidt forskjellige m?ter, og alle disse er ok p? INF1000 s? lenge svaret er riktig.
Husk ogs? at du f?r mest utbytte av l?sningsforslagene etter at du har fors?kt ? l?se oppgaven selv.  Du kan ogs? finne l?sning p? noen av disse oppgavene i l?rebokens hjemmeside: www.universitetsforlaget.no/java.

M?l
F? ?velse i teorien som trengs for ? l?se Oblig 2.  Hovedtema i obligen er l?kker og arrayer, samt metoder uten parametre; og f?lgende oppgaver gir nyttig trening i dette slik at du blir bedre i stand til ? l?se obligen.

Oppgaver til teoritimen

  1. Enkle l?kker med tall:
    (a) Lag et program med en l?kke som teller ned fra 10 til 0.  Bruk en teller-variabel med startverdi 10 og redusér den med 1 i hver gjennomgang av l?kka.  Utskriften skal bli:
     ...10 ...9 ...8 ...7 ...6 ...5 ...4 ...3 ...2 ...1 ...0
    
    class Bombe {
       public static void main(String[] args) {
    
           for (int teller = 10; teller >= 0; teller--) {
    	   System.out.print(" ..." + teller);
           }
           System.out.println();
       }
    }
    

    (b) Lag en l?kke som skriver ut de 10 f?rste potensene av 2 (2, 2×2, 2×2×2, osv).  Bruk en teller-variabel "i" som teller de 10 gangene, og en variabel "potens2" med startverdi 1 og som ganges med 2 i hver gjennomgang av l?kka og skrives ut.  Utskriften skal bli:
    2  4  8  16  32  64  128  256  512  1024
    
    class PowersOf2 {
       public static void main(String[] args) {
    
           int potens2 = 1;
           for (int i = 0; i < 10; i++) {
    	   potens2 = potens2 * 2;
    	   System.out.print(potens2 + "  ");
           }
           System.out.println();
       }
    }
    

    (c) Lag to nestede for-l?kker som gir f?lgende utskrift.  Det skal bare skrives ut ett tall av gangen, som skal v?re: verdien til telleren i den ytre l?kka (som g?r fra 1 til 3) ganget med telleren i den indre l?kka, etterfulgt av mellomrom.
    1  2  3  4
    2  4  6  8
    3  6  9  12
    
    class DobbelLoop {
       public static void main(String[] args) {
    
           int produkt = 1;
           for (int i = 1; i <= 3; i++) {
    	   for (int j = 1; j <= 4; j++) {
    	       produkt = i * j;
    	       System.out.print(produkt + "  ");
    	   }
    	   System.out.println();
           }
       }
    }
    


  2. L?kker: Hva blir skrevet ut?
    Avgj?r uten ? bruke datamaskin hva som blir skrevet ut n?r f?lgende programsetninger utf?res.
    // (a)
           int a = 10;
           while (a < 20) {
               a += 4;
           }
           System.out.println("a = " + a);
    
    
    a = 22
    // (b)
           int sum = 0;
           for (int b = 1; b < 6; b += 2) {
               sum += b;
           }
           System.out.println("sum = " + sum);
    
    
    sum = 9
    
    
    // (c)
           int produkt = 1;
           for (int c = 1; c < 4; c++) {
               produkt = produkt * c;
    	   System.out.println(produkt);
           }
    
    1
    2
    6
    // (d)
           for (int d = 3; d >= 1; d--) {
               for (int e = 1; e <= 3; e++) {
                   System.out.println(d + e);
               }
           }
    
    4
    5
    6
    3
    4
    5
    2
    3
    4
    // (e)
           int teller = 0;
           for (int ytre = 0; ytre < 3; ytre++) {
               teller++;
               for (int indre = 0; indre < 3; indre++) {   
                   teller++;
               }
           }
           System.out.println(teller);
    
    12


  3. Arrayer med tall:  (Oblig-relevant!)
    (a) Lag en l?kke som setter inn de 10 f?rste oddetall i f?lgende array.  La telleren i l?kka g? fra 0 til 9, og i hver gjennomgang av l?kka setter du inn én verdi i arrayen, beregnet som telleren ganget med 2 pluss 1.
    int[] oddetall = new int[10];
    
    class Oddetall {
        public static void main(String[] args) {
    	int[] oddetall = new int[10];
    	for (int i = 0; i < 10; i++) {
    	    oddetall[i] = i * 2 + 1;
    	    System.out.println(oddetall[i]);
    	}
        }
    }
    

    (b) Produkt av verdier != 0: Anta at arrayen verdier[] og variabelen produkt er deklarert som vist under.  Lag en l?kke som g?r gjennom verdiene i arrayen, og hver gang den kommer til en verdi som ikke er 0 ganger du verdien med produkt og lagrer resultatet i samme variabel (produkt).  Utskriften til slutt skal v?re 240 (dvs. 2×4×10×3).
    int[] verdier = { 0, 2, 4, 0, 0, 10, 0, 3 };
    int produkt = 1;
    // L?kke:
    for (                                       ) {
    
    }
    System.out.println(produkt);
    
    class VerdierIkke0 {
        public static void main(String[] args) {
    
    	int[] verdier = { 0, 2, 4, 0, 0, 10, 0, 3 };
    	int produkt = 1;
    	// L?kke:
    	for (int i = 0; i < verdier.length; i++) {
    	    if (verdier[i] != 0) {
    		produkt = produkt * verdier[i];
    	    }
    	}
    	System.out.println(produkt);
        }
    }
    

    (c) 2D-array: Lag to nestede for-l?kker som setter inn f?lgende verdier i en 2D-array deklarert som: int[][] tabell = new int[3][4];, slik at tabell[0][0] blir 1, tabell[2][3] blir 12, osv.  Husk at indeksene i arrayen starter fra 0, ikke 1.
    1  2  3  4
    2  4  6  8
    3  6  9  12
    
    class Array2D {
       public static void main(String[] args) {
    
           int[][] tabell = new int[3][4];
    
           for (int i = 0; i < 3; i++) {
    	   for (int j = 0; j < 4; j++) {
    	       tabell[i][j] = (i + 1) * (j + 1);
    	       System.out.print(tabell[i][j] + "  ");
    	   }
    	   System.out.println();
           }
       }
    }
    

    (d) Sum i kolonner: Skriv programkode som beregner summen av verdiene i hver kolonne i ovennevnte array og skriver summene ut (6 12 18 24).  Dette ligner p? en deloppgave i oblig 2!
           for (int kol = 0; kol < 4; kol++) {
    	   int sumkol = 0;
    	   for (int rad = 0; rad < 3; rad++) {
    	       // ...(fyll inn resten)...
    	   }
    	   // ...(fyll inn resten)...
           }
           // ...(fyll inn resten)...
    


  4. Array med String-er: Hva blir skrevet ut?  Og hvorfor?  (Oblig-relevant!)
    class NavneArray {
       public static void main(String[] args) {
    
    	String[] navn = { "Anne", "Kari", "Ole", null };
    
    // (a)
    	System.out.println(navn[1] + navn[navn.length/2]);
    
    
    KariOle
    
    
    // (b)
    	for (int i = 0; i < navn.length; i++) {
                // Testen "!= null" sikrer at neste ledd ikke blir null.equals(..)
    	    if (navn[i] != null
                    && (navn[i].equals("Ole") || navn[i].equals("Anne")) ) {
    		System.out.println(i);
    	    }
    	}
    
    
    
    0
    2
    // (c)
    	int indeks = 0;
    	boolean funnet = false;
    	while (indeks < 4 && !funnet) {
    	    if (navn[indeks].equals("Kari")) {
    		funnet = true;
    	    }
                indeks++;
    	}
    	System.out.println(indeks);
    
    
    2
    
    
    // (d)
    	String[] andreNavn = { "Per", "Anne", "Ole" };
    	for (int i = 0; i < 4; i++) {
    	    for (int j = 0; j < 3; j++) {
                    // Testen "!= null" sikrer at andre ledd ikke blir null.equals(..)   
    		if (navn[i] != null && navn[i].equals(andreNavn[j])) {
    		    System.out.println(i + " " + j);
    		}
    	    }
    	}
       }
    }
    
    0 1
    2 2


  5. inLine() og inChar():  (Oblig-relevant!)
    Lag et program som sp?r bruker etter et navn.  Programmet leser navnet inn vha. inLine();, og "fyller" s? skjermen med navnet ved ? skrive det ut 100 ganger.  Videre skal programmet sp?rre bruker om hun vil gi et nytt navn (j/n).  Svaret leses n? med .inChar("\n\r"), og hvis det er 'j' gjentas hele prosessen; hvis svaret er 'n' avsluttes programmet.  Kj?reeksempel:
    Skriv et navn: Ola Nordmann
    Ola Nordmann Ola Nordmann Ola Nordmann Ola Nordmann Ola Nordmann O
    la Nordmann Ola Nordmann Ola Nordmann Ola Nordmann Ola Nordmann Ol
    a Nordmann Ola Nordmann Ola Nordmann Ola Nordmann Ola  ...osv...
    Gi nytt navn? (j/n): j
    Skriv et navn:  
    
    import easyIO.*;
    class Navn100 {
       public static void main(String[] args) {
           In tast = new In();
           Out skjerm = new Out();
    
           char giNyttNavn = 'j'; // Startverdi
           while (giNyttNavn != 'n') {
    
    	   skjerm.out("Skriv et navn: ");
    	   String navn = tast.inLine();
    
    	   for (int i = 0; i < 100; i++) {
    	       skjerm.out(navn + " ");
    	   }
    	   skjerm.outln();
    
    	   skjerm.out("Gi nytt navn? (j/n): ");
    	   giNyttNavn = tast.inChar("\n\r");
           }
       }
    }
    
    Tips til oblig 2: Legg merke til det som st?r i parentesene til .inChar("\n\r").  Dette angir at inChar skal hoppe over evt. linjeskift (\n) eller vognretur (\r) som bruker tastet inn sist, og i stedet lese inn en vanlig bokstav fra tastatur, f.eks. 'j'.  Det samme b?r du gj?re i deloppgave 1 (c) i oblig 2.


  6. Metoder: (basert p? forelesningen uke 4, lysark side 29)  (Oblig-relevant!)
    (a) Endre strukturen til programmet fra punkt 5. over slik at det f?lger malen fra oblig 2 (vist i skissen nedenfor, og i eksemplene fra forelesningen for uke 4), dvs. med en liten kontrollklasse ?verst, etterfulgt av en egen klasse for metodene.  Hele programmet med begge klassene lagres i én fil, kalt Navn100.java (dvs. navnet til klassen med metoden main()).  Lag bare én metode i hjelpeklassen, kalt ordrel?kke(), som gj?r alt som st?r i punkt 5. ovenfor.
    import easyIO.*;
    
    class Navn100 {
        public static void main(String[] args) {
            HjelpeklasseNavn100 hj = new HjelpeklasseNavn100();
            hj.ordrel?kke(); // Kj?rer metoden ordrel?kke() i hjelpeklassen
        }
    }
    class HjelpeklasseNavn100 {
        // Klargj?ring for innlesing/utskrift, gjelder for hele klassen:
        In tast = new In();
        Out skjerm = new Out();
    
        String navn;
    
        void ordrel?kke() {
            char giNyttNavn = 'j'; // Startverdi
    
            while (giNyttNavn != 'n') {
                // - Be bruker taste et navn og les det inn med .inLine();
    	    skjerm.out("Skriv et navn: ");
    	    navn = tast.inLine();
    
                // - Utskrift av navn 100 ganger.
    	    for (int i = 0; i < 100; i++) {
    		skjerm.out(navn + " ");
    	    }
    	    skjerm.outln();
    
                // - Sp?r om bruker vil "Gi nytt navn? (j/n):", og .inChar("\n\r"):
    	    skjerm.out("Gi nytt navn? (j/n): ");
    	    giNyttNavn = tast.inChar("\n\r");
            }
        }
    }
    
    Mer info: Grunnen til at vi skriver programmet p? denne m?ten med to klasser vil bli klarere n?r vi kommer til kapittel 8, men har sammenheng med at vi ?nsker ? lage gode "objektorienterte" program der vi jobber med "objekter".  I denne skissen er det fem pekere til objekter: args[], hj, tast, skjerm, og navn.

    (b) Flere metoder: Endre programmet slik at koden som skriver ut navnet 100 ganger flyttes til en egen metode kalt utskrift().  Husk ? legge inn et kall p? metoden p? det stedet i programmet du flyttet koden fra.
    import easyIO.*;
    class Navn100 {
        public static void main(String[] args) {
            HjelpeklasseNavn100 hj = new HjelpeklasseNavn100();
            hj.ordrel?kke();
        }
    }
    class HjelpeklasseNavn100 {
        In tast = new In();
        Out skjerm = new Out();
    
        String navn;
    
        void ordrel?kke() {
            char giNyttNavn = 'j';
            while (giNyttNavn != 'n') {
    	    // Be bruker taste et navn og les det inn med .inLine():
    	    skjerm.out("Skriv et navn: ");
    	    navn = tast.inLine();
    
                // Kaller metoden utskrift():
    	    utskrift();
    
                // - Sp?r om bruker vil "Gi nytt navn? (j/n):"
    	    skjerm.out("Gi nytt navn? (j/n): ");
    	    giNyttNavn = tast.inChar("\n\r");
            }
        }
        void utskrift() {
    	for (int i = 0; i < 100; i++) {
    	    skjerm.out(navn + " ");
    	}
    	skjerm.outln();
        }
    }
    

    (c) Inn-parameter: Endre programmet slik at String-variabelen navn n? deklareres inne i metoden ordrel?kke() (og ikke "globalt" ? dvs. f?r alle metodene, som vist ovenfor), og slik at verdien av denne variabelen blir overf?rt til metoden utskrift(..) vha. et argument i kallet.  Endre ogs? begynnelsen av metoden utskrift(..) slik at den tar imot argumentet vha. parameteren String navn, slik:  void utskrift(String navn) {
    import easyIO.*;
    class Navn100 {
        public static void main(String[] args) {
            HjelpeklasseNavn100 hj = new HjelpeklasseNavn100();
            hj.ordrel?kke();
        }
    }
    class HjelpeklasseNavn100 {
        In tast = new In();
        Out skjerm = new Out();
    
        void ordrel?kke() {
            char giNyttNavn = 'j';
            while (giNyttNavn != 'n') {
    	    // Be bruker taste et navn og les det inn med .inLine():
    	    skjerm.out("Skriv et navn: ");
    	    String navn = tast.inLine();
    
                // Kaller metoden utskrift():
    	    utskrift(navn);
    
                // - Sp?r om bruker vil "Gi nytt navn? (j/n):"
    	    skjerm.out("Gi nytt navn? (j/n): ");
    	    giNyttNavn = tast.inChar("\n\r");
            }
        }
        void utskrift(String navn) {
    	for (int i = 0; i < 100; i++) {
    	    skjerm.out(navn + " ");
    	}
    	skjerm.outln();
        }
    }
    


  7. Metode med inn og ut-parametre: Oppgave 2 i kap. 7 (side 133)
    Lag en metode som regner ut hypotenusen c i en rettvinklet trekant n?r vi g?r ut fra Pytagoras formel: c2 = a2 + b2 der a og b er lengden p? katetene ? de to andre sidene i trekanten.  Vi bruker a og b som parametre til metoden.  Du trenger da ? kalle kvadratrotmetoden i Math.sqrt(double_verdi) i den metoden du lager.  Returner verdien c som verdien p? metoden.  Test metoden ved ? kalle den i en dobbel for-l?kke for alle kombinasjoner av a og b med heltallsverdiene fra 1.0 til og med 6.0, og skriv ut svarene.
    double finnHypotenus(double a, double b) {
        ...
    
        return c;
    }
    
    Tips: Kallet p? metoden kan se slik ut:  double c = finnHypotenus(a, b); 
    class Hypotenus {
        public static void main(String[] args) {
    	HypotenusMetoder h = new HypotenusMetoder();
    	h.start();
        }
    }
    class HypotenusMetoder {
        void start() {
    	for (double a = 1; a <= 6; a++) {
    	    for (double b = 1; b <= 6; b++) {
    		double c = finnHypotenus(a, b);
    		System.out.printf("a=%.1f, b=%.1f  gir c=%.3f\n", a, b, c);
    	    }
    	}
        }
    
        double finnHypotenus(double a, double b) {
    	double c = Math.sqrt(a * a + b * b);
    	return c;
        }
    }
    
    KJ?REEKSEMPEL:
    a=1.0, b=1.0  gir c=1.414
    a=1.0, b=2.0  gir c=2.236
    a=1.0, b=3.0  gir c=3.162
    a=1.0, b=4.0  gir c=4.123
    a=1.0, b=5.0  gir c=5.099
    a=1.0, b=6.0  gir c=6.083
    a=2.0, b=1.0  gir c=2.236
    a=2.0, b=2.0  gir c=2.828
    a=2.0, b=3.0  gir c=3.606
    a=2.0, b=4.0  gir c=4.472
    a=2.0, b=5.0  gir c=5.385
    a=2.0, b=6.0  gir c=6.325
    a=3.0, b=1.0  gir c=3.162
    a=3.0, b=2.0  gir c=3.606
      ...osv...
    a=6.0, b=5.0  gir c=7.810
    a=6.0, b=6.0  gir c=8.485
    


  8. Metode med array som inn-parameter: Oppgave 3 i kap. 7 (side 134)
    Lag en metode double gjennomsnitt(int[] a) som summerer alle elementene i heltallsarrayen a, og som returnerer (det aritmetiske) gjennomsnittet av verdiene i a.
    // Dette eksemplet viser en lignende programstruktur men med bare én klasse.
    // Vi slipper ? bruke to klasser ved ? la objekt-pekeren "gj" referere til
    // den samme klassen som den selv og main-metoden er plassert i.
    class Gjennomsnitt {
    
        public static void main(String[] args) {
    	Gjennomsnitt gj = new Gjennomsnitt();
    	gj.testGjennomsnitt();
        }
    
        void testGjennomsnitt() {
    	int[] a = { 1, 2, 2, 1, 0, 3 };
    	double snitt = gjennomsnitt(a); // Argument: arraynavnet uten klammer
    	System.out.println("Gjennomsnittet er: " + snitt);
        }
    
        double gjennomsnitt(int[] a) {
    	int sum = 0;
    	for (int i = 0; i < a.length; i++) {
    	    sum += a[i];
    	}
    	return (double) sum / a.length;
        }
    }
    
    KJ?REEKSEMPEL:
    Gjennomsnittet er: 1.5
    

Oppgaver til terminaltimen

  1. Jobb videre med obligatorisk oppgave 2. 
    Tips: Begynn med ? l?se litt enklere oppgaver, f.eks. de nevnt i punkt 3. under.  Disse har problemstillinger som ligner mye p? det som skal gj?res i oblig 2, men litt enklere slik at obligen blir lettere ? gj?re etter at du har l?st disse oppgavene.  Se ogs? tipsene til oblig 2 i lysarkene fra forelesningen uke 4, og en alternativ, morsom forklaring av teorien i Marit Nybakkens l?kker.pdfOg ang?ende "l?n" av programkode: Husk at hvis du kopierer inn i din oblig programbiter som ikke kommer fra kurswebsidene eller fra l?reboka s? m? du skrive i programmet hvilken del du hentet og fra hvilken kilde (se linkene nederst i oblig-teksten).


  2. L?kker og metoder: Fibonacci-tallene
    (a) Lag et program som skriver ut de 15 f?rste tall i Fibonaccif?lgen.  F?lgen er definert ved at de to f?rste tall er 0 og 1, og hvert neste tall er summen av de to foreg?ende.  Utskriften skal bli:
    0  1  1  2  3  5  8  13  21  34  55  89  144  233  377
    
    class Fibonacci {
        public static void main(String[] args) {
    
    	int nestSiste = 0;
    	int siste = 1;
    	// Skriver ut de to f?rste tall:
    	System.out.print(nestSiste + "  ");
    	System.out.print(siste + "  ");
    
    	// Skriver ut 3. til 15. tall i f?lgen:
    	for (int i = 3; i <= 15; i++) {
    	    int tmp = siste; // Midlertidig variabel
    	    siste = siste + nestSiste;
    	    nestSiste = tmp;
    	    System.out.print(siste + "  ");
    	}
    	System.out.println();
        }
    }
    

    (b) Endre strukturen i programmet slik at det f?lger malen fra oblig 2 (vist ogs? ovenfor i punkt 6. for teoritimen) med en kontrollklasse ?verst, etterfulgt av en hjelpeklasse for metodene.  Bruk tre metoder i hjelpeklassen: en ordrel?kke som skriver ut f?lgende meny, og en metode for hvert av de 2 menyvalgene:
      1. Skriv ut de 15 f?rste tall i Fibonaccif?lgen
      2. Test om et tall h?rer til f?lgen

    Metoden for ordre 2 ber bruker taste inn et tall, og g?r s? i en l?kke som genererer Fibonacci-tallene frem til det bruker-inntastede tallet.  Deretter gis det melding til bruker om tallet h?rte til f?lgen eller ikke.  Mer info: Fibonacci-tallene forekommer mye i naturen, bl.a. i tregrener, blomster, kongler og kaniner.
    import easyIO.*;
    
    class Fibonacci {
        public static void main(String[] args) {
            FibonacciMetoder fib = new FibonacciMetoder();
            fib.ordrel?kke();
        }
    }
    
    class FibonacciMetoder {
        In tast = new In();
        Out skjerm = new Out();
    
        void ordrel?kke() {
            int ordre = 0;
    
            while (ordre != 3) {
    	    // Meny:
                skjerm.outln("1. Skriv ut de 15 f?rste tall i Fibonaccif?lgen");
                skjerm.outln("2. Test om et tall h?rer til f?lgen");
    
    	    // Leser kommando fra bruker:
                skjerm.out("Velg kommando (3=Avslutt): ");
                ordre = tast.inInt();
    
                switch (ordre) {
                    case 1: skriv15Fib(); break;
                    case 2: testFibTall(); break;
                    default: break;
                }
    	    System.out.println();
            }
        }
    
        void skriv15Fib() {
    	int nestSiste = 0;
    	int siste = 1;
    	System.out.print(nestSiste + "  ");
    	System.out.print(siste + "  ");
    
    	for (int i = 3; i <= 15; i++) {
    	    int tmp = siste; // Midlertidig variabel
    	    siste = siste + nestSiste;
    	    nestSiste = tmp;
    	    System.out.print(siste + "  ");
    	}
    	System.out.println();
        }
    
        void testFibTall() {
    	skjerm.outln();
    	skjerm.out("Skriv et tall for ? teste om det er Fibonacci-tall: ");
    	int inntastet = tast.inInt();
    
    	int nestSiste = 0;
    	int siste = 1;
    	int i = 2; // i: Plass i Fib.f?lgen til n?v?rende "siste"
            // S? lenge "siste" er < enn inntastet generér neste Fib.-tall:
    	for ( ; siste < inntastet; i++) {
    	    int tmp = siste;
    	    siste = siste + nestSiste;
    	    nestSiste = tmp;
    	}
    	if (siste == inntastet) {
    	    System.out.println(inntastet + " er Fibonacci-tall nr. " + i);
    	} else if (inntastet == 0) {
    	    System.out.println(inntastet + " er Fibonacci-tall nr. 1");
    	} else {
    	    System.out.println(inntastet + " er IKKE et Fibonacci-tall.");
    	}
        }
    }
    
    KJ?REEKSEMPEL:
    > java Fibonacci
    1. Skriv ut de 15 f?rste tall i Fibonaccif?lgen
    2. Test om et tall h?rer til f?lgen
    Velg kommando (3=Avslutt): 1
    0  1  1  2  3  5  8  13  21  34  55  89  144  233  377  
    
    1. Skriv ut de 15 f?rste tall i Fibonaccif?lgen
    2. Test om et tall h?rer til f?lgen
    Velg kommando (3=Avslutt): 2
    
    Skriv et tall for ? teste om det er Fibonacci-tall: 233
    233 er Fibonacci-tall nr. 14
    
    1. Skriv ut de 15 f?rste tall i Fibonaccif?lgen
    2. Test om et tall h?rer til f?lgen
    Velg kommando (3=Avslutt): 2
    
    Skriv et tall for ? teste om det er Fibonacci-tall: 234
    234 er IKKE et Fibonacci-tall.
    


  3. Arrayer, inLine(), inChar(), og enkle metoder:  (Oblig-relevante!)
    (Samme oppgaver som i punkt 3., 4., 5., og 6. for teoritimen.) 


  4. Metoder med inn- og ut-parametre:
    (Samme oppgaver som i punkt 7. og 8. for teoritimen.)  Slike metoder trengs ikke i oblig 2.


  5. Ukens n?tt 1: (middels vanskelig)
    Utvid ordre 2 i Fibonacci-programmet fra punkt 2. over slik at den ogs? sier hvilket Fibonacci-tall er n?rmest det bruker-inntastede tallet.
  6. Send gjerne l?sningsforslaget ditt til josek@ifi.uio.no s? legger jeg det ut her.


  7. Ukens n?tt 2: (veldig vanskelig!)
    Lag en metode som skriver ut alle anagrammer av et ord p? 4 bokstaver som ligger i en char-array.  Anagrammene skal ha de samme 4 bokstavene, i alle mulige rekkef?lger og uten ? gjenta noen bokstav.  For eksempel, hvis ordet er deklarert som f?lger, er 4 av anagrammene som vist under, og totalt 24.
    char[] ord = { 'A', 'R', 'N', 'E' };
    
     Kj?reeksempel:
     ARNE
     AREN
     ANRE
     ANER
     ...20 ord til...
    
    Tips: En m?te ? l?se dette p? er med nestede l?kker som i utgangspunktet kan g? innom alle mulige kombinasjoner, inkludert AAAA, AAAE, osv. men slik at det bare blir utskrift av de med 4 forskjellige bokstaver.  Bruk den tomme strengen "" i utskriften for ? sikre at bokstavene skrives ut som tekst: System.out.println("" + ord[3] + ord[2] ···
  8. L?sning med alt i main()-metoden: Uke4mikalm.java  (laget av Mikal Madsen i gr. 3)
    Generell l?sning vha. rekursjon(*): Uke4wadamsle.java  (laget av Wilhelm A. Damsleth i gr. 6)
      (*): "Rekursjon" oppst?r n?r en metode kaller seg selv.  Det er ikke pensum p? INF1000.

    Hvis du finner en annen interessant l?sning send den gjerne til josek@ifi.uio.no s? legger jeg den ut her.