switch: - terminal-i/o (bruker-i/o)

Like dokumenter
TEMA: Kommunikasjon med Bruker INF1000 Plenumsgruppe 1, formatert utskrift

Hvis en person har inntekt < , så betaler han 10% skatt på alt, og ellers betaler han 10% skatt på de første og 30% på resten.

Hvis en person har inntekt < , så betaler han 10% skatt på alt, og ellers betaler han 10% skatt på de første og 30% på resten.

INF1000 oppgaver til uke 38 (17 sep 23 sep)

Ukeoppgaver 2: sep (INF Høst 2010)

Løsningsforslag ukeoppg. 3: sep (INF Høst 2011)

Tre måter å lese fra terminal. Java 4. Eksempel. Formatert utskrift til skjerm

Java 4. Mer om easyio Mer om forgreninger Løkker. 7. september 2004

I dag. Rep: Oppsummering - variabler. Rep: Datatyper. INF1000 (Uke 3) Mer om uttrykk, terminal I/O, forgreninger

Mer om uttrykk, terminal I/O, forgreninger. Grunnkurs i programmering Institutt for Informatikk Universitet i Oslo

Oslo kommune Bydel Østensjø. Resultater fra brukerundersøkelsen 2013

INF1000 (Uke 4) Mer om forgreninger, While-løkker

I dag INF1000 (Uke 4) Mer om forgreninger, While-løkker. Tre måter å lese fra terminal. Repetisjon. Mer om forgrening While-løkker

INF1000 (Uke 5) Mer om løkker, arrayer og metoder

Løsningsforslag ukeoppg. 4: sep (INF Høst 2011)

LITT OM OPPLEGGET. INF1000 EKSTRATILBUD Stoff fra uke September 2012 Siri Moe Jensen EKSEMPLER

Ukeoppgaver INF1000: 12. feb 16. feb

I dag INF1000 (Uke 4) Mer om forgreninger, While-løkker. Tre måter å lese fra terminal. Tre måter å lese fra terminal.

Bruk av class Scanner, FileWriter og Formatter som alternativ til EasyIO i INF1000.

Løsningsforslag ukeoppg. 2: 31. aug - 6. sep (INF Høst 2011)

Forkurs INF1010. Dag 1. Andreas Færøvig Olsen Tuva Kristine Thoresen

Om tabellene. August 2014

Om tabellene. Oktober 2014

Oversikt. INF1000 Uke 3. Repetisjon Program. Repetisjon Program. Litt repetisjon Program Variabler og Uttrykk Presedens Matematiske funksjoner

TDT4105 Informasjonsteknologi, grunnkurs. Introduksjon til programmering i Matlab. Rune Sætre / Anders Christensen {satre, anders}@idi.ntnu.

INF 1000 høsten 2011 Uke 3 6. september

INF 1000 høsten 2011 Uke september

INF1000 undervisningen INF 1000 høsten 2011 Uke september

Innhold uke 3. INF 1000 høsten 2011 Uke 3 6. september. Uttrykk. Variabel: En plass i hukommelsen

Hovedtall om arbeidsmarkedet. Oslo. En måned

BYRÅDETS ÅRSBERETNING 2016

Forelesning inf Java 4

Om tabellene. Juni 2019

Om tabellene. Mars 2019

Om tabellene. September 2019

Hovedtall om arbeidsmarkedet i Oslo januar 2013


i=0 Repetisjon: arrayer Forelesning inf Java 4 Repetisjon: nesting av løkker Repetisjon: nesting av løkker 0*0 0*2 0*3 0*1 0*4

Kort om meg. INF1000 Uke 2. Oversikt. Repetisjon - Introduksjon

3 emner i dag! INF1000 Uke 5. Objekter og pekere. null. Litt om objekter, pekere og null Filer og easyio Litt mer om tekster

Lese fra fil. INF1000 : Forelesning 5. Eksempel. De vanligste lesemetodene. Metoder:

Om tabellene. Februar 2015

Om tabellene. Februar 2017

Om tabellene. Mars 2017

Om tabellene. November 2017

Om tabellene. September 2018

Om tabellene. Mars 2018

Om tabellene. Februar 2016

Om tabellene. Juni 2018

Om tabellene. Mai 2018

Om tabellene. August 2018

Hovedtall om arbeidsmarkedet. Oslo. En måned.

Om tabellene. Oktober 2015

løsningsforslag-uke5.txt

Del 1 En oversikt over C-programmering

Det er brudd i statistikk over antall arbeidsledige fra og med november 2018 pga ny registreringsmetode.

UNIVERSITETET I OSLO

