Leksjon 3. Kontrollstrukturer



Like dokumenter
Leksjon 3. Kontrollstrukturer

Leksjon 3. Kontrollstrukturer

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

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

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

Leksjon 7. Filer og unntak

Leksjon 2. Setninger og uttrykk

EKSAMEN 6108/6108N PROGRAMMERING I JAVA Alt trykt og skriftlig materiale.

EKSAMENSFORSIDE Skriftlig eksamen med tilsyn

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

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

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

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

6108 Programmering i Java. Leksjon 4. Metoder. Roy M. Istad 2015

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

Leksjon 2. Setninger og uttrykk

6108 Programmering i Java. Leksjon 5. Tabeller. Roy M. Istad 2015

Leksjon 2. Setninger og uttrykk

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

Leksjon 4. Metoder. Program, klasse og metode

INF1000 undervisningen INF 1000 høsten 2011 Uke september

Del 1 En oversikt over C-programmering

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

while-økker while-løkker gjentar instruksjonene så lenge en betingelse er oppfylt Eksempel 1: en enkel while-løkke

Python: Løkker. TDT4110 IT Grunnkurs Professor Guttorm Sindre

Hva er tabeller? Tabell (array): Sammensetning av verdier av samme datatype, under ett navn i hurtigminnet.

Programmering Høst 2017

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

UNIVERSITETET I OSLO

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

Læringsmål og pensum. Oversikt

UNIVERSITETET I OSLO

Høgskolen i Telemark EKSAMEN 6108/6108N PROGRAMMERING I JAVA Alt trykt og skriftlig materiale.

