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



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

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

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

INF1000 : Forelesning 2

Fullstendige programeksempler. INF1000 : Forelesning 2. Eksempel 1. Eksempel 2. Vi skal nå se på endel programeksempler.

INF1000 : Forelesning 2

De numeriske datatypene. INF1000 : Forelesning 2. Sannhetsverdier. Desimaltall. int og double er eksempler på numeriske datatyper

INF 1000 høsten 2011 Uke 3 6. september

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

Repetisjon Program. INF1000 Uke 2. Repetisjon Program Prosedyren main Alt inne i klasser. Repetisjon Variable og uttrykk

Når du løser oppgaver. INF1000 : Forelesning 3. Eksempel: Celcius og Fahrenheit. Hvilke data beskriver problemet?

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

Innlesning fra tastatur med easyio. INF1000 høst Vi må først skrive i toppen av programmet: import easyio.*;

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

Oversikt. INF1000 Uke 3. Underveisevaluering. Spørsmål

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

Ta inn og ut av 2D-array. Java 6. Liste over ulike verdier i 2D-array. Det ferdige programmet. Vi skal lage et program som illustrerer hvordan man

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

Forelesningsquiz. Forelesning inf Java 5. Sett dere to (eller tre) sammen og besvar de fire spørsmålene på utdelt ark. Tid: 15 min.

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

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

Java 3. Litt om Java-teknologien. Fortsette innføringen i språket Java Idag: variable, uttrykk, lese fra terminal, forgreninger. 31.

Java. Java 3. Ulike varianter for ulike behov

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

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

Forelesning inf Java 2

INF1000: Forelesning 4. Mer om arrayer Metoder

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

Oversikt. INF1000 Uke 2. Repetisjon - Program. Repetisjon - Introduksjon

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

Oversikt. Uke 2, INF 1000, 30 aug Variable, tilordninger og uttrykk. Repetisjon: Java programmering

Java. INF1000 : Forelesning 2. Ulike varianter for ulike behov. Java Standard Edition (Java SE) Java:

Forelesning inf Java 2

Java. INF1000- uke 3. Ulike varianter for ulike behov

Forelesning inf Java 2

INF1000 : Forelesning 5

I dag skal vi se på. INF 1000 (uke 2) Variabler, tilordninger og uttrykk. Gruppene starter denne uken! Klart for første oblig

INF 1000 (uke 2) Variabler, tilordninger og uttrykk

Oversikt. INF1000 Forelesning 6. Variable Deklarasjon. Variabel en plass i lageret int radius;

INF 1000 høsten 2011 Uke september

INF1000 (Uke 6) Mer om metoder, tekster

INF1000 undervisningen INF 1000 høsten 2011 Uke september

Rep: Metoder. INF1000 (Uke 6) Mer om metoder, tekster. Rep: Metoder. 3 typer variable: Klassevariable. Java-programmene så langt i kurset:

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

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

Blokker. Uke 4, INF 1000, 13 sept Løkker og arrayer. Eksempel. Deklarasjoner inne i blokker. Institutt for Informatikk Universitet i Oslo

Innhold uke 4. INF 1000 høsten 2011 Uke 4: 13. september. Deklarasjon av peker og opprettelse av arrayobjektet. Representasjon av array i Java

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

Forelesning inf Java 5

Forelesning inf Java 5

INF1000 Uke 4. Innlesning fra terminal. Uttrykk og presedens. Oversikt

Oversikt. INF1000 Uke 1 time 2. Repetisjon - Introduksjon. Repetisjon - Program

INF1000 høst Forelesning 2: Innlesning fra terminal Boolean-variable if-setninger Løkker Litt mer om heltall: divisjon og modulo Arrayer

Forelesning inf Java 4

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

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

Ole Christian Lingjærde, 12. september 2013

Forelesning inf Java 4

Repetisjon INF 1000 våren 2006

I dag skal vi se på. INF 1000 (uke 2) Variabler, tilordninger og uttrykk. Gruppene starter i dag! Klart for første oblig

INF 1000 (uke 2) Variabler, tilordninger og uttrykk

