Løse reelle problemer

Like dokumenter
Løse reelle problemer

Innlesing fra fil og metoder med returverdier

Løkker og arrayer. Løse problemer med programmering. INF1000, uke3 Geir Kjetil Sandve

Løse reelle problemer

programeksempel Et større En større problemstilling Plan for forelesingen Problemstillingen (en tekstfil) inneholdt ordet "TGA"

Feilmeldinger, brukerinput og kontrollflyt

Introduksjon til objektorientert programmering

Metoder med parametre, løkker og arrayer

Løse reelle problemer

INF Uke 10. Ukesoppgaver oktober 2012

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

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

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

INF Løsning på seminaropppgaver til uke 8

Hvordan løse problemer med programmering?

Forelesning inf Java 5

Forelesning inf Java 5

INF Notat om I/O i Java

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

Forelesning inf Java 4

UNIVERSITETET I OSLO

INF1000: Forelesning 4. Mer om arrayer Metoder

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

TDT4100 Objektorientert programmering

IN1010. Fra Python til Java. En introduksjon til programmeringsspråkenes verden Dag Langmyhr

IN Notat om I/O i Java

INF1000 (Uke 6) Mer om metoder, tekster

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

Blokker og metoder INF1000 (Uke 6) Metoder

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

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

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

Hva er verdien til variabelen j etter at følgende kode er utført? int i, j; i = 5; j = 10; while ( i < j ) { i = i + 2; j = j - 1; }

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

Fra Python til Java, del 2

INF1000: Forelesning 11. Oppgave 2. Oppgave 1. Husk å melde deg på prøveeksamen i INF1000! Ole Christian Lingjærde 7.november 2006

Uke 8 Eksamenseksempler + Ilan Villanger om studiestrategier. 11. okt Siri Moe Jensen Inst. for informatikk, UiO

Eksempel 1 Eksempel 2 Dramatisering. INF1000 uke 3. Sundvollen 7. september 2015 Dag Langmyhr. INF1000 Sundvollen

Seminaroppgaver IN1010, uke 2

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

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

Fra Python til Java. En introduksjon til programmeringsspråkenes verden. Dag Langmyhr

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

INF1000 (Uke 15) Eksamen V 04

INF1000 (Uke 15) Eksamen V 04

INF1000 (Uke 6) Mer om metoder, tekster

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

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

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO

Input og beslutninger

INF1000 : Forelesning 4

UNIVERSITETET I OSLO

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

INF Ekstrainnlevering

INF uke 2. Inputt, beslutninger, kontrollflyt og prosedyrer

UNIVERSITETET I OSLO

Ole Christian Lingjærde, 12. september 2013

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

Forelesning inf Java 4

UNIVERSITETET I OSLO

INF1000: noen avsluttende ord

INF1000 : Forelesning 5

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

INF1000 Metoder. Marit Nybakken 16. februar 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.

Et større programeksempel. Hvordan løse et reelt problem med en objektorientert fremgangsmåte

UNIVERSITETET I OSLO

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

IN1010. Fra Python til Java. En introduksjon til programmeringsspråkenes verden Dag Langmyhr

De neste ukene. INF1000 Uke 12. Prøveeksamen. Nå - Prøveeksamen. Forelesning om IT og samfunn neste uke (13/11).

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

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

Programmering Høst 2017

Endret litt som ukeoppgave i INF1010 våren 2004

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

UNIVERSITETET I OSLO

Forkurs INF1010. Dag 3. Andreas Færøvig Olsen Gard Inge Rosvold Institutt for Informatikk, 15.

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

TOD063 Datastrukturer og algoritmer

Forelesning inf Java 5

INF100 Institutt for informatikk Universitetet i Bergen Øving 5

Programmering i C++ Løsningsforslag Eksamen høsten 2005

Jentetreff INF1000 Debugging i Java

Kapittel 5: Objektkommunikasjon

Gjennomgang prøveeksamen oppgave 1, 2, 4, 5, 7

UNIVERSITETET I OSLO

Variabler, input og beslutninger

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

Forkurs INF1010. Dag 3. Andreas Færøvig Olsen Eivind Storm Aarnæs

UNIVERSITETET I OSLO

INF1010 Sortering. Marit Nybakken 1. mars 2004

INF1010 våren januar. Objektorientering i Java

Eksamen i emnet INF100 Grunnkurs i programmering (Programmering I) Løsningsforslag

Finne ut om en løsning er helt riktig og korrigere ved behov

løsningsforslag-uke5.txt

MAT-INF 1100: Obligatorisk oppgave 1

INF1000 Eksamen 2014 (modifisert)

