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"

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

INF1000 Metoder. Marit Nybakken 16. februar 2004

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

INF Uke 10. Ukesoppgaver oktober 2012

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

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

INF Løsning på seminaropppgaver til uke 8

Løse reelle problemer

Introduksjon til objektorientert programmering

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

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:

UNIVERSITETET I OSLO

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

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

Løsningsforslag ukeoppg. 9: okt (INF Høst 2011)

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

Hvordan løse problemer med programmering?

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

UNIVERSITETET I OSLO

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

TOD063 Datastrukturer og algoritmer

Metoder med parametre, løkker og arrayer

Forelesning inf Java 5

Forelesning inf Java 5

Universitetet i Bergen Det matematisk-naturvitenskapelige fakultet Institutt for informatikk

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

INF Notat om I/O i Java

INF1000 (Uke 5) Mer om løkker, arrayer og 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

UNIVERSITETET I OSLO

INF1000: Forelesning 4. Mer om arrayer Metoder

INF Seminaroppgaver til uke 3

UNIVERSITETET I OSLO

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; }

Fra Python til Java, del 2

Antall sider (inkl. forsiden): 7. Alle trykte og håndskrevne

<?php. count tar en array som argument, og returnerer et tall som uttrykker antallet innførsler i arrayen.

Repetisjon. INF gruppe 13

UNIVERSITETET I OSLO

Utførelse av programmer, metoder og synlighet av variabler i JSP

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

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

UNIVERSITETET I OSLO

INF1000 (Uke 6) Mer om metoder, tekster

INF1000 Behandling av tekster

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

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

String-manipulasjon og I/O i Java. INF1000 h14 - Hans Petter Taugbøl Kragset

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

Programmeringsspråk for nybegynnere. Krav til språket. Krav til språket. Krav til språket

INF uke 2. Inputt, beslutninger, kontrollflyt og prosedyrer

IN Notat om I/O i Java

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

Ordliste. Obligatorisk oppgave 1 - Inf 1020

Blokker og metoder INF1000 (Uke 6) Metoder

Klasser, objekter, pekere og UML. INF gruppe 13

INF Ekstrainnlevering

Algoritmer og datastrukturer Kapittel 11 - Delkapittel 11.2

Kapittel 3: Bruk av objekter

Oblig4 - obligatorisk oppgave nr. 4 (av 4) i INF1000

TDT4102 Prosedyreog objektorientert programmering Vår 2016

Feilmeldinger, brukerinput og kontrollflyt

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

UNIVERSITETET I OSLO

Dagens tema: 12 gode råd for en kompilatorskriver. Sjekking av navn. Lagring av navn. Hvordan finne et navn?

Ole Christian Lingjærde, 12. september 2013

UNIVERSITETET I OSLO

Forelesning inf Java 4

Løsningsforslag til eksamen i INF1000 våren 2006

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

INF1010 Sortering. Marit Nybakken 1. mars 2004

INF1000: noen avsluttende ord

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

UNIVERSITETET I OSLO

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

INF1000 : Forelesning 4

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

Endret litt som ukeoppgave i INF1010 våren 2004

INF1010, 22. mai Prøveeksamen (Eksamen 12. juni 2012) Stein Gjessing Inst. for Informatikk Universitetet i Oslo

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

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();

INF1000 (Uke 6) Mer om metoder, tekster

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

UNIVERSITETET I OSLO

Høst Øving 5. 1 Teori. 2 Månedskalender. Norges teknisknaturvitenskapelige universitet Institutt for datateknikk og informasjonsvitenskap

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

HØGSKOLEN I SØR-TRØNDELAG Avdeling for informatikk og e-læring AITeL

INF1000: Forelesning 7

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

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

Øvingsforelesning i Python (TDT4110)

INF1000 (Uke 15) Eksamen V 04

Transkript:

Løse reelle problemer Litt mer om løkker, metoder med returverdier og innlesing fra fil INF1000, uke4 Geir Kjetil Sandve Repetisjon fra forrige uke: while Syntaks: while (condition) do1; do2;... Eksempel: int tall=1; while (tall<100) System.out.println(tall); tall+=5; 1 2 Initialiser-sjekkinkrementer Initialiser-sjekkinkrementer: for Et vanlig mønster knyttet til løkker: Gi startverdi til variabel før selve løkka (initialiser) Gå i løkke inntil variabelen passerer en gitt verdi Inkrementer variabel i slutten av kodeblokka U3SumTallrekkeVhaFor.java 3 4