INF1000 EKSTRATILBUD. Stoff fra uke 1-5 (6) 3. oktober 2012 Siri Moe Jensen

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

INF1000 : Forelesning 4

Introduksjon til objektorientert. programmering. Hva skjedde ~1967? Lokale (og globale) helter. Grunnkurs i objektorientert.

INF1000 : Forelesning 3

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

Blokker og metoder INF1000 (Uke 6) Metoder

Forelesning inf Java 5

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

Java 6. Eksempel med to-dimensjonal array Filbehandling Tekster

INF1000 Uke 3. Innlesning fra terminal. Uttrykk og presedens. Oversikt. Litt repetisjon Blokker og forgreininger

INF1000 : Forelesning 1 (del 2)

INF1000 (Uke 6) Mer om metoder, tekster

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

Orakeltjeneste på Abel Hjelp til Obligatorisk oppgave 2. INF1000 (Uke 6) Mer om metoder, tekster. Rep: Metoder. Rep: Metoder

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

Ukeoppgaver 2: sep (INF Høst 2010)

Dagens forelesning. Java 13. Rollefordeling (variant 1) Rollefordeling (variant 2) Design av større programmer : fordeling av roller.

INF1000 Uke 5. Litt om objekter, filer med easyio, tekst

Mål for INF1000. Repetisjon INF 1000 våren Representasjon av data. Programvareutvikling - oversikt

Kort repetisjon av doble (nestede) løkker Mer om 1D-arrayer Introduksjon til 2D-arrayer Metoder

Universitetet i Bergen Det matematisk-naturvitenskapelige fakultet Institutt for informatikk

som jobbet nærmest døgnet rundt i 18 måneder i Menlo Park i California for å forberede den neste bølgen innen computing.

Litt Java-historikk. Litt Java-historikk. Ulike varianter for ulike behov. Litt Java-historikk. The Green Team

INF1000 (Uke 15) Eksamen V 04

INF1000 (Uke 15) Eksamen V 04

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