Leksjon 6. Objekt. Evt. importsetninger. public class Klasse { Konstruktør. Objektmetoder. Innkapsling (private): set-og get-metoder

Kapittel 1 En oversikt over C-språket

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

Løse reelle problemer

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

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

UNIVERSITETET I OSLO

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

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

Løsningsforslag Øving 7

TDT4102 Prosedyreog objektorientert programmering Vår 2016

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

UNIVERSITETET I OSLO

Lynkurs i shellprogrammering under Linux

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

Forelesning inf Java 5

Forelesning inf Java 5

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

MAT1030 Diskret matematikk

Oppsummering fra sist

Beskrivelse av programmeringsspråket Simpila INF Kompilatorteknikk Våren 2012

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

TDT4102 Prosedyre og Objektorientert programmering Vår 2014

Kanter, kanter, mange mangekanter

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

INF109 - Uke 1b

løsningsforslag-uke5.txt

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

Python: Løkker. TDT4110 IT Grunnkurs Professor Guttorm Sindre

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

16 Programmere TI -86 F1 F2 F3 F4 F5 M1 M2 M3 M4 M5

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

Løsning på småoppgavene i boka

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

Programmeringsspråket C

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

Shellscripting I. Innhold

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

Læreboken på 45 minutter

Socket og ServerSocket

UNIVERSITETET I OSLO

TDT4102 Prosedyreog objektorientert programmering Vår 2016

TDT4102 Prosedyre og Objektorientert programmering Vår 2014

Øvingsforelesning 3 Python (TDT4110)

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

TDT4102 Prosedyre og Objektorientert programmering Vår 2015

Transkript:

6108 Programmering i Java Leksjon 3 Kontrollstrukturer Del 2 Løkker Roy M. Istad 2015

Utførelse av et program Programflyt så langt start setning setning setning setning Sekvensielt Alle setninger utføres, den ene etter den andre, og ingen blir hoppet over. Programflyt fra nå av start setning(er) Valg setning(er) setning(er) Løkke (gjentak) setning(er) setning(er) Del 1 Del 2 slutt slutt 6108 Programmering i Java Leksjon 3 Del 2 side 2

Løkke gjentak 1. Setning( er) utføres et kjent antall ganger out.println("+++++++"); out.println("+++++++"); out.println("+++++++"); Konsoll +++++++ +++++++ +++++++ out.println("+++++++"); out.println("+++++++"); out.println("+++++++"); 1 2 3 "Klipp og lim" for å kopiere kodelinjer... 10 kodelinjer? 50 kodelinjer?... Javas egen (avanserte) "kopimaskin" for løkke 1234 linjenr................ telleverk.................. for ( int linjenr=1; linjenr<=3; linjenr++ ) { out.println("+++++++"); 6108 Programmering i Java Leksjon 3 Del 2 side 3

Eksempel Antall linjer innlest fra brukeren int antlinjer = parseint(sid("gi ant. Linjer")); // sid forkortelse for showinputdialog... for (int linjenr=1; linjenr<=antlinjer; linjenr++) out.println("+++++++"); Konsoll +++++++ +++++++ +++++++ // "Løkkekroppen" har av kun én setning, kan stå uten { Eksempel Tellevariabelen kan brukes i løkkekroppen 123 4 <==> linjenr antlinjer for (int linjenr=1; linjenr<=antlinjer; linjenr++) out.println(linjenr + " " + "+++++++"); 3 Konsoll 1 +++++++ 2 +++++++ 3 +++++++ 6108 Programmering i Java Leksjon 3 Del 2 side 4

Eksempel Skriv ut positive partall opp til og med 20 Steglengde Kun tellevariabel++? for (int tall=2; tall<=20; tall+=2) // Hopper over annethvert tall out.print(tall + " "); // Litt luft mellom verdiene out.println( ); // Linjeskift til slutt, etter(!) løkka Konsoll 2 4 6 8 10 12 14 16 18 20 Eksempel Skriv ut positive heltall fra og med 5 og nedover for (int tall=5; tall>0; tall--) out.println(tall); 5 4 3 2 1 Konsoll 6108 Programmering i Java Leksjon 3 Del 2 side 5

Oppgave Skriv ut positive partall opp til innlest øvre grense // leser inn verdi til øvregrense for (int faktor=1; faktor<=øvregrense/2; faktor++) out.print(2*faktor + " "); // 2*1 2*2 2*3 2*4 2*5 Oppgave Skriv ut positive oddetall opp til innlest øvre grense // leser inn verdi til øvregrense for (int tall=1; tall<=øvregrense; tall++) if ( tall % 2 == 1 ) out.print(tall + " "); Konsoll 2 4 6 8 10 Konsoll 1 3 5 7 9 Oppgave Skrive ut de store engelske bokstavene for (char bokstav='a'; bokstav<='z'; bokstav++) out.print(bokstav + " "); out.println( ); Neste tegn i ASCII tabellen (ordningsnummer + 1) Konsoll A B C D E F G H I J K L M N O P Q R S T U V X Y Z 6108 Programmering i Java Leksjon 3 Del 2 side 6

Oppsett av for løkke Stopp når logisk uttrykk blir false for ( initiering; betingelse; oppdatering ) { // Løkkekropp - setninger som skal gjentas stopp datatype tellevariabel = start(verdi); start NB! En tellevariabel kan være start deklarert tidligere i programmet i+=steg i =steg Teller opp, eller ned mye eller lite. Løkkekropp 1) En enkelt setning setning1; 2) Blokk { setningsliste Merk følgende oppsett Oppover tellevariabel > stopp Nedover tellevariabel < stopp for (int i=1; i<=4; i++) out.print(i + "*"); out.println("-"); stopp 6108 Programmering i Java Leksjon 3 Del 2 side 7

2. while løkke Ukjent antall gjentak/utførelser inititalisering int tall = 1; while ( tall <= 10 ) { out.println( tall ); tall++; Blokk { setningsliste oppdatering av kontrollvariabel (betingelse > false?) Unngå evig løkke! 6108 Programmering i Java Leksjon 3 Del 2 side 8

Eksempel Hvor lang tid tar det å doble verdien på et innskudd? Trenger innskudd, rentesats beregner saldo for hvert år doblingstid? Ved 10% rente 1000 1000 + 100 = 1100 1100 + 110 = 1210...................... // leser innskudd og setter årsrente... 2000 (eller litt mer) final double rentesats RENTESATS = 10.0; double saldo = innskudd; int år = 0; while ( saldo < 2*innskudd ) { double årsrenter = saldo * RENTESATS / 100; saldo = saldo + årsrenter; // saldo += årsrenter; år++; String uttxt = "Kr " + innskudd + " dobles i verdi ved " + "forrentning til " + rentesats RENTESATS + "% p.a. " + "i løpet av " + år + " år"; 6108 Programmering i Java Leksjon 3 Del 2 side 9

Innlesing med for løkke 1 2 3 4 5 6 7 dagnr final int ANT_DAGER = 7; String melding = "Nedbør i antall mm"; telleverket styres automatisk int nedbør, sum = 0; for (int dagnr=1; dagnr<=ant_dager; dagnr++) { nedbør = parseint( showinputdialog(melding) ); Dialogvindu sum += nedbør; Samlet nedbør 38 showmessagedialog(null, "Samlet nedbør " + sum); 6108 Programmering i Java Leksjon 3 Del 2 side 10

Innlesing med while løkke // Beregner gjennomsnittshøyde for en gruppe personer String melding = "Høyde i cm, avslutt med 0"; double sum = 0; // double for korrekt avrunding int antall = 0; // Ingen høydemålt ennå int høyde = parseint( showinputdialog(melding) ); while ( høyde!= 0 ) { sum += høyde; antall++; høyde = parseint( showinputdialog(melding) ); showmessagedialog(null, "Gj. snitt " + sum/antall); 6108 Programmering i Java Leksjon 3 Del 2 side 11

3. do løkke Velegnet når det er minst en utførelse. (-er) String melding = "Resultat av terningkast"; int sum = 0; int antall = 0; do { int verdi = parseint( showinputdialog(melding) ); sum += verdi; antall++; while (betingelse); (sum < 50); // NB! Betingelsen står til slutt showmessagedialog(null, "Antall kast til sum øyne >= 50 " + antall); 6108 Programmering i Java Leksjon 3 Del 2 side 12

Lokale variabler og skopregler Skopet, eller virkeområdet, til en variabel er det området av koden der variabelen er synlig og kan brukes. Variabler deklarert i en metode kalles for lokale variabler. Skopet til slike variabler er fra deklarasjonsstedet og ut til slutten av den aktuelle blokken. // x kan ikke brukes før blokken Variabler kan ikke brukes utenfor blokken der de er deklarert, enten det er i en løkkekropp, i en if grein eller i en else grein, eller i en metodekropp. Løkke- eller metodekropp { Variabel x deklareres og brukes herfra i blokken Skop for lokale variabler // x kan ikke brukes etter blokken 6108 Programmering i Java Leksjon 3 Del 2 side 13

Lovlighetskontroll av inndata // Låser utførelsen til en // lovlig verdi er innlest OBS! Variabelen mnd må deklareres før do løkka int mnd = 0; for å kunne brukes i betingelsen do { mnd = parseint( showinputdialog("månedsnr") ("Månedsnr.(1-12)") ); ); while (mnd < 1 mnd > 12); // Nå er vi sikret at mnd inneholder et lovlig månedsnummer, // og programutførelsen kan fortsette Dersom inndata har feil format, f.eks. månedsnummer som en tekst (juni), så vil java kjøresystemet avbryte programutførelsen og kaste en feilmelding à la Exception in thread "main" java.lang.numberformatexception 6108 Programmering i Java Leksjon 3 Del 2 side 14

Gjentak av hele program boolean fortsett; do { // En setningsliste... // Hele poenget med programmet skjer // på linjene som står her int svar = pi( sid("gjenta program (Ja=1/Nei=0)") ); fortsett = (svar == 1); while (fortsett); Vi kommer senere tilbake til enklere brukerkommunikasjon for å avgjøre programgjentak eller ikke, noe a la fortsett svar er lik "Ja" pi parseint sid showinputdialog 6108 Programmering i Java Leksjon 3 Del 2 side 15

for (int y=1; y<=4; y++) { // styrer linjer for (int x=1; x<=4; x++) { // styrer kolonner out.print(x*y + " "); // ei linjes verdier out.println(); Utsnitt av multiplikasjonstabellen (ser bort fra rammeteksten) Nøsting Løkke i løkke Valg i valg Sammensetning Løkke i valg, evt. omvendt Hvordan kan vi lage en slik tabell? y Nøsting av for løkker y= y= y= y= x x x x x = = = = 6108 Programmering i Java Leksjon 3 Del 2 side 16