Om tabellene. Januar 2017

Om tabellene. Juni 2017

Om tabellene. Mai 2017

Om tabellene. August 2017

Om tabellene. September 2017

Om tabellene. Oktober 2017

Om tabellene. Desember 2016

¹Det er brudd i statistikk over antall arbeidsledige fra og med november 2018 pga ny registreringsmetode.

Om tabellene. Mai 2015


Om tabellene. Juni 2015

Om tabellene. Mai 2016

Bruk av class Scanner, split(), FileWriter og Formatter som alternativ til easyio i INF1000.

Oblig2 - obligatorisk oppgave nr. 2 (av 4) i INF1000 v2008

Om tabellene. August 2016

Om tabellene. Juni 2016

Oversikt. INF1000 Uke 6. Objekter, pekere og null. Lese og skrive fra/til fil. Litt om objekter, pekere og null Filer og easyio. Litt mer om tekster

BYRÅDETS ÅRSBERETNING 2015

Om tabellene. Juli 2017

INF1000 : Forelesning 3

Body Mass Index (BMI) INF1000 : Forelesning 3. Ferdig program (forts.) Ferdig program

Legemeldt sykefravær etter bosted. Kvartal

Om tabellene. November 2016

Eksempel: Body Mass Index (BMI) Forelesning inf Java 3. Ferdig program (første del) Ferdig program (siste del)

Repetisjon: operatorene ++ og -- Java 5. Nøtt. Oppgave 1 (fra forrige gang) 0 udefinert udefinert. Alternativ 1 Prefiks-operator

Om tabellene. April 2016

Oppgave 1. Oppgave 2. Oppgave 3. Prøveeksamen i INF1000. Ole Christian og Arne. 23. november 2004

Kapittel 1 En oversikt over C-språket

UNIVERSITETET I OSLO

Prøveeksamen i INF1000. Ole Christian og Arne. 23. november 2004

UNIVERSITETET I OSLO

Litt mer om uttrykk: ++ og -- INF1000 : Forelesning 4. Oppgave. Blokker. 0 udefinert udefinert. Alternativ 2 Postfiks-operator

INF1000. Marit Nybakken 10. februar 2004

Oppgave 1. INF1000 Uke 13. Oppgave 2. Oppgave 3. Er dette lovlige deklarasjoner (når de foretas inni en metode)? JA NEI

INF1000 Behandling av tekster

Om tabellene. Juni 2014

UNIVERSITETET I OSLO

INF Uke 10. Ukesoppgaver oktober 2012