for (int i=0; i<3; i++) { for (int j=0; j<5; j++) { System.out.print(i*j); System.out.println();

TOD063 Datastrukturer og algoritmer

Leksjon 3. Kontrollstrukturer

Datatyper vi kommer til å benytte. Forelesning inf Java 2. Vi kan ha mange variable. Ting å passe på

Generelt om oblig 3. Oppgaveteksten kort sammendrag. Deloppgaver/menyvalg 15/03/2010. INF1000 Forelesning 9

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO

Eksempel: Body Mass Index (BMI)

Oblig 4 (av 4) INF1000, høsten 2012 Værdata, leveres innen 9. nov. kl

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

INF1000 Metoder. Marit Nybakken 16. februar 2004

Transkript:

I dag INF1000 (Uke 3) Mer om uttrykk, terminal I/O, forgreninger Grunnkurs i programmering Institutt for Informatikk Universitet i Oslo Litt repetisjon Mer om uttrykk Lesing og skriving til terminal Forgreninger Are Magnus Bruaset og Anja B. Kristoffersen 24-01-2005 2 Rep: Datatyper Rep: Oppsummering - variabler Datatype Beskrivelse Eksempel int heltall int k = 3; double desimaltall double x = 3.14; boolean sannhetsverdi boolean b = true; char tegn char c = '@'; String tekst String s = "Hei på deg"; En variabel deklareres i programmet, og vi får da en plass i lageret med Et navn En type En verdi 24-01-2005 3 24-01-2005 4

Rep: Oppsummering - variabelnavn Rep: Oppsummering - tilordning Navn på variabler bør begynne med liten bokstav Stor bokstav for hver stavelse (antallbarn) Kan ikke være det samme som noen av de reserverte ordene i Java-språket Eksempel: i = j*3+i ; Venstre side (i) er navnet på en variabel som skal få ny verdi Høyresiden (j*3+i) er et regnestykke Variabelnavn (som j og i) erstattes med deres nåværende (gamle) verdi 24-01-2005 5 24-01-2005 6 Rep: Oppsummering - uttrykk Rep: Pakker og Java-klassebibliotek Tre typer uttrykk som ofte forekommer: Numeriske uttrykk Logiske uttrykk Streng-uttrykk double d = Math.sqrt(23); I et eget Java-bibliotek er det over 2000 ferdigprogrammerte klasser Med unntak av en samling av mye brukte klasser, (pakken java.lang ), må vi importere en slik samling av klasser hvis vi vil bruke noen av dem 24-01-2005 7 24-01-2005 8

Rep: Pakker og Java-klassebibliotek Tilbake på sporet Vi har hittil brukt biblioteksklassene : Math og System som begge er i java.lang Skal vi bruke noen andre klasser i andre pakker må disse importeres, f.eks. for IO. I toppen av programmet må vi da ha importsetning: import java.io.*; 24-01-2005 9 24-01-2005 10 Ting å passe på Multiplikasjon må alltid angis eksplisitt med *: int prod = 10 a; // feil!! int prod = 10 * a; // riktig Mer å passe på Hvis vi har variabelen boolean b så er det ingen forskjell på b == true b Det er forskjell på = og == : = brukes for å sette verdien til en variabel = = brukes for å sammenlikne to verdier Ekstra parenteser kan øke leseligheten for mennesker: b = x == y; betyr det samme som b = (x == y); 24-01-2005 11 24-01-2005 12

Konvertering Hvis nødvendig vil Java automatisk (implisitt) konvertere heltall til desimaltall Eksempler: double x = 7; Mer om konvertering Java vil ikke automatisk konvertere desimaltall til heltall, siden det generelt fører til en endring i verdien: int a = 7.15; // Ikke lov!! int a = 15; double x = a; double x = 15.6; int a = x; // Ikke lov!! double x = (7 + 14) * 3-12; int a = 3.14 * 7 / 5; // Ikke lov!! 24-01-2005 13 24-01-2005 14 Mer om konvertering Kan konvertere et desimaltall til et heltall ved å eksplisitt be om det (casting): int a = (int) 7.15; // Lovlig! double x = 15.6; int a = (int) x; // Lovlig! int a = (int) 3.14 * 7 / 5; // Lovlig! I noen tilfeller - når tallene allikevel er hele - spiller det ingen rolle om man bruker int eller double. Så hvorfor ikke alltid bruke double? 24-01-2005 15 Hvorfor ikke alltid bruke double? Regning med heltall er eksakt, regning med desimaltall er ikke det - maskinen kan gjøre avrundingsfeil: double x = 0.1; double y = (x + 1) - 1; // Nå er verdien til x == y false! Verdiene til x og y er nesten like, men fordi det er en forskjell i et av desimalene langt ute blir x==y false. Slike avrundingsfeil betyr ofte veldig lite, men du kan ikke stole på at alle desimalene er korrekte når du regner med double. 24-01-2005 16

Mer om double/int Det tar mer plass i hukommelsen å holde en double-verdi enn å holde en int-verdi Det kan ta mer tid å gjøre beregninger med desimaltall enn med heltall Konklusjon: når det er naturlig å bruke heltall bruker du int og når det er naturlig å bruke desimaltall bruker du double! Avrunding Konvertering fra desimaltall til heltall involverer normalt en avrunding class Avrunding { double x = 0.53; // Avrund nedover: System.out.println((int)Math.floor(x)); // Avrund oppover: System.out.println((int)Math.ceil(x)); // Avrund til nærmeste heltall: System.out.println(Math.round(x)); 24-01-2005 17 24-01-2005 18 Programvareutvikling 1. Først har vi et problem vi skal løse (en oppgave) 2. Finn hvilke data som beskriver problemet Hva skal være input til programmet (hva er kjent)? Hva skal være output fra programmet (hva ønskes funnet)? 3. Finn en fremgangsmåte (=algoritme) for å løse problemet, dvs. for å komme fra input'ene til output'ene: input algoritme output Programvareutvikling forts. (En algoritme er en beskrivelse - ment å leses av mennesker - av hvordan problemet kan løses i flere steg, og hvor hvert steg er lett å oversette til et programmeringsspråk som Java) 4. Skriv et Java-program som "implementerer" løsningen ovenfor, dvs som finner output'ene og f.eks. skriver dem ut på skjerm 5. Til slutt: utfør og test ut programmet 24-01-2005 19 24-01-2005 20

Eksempel: Oppussing Problem: En vegg er 2.35 x 7.50 meter. Veggen skal males med en maling som dekker 6 kvadratmeter per liter. Lag et program som regner ut hvor mange liter maling vi trenger, og hvor mange liters-bokser maling vi må kjøpe. Oppussing forts. Formler (algoritme): Areal = 2.35 * 7.50 Antall liter maling = areal / 6 Antall liters-bokser = antall liter maling, avrundet oppover til nærmeste heltall 24-01-2005 21 24-01-2005 22 Hvilke data beskriver problemet? Input: Veggens dimensjoner (to desimaltall) Hvor stort areal en liter maling holder til (desimaltall) Output: Antall liter maling som går med (desimaltall) Antall liters-bokser som trengs (heltall) 24-01-2005 23 Løsningsskisse class Oppussing { public static void main (String[] args){ <deklarasjoner> <beregn areal> <beregn antall liter maling> <beregn antall liters-bokser> <skriv ut> Ting vi må ta stilling til: ƒ Hvilke variable trenger vi? Hva slags type skal de ha? ƒ Når skal vi initialisere variablene? ƒ Hvordan avrunder vi oppover til nærmeste heltall i Java? ƒ Hvordan skal utskriften se ut? 24-01-2005 24

Løsning class Oppussing { public static void main (String[] args) { double areal, liter; int antbokser; areal = 2.35 * 7.50; liter = areal / 6; antbokser = (int) Math.ceil(liter); System.out.println( Areal: + areal); System.out.println("Antall liter maling: " + liter); System.out.println("Antall liters-bokser: " + antbokser); Eksempel: Celcius og Fahrenheit Problem: I Norge angis vanligvis temperaturer i Celsius (C), mens man bl.a. i USA benytter Fahrenheit (F). F.eks. svarer 0 C til 32 F. Lag et program som lager en tabell som nedenfor (og med temperaturer i Fahrenheit fylt inn): Celsius Fahrenheit -10.0 0.0... 37.0 100.0 24-01-2005 25 24-01-2005 26 Hvilke data beskriver problemet? Input: De fire Celsius-temperaturene -10, 0, 37 og 100 (desimaltall) Output: De tilsvarende (konverterte) Fahrenheittemperaturene (desimaltall) 24-01-2005 27 Framgangsmåte Vi må kjenne formelen for å regne om fra Celsius til Fahrenheit. La TC = Temperatur i Celsius TF = Temperatur i Fahrenheit Vi finner i et oppslagsverk at omregningsformelen er TF = 9 * TC / 5 + 32 Dermed blir fremgangsmåten slik: TC (input) TF = 9*TC/5+32 (algoritme) 24-01-2005 28 TF (output)

Skisse class TemperaturKonvertering { public static void main (String[] args) { <deklarasjoner> <Skriv overskrift> <sett TC lik -10> <regn ut TF> <skriv ut> <sett TC lik 0> <regn ut TF> <skriv ut> <sett TC lik 37> <regn ut TF> <skriv ut> <sett TC lik 100> <regn ut TF> <skriv ut> 24-01-2005 29 Java-program: endelig løsning class TemperaturKonvertering { public static void main (String[] args) { double TC, TF; System.out.println("Celcius Fahrenheit"); TC = -10; TF = 9 * TC / 5 + 32; System.out.println(TC + " " + TF); TC = 0; TF = 9 * TC / 5 + 32; System.out.println(TC + " " + TF); TC = 37; TF = 9 * TC / 5 + 32; System.out.println(TC + " " + TF); TC = 100; TF = 9 * TC / 5 + 32; System.out.println(TC + " " + TF); 24-01-2005 30 Formatert utskrift til skjerm easyio Formatert utskrift vil si at vi angir nøyaktig hvordan utskriften skal se ut og plasseres på skjermen Kan gjøres "manuelt" med System.out.print(...), men det er upraktisk Bedre: bruke en ferdiglaget pakke for slikt. I INF1000 bruker vi pakken easyio. For å få tilgang til denne pakken må vi skrive helt i toppen av programmet vårt (før class): Inne i klassen skriver vi følgende før vi kan starte formatert utskrift: Out skjerm = new Out(); Så kan vi skrive ut det vi ønsker, f.eks.: double pi = 3.1415926; // Skriv ut pi: 2 desimaler, høyrejustert på 6 plasser. skjerm.out(pi, 2, 6); 24-01-2005 31 24-01-2005 32

Eksempel Vi må først importere pakken easyio Tre måter å skrive ut på class FormatertUtskrift { Out skjerm = new Out(); int BREDDE1 = 15; Vi oppretter en int BREDDE2 = 30; verktøykasse for skjerm.out("navn", BREDDE1); skriving til terminal skjerm.outln("adresse", BREDDE2); skjerm.out("kristin Olsen", BREDDE1); skjerm.outln("vassfaret 14, 0773 Oslo", BREDDE2); I verktøykassen ligger det bl.a. verktøy (på java-språk: metoder) for å skrive til skjerm med og uten linjeskift til slutt. 24-01-2005 33 Uten formatering: skjerm.out("per Hansen"); skjerm.out(12345); skjerm.out(3.1415, 2); 24-01-2005 34 Tre måter å skrive ut på Tre måter å skrive ut på Angi utskriftsbredde: skjerm.out("per Hansen", 15); skjerm.out(12345, 15); skjerm.out(3.1415, 2, 15); Angi utskriftsbredde og justering: skjerm.out("per Hansen", 15, out.right); skjerm.out(12345, 15, Out.CENTER); skjerm.out(3.1415, 2, 15, Out.LEFT); 24-01-2005 35 24-01-2005 36

Innlesning fra terminal Innlesning fra terminal kan gjøres på flere måter i Java. I INF1000 bruker vi pakken easyio. Som før må vi da skrive i toppen av programmet: Inne i klassen skriver vi følgende før vi kan starte innlesning: In tastatur = new In(); Så kan vi lese inn fra terminal (=tastatur), f.eks. et heltall: int radius; System.out.print( Oppgi radiusen: ); radius = tastatur.inint(); 24-01-2005 37 class LesFraTerminal { In tast = new In(); Eksempel Vi må først importere pakken easyio System.out.print("Skriv et heltall: "); int k = tast.inint(); System.out.println("Du skrev: " + k); Vi oppretter en verktøykasse for lesing fra terminal og lager en variabel tast som blir vårt håndtak til denne verktøykassen I verktøykassen ligger det bl.a. en metode for å lese et heltall fra terminal. 24-01-2005 38 Lesemetoder // Opprette forbindelse med tastatur: In tastatur = new In(); // Lese et heltall: int k = tastatur.inint(); // Lese et desimaltall: double x = tastatur.indouble(); // Lese et enkelt tegn: char c = tastatur.inchar(); // Lese et enkelt ord: String s = tastatur.inword(); // Lese resten av linjen: String s = tastatur.inline(); Hvordan lesemetodene virker Metodene inint(), indouble() og inword(): Hopper over eventuelle innledende blanke tegn Leser alt fram til neste blanke tegn eller linjeskift. Dersom det som leses ikke er et heltall når inint() brukes eller et desimaltall når indouble() brukes, gis det en feilmelding og man får en ny sjanse 24-01-2005 39 24-01-2005 40

Hvordan lesemetodene virker Metoden inchar(): Leser neste tegn, enten det er et blankt tegn eller ikke Metoden inline(): Leser alt fram til slutten av linjen (inkludert blanke tegn) 24-01-2005 41 Hvordan lesemetodene virker Terminal-input: String s1 = tast.inword(); String s2 = tast.inword(); String s1 = tast.inword(); int x = tast.inint(); x y z _ 1 6 1 2 7 5 _ = blank s1: "xyz" s2: "161275" s1: "xyz" x : 161275 String s = tast.inline(); s: " xyz 161275" char c1 = tast.inchar(); char c2 = tast.inchar(); char c3 = tast.inchar(); int x = tast.inint(); c1: ' ' c2: ' ' c3: 'x' feilmelding 24-01-2005 42 Eksempel: lese persondata Problem: Lag et program som leser data om en person fra terminal Navn Yrke Alder og som skriver ut dataene på skjermen etterpå Framgangsmåte: Bruk inline() til å lese navn og yrke, og inint() til å lese alder 24-01-2005 43 Ferdig program class LesDataOmPerson { String navn, yrke; int alder; In tast = new In(); System.out.print("Navn: "); navn = tast.inline(); System.out.print("Yrke: "); yrke = tast.inline(); System.out.print("Alder: "); alder = tast.inint(); System.out.print("Hei " + navn + ", du er " + alder); System.out.println(" år gammel og jobber som " + yrke); 24-01-2005 44

Eksempel 2 class LesFraTerminal2 { In tastatur = new In(); System.out.print("Skriv tre ord: "); String s1 = tastatur.inword(); String s2 = tastatur.inword(); String s3 = tastatur.inword(); System.out.println("Du skrev disse ordene:"); System.out.println(" " + s1); System.out.println(" " + s2); System.out.println(" " + s3); 24-01-2005 45 Eksempel 3 class PigLatin { In tastatur = new In(); System.out.print("Skriv et ord: "); String s = tastatur.inword(); String s2 = s.substring(1) + s.charat(0) + "ay"; System.out.print("Oversettelse til pig Latin: "); System.out.println(s2); 24-01-2005 46 Programmer med forgreninger En svært nyttig programmeringsteknikk er å bruke forgreninger, dvs forskjellige instruksjoner utføres i ulike situasjoner Vi kan få til dette med en if-setning: if (logisk uttrykk) { <instruksjoner> else { <instruksjoner> F.eks. x < y eller et annet uttrykk som enten er true eller false Blir utført når det logiske uttrykket er sant (true) Blir utført når det logiske uttrykket er usant (false) Eksempel if (x > 0) { System.out.println("Tallet er positivt"); else { System.out.println("Tallet er ikke positivt"); 24-01-2005 47 24-01-2005 48

Eksempel: Hvem er høyest? Eksempel: Beregning av skatten class Hoyde { public static void main (String[] args) { In tastatur = new In(); double høyde1, høyde2; System.out.print("Høyden til Per: "); høyde1 = tastatur.indouble(); System.out.print("Høyden til Kari: "); høyde2 = tastatur.indouble(); if (høyde1 > høyde2) { System.out.println("Per er høyere enn Kari"); else { System.out.println("Per er ikke høyere enn Kari"); 24-01-2005 49 Problem: I det fiktive landet Ruritania er skattereglene slik (beløp i ruritanske kroner): 10% skatt hvis inntekt < 10 000 20% skatt hvis inntekt t 10 000 Lag et program som regner ut, for en gitt inntekt, hvor mye man skal betale i skatt 24-01-2005 50 Skatteregler Løsningsskisse Formler: Skatten man skal betale er 0.1 * inntekt hvis inntekt < 10 000 0.2 * inntekt hvis inntekt t 10 000 Vi er nå klare til å programmere class Skatt { public static void main (String[] args) { <deklarasjoner> <les inntekten fra terminal> <beregn skatten> <skriv ut resultatet> 24-01-2005 51 24-01-2005 52

Faktorer vi må ta stilling til Løsning Hvilke variable trenger vi? Hva slags type skal de ha? class Skatt { Hvordan beregner vi skatten? Hvordan skal utskriften se ut? 24-01-2005 53 24-01-2005 54 Løsning class Skatt { double inntekt, skatt; In tastatur = new In(); System.out.print("Inntekt: "); inntekt = tastatur.indouble(); if (inntekt < 10000) skatt = 0.1 * inntekt; else skatt = 0.2 * inntekt; System.out.println("Skatt: " + skatt); 24-01-2005 55