Ukeoppgaver 2:  31. aug - 6. sep (INF1000 - H?st 2011)

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

M?l
F? trening i teorien du trenger for ? l?se Oblig 1, dvs. bruk av variabler og uttrykk av forskjellige typer (int, double, og boolean), if-else-setninger (ogs? kalt forgreninger), og feilmeldinger (b?de kompileringsfeil og kj?refeil).

[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.

Oppgaver

  1. Areal av rektangler:  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. Kompier og kj?r programmet.

    Tips: Denne oppgaven kan l?ses ved ? f?lge oppskriften fra programmet p? side 32 og skrive et lignende program, men med litt andre variabelnavn og beregninger.


  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. 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. 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);
    


  5. [N?kkeloppg.]: If-else med logisk uttrykk: kap. 4, oppg. 1 (side 84) med en endring
    Vi gj?r en liten endring p? oppgaven: siden innlesing av input fra tastatur mens programmet kj?rer er tema for neste uke, s? setter vi ?nsket verdi for alder i en variabel i begynnelsen av programmet. Bruk f.eks. alder = 20 og kj?r programmet, og pr?v deretter med en annen verdi.
    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 bruke en variabel for ? holde p? alderen.

    Tips: Se eksemplet nederst p? side 78.  I denne oppgaven trenger du ogs? logiske uttrykk (side 41).


  6. Beregning av skatt i Ruritania: kap. 4, oppg. 2 (side 84) med en endring
    Vi gj?r en liten endring p? oppgaven: siden innlesing av input fra tastatur mens programmet kj?rer er tema for neste uke, s? setter vi ?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.


  7. 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);
                                 ^
    



  8. Tips om tilpasning av Emacs:
    NB! Emacs er ikke pensum, det er bare ett av mange mulige redigeringsprogrammer du kan bruke for ? skrive dine Java-programmer. Her kommer et nyttig lite tips for de som er interessert i Emacs, og link til mange flere tips.  Emacs kan konfigureres p? veldig mange m?ter slik at programmering blir mer behagelig. Dette gj?res ved ? opprette og redigere en spesiell fil i ditt hjemmeomr?de, kalt .emacs. Denne oppgaven viser én nyttig konfigurasjonsmulighet i Emacs, for ? fjerne velkomstskjermen som Emacs viser ved oppstart, slik at du slipper ? ta den vekk hver gang du skal starte arbeidet.

    Start Emacs for ? se velkomstskjermen, f.eks. ved ? taste kommandoen emacs& i et kommandovindu. Hvis Emacs-vinduet ikke viser noen "velkomstside" (hvor det st?r Emacs i store grafiske bokstaver, og diverse tekst i forskjellige farger) s? er tilpasningen allerede gjort p? ditt hjemmeomr?de og du trenger ikke gj?re noe mer. Hvis du derimot fikk opp velkomstsiden til Emacs, s? kan du fortsette med f?lgende steg og bruke denne samme Emacs-en du startet n? for ? ta bort velkomstskjermen, slik at den ikke forstyrrer neste gang du ?pner Emacs. Trykk Ctrl-x etterfulgt av Ctrl-f og s? taster du navnet p? konfigurasjonsfilen:
    Find file: ~/.emacs
    Sjekk at nederste linje i Emacs ser akkurat ut som dette, med tilde-tegn ("~"), skr?strek, og punktum rett etter "Find file: " og f?r emacs. Trykk Enter. Dette vil ?pne (og hvis n?dvendig opprette) konfigurasjonsfilen og flytte tekstmark?ren inn i den, slik at du kan redigere innholdet. Skriv (eller legg til) f?lgende linje i filen:
    (setq inhibit-splash-screen t)
    Deretter lagrer du filen ved ? trykke Ctrl-x Ctrl-s  Ferdig! N? kan du avslutte Emacs-en, og neste gang du starter programmet vil du ikke f? opp den gamle forstyrrende "velkomstsiden". 

    Du kan finne mange andre tips til Emacs i lab-oppgavene til Forkurs i informatikk, blant annet tips om klipping/liming (Ctrl-w og Ctrl-y), ?pning av flere 澳门葡京手机版app下载ende Emacs-vinduer (Ctrl-x 52), automatisk korrigering av innrykk i et helt Java-program (Java > Indent Line or Region), og enkle tastetrykk som gir tekster som "public static void main(String[] args)" og "System.out.println()" (abbrevs).

L?sningsforslag

Her kan du finne l?sningsforslag til disse oppgavene. Det anbefales ? l?se oppgavene p? egen h?nd f?r du studerer l?sningsforslagene.


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