Ukeoppgaver 2: 30. aug - 5. sep (INF1000 - H?st 2013)

Variabler, uttrykk, forgreninger (if-else), enkel innlesning fra terminal  (kapittel 2 og 4.1-4.2 i l?reboka, "Rett p? Java" 3. utg.)

M?l
Beherske det du trenger for ? l?se Oblig 1, dvs. bruk av variable og uttrykk av forskjellige typer (int, double, og boolean), if-else-setninger (ogs? kalt forgreninger), feilmeldinger (b?de kompileringsfeil og kj?refeil) og enkel innlesning av tall og tekst fra terminal.

[N?kkeloppg.]: Oppgave merket med n?kkelsymbol er plukket ut som spesielt representativ for de viktigste temaene fra ukens forelesning, og alle b?r ha som minimumsm?l ? l?se denne selvstendig.
I tillegg til de vanlige ukeoppgavene er det laget stjerneoppgaver for de som ?nsker litt st?rre utfordringer innenfor ukens tema, og ekstraoppgaver for de som ?nsker mer trening p? deler av det grunnleggende stoffet.

Oppgaver

  1. Areal av rektangler (enkel bruk av variable):  kap. 2, oppg. 1 (side 45)
    Skriv et program som beregner arealet av rektanglene med disse sidest?rrelsene: 3 og 5, 7 og 3, samt 4 og 9, og som skriver ut resultatet med en passende fortekst. Kompiler og kj?r programmet.

    Flere oppgaver av samme type? Se ekstraoppgave 1 og 2.

     
  2. Deklarasjon og initialisering av variabler:  kap. 2, oppg. 2 (side 45)
    Finn feilene i dette programmet:
    class Volum {
        public static void main (String[] args) {
            integer lengde, bredde, h?yde;
            lengde = 3;
            volum  = lengde * bredde * h?yde;
            System.out.println("Volumet er: " + volum);
        }
    }
    

     
  3. Variabeldeklarasjoner - lovlig eller ikke? kap. 2, oppg. 5 (side 46)
    Hvilke av disse programsetningene er lovlige, og for de som er lovlige: hvilken verdi f?r variabelen? Du kan i hvert av punktene regne med at variablen som deklareres ikke er deklarert tidligere i programmet.
     (a)  int x = 4;
     (b)  int x = 4.56;
     (c)  int x = (int) 4.56;
     (d)  int z = 1/2;
     (e)  double x = 5.7723;
     (f)  double a = (int) 5.7723;
     (g)  double x = 6;
     (h)  double tall = true;
     (i)  char c = "hei p? deg";
     (j)  char c = "&";
     (k)  char c = '&';
     (l)  boolean a = sann;
     (m)  boolean verdi = true && false;
     (n)  boolean a = (true == true);
     (o)  boolean a = (false == false);
     (p)  boolean a = (a == a);
     (q)  String t = 'hei p? deg';
     (r)  String t = "hei p? deg";
     (s)  String t = "" + 7.33;
     (t)  String tekst = 7.33;
    



     
  4. St?rre enn (forgreninger):
    Lag et program som inneholder to heltallsvariable, a og b. Gi variablene verdier som du selv velger. Sjekk om a er st?rre enn b, og skriv ut til skjerm enten "a er st?rre enn b" eller "a er ikke st?rre enn b". Varier verdiene du setter for a og b, og sjekk at resultatet blir som forventet i alle tilfellene.

    Flere oppgaver av samme type? Se ekstraoppgave 3, 4 og 5.

     
  5. Beregning av skatt i Ruritania (flyttall og forgreninger): kap. 4, oppg. 2 (side 84) med en endring
    Vi forenkler oppgaven ved ? sette ?nsket verdi for inntekt i en variabel i begynnelsen av programmet. Bruk f.eks. inntekt = 10000 og kj?r programmet, og pr?v deretter med en annen verdi.
    I det fiktive landet Ruritania er skattereglene slik at hvis en person har inntekt < 10 000, s? betaler man 10% skatt p? hele inntekten, og hvis inntekten ≥ 10 000, s? betaler man 10% skatt p? de f?rste 10 000 kronene og 30% skatt p? resten av inntekten.  Lag et program som regner ut og skriver ut hvor mange kroner som skal betales i skatt.  Programmet skal bruke en flyttalls-variabel for ? holde p? inntekten.


     
  6. Sum (innlesning av tall fra terminal):
    Lag et program som ber om og leser inn to heltall. Programmet skal deretter regne ut summen av de to tallene og skrive ut svaret. Her er et eksempel p? hvordan en kj?ring av programmet kan se ut (understrekningene viser inntasting fra brukeren):
     Oppgi verdien til x: 3
     Oppgi verdien til y: 6
     Summen av x og y er 9.
    


    Flere oppgaver av samme type? Se ekstraoppgave 6, 7, 8, 9 og 10.

     
  7. Velkomsthilsen (innlesning av tekst fra terminal):
    Lag et program som ber om navnet p? brukeren og skriver ut en hilsen hvor navnet brukes. Her er et eksempel p? hvordan en kj?ring av programmet kan se ut (understrekningene viser inntasting fra brukeren):
     Hva heter du?: Aud-Georg
     Hei, Aud-Georg. Velkommen til Ifi!
    


    Flere oppgaver av samme type? Se ekstraoppgave 11 og 12.

     
  8. [N?kkeloppg.]: Billettpris (forgreninger og innlesning fra terminal): kap. 4, oppg. 1 (side 84)
    Lag et program som avgj?r, basert p? alderen til en person, om personen kan f? reise med trikken til halv pris. Resultatet skal skrives ut p? skjermen. Vi antar at reglene er slik at alle under 12 ?r og alle over 64 ?r f?r reise for halv pris, mens alle andre m? betale full pris. Programmet skal lese personens alder fra terminal.

    Flere oppgaver av samme type? Se ekstraoppgave 13, 14, 15, 16 og 17. Du b?r klare minst en av disse helt uten hjelp! Etterp? er du godt forberedt til ? g? l?s p? oblig 1.



     
  9. Typiske feilmeldinger:
    Hva betyr f?lgende feilmeldinger, som kompilatoren spytter ut n?r vi pr?ver ? kompilere og debugge dette programmet:
    1  class Test {
    2      public static void main(String[] args) {
    3          int jens;
    4          int siv = Jens * 3;
    5          System.out.println("Svar: " siv);
    6          erna = siv - jens;
    7          System.out.printn(erna);
    8      }
    
       a.  Test.java:8: reached end of file while parsing
               }
                ^
    
       b.  Test.java:4: cannot find symbol
           symbol  : variable Jens
           location: class Test
              int siv = Jens * 3;
                        ^
    
       c.  Test.java:4: variable Jens might not have been initialized
              int siv = Jens * 3;
                        ^
    
       d.  Test.java:5: ')' expected
              System.out.println("Svar: " siv);
                                         ^
           Test.java:5: illegal start of expression
              System.out.println("Svar: " siv);
                                             ^
    
       e.  Test.java:6: cannot find symbol
           symbol  : variable erna
           location: class Test
              erna = siv - jens;
              ^
    
       f.  Test.java:7: cannot find symbol
           symbol  : method printn(int)
           location: class java.io.PrintStream
              System.out.printn(erna);
                        ^
    
    
    Hvis vi fjerner "{"-kr?llparentesen p? linje 2 f?r vi ca. 10 nye feilmeldinger, bl.a. f?lgende. Hva tipper du er grunnen til at s? mange feilmeldinger for?rsakes av bare denne enkle lille feilen?
       g.  Test.java:2: ';' expected
               public static void main(String[] args)
                                                     ^
           Test.java:5: <identifier> expected
              System.out.println("Svar: " + siv);
                                ^
           Test.java:5: illegal start of type
              System.out.println("Svar: " + siv);
                                 ^
    


     
  10. Uttrykk med int og double
    Avgj?r i hvert av disse tilfellene, uten ? bruke datamaskin, hvilken verdi som blir skrevet ut p? skjermen.  Husk at reglene for divisjon i Java avhenger av om vi jobber med heltall eller flyttall (=desimaltall) (se side 38-39 i l?reboka).
      1.  System.out.println(10 / 9);
      2.  System.out.println(10 / 10);
      3.  System.out.println(10 / 11);
      4.  System.out.println((int) 3.65);
      5.  System.out.println((int) 3.65 - 4);
      6.  System.out.println((int) (3.65 - 4));
      7.  System.out.println(Math.round(3.65));
      8.  System.out.println(1 / 2);
      9.  System.out.println(1 / 2.0);
     10.  System.out.println(1.0 / 2);
     11.  System.out.println((double) 1 / 2);
     12.  System.out.println((double) (1 / 2));
     13.  System.out.println(73 / 10);
     14.  System.out.println(73 % 10);
    

     
  11. Feil:
    Gitt f?lgende program:
        class Feil {
         
            public static void main(String[] args) {
                int x = 2;
                int y;
    
                if (x > 0) {
                    y = 8;
                    String tekst = "if-testen slo til!";
                }
    
                System.out.println(y);
            }
    
        }
    
    Hva er galt med dette programmet? Fors?k ? finne svaret uten ? teste p? maskin med en gang. Er dette en kompilerings- eller kj?retidsfeil? Test programmet p? maskinen etterp? og se om du hadde rett.

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

Publisert 23. aug. 2013 09:15 - Sist endret 5. sep. 2013 16:34