TEMA: Kommunikasjon med Bruker INF1000 Plenumsgruppe 1, 08.09.02. -formatert utskrift



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

INF1000 oppgaver til uke 38 (17 sep 23 sep)

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

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.

Ukeoppgaver 2: sep (INF Høst 2010)

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

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

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

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

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

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

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

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

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

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

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

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

if-tester Funksjoner, løkker og iftester Løkker og Informasjonsteknologi 2 Læreplansmål Gløer Olav Langslet Sandvika VGS

Ukeoppgaver INF1000: 12. feb 16. feb

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

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

Del 1 En oversikt over C-programmering

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

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

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

INF 1000 høsten 2011 Uke september

INF1000 undervisningen INF 1000 høsten 2011 Uke september

Forelesning inf Java 4

Om tabellene. August 2014

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

Om tabellene. Oktober 2014

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

Kapittel 1 En oversikt over C-språket

Oblig 4Hybelhus litt mer tips enn i oppgaven

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

2 Om statiske variable/konstanter og statiske metoder.

Hovedtall om arbeidsmarkedet. Oslo. En måned

INF1000 : Forelesning 3

BYRÅDETS ÅRSBERETNING 2016

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

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

1. Finn klassene (hvilke objekter er det i problemet) 1. Dataene som beskriver problemet (hvilke objekter har vi og hvor mange klasser er det?

INF1000 Behandling av tekster

Om tabellene. Juni 2019

Om tabellene. Mars 2019

Om tabellene. September 2019

Hovedtall om arbeidsmarkedet i Oslo januar 2013


Øvingsforelesning 1 Python (TDT4110)

INF Uke 10. Ukesoppgaver oktober 2012

Obligatorisk oppgave nr. 3 (av 4) i INF1000, våren 2006

UNIVERSITETET I OSLO

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

TDT4102 Prosedyre og Objektorientert programmering Vår 2014

Hovedtall om arbeidsmarkedet. Oslo. En måned.

Om tabellene. Oktober 2015

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

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

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


Om tabellene. Juni 2015

Om tabellene. Mai 2016

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

Løsningsforslag ukeoppg. 6: 28. sep - 4. okt (INF Høst 2011)

Om tabellene. August 2016

BYRÅDETS ÅRSBERETNING 2015

Om tabellene. Juni 2016

Om tabellene. Juli 2017

Legemeldt sykefravær etter bosted. Kvartal

Om tabellene. November 2016

INF1000 : Forelesning 4

i=0 i=1 Repetisjon: nesting av løkker INF1000 : Forelesning 4 Repetisjon: nesting av løkker Repetisjon: nesting av løkker j=0 j=1 j=2 j=3 j=4

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

Om tabellene. April 2016

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

UNIVERSITETET I OSLO

Repetisjon. INF gruppe 13

Spørsmål fra forrige forelesning. INF1000 Forelesning 7. Oppførselen til inword()/inint()/etc. Operator-presedens i Java

INF1000 HashMap. Marit Nybakken 2. november 2003

UNIVERSITETET I OSLO

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

Transkript:

TEMA: Kommunikasjon med Bruker INF1000 Plenumsgruppe 1, 08.09.02 - terminal-i/o (bruker-i/o) - innlesing av ulike typer data - pakken easyio - klassene In og Out In in = new In(); Out ut = new Out(); 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. Med tom parentes etter klassenavnene etter new blir in tastaturet og ut skjermen. ut.out(i / 3.0, 2, 7); Tall justeres automatisk mot høyre, hvis intet annet er sagt. I/O : Input/Output

TEMA: Valgsetninger INF1000 Plenumsgruppe 1, 08.09.02 if-else: Hvis dette er tilfellet gjør vi slik, og ellers gjør vi sånn. if (<test>){ <betinget handling>; else { <alternativ>; switch: 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>; break; case <verdi 2>: <handling 2>; break;... 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 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"); hint: Skriv ut alle linjene med samme bredde, og bruk Out.CENTER for å sentrere utskriften av hver linje

Oppgave 1: RPJ: kapittel 3, opp. 1 INF1000 Plenumsgruppe 1, 08.09.02 Ny løsning: Out ut = new Out(); 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 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 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å: - 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.

Oppgave 1: RPJ: kapittel 3, opp. 4 INF1000 Plenumsgruppe 1, 08.09.02 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. 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 final double USD_TIL_NOK = 6.58; final double GBP_TIL_NOK = 13.23; final double SVK_TIL_NOK = 0.88; // bør vi egentlig bruke konstanter her? // Se neste side. Out ut = new Out(); In in = new In(); 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);

INF1000 Plenumsgruppe 1, 08.09.02 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 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.

Oppgave 2: RPJ: kapittel 4, opp. 2 INF1000 Plenumsgruppe 1, 08.09.02 final int TAK = 10000; In in = new In(); Out ut = new Out(); 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 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.

Oppgave 2: RPJ: kapittel 4, opp. 3 INF1000 Plenumsgruppe 1, 08.09.02 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; In in = new In(); Out ut = new Out(); 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"; break; case BJERKE : bydel = "Bjerke"; break; case FROGNER : bydel = "Frogner"; break; case GAMLE_OSLO : bydel = "Gamle Oslo"; break; case GRORUD : bydel = "Grorud ; break; case GRÜNERLØKKA : bydel = "Grünerløkka"; break; case MARKA : bydel = "Marka ; break; case NORDRE_AKER : bydel = "Nordre Aker"; break; case NORSTRAND : bydel = "Norstrand"; break; case SAGENE : bydel = "Sagene"; break; case ST_HANSHAUGEN : bydel = "St. Hanshaugen"; break; case STOVNER : bydel = "Stovner ; break; case SØNDRE_NORDSTRAND: bydel = "Søndre Nordstrand break; case ULLERN : bydel = "Ullern"; break; case VESTRE_AKER : bydel = "Vestre aker"; break; case ØSTENSJØ : bydel = "Østensjø"; break; 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"); break; case BJERKE: ut.outln("bydel " + bydelsnummer + " heter Bjerke"); break;... 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; In in = new In(); Out ut = new Out(); 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; In in = new In(); Out ut = new Out(); 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"); break; case 7: case 8: case 9: case 10: case 11: case 12: case 13: case 14: case 15: ut.outln( Kan se ungdomsfilmer"); break; 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 Out ut = new Out(); In in = new In(); 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 Out ut = new Out(); In in = new In(); ut.out("operator: "); char oper = in.inchar(); ut.out("venstre operand: "); int v = in.inint(); ut.out("høyre operand: "); int h = in.inint(); switch (oper){ case '+': ut.outln(v + " + " + h + " = " + (v + h));break; case '-': ut.outln(v + " - " + h + " = " + (v - h));break; case '*': ut.outln(v + " * " + h + " = " + (v * h));break; case '/': ut.outln(v + " / " + h + " = " + (v / h));break; default : ut.outln("ukjent operator: " + oper);

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.