EKSAMENSFORSIDE Skriftlig eksamen med tilsyn

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

Transkript:

Løse reelle problemer Litt mer om løkker, metoder med returverdier, innlesing fra fil og strenger INF1000, uke5 Ragnhild Kobro Runde

MER OM LØKKER

Repetisjon fra forrige uke: while Syntaks: while (condition) {do1; do2;...} Eksempel: int tall = 1; while (tall < 100) { System.out.println(tall); tall = tall + 5; }

Initialiser-sjekk-inkrementer Et vanlig mønster knyttet til løkker: Gi startverdi til variabel før selve løkken (initialiser). Gå i løkke inntil variabelen passerer en gitt verdi. Inkrementer variabel i slutten av kodeblokken.

Initialiser-sjekk-inkrementer: for U5SumTallrekkeVhaFor.java

Initialiser-sjekk-inkrementer While int sum = 0; int tall = 1; intialiser For int sum = 0; while (tall<=100){ sjekk sum = sum + tall; tall = tall + 1; inkrementer } System.out.println(sum); for (int tall=1; tall<=100; tall=tall+1){ sum = sum + tall; } System.out.println(sum);

Initialiser-sjekk-inkrementer: for Litt mer kompleks syntaks: for (initialization; condition; update) {do1; do2;...} For-uttrykket inneholder tre helt ulike ting: Initialization: kjøres bare én gang, før selve løkken Condition: sjekkes hver runde før kodeblokken kjøres (tilsvarer uttrykket inni while-testen) Update (inkrementering): kjøres i slutten av løkken (legges til i slutten av kodeblokken)

Initialiser-sjekk-inkrementer: for for er egentlig ikke mer enn en forkortet skrivemåte Alt man kan gjøre vha for kan man også gjøre vha en tilsvarende while. Eneste formål er å forkorte og tydeliggjøre en typisk bruksmåte av (while-) løkker. Den typiske bruken er noe som skal repeteres et fastlagt antall ganger. I praksis brukes likevel for oftere enn while, fordi denne typiske bruksmåten er så veldig vanlig.

METODER MED RETURVERDIER

Metoder med returverdi Void-metodene fra uke2: static void minmetode(...) {...} Metode med returverdi: static DATATYPE minmetode(...) {...} Eksempler: static int gangmedto(int tall) { return tall*2; } static String lagvelkomst(string fag, String navn) { return "Velkommen til " + fag + " kjaere " + navn; }

Bruke (kalle) metoder med returverdier: static int gangmedto: int dusin=13; int todusin = gangmedto(dusin); System.out.println(toDusin); //Skriver ut 26 static String lagvelkomst String velkomst = lagvelkomst("inf1000", "Eric"); System.out.println(velkomst); //Skriver ut "Velkommen til inf1000 kjaere Eric"

Eksempel på forenkling av kode vha metode Forenkle summering av to tall: {U5InputSum1.java-U5InputSum2.java}

Utsett til i morgen, det du ikke trenger gjøre i dag Metoder med returverdi tillater å utsette problemer! Fokuser først på hva som trengs overordnet. Deretter gå løs på detaljene. Eksempel: int kvm=60; int postnr=0316; int lonn=500 000; pris = regnboligpris(kvm, postnr); makslaan = regnkredittverdighet(lonn); if (makslaan > pris) { System.out.println("Yes!"); } // Deretter skriv selve metodene..

Prøv selv (5 min) (Oppgave hentet fra eksamen 2014) Skriv en metode static int pris (boolean gratis, int alder) Dersom parameteren gratis har verdien true, skal metoden alltid returnere 0. Dersom parameteren gratis har verdien false og verdien av alder er mindre enn 18, skal metoden returnere 100, ellers 200. Altså skal f.eks. kallet pris (true, 10) returnere 0, kallet pris(false,10) returnere 100 og kallet pris(false, 50) returnere 200.

En mulig løsning static int pris(boolean gratis, int alder) { int svar; if (gratis) { svar = 0; } else if (alder < 18) { svar = 100; } else { svar = 200; } return svar; }

En annen mulig løsning (returnere inne i if) static int pris(boolean gratis, int alder) { if (gratis) { return 0; } if (alder < 18) { return 100; } return 200; }

En tredje mulig løsning (bare rene if - ingen else) static int pris(boolean gratis, int alder) { int svar=0; if (gratis) { svar = 0; } if (!gratis && alder < 18) { svar = 100; } if (!gratis && alder >= 18) { svar = 200; } return svar; }

INNLESING FRA FIL