int sum = 0; int tall = 1; intialiser while (tall<=100) sjekk sum+=tall; tall +=1; inkrementer System.out.println(sum); While int sum = 0; int tall = 1; intialiser while (tall<=100) sjekk sum+=tall; tall +=1; inkrementer System.out.println(sum); int sum = 0; For for (int tall=1; tall<=100; tall+=1) sum+=tall; System.out.println(sum); 5 6 Initialiser-sjekkinkrementer Initialiser-sjekkinkrementer Initialiser-sjekkinkrementer: 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økka Condition: sjekkes hver runde før kodeblokka kjøres (tilsvarer uttrykket inni while) Update (inkrementering): kjøres i slutten av løkka (legges til i slutten av kodeblokka) Initialiser-sjekkinkrementer: 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 7 8

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", "Geir"); System.out.println(velkomst); //Skriver ut "Velkommen til inf1000 kjaere Geir" 9 10 Eksempel på forenkling av kode vha metode Forenkle summering av to tall som gjort i uke 1: U4InputSum1.java-U4InputSum2.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=503 800; pris = regnboligpris(kvm, postnr); makslaan = regnkredittverdighet(lonn); if (makslaan > pris) System.out.println("Yes!"); // Deretter skriv selve metodene.. 11 12

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. 13 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; 14 En annen mulig løsning (returnere inni if) En tredje mulig løsning (bare rene if - ingen else..) static int pris(boolean gratis, int alder) if (gratis) return 0; if (alder < 18) return 100; return 200; 15 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; 16

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 faget 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(); 17 18 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); 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); 19 20

Exceptions Exceptions (forts) 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 Vi nøyer oss med en overfladisk tilnærming: I alle metoder som åpner filer, legg til "throws Exception" bak parantesene 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 21 22 Hallo fra fil Data U4LesHalloVerden.java Hvor mange av dere sier at dere studerer data? Da bør vi nesten vite hva ordet "data" betyr! Hva er egentlig "data"? Diskuter med nabo! (2 minutt) Definisjon i bokmålsordboka: data = opplysninger, kjensgjerninger (i motsetning til "datamaskin" - en maskin som behandler data) 23 24

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 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 25 26 Gjøre noe med ekte data! 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 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 27 28

Gjøre noe med ekte data! Et reelt spørsmål (forts) 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 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 29 30 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 31 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 Lite eksempel først 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 U4DnaBokstaver.java 32

Et reelt spørsmål (forts) Stor kjøring Slik vi har programmert og representert dataene vil hele vårt datasett (ditt DNA - på ca 6GB) kjøre ca en halvtime Upraktisk her under forelesing, men absolutt kjørbart Vi teller i stedet gjennom en liten del av det (~50 MB) 10 millioner A og T - 7 millioner C og G Et mer alvorlig eksempel (samt litt mer om filer og tekst, inkludert en forsmak på objekter) 33 34 Problemstilling Fremgangsmåte Du blir bedt om å spytte i en liten flaske og sende den til et sykehus Du får etterpå tilsendt en tekstfil og blir bedt om å sjekke om denne tekstfilen inneholder ordet "TGA" Les inn tekst fra filen til en variabel av type String Sjekk om "TGA" forekommer inni denne strengen 35 36

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 nærmere syn på int length() Dette er altså en metode: Navnet på metoden er "length" Den tar ikke inn parametre Den returnerer en verdi av type int (antallet tegn i en String) Det som skiller denne fra hva vi har lært til nå: Man kaller denne på en String - på en variabel eller utrykk "hallo verden".length(); String tekst = "hallo verden"; tekst.length(); 37 38 Et nærmere syn på String substring(int bi,int ei) Dette er altså en metode: Navnet på metoden er "substring" Den tar inn to parametre: beginindex (bi) og endindex (ei) Den returnerer en verdi av type String I tillegg kalles den altså på en String: Den returnerer en ny String, med teksten fra første indeks (bi) til like før siste indeks (ei) i Stringen den ble kallet på "hallo verden".substring(1,4) returnerer dermed "all" 39 Et nærmere syn på int indexof(string str) Dette er også en metode: Navnet på metoden er "indexof" Den tar inn én parameter: med navn "str" og type "String" Den returnerer en verdi av type int I tillegg kalles den altså på en String: Den søker etter verdien til parameteren str inni teksten til Stringen den ble kalt på og returner første indeks hvor den fant et treff (ellers -1) "hallo verden".indexof("lo") returnerer dermed 3 "hallo verden".indexof("geir") returnerer dermed -1 40

Et program som finner TGA U4FinneTGA1.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 41 Men ikke bekymr: "BadEnding" er heldigvis svært sjelden.. 42 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 43