Ekstraoppgaver uke 4:  12. sep - 18. sep (INF1000 - Høst 2012)

Disse oppgavene er ment som mengdetreningsoppgaver for de som ønsker mer trening på deler av det grunnleggende stoffet. Velg de oppgavene du selv føler at du har behov for å jobbe med, og gå videre til neste tema når du er klar for det!

  1. Enkel kalkulator med if-else og switch:
    [ NB! Vi bruker en litt spesiell m?te ? gi input i denne oppgaven, der bruker m? taste mellomrom mellom de tre delene av regnestykket (f.eks. "4 + 5"), men du vil l?re hvordan programmet kan godta andre skrivem?ter neste uke. ]
    (a) Lag en kalkulator som st?tter enkle regnestykker p? formen: tall operator tall, hvor de tre elementene er adskilt med mellomrom.  Tall er heltall, og operator er en av de fire regneartene: + - * /.  Eksempel p? kj?ring av programmet:
    Regnestykke: 4 + 5
    Resultat: 9
    
    Bruk tast.inInt() og tast.inChar(" ") for ? lese tall og regneart fra tastaturet (hvis du bruker EasyIO, hvis ikke se "Hint" nedenfor).  Mellomrommet i parentesene til inChar angir at den skal betrakte mellomrom som et skilletegn f?r og etter regnearten.  Dette er n?dvendig ? si fra til inChar, fordi den leser inn ett tegn av gangen.  Lagre tallene og operator i passende variabler, og bruk if-else-setninger til ? velge hvilken regneart skal utf?res. 
    Hint for ? l?se det uten EasyIO: Bruk scan.nextInt() i stedet for tast.inInt(), og scan.next().charAt(0) i stedet for tast.inChar(" ");.

    (b) Hvordan kan programmet endres for ? bruke en switch-setning i stedet for if-else?  (Hint: Se eksemplet p? side 80 i l?reboka, og husk ? ta med break;-setningene.)

    (c) Hva slags divisjon f?r vi utf?rt?, og hvordan kan vi endre programmet for ? f? utf?rt den andre typen divisjon uten ? endre deklarasjonen av de to innleste heltall?


  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);
    
    //(b)
           int sum = 0;
           for (int b = 1; b < 6; b += 2) {
               sum += b;
           }
           System.out.println("sum = " + sum);
    
    //(c)
           int produkt = 1;
           for (int c = 1; c < 4; c++) {
               produkt = produkt * c;
    	   System.out.println(produkt);
           }
    
    //(d)
           for (int d = 3; d >= 1; d--) {
               for (int e = 1; e <= 3; e++) {
                   System.out.println(d + e);
               }
           }
    
    //(e)
           int teller = 0;
           for (int ytre = 0; ytre < 3; ytre++) {
               teller++;
               for (int indre = 0; indre < 3; indre++) {
                   teller++;
               }
           }
           System.out.println(teller);
    



  3. Blokker og skop:
    Hvilke av disse programmene er lovlige?
    class Prog1 {
        public static void main(String[] args) {
            int k = 0;
            if (k >= 0) {
                int n = k + 1;
            }
            System.out.println(n);
        }
    }
    
    class Prog2 {
        public static void main(String[] args) {
            int k = 0;
            if (k >= 0) {
                int n = k + 1;
            }
            if (k < 0) {
                System.out.println(n);
            }
        }
    }
    
    class Prog3 {
        public static void main(String[] args) {
            int k = 0;
            if (k >= 0) {
                k++;
                System.out.println(k);
            }
        }
    }
    


  4. Utvidet oppgave om inLine(), inChar(), og ordrel?kke:
    Utvid programmet fra ukeoppgavene som sp?r bruker etter et navn. Programmet skal n? lese forbi eventuelle blanke linjer i begynnelsen av brukerens svar. Dette gj?r du i easyIO ved hjelp av setningen .inChar("\n\r") . Det man skriver i disse parentesene kalles for "skilletegn" og angir hvilke tegn som ignoreres f?r man kommer til et tegn som tas med tilbake. I dette tilfellet skal programmet hoppe over evt. linjeskift (\n) eller vognretur (\r) som bruker har tastet inn, og i stedet lese inn en vanlig bokstav fra tastatur, f.eks. 'j'. Det samme kan man ogs? f? til uten EasyIO ved hjelp av scan.nextLine().charAt(0);  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:
    

Tibakemelding om dette oppgavesettet kan du skrive i bloggen eller sende på mail til siriamj [a] ifi.uio.no