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!
- 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?
- 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);
- 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); } } }
- 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