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