Ukeoppgaver 3: 8. - 11. sep (INF1000 - H?st 2008)
Mer om forgreninger (kap. 4.1 - 4.2); l?kker (kap. 4.3 - 4.4), og arrayer
M?l
?ve p? bruk av forgreninger, l?kker, og arrayer.
Oppgaver til teoritimen
- If-else og switch: Enkel kalkulator
(a) Lag en enkel kalkulator som st?tter de fire regneartene (+ - * /). Programmet skal begynne med ? sp?rre hvilken regneart bruker ?nsker ? benytte seg av. Brukeren svarer da f.eks. * og programmet leser regnearten med .inChar() og lagrer dette i en char-variabel. Programmet skal s? be om to heltall (disse lagres i hver sin int-variabel).Bruk if-else-setninger til ? sjekke hvilken regneart brukeren valgte, og skriv ut resultatet av ? utf?re den valgte regneoperasjonen p? de to tallene, f.eks. slik:
Regneart: + F?rste tall: 3 Andre tall: 5 Resultat = 8
(b) Hvordan kan programmet endres for ? bruke en switch-setning i stedet for if-else? Se eksemplet p? side 78 i l?reboka, og husk ? ta med break;-setningene.
(c) Tenk gjennom hva skjer ved divisjon (hva slags divisjon f?r vi utf?rt?). Kan vi endre utregningen for ? f? utf?rt den andre typen divisjon uten ? endre deklarasjonen av de to innleste heltall?
- 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); } } }
- For-l?kke: Kap. 4, Oppgave 4, (side 83)
Lag et program som skriver ut p? skjermen omkretsene til sirkler med radiusene r = 1, 2, ..., 10 (omkretsen O beregnes etter formelen O = 2 π r. Sett π = 3.14). Utskriften skal f?lge m?nsteret:Radius = 1 gir omkrets = 6.28
- While-l?kke: (b): Kap. 4, Oppgave 5 (side 83)
(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.
- L?kker: Hva blir skrevet ut?
Anta at f?lgende programsetninger utf?res. Hva skrives ut p? skjermen?// (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("]"); }
- En enkel array:
int[] a = new int[20];
(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);
- Gjennomgang av elementene i en array: (Foiler forelesning uke 3, side 43)
(a) Studér f?lgende program (fra forelesningen uke 3) som finner minste verdi i en array hvor bruker fyller inn verdiene; og finn ut hva som blir skrevet ut n?r bruker taster inn tallene4, 2, 1, 3, 5? Hva blir skrevet ut hvis bruker taster det minste tallet to ganger, f.eks.0, 1, 2, 0, 3? import easyIO.*; class MinsteVerdi { public static void main(String[] args) { In tastatur = new In(); double[] a = new double[5]; for (int i = 0; i < a.length; i++) { System.out.print("Oppgi en verdi: "); a[i] = tastatur.inDouble(); } double minste = a[0]; int minPos = 0; for (int i = 1; i < a.length; i++) { if (a[i] < minste) { minste = a[i]; minPos = i; } } System.out.println("Minste verdi er " + minste); System.out.println("Den ligger p? plass " + minPos); } } KJ?REEKSEMPEL: > java MinsteVerdi Oppgi en verdi: 4 Oppgi en verdi: 2 Oppgi en verdi: 1 Oppgi en verdi: 3 Oppgi en verdi: 5 Minste verdi er 1.0 Den ligger p? plass ?
(c) Legg til kode som sjekker om alle verdiene i arrayen er mindre enn 10.0, og gir en passende melding til bruker om det stemte eller ikke. Hint: Bruk en l?kke og en boolsk variabel "boolean h?yFunnet" som initialiseres til false og settes til true inne i l?kka (under gjennomgangen av verdiene) hvis en verdi ≥ 10 blir funnet. Se ogs? eksemplet ?verst p? side 90 i l?reboka.
- Flerdimensjonal array: (Aktuell oppgave for oblig 2)
To-dimensjonale arrayer brukes p? samme m?te som en-dimensjonale, men har to sett med klammer, og gjennomg?s best vha. to nestede for-l?kker:import easyIO.*; class Array2D { public static void main(String[] args) { int[][] b = new int[3][4]; for (int i = 0; i < 3; i++) { for (int j = 0; j < 4; j++) { b[i][j] = i * j; System.out.println( <Hva mangler her?> ); } } } }
> java Array2D b[0][0] = 0 b[0][1] = 0 b[0][2] = 0 b[0][3] = 0 b[1][0] = 0 b[1][1] = 1 b[1][2] = 2 b[1][3] = 3 b[2][0] = 0 b[2][1] = 2 b[2][2] = 4 b[2][3] = 6
Arrayen kan illustreres slik: 0 1 2 3 0 1 X 2
(b) Hvor mange elementer er det plass til i arrayen b vist over?
(c) Hva er indeksene til elementet markert med "x" i figuren, og hvilken verdi f?r elementet utdelt i programmet?
Oppgaver til terminaltimen
- If-else og switch: Enkel kalkulator:
(Samme oppgave som i punkt 1. for teoritimen.) Test programmet p? datamaskin og se hvilke feilmeldinger du f?r n?r du pr?ver ? dele et tall p? 0.
- L?kker: Kap. 4, oppgave 6 (side 83)
(a) Skriv et program som leser et heltall n fra terminal og beregner summen av tallene fra 1 til n. 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.
- Arrayer: Kap. 5: Oppgave 1: (side 97):
Skriv et program som inneholder en heltalls-array med f?lgende elementer: 1, 3, 5, 7, 9, 11, 13, 15, 17, 19. Programmet skal inneholde en l?kke som skriver ut indeksen og verdien for alle elementene i arrayen.
- Arrayer: Kap. 5: Oppgave 2: (side 97):
Vi bruker her samme array som i forrige oppgave: Beregn summen av elementene og skriv ut resultatet.
- Gjennomgang av elementene i en array: (Foiler forelesning uke 3, side 43)
(Samme oppgave som i punkt 7. for teoritimen.)
- Ekstraoppgave: (veldig vanskelig!, kun for spesielt interesserte)
Ta utgangspunkt i programmet fra punkt 7. for teoritimen og legg til kode som finner ut og skriver hvilke verdier som er gjentatt blant de 5 som bruker tastet inn som input. F.eks. hvis bruker tastet inn 6, 6, 3, 6, 3 skal programmet gi meldingen:Verdier som er gjentatt: 6 3
L?sningsforslag
L?sningsforslagene gir mest utbytte n?r du har
fors?kt ? l?se oppgaven f?rst.