Ekstraoppgaver uke 3:  5. sep - 11. 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. Presedensregler ― i hvilken rekkefølge utføres regneoperasjonene? (Mer om beregningsuttrykk fra uke 2)

    Avgjør i hvert av disse tilfellene hvilken verdi som blir skrevet ut på skjermen.

    For å svare på denne oppgaven må du kjenne reglene for evaluering (utregning) av numeriske uttrykk i Java. Kortversjonen av disse er at uttrykk beregnes fra venstre mot høyre, men multiplikasjoner og divisjoner utføres før addisjoner og subtraksjoner. Du kan lese mer om dette på side 39 i læreboka.
      1.  System.out.println(3 * 4 + 5);
      2.  System.out.println(3 + 4 * 5);
      3.  System.out.println((3 + 4) * 5);
      4.  System.out.println(1 / 2 * 5);
      5.  System.out.println(1 / 2 * 5.0);
      6.  System.out.println(1.0 / 2 * 5);
      7.  System.out.println(4 * 2 * 2 * 1);
      8.  System.out.println(4 / 2 / 2 / 1);
      9.  System.out.println(5 * 4 / 3 * 2 / 1);
    
    Følgende oversikt viser presedens (hva utføres først) for alle operatorene. Jo høyere oppe på denne lista operatoren står jo før blir den utført, mens de som står på samme nivå er likestilt og utføres fra venstre til høyre. Tabellen er basert på side 378 i The Java Programming Language:
    Operator type Operators
    Postfix [] . (params) expr++ expr--
    Unary ++expr --expr +expr -expr ~ !
    Creation or Cast new (type)expr
    Multiplicative * / %
    Additive + -
    Shift << >> >>>
    Relational < > >= <= instanceof
    Equality == !=
    Bitwise AND &
    Bitwise exclusive OR ^
    Bitwise inclusive OR |
    Logical AND &&
    Logical OR ||
    Ternary ?:
    Assignment = += -= *= /= %= >>= <<= >>>= &= ^= |=

  2. Logiske uttrykk: (tabell 2.5, side 41)
    Avgjør hvilken verdi den boolske variabelen b får etter hver av disse tilordningssetningene, når vi antar at heltallsvariablene x, y, og z har fått verdier som følger: int x = 3, y = 4, z = 1;
      1.  b = (x < y) && (y < z);
      2.  b = (x < y) || (y < z);
      3.  b = ! (x < y);
      4.  b = x < y;
      5.  b = x <= y;
      6.  b = (x == y);
      7.  b = (x != y);
    

    Eksempel på hvordan man kan bruke slike boolske uttrykk i et program:
        int x = 3, y = 4, z = 1;
        if ((x < y) && (y < z)) {
            System.out.println("Det stemmer at x < y < z."); // Blir dette skrevet ut?
        }
    
  3. Valuta-omregning: kap. 3, oppg. 4 (side 3) (Innlesing/ utskrift)

    Lag et program som leser inn et kronebeløp fra tastaturet, og omregner beløpet til amerikanske dollar, euro, og svenske kroner; og skriver ut resultatet på skjermen med to desimaler. Omregningen er etter følgende kurser: 1 USD = 5.435 kr; 1 EUR = 7.682 kr; 1 SEK = 0.8462 kr. (NB! Vekslingskursene er oppdatert 6. sep 2011, det står andre kurs og valutaer i læreboka.). Hint: Hvis brukeren taster 100 skal resultatet i USD bli $18.40.




  4. Løkker: Hva blir skrevet ut?
    Anta at følgende programsetninger utføres. Hva skrives ut på skjermen?
    class Ukeoppg2_8 {
        public static void main(String[] args) {
    
    //(a)
           int a = 1;
           while (a < 5) {
               a = a + 1;
           }
           System.out.println("a = " + a);
    
    //(b)
           int b = 11;
           while (b < 14) {
               b++;
               System.out.println(b);
           }
    
    //(c)
           int c = 1;
           while (c < 10) {
               c = -2 * c;
           }
           System.out.println("c = " + c);
    
    //(d)
           for (int d = 0; d < 3; d++) {
               System.out.println(d);
           }
    
    //(e)
           for (int e = 1; e <= 3; e++) {
               for (int f = 1; f <= 2; f++) {
                   System.out.println(e + " " + f);
               }
           }
    
    //(f)
           for (int ytre = 0; ytre < 2; ytre++) {
               System.out.print("[");
    
               for (int indre = 0; indre < 3; indre++) {
                   System.out.print(".");
               }
               System.out.println("]");
           }
    }}
  5. Summerings-løkke: kap. 4, oppg. 6 (side 85)
    (a) Skriv et program som leser ett heltall n fra terminal, og som deretter summerer tallene fra 1 til n, dvs. 1 + 2 + ··· + n, og skriver ut hver av mellomresultatene (1; 1+2; 1+2+3; osv.), og sluttsummen.  Utskriften skal følge dette mønsteret (når n = 5):
      1    1
      2    3
      3    6
      4   10
      5   15
    
    (b) Det finnes også en formel som gir summen av tallene 1, 2, 3, ...., n direkte: n * (n + 1) / 2.  Utvid programmet slik at det til slutt sammenligner siste sum med resultatet av formelen, og gir en melding til bruker på om de to svarene var like eller ikke.
     
  6. While-løkke: : kap. 4, oppg. 5 (side 85)
    (a) Gjenta forrige oppgave, men bruk while-løkke i stedet.

    (b) Som forrige oppgave, men utskriften skal nå først stoppe når omkretsen overstiger 1000.  Tips: Bruk while-løkken til å kontrollere O.

     
  7. En enkel array:
    int[] a = new int[20];
    

    (a) Når setningen over utføres, skjer det både en deklarasjon og en oppretting av et array-objekt. Forklar hvilken del av setningen som gjør hva, og vis hvordan setningen kunne vært splittet opp i to setninger: en deklarasjonssetning og en setning som oppretter array-objektet.

    (b) Her er eksempler på bruk av ovennevnte array. Hva blir skrevet ut på skjermen?

    int[] a = new int[20];
    a[0] = 100;
    a[1] = a[0] * 2;
    System.out.println(a[1]);
    a[0]++;
    System.out.println(a[0]);
    System.out.println(a.length);
    

     


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