TDT4105 Informasjonsteknologi, grunnkurs. Introduksjon til programmering i Matlab. Rune Sætre / Anders Christensen {satre,

MER OM ARRAYER. INF1000: Forelesning 4. Anta at vi ønsker å lagre en liste med navnene på alle INF1000-studentene:

INF1000: Forelesning 4. Mer om arrayer Metoder

Praktisk informasjon. I dag. Repetisjon: While-løkker. INF1000 (Uke 5) Mer om løkker, arrayer og metoder

INF1000 : Forelesning 4

Transkript:

TEMA: Kommunikasjon med Bruker INF1000 Plenumsgruppe 1, 08.09.02 TEMA: Valgsetninger INF1000 Plenumsgruppe 1, 08.09.02 if-else: switch: - terminal-i/o (bruker-i/o) - pakken easyio - klassene In og Out Med tom parentes etter klassenavnene etter new blir in tastaturet og ut skjermen. I/O : Input/Output - innlesing av ulike typer data int i = in.inint(); char c = in.inchar(); - formatert utskrift Under får flyttallet 2 desimaler og totalt et utskriftsfelt med plass til 7 tegn. ut.out(i / 3.0, 2, 7); Tall justeres automatisk mot høyre, hvis intet annet er sagt. Hvis dette er tilfellet gjør vi slik, og ellers gjør vi sånn. if (<test>){ <betinget handling>; else { <alternativ>; er det mandag gjør vi slik er det tirsdag gjør vi slik... og ellers gjør vi sånn switch (<tellbar verdi>) { case <verdi 1>: <handling 1>; case <verdi 2>: <handling 2>;... default: <det vi ellers gjør, om noe> Tellbare verdier er heltall og tegn Punkt 1, 2,... Punkt (a), (b),... Oppgave 1: RPJ kapittel 3, oppg. 1 INF1000 Plenumsgruppe 1, 08.09.02 Oppgave 1: RPJ: kapittel 3, opp. 1 INF1000 Plenumsgruppe 1, 08.09.02 Løs oppgave 5 i kap. 1 ved å bruke formatert utskrift Opprinnelig løsning: System.out.println( a"); System.out.println( a a"); System.out.println( a b a"); System.out.println( a c c a"); System.out.println("a d f d a"); Ny løsning: final int BREDDE = 9; // 123456789 ut.outln("a", BREDDE, Out.CENTER); // a ut.outln("a a", BREDDE, Out.CENTER); // a a ut.outln("a b a", BREDDE, Out.CENTER); // a b a ut.outln("a c c a", BREDDE, Out.CENTER); // a c c a ut.outln("a d f d a", BREDDE, Out.CENTER); // a d f d a hint: Skriv ut alle linjene med samme bredde, og bruk Out.CENTER for å sentrere utskriften av hver linje Vi bruken nøkkelordet final for verdier som ikke skal endres det vi kaller konstanter og som vi konvensjonelt navngir med bare STORE BOKSTAVER.

INF1000 Plenumsgruppe 1, 08.09.02 Oppgave 1: RPJ: kapittel 3, opp. 4 INF1000 Plenumsgruppe 1, 08.09.02 Litt prematur parentetisk bemerkning: Hvorfor ut.outln(), men Out.CENTER? Objektet ut er av klassen Out som har en utskriftsmetode outln, men klassen Out har også noen verdier som ikke er knyttet til det ene eller det andre objektet altså: Lag et program som - leser inn et kronebeløp fra tastaturet, og - regner om beløpet til amerikanske dollar, engelske pund og svenske kroner og - skriver ut resultatet på skjermen. - outln er en metode som gjør noe for et Out-objekt. For det aktuelle objektet ut sin del, skriver outln til skjermen, siden det er dette utskriftsmediet ut kjenner (et annet Out-objekt kan ha en fil som utskriftsmedium) - CENTER er en konstant verdi av typen int som vi får direkte fra klassen Out, og som gjelder overalt og til alle tider. For omregninge gjelder følgende kurser: 1 USD ($) NOK 6,58 1 GBP ( ) NOK 13,23 1 SVK NOK 0,88 Oppgave 1: RPJ: kapittel 3, opp. 4 INF1000 Plenumsgruppe 1, 08.09.02 INF1000 Plenumsgruppe 1, 08.09.02 final double USD_TIL_NOK = 6.58; // bør vi egentlig bruke konstanter her? final double GBP_TIL_NOK = 13.23; // Se neste side. final double SVK_TIL_NOK = 0.88; ut.out("beløp: "); double kr = in.indouble(); System.out.println(kr); ut.out(" NOK " + kr + " ==> USD "); ut.outln(kr / USD_TIL_NOK, 2, 7); ut.out(" NOK " + kr + " ==> GBP "); ut.outln(kr / GBP_TIL_NOK, 2, 7); ut.out(" NOK " + kr + " ==> SVK "); ut.outln(kr / SVK_TIL_NOK, 2, 7); Angående konstantene USD_TIL_NOK, GBP_TIL_NOK og SVK_TIL_NOK. Vi bruker navngitte konstanter i stedet for literaler (1 og 3.14) for konsistens. Hvis én og samme verdi skal opptre mer enn ett sted i et program, må vi sørge for at vi ikke av vanvare endrer noen forekomster og glemmer å endre andre. Dette oppnår vi ved å bruke navnet på verdien alle steder der den opptrer, slik at eventuelle endringer bare gjøres ett sted nemlig i deklarasjonssetningen. I denne oppgaven gjør vi det rett og slett for å lære oss god programmeringskikk Det ligger i sakens natur at valutakursene varier, så å si fra sekund til sekund, så det hadde vel vært mer realistisk å lese dem inn fremfor å angi dem som konstanter i programmet. Siden nå disse verdiene ikke endres i vårt program, definerer vi dem som konstanter for å fremheve forskjellen mellom verdier som kan endres (variable verdier) og verdier som ikke kan endres (konstante verdier).

Oppgave 2: RPJ: kapittel 4, opp. 2 INF1000 Plenumsgruppe 1, 08.09.02 Oppgave 2: RPJ: kapittel 4, opp. 2 INF1000 Plenumsgruppe 1, 08.09.02 I det fiktive landet Ruritania er skattereglene slik at - hvis ens inntekt < 10 000, så betaler man 10% skatt på hele inntekten og, - hvis inntekten er >= 10 000 så betaler man 10% skatt på de første 10 000 og 30% på resten av inntekten. Lag et program som beregner og skriver ut skatten basert på en inntekt (i desimal-tall) lest fra terminal. I dette programmet bruker vi en variabel for å ta vare på den utregnede skatten, før den skrives ut men vi kunne ha klart oss uten denne variabelen, og beregnet skatten direkte i utskriftssetningene. I mer realistiske programmer, der regnestykkene gjerne er større, ønsker vi å bruke variabler for å holde styr på det som foregår for å opprettholde programmets konsistens. final int TAK = 10000; ut.out("inntekt: "); int inntekt = in.inint(); int skatt; if (inntekt < TAK ){ skatt = inntekt / 10; else { skatt = 1000 + (inntekt - 10000) * 30 / 100; ut.outln("skatt: " + skatt); Oppgave 2: RPJ: kapittel 4, opp. 3 INF1000 Plenumsgruppe 1, 08.09.02 Oppgave 2: RPJ: kapittel 4, opp. 3 INF1000 Plenumsgruppe 1, 08.09.02 De 16 bydelene i Oslo har nummer og navn. Du skal lage et program som - leser et heltall fra terminal og dersom det finnes en bydel med det nummeret, - skriver ut navnet på bydelen. Utskriften skal følge dette mønsteret: Bydel 13 heter Østensjø Tips: Bruk switch. Bydelslisten er gitt i koden på neste side. final int ALNA = 12; final int BJERKE = 9; final int FROGNER = 5; final int GAMLE_OSLO = 1; final int GRORUD = 10; final int GRÜNERLØKKA = 2; final int MARKA = 16; final int NORDRE_AKER = 8; final int NORSTRAND = 14; final int SAGENE = 3; final int ST_HANSHAUGEN = 4; final int STOVNER = 11; final int SØNDRE_NORDSTRAND = 15; final int ULLERN = 6; final int VESTRE_AKER = 7; final int ØSTENSJØ = 13; ut.out("bydelsnummer: "); int bydelsnummer = in.inint();

Oppgave 2: RPJ: kapittel 4, opp. 3 INF1000 Plenumsgruppe 1, 08.09.02 String bydel; switch (bydelsnummer){ case ALNA : bydel = "Alna"; case BJERKE : bydel = "Bjerke"; case FROGNER : bydel = "Frogner"; case GAMLE_OSLO : bydel = "Gamle Oslo"; case GRORUD : bydel = "Grorud ; case GRÜNERLØKKA : bydel = "Grünerløkka"; case MARKA : bydel = "Marka ; case NORDRE_AKER : bydel = "Nordre Aker"; case NORSTRAND : bydel = "Norstrand"; case SAGENE : bydel = "Sagene"; case ST_HANSHAUGEN : bydel = "St. Hanshaugen"; case STOVNER : bydel = "Stovner ; case SØNDRE_NORDSTRAND: bydel = "Søndre Nordstrand case ULLERN : bydel = "Ullern"; case VESTRE_AKER : bydel = "Vestre aker"; case ØSTENSJØ : bydel = "Østensjø"; default : bydel = "ukjent bydelsnummer"; ut.outln("bydel " + bydelsnummer + " heter " + bydel); Oppgave 2: RPJ: kapittel 4, opp. 3 INF1000 Plenumsgruppe 1, 08.09.02 // Alternativt: switch (bydelsnummer){ case ALNA: ut.outln("bydel " + bydelsnummer + " heter Alna"); case BJERKE: ut.outln("bydel " + bydelsnummer + " heter Bjerke");... default: ut.outln("bydel " + bydelsnummer + "? Ukjent bydelsnummer"); Oppgave 3 INF1000 Plenumsgruppe 1, 08.09.02 Lag et program som finner ut om en person er gammel nok til å kjøpe en kinobillett med 11-årsgrense. Programmet skal spørre om personens alder, og - hvis vedkommende er minst 11 år, så skal programmet skrive ut "Kan kjøpe billett", - ellers skal programmet skrive ut "Kan ikke kjøpe billett". final int ALDERSGRENSE = 11; ut.out("alder: "); int alder = in.inint(); if (alder < ALDERSGRENSE){ ut.outln("kan ikke kjøpe billett"); else { ut.outln("kan kjøpe billett"); Oppgave 4 INF1000 Plenumsgruppe 1, 08.09.02 Endre programmet ovenfor slik at det gir følgende svar: - er kjøperen 0-6 år: "Kan bare se filmer uten aldersgrense" - er kjøperen 7-15 år: "Kan se ungdomsfilmer" - er kjøperen 16 år eller eldre: "Kan se alle filmer" final int ALDERSGRENSE_7 = 7; final int ALDERSGRENSE_16 = 16; ut.out("alder: "); int alder = in.inint(); if (alder < ALDERSGRENSE_7) { ut.outln("kan bare se filmer uten aldersgrense"); else if (alder < ALDERSGRENSE_16){ ut.outln("kan se ungdomsfilmer"); else { ut.outln("kan se alle filmer");

Oppgave 4 INF1000 Plenumsgruppe 1, 08.09.02 // Alternativt: switch (alder) { case 0: case 1: case 2: case 3: case 4: case 5: case 6: ut.outln( Kan bare se filmer uten aldersgrense"); case 7: case 8: case 9: case 10: case 11: case 12: case 13: case 14: case 15: ut.outln( Kan se ungdomsfilmer"); default: ut.outln( Kan se alle filmer"); Oppgave 5 INF1000 Plenumsgruppe 1, 08.09.02 Lag et program som ber brukeren oppgi hvorvidt han/hun er registrert som student ved UiO. Svaret skal lagres i en boolesk variabel erstudent. Programmet skal så gjøre følgende: - Er brukeren registrert som student ved UiO, skal programmet spørre brukeren om vedkommende har stemt ved årets Studentparlamentsvalg. - Hvis brukeren ikke har stemt, skal programmet minne vedkommende på å stemme ved neste valg. - Hvis brukeren derimot ikke er registrert som student ved UiO, skal programmet oppfordre vedkommende til å bli det. Merk: du må i denne oppgaven avgjøre hvordan du skal få overført brukerens svar til den boolske variabelen erstudent. Du kan f.eks. be brukeren svare 'j' eller 'n og bruke char svar = tast.inchar(); til å lese svaret. Så kan du etterpå sjekke hva svaret var med if(svar == 'j') <Gjør noe> else <Gjør noe annet> Du kan også be brukeren svare f.eks. "ja" eller "nei og kan da bruke String svar = tast.inword(); til å lese svaret. Så kan du sjekke hva svaret var med if (svar.equals("ja")) <Gjør noe> else <Gjør noe annet> List gjerne opp flere muligheter hvis du ser noen. Velg så en av løsningene til denne oppgaven. Oppgave 5 INF1000 Plenumsgruppe 1, 08.09.02 char svar; ut.out("er du registrert som student ved UIO (j/n): "); svar = in.inchar(); boolean erstudent = (svar == 'j' svar == 'J ); if (erstudent) { ut.out("stemte du ved årets Studentparlamentsvalg (j/n): "); in.skipwhite(); // Vi må i alle fall forbi linjeskift svar = in.inchar(); if (svar == 'n' svar == 'N') { ut.outln("vel, husk nå i alle fall å stemme neste år."); else { // Er ikke student ut.outln("men da kan du jo registrere deg nå."); Oppgave 6 INF1000 Plenumsgruppe 1, 08.09.02 Lag en enkel kalkulator som støtter de fire regneartene (+ - * /). Programmet skal begynne med å spørre brukeren om - hvilken regneart han/hun ønsker å benytte seg av. Brukeren svarer da f.eks. '*' og - programmet leser svaret med inchar og lagrer svaret i en char-variabel. Programmet skal så be om - to heltall (disse lagres i hver sin int-variabel). Bruk en forgrening (enten en kjedet if-else setning eller en switch-setning) til å sjekke hvilken regneart brukeren valgte og skriv ut svaret av å utføre den valgte regneoperasjonen på de to tallene. Tenk gjennom hva som skjer ved divisjon (hva slags divisjon får vi utført?) og forklar hvordan vi kan modifisere programmet hvis vi ønsker den andre typen divisjon.

Oppgave 6 INF1000 Plenumsgruppe 1, 08.09.02 ut.out("operator: "); char oper = in.inchar(); ut.out("venstre operand: "); int v = in.inint(); ut.out("høyre operand: "); int h = in.inint(); Oppgave 6 INF1000 Plenumsgruppe 1, 08.09.02 Vi kunne ha sikret at vi hadde en lovlig operator før vi ba om operandene while (!(oper == '+' oper == '-' oper == '*' oper == '/')){ ut.outln("lovlige operatorer er +, -, * og /"); ut.out("operator: "); in.skipwhite(); oper = in.inchar(); default-grenen (-clause'en) på forrige side er ikke nødvendig hvis vi alt har sikret oss en gyldig operator. switch (oper){ case '+': ut.outln(v + " + " + h + " = " + (v + h)); case '-': ut.outln(v + " - " + h + " = " + (v - h)); case '*': ut.outln(v + " * " + h + " = " + (v * h)); case '/': ut.outln(v + " / " + h + " = " + (v / h)); default : ut.outln("ukjent operator: " + oper);