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

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 på dette oppgavesettet kan du sende på mail til ingridgg [a] ifi.uio.no

Publisert 5. sep. 2013 15:13 - Sist endret 5. sep. 2013 16:37