Innlesing fra fil Å hente data fra filer er gøy! Man kan jobbe på mye større og mer spennende data enn fra tastatur Man slipper å taste det inn hver gang man kjører Noen filer kan imidlertid være krøkkete å lese inn Å lese krøkkete formater er ikke vanskelig, bare langtekkelig. I INF1000 unngår vi krøllet, og jobber med filer som er greie å lese inn. I reelle situasjoner jobber man uansett ofte med store systemer hvor innlesing er godt tilrettelagt.

Lese fra fil er nesten som å lese fra tastatur: Helt likt: 1: import java.util.scanner; 2: Scanner minscanner; 5: minscanner.nextline(); Unikt for tastatur: 3: minscanner = new Scanner(System.in); Unikt for fil: 3: File minfil = new File("mittFilnavn.txt"); 4: minscanner = new Scanner(minFil);

Exceptions Når man jobber med filer kreves en liten utvidelse av main: public static void main(string[] args) throws Exception{...} Exceptions er nyttig og viktig, men ikke pensum i INF1000 Er en måte å håndtere at f.eks. programmet ikke finner filen den skal lese.

Exceptions (forts) Vi nøyer oss med en overfladisk tilnærming: I alle metoder som åpner filer, legg til "throws Exception" bak parentesene etter metodenavnet. Dersom en metode bruker (kaller) en annen metode som har "throws Exception" blir den 'smittet' og må selv legge det til. Det er ikke noe problem å legge det til én gang for mye.

Hallo fra fil U5LesHalloVerden.java

Gjøre noe med ekte data! Oppskriften på et menneske ligger i vårt DNA En lang kjede av millioner av molekyler kalt nukleinsyrer, langs en dobbel heliks DNA er imidlertid essensielt bare bygget av fire ulike slike molekyler Kan representere hvert molekyl med en bokstav A, C, G eller T Hele arvemateriale er dermed bare en lang tekststreng acggact

Et reelt spørsmål (forts) I og med at vårt arvemateriale essensielt sett bare er en lang sekvens av 4 molekyler (bokstaver), er det da også like mange av hvert slikt molekyl (bokstav)? La oss skrive et program som teller antallet av hvert molekyl (bokstav) i vårt menneskelige DNA Nå kan vi glemme alt om DNA igjen! Alt vi trenger å tenke på er en tekststreng som består av 4 ulike bokstaver, og vi skal telle antallet av hver Ligger som en vanlig tekstfil med 1 bokstav per linje

Et reelt spørsmål (forts) Men start aldri med de ekte dataene! Vi får det ikke nødvendigvis til på første forsøk Det er ikke lett å kontrollregne manuelt på milliarder av bokstaver Vi forenkler: Lag en liten tekstfil med ca 10 bokstaver Skriv koden, se at den kompilerer og kjører underveis, og at den gir svaret vi forventer Og husk: bruk alltid equals for å sammenligne tekst U5DnaBokstaver.java

Et mer alvorlig eksempel (samt litt mer om filer og tekst, inkludert en forsmak på objekter)

Problemstilling Inneholder en spyttprøve DNA-sekvensen TGA? Dvs, inneholder en tekstfil ordet "TGA"?

Fremgangsmåte Les inn tekst fra filen til en variabel av type String Sjekk om "TGA" forekommer inni denne strengen

Litt mer om String En String er mer enn bare teksten den representerer En String-verdi er egentlig et objekt (mer i neste uke!) String har instans-metoder man kan kalle (mer senere) (dette har vi egentlig allerede sett med Scanner sin nextline) Vi gir her en liten forsmak på hva String tilbyr "hallo verden".length() gir lengden (12) "hallo verden".substring(1,3) gir tekst fra pos 1-2 ("al") "hallo verden".indexof("er") gir posisjonen til "er" (7)

Et program som finner TGA U5FinneTGA1.java

Tilbake til det alvorlige Med fila "HappyEnding.txt" fikk vi -1 "TGA" finnes ikke i teksten, og kroppen lager et livsviktig protein LGR4 Med fila "BadEnding.txt" fikk vi 500 "TGA" finnes (fra posisjon 500), proteinet LGR4 ødelegges, og man får stor risiko for benskjørhet, kreft og mere Er eksempelet realistisk? Faktisk! Firmaer har lov å lese teksten til dine gen, men har ikke lov å sjekke om f.eks. "TGA" finnes der Men ingen bekymring: "BadEnding" er heldigvis svært sjelden..

Oppsummering For-løkke er egentlig bare en slags forenklet, typisk versjon av while-løkke Metoder med returverdier er behagelig Tillater å tenke overordnet først, og deretter ordne detaljene Å hente data fra filer er gøy! Kan jobbe med store og reelle data, uten tasting