Input og beslutninger

Like dokumenter
Et lite oppdrag i bakgrunnen

IN uke 1. Komme i gang med programmering

IN uke 1. Komme i gang med programmering

INF uke 2. Inputt, beslutninger, kontrollflyt og prosedyrer

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

Løse reelle problemer

IN uke 2. Presis forståelse av programmering

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

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

Feilmeldinger, brukerinput og kontrollflyt

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

Løse reelle problemer

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

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

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

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

IN uke 2. Presis forståelse av programmering

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

2 Om statiske variable/konstanter og statiske metoder.

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

INF Notat om I/O i Java

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

UNIVERSITETET I OSLO

INF1000 undervisningen INF 1000 høsten 2011 Uke september

Forelesning inf Java 1

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

2 Om statiske variable/konstanter og statiske metoder.

løsningsforslag-uke5.txt

INF1000 : Forelesning 1 (del 2)

Hvordan løse problemer med programmering?

Metoder med parametre, løkker og arrayer

IN Notat om I/O i Java

INF1000 (Uke 4) Mer om forgreninger, While-løkker

Forelesning inf Java 5

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

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

Forelesning inf Java 5

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

Programmeringsspråket C

INF1000: Forelesning 4. Mer om arrayer Metoder

MAT-INF 1100: Obligatorisk oppgave 1

INF Uke 10. Ukesoppgaver oktober 2012

Seminaroppgaver IN1010, uke 2

OPPGAVE 1 OBLIGATORISKE OPPGAVER (OBLIG 1) (1) Uten å selv implementere og kjøre koden under, hva skriver koden ut til konsollen?

Forelesning inf Java 1

MAT-INF 1100: Obligatorisk oppgave 1

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

Oppgave 1 Hva tror du følgende program skriver ut til terminalen? Diskuter med gruppen.

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øse reelle problemer

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

Innhold. IN1000 Høst Hva skal evalueres? Fra kurssidene. Uke 12: Pensumgjennomgang og eksamenstips

Læreboken på 45 minutter

UNIVERSITETET I OSLO

Forelesning inf Java 1

Introduksjon til objektorientert programmering

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

Kapittel 1 En oversikt over C-språket

Forelesning inf Java 4

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

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

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

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO

Forelesning inf Java 3

TDT4110 Informasjonsteknologi, grunnkurs Uke 35 Introduksjon til programmering i Python

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

Dagens tema: 12 gode råd for en kompilatorskriver

Eksempel: Body Mass Index (BMI)

For å sjekke at Python virker som det skal begynner vi med å lage et kjempeenkelt program. Vi vil bare skrive en enkel hilsen på skjermen.

Programmeringsspråket C

Oppgaver uke 1: Løsningsforslag

INF1000 (Uke 15) Eksamen V 04

INF1000 (Uke 15) Eksamen V 04

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

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

Transkript:

Input og beslutninger Hvordan få et program til å gjøre noe INF1000, uke1 Geir Kjetil Sandve Et lite oppdrag i bakgrunnen Under pultene på bakerste rad er det klistret post-it lapper med to tall skrevet på Regn ut summen av to nederste tall, skriv denne summen under de andre tallene, og send lappen til personen foran deg Alle som mottar en lapp (fra personen bak) gjør det samme som beskrevet over Jeg samler senere inn lappene fra fremste rad 1 1 2 3 1 2 Hva er en Computer? "The idea behind digital computers may be explained by saying that these machines are intended to carry out any operations which could be done by a human computer" (Alan Turing, 1950) Tradisjonell definisjon av computer : En ansatt som gjør utregninger ved å blindt følge en liste instruksjoner med penn og papir, så lenge som det trengs, uten at det krever noen form for innsikt (fra 1600-tallet) Poeng for oss: Dette faget handler ikke om å få en printer til å virke (puh), men om å sette sammen presise oppskrifter! Dere har i mellomtiden regnet ut Fibonaccis tallrekke! 0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89 Merk at resultatet av denne prosedyren er mer sofistikert enn operasjonen i hvert steg (plusse to tall) 3 4

Vi har programmert! Eller rettere sagt: Dere har vært computere Jeg har programmert dere Oppfordring: Forsøk alltid å først løse et problem for hånd, ut fra presis sekvens av enkle operasjoner Hva er programmering? "Software development happens in your head, not in an editor. Programming is all about problem solving. It requires creativity, ingenuity, and invention" (Andy Hunt) Programmering er utfordrende, men ikke minst kreativt og gøy! "Computer science education cannot make anybody an expert programmer any more than studying brushes and pigment can make somebody an expert painter" (Eric Raymond) Forelesningene kan hjelpe dere i gang, men det er gjennom mange timer med egen programming dere virkelig lærer det 5 6 Bestanddelene i et Java-program Tegnene i et Javaprogram Definerer en klasse - mer om dette i uke 5 Navnet på programmet (klassen) - må tilsvare filnavn! public class Hallo System.out.println("Hallo verden"); En instruksjon (om å skrive ut til skjermen) Et uttrykk - teksten som skal skrive ut Såkalt "main-metode" hvor programmet starter å kjøre public class Hallo System.out.println("Hallo verden"); 7 8

Tegnene i et Javaprogram Krøll-paranteser: Definerer grupper/blokker - Innmaten i en klasse (uke 5) eller metode (uke 4) Vanlige paranteser: Hva man sender til eller mottar inni en metode (uke 4) public class Hallo System.out.println("Hallo verden"); Semikolon: Avslutter en instruksjon Hermetegn: Definerer at det som er inni ikke er kode, men ren tekst for å vise/bruke 9 Syntaks og fokus public class Hallo System.out.println("Hallo verden"); Er alt dette egentlig kritisk informasjon for vårt formål? Kunne det ha vært en kortere måte å si hallo på, eller må man være så omstendelig når man har å gjøre med en datamaskin? 10 Syntaks og fokus public class Hallo System.out.println("Hallo verden"); Dette er egentlig den kritiske informasjonen! (på dette stadiet) Syntaks og fokus (forts) Komplett program i Java: public class Hallo System.out.println("Hallo verden"); Tilsvarende (komplett) program i Python (et annet programmeringsspråk): print Hallo Verden 11 12

Syntaks og fokus: konklusjon Unødvendig komplekst i Java.. men likevel uproblematisk så lenge du ikke selv gjør det til et problem! Anbefalt strategi (nå foreløpig): Legg inn rammeteksten blindt, og forsøk å ha 100% av fokuset på det meningsbærende i midten. Generelt tips: Bruk copy-paste når du ønsker å IKKE lære noe (og dermed også motsatt: unngå for all del copypaste på alt du skal lære i faget!) Mål for dagen Hvordan få noe til å skje! (med programmering) Utregninger og variabler Innlesning fra tastatur Beslutninger i programmer 13 14 Variabler Fra forrige uke class Uke05 public static void main (String [] args) En rask repetisjon og noen flere detaljer int alder; alder = 19; // Endrer verdien i alder alder = 25; System.out.println ("alder har verdien " + alder); 15 16

Et lite og intuitivt program Et lite og intuitivt program areal = lengde * bredde; areal = 7 * bredde; 17 18 Et lite og intuitivt program Et lite og intuitivt program areal = 7 * 4 ; areal = 28 ; 19 20

Et lite og intuitivt program Et lite og intuitivt program areal = 28 ; System.out.System.out.println("Rektangelet har storrelse: " + areal) ; areal = 28 ; System.out.System.out.println("Rektangelet har storrelse: " + 28 ) ; 21 22 Et lite og intuitivt program Programmet med variabel-initialisering areal = lengde * bredde; System.out.System.out.println("Rektangelet har storrelse: " + areal) ; int lengde; int bredde; int areal; areal = lengde * bredde; System.out.System.out.println("Rektangelet har storrelse: " + areal) ; 23 24

Programmet i komplett versjon public class u1areal int lengde; int bredde; int areal; areal = lengde * bredde; System.out.println("Rektangelet har storrelse: " + areal) ; Programmet, slik man bør fokusere public class u1areal int lengde; int bredde; int areal; areal = lengde * bredde; System.out.println("Rektangelet har storrelse: " + areal) ; 25 26 (areal = lengde * bredde) Venstreside=Høyreside? Variabel-typer Nei! De to sidene av likhetstegn har ulike roller: Høyreside er et uttrykk som evaluerer til en verdi (mer neste uke) Venstreside er en variabel som tilordnes verdien Ett likhetstegn (=) betyr "gjør venstresiden lik", eller "gi venstresiden verdien fra høyresiden" Noen språk skriver "areal <- lengde*bredde", det gir egentlig riktigere assosiasjoner int lengde; deklarerer en variabel med navn "lengde" forteller maskinen hvilken type verdi variabelen skal ha (int betyr heltall) Siden det er et heltall kan lengden være 7, men kan ikke være 7.1 Vi kunne alternativt definert double lengde; Da kunne den vært et tall med desimaler (flyttall) 27 28

Strenger Int og double er tross alt ganske likt Per nå nøyer vi oss med én ekstra: String Om vi hadde definert lengden som String lengde; kunne den vært en vilkårlig tekst Vi kunne da etterpå satt den til f.eks. lengde="veldig lang" Operasjoner avhenger av datatyper Med strenger blir også operasjoner annerledes (pluss betyr noe annet). u1strings.java Numeraler kan være enten tall eller tekst u1intvsstring.java 29 30 En første test på problemløsning Skriv (med blyant og papir) en kode som bytter om verdiene mellom to variable Prøv/tenk selv i 3 minutt. Skriv bare linjene som trengs der det nå er rød kommentar. public class u1var1 //skriv koden som trengs her for å bytte om verdiene i //variablene tall1 og tall2, uansett hva verdiene er 31 32

Hvorfor blir følgende kode feil? Hvorfor blir følgende kode feil? public class u1var1 tall1 = tall2; tall2 = tall1; public class u1var1 tall1 = 9 ; tall2 = tall1; 33 34 Hvorfor blir følgende kode feil? Hvorfor blir følgende kode feil? public class u1var1 tall1 = X4; tall1 = 9 ; tall2 = tall1; public class u1var1 tall1 = X4; tall1 = 9 ; tall2 = 9 ; 35 36

Hvorfor dette er litt triksent Hver variabel kan bare holde på én verdi Når man flytter verdien fra tall1 over til tall2, mister man verdien tall2 tidligere holdt på Det er faktisk ikke mulig å bytte om verdiene i begge retninger samtidig Hvordan går vi da frem for å løse problemet? Vi glemmer datamaskiner og tenker litt praktisk! Om du har en gul kopp med melk, og en hvit kopp med jus, hvordan bytter du mellom? public class u1var1 Man må introdusere en tredje variabel! int tall3; tall3 = tall2; tall2 = tall1; tall1 = tall3; 37 38 Man må introdusere en tredje variabel! public class u1var1 int tall3; tall3 = 9 ; tall2 = tall1; tall1 = tall3; Man må introdusere en tredje variabel! public class u1var1 int tall3; tall3 = 9 ; tall2 = 4 ; tall1 = tall3; 39 40

Man må introdusere en tredje variabel! public class u1var1 tall2 = X9; int tall3; tall3 = 9 ; tall2 = 4 ; tall1 = tall3; Man må introdusere en tredje variabel! public class u1var1 tall2 = X9; int tall3; tall3 = 9 ; tall2 = 4 ; tall1 = 9 ; 41 42 Man må introdusere en tredje variabel! public class u1var1 int tall3; tall3 = 9 ; tall2 = 4 ; tall1 = 9 ; Man må introdusere en tredje variabel! public class u1var1 int tall3; tall3 = tall2; tall2 = tall1; tall1 = tall3; 43 44

En lærdom å ta med seg Løsningen kommer ofte lettere til en dersom man tenker på fysiske paraleller til problemet Man kan lett låse seg fast i søken etter en teknikalitet, mens det som egentlig trengs er en alternativ innfallsvinkel Dette gjelder ikke bare de enkle problemene vi begynner med de første ukene, men vel så mye de store utfordringene man møter senere i studiet og som ferdig utdannet Innlesing fra tastatur 45 46 Slipp brukeren til! Enkel input fra brukeren De fleste program tar en eller annen jevnlig input fra brukeren Dette gir også mye mer dynamikk i programmene enn det vi har sett på til nå u1input.java: motta input fra tastatur 47 48

Inputt av tall fra brukeren u1inputsum.java: Motta input i form av heltall fra tastaturet Beslutninger 49 50 Ikke bare følge strømmen For det vi har sett på til nå, har programmet alltid fulgt én bestemt sekvens av instruksjoner Vi kan lese ulike startverdier fra tastatur og dermed få ulike resultat, men alltid basert på de samme operasjonene Vi trenger mer variasjon! Det blir mye artigere å programmere dersom hvilke operasjoner som utføres også kan avhenge av verdier man regner ut Et konkret problem som krever beslutninger Problemstilling: Vi ønsker å lage et program som spør brukeren om alder. Dersom brukeren er under 6 år, skal den skrive "du er liten". Dersom brukeren er 6 år eller mer skal den skrive "du er gammel". Vi trenger altså to ulike println Vi må imidlertid sørge for at kun én println blir kjørt, hvor hvilken som blir kjørt avhenger av innlest verdi for alder 51 52

En uferdig løsning (mangler beslutning) import java.util.scanner; public class u1beslutninguferdig Scanner in; String innlest; int alder; in = new Scanner(System.in); innlest = in.nextline(); alder = Integer.parseInt(innlest); System.out.println("du er liten"); System.out.println("du er gammel"); 53 Beslutninger i et program: if Syntaks (skrivemåte): if (condition) do1; do2;.. if (boolean expression) Statement; Statement; Eksempel: if (alder<6) System.out.println("du er liten"); u1beslutning1.java 54 En praktisk kortform: if-else Syntaks: if (boolean expression) Statement; Statement; else Statement; Statement; u1beslutning2.java if (condition) do1; do2;.. else do3; do4;.. Prøv en variant selv! Modifisert problemstilling: Mindre enn 6: skriv "Du er liten" Mindre enn 3: skriv "Du er veldig liten" Skal alltid skrive ut maksimalt én setning Hvordan vil du nå skrive koden? Prøv selv med blyant og papir! (3 minutt) Etterpå diskuter med nabo (3 minutt) (du trenger ikke skrive "main" o.l. - fokuser på det sentrale..) 55 56

Hvorfor blir følgende løsning feil? Løsning med kombinert uttrykk if (alder<3) System.out.println("du er veldig liten"); if (alder<6) System.out.println("du er liten"); if (alder<3) System.out.println("du er veldig liten"); if (alder>=3 && alder<6) System.out.println("du er liten"); 57 58 Løsning med else if Og hvorfor går ikke den motsatte else if? if (alder<3) System.out.println("du er veldig liten"); else if (alder<6) System.out.println("du er liten"); if (alder<6) System.out.println("du er liten"); else if (alder<3) System.out.println("du er veldig liten"); 59 60

Løsning med nøsting if (alder<6) if (alder<3) System.out.println("du er veldig liten"); else System.out.println("du er liten"); Konklusjon rundt beslutninger Syntaksen (skrivemåten) må læres, men er rimelig grei: if (something) do1; do2;.. else do3; do4;.. Å bruke det for å løse et konkret problem er utfordringen! Programmering handler om å kreativ løse problemer, ikke å lire av seg kryptiske tegn Problemene vil bli gradvis mer utfordrende utover semesteret 61 62 En siste liten test på problemløsning Skriv (med blyant og papir) en kode som finner den minste av to verdier: import java.util.scanner; public class U1Minst Scanner in; int tall1, tall2, minst; tall1 = Integer.parseInt( in.nextline() ); tall2 = Integer.parseInt( in.nextline() ); //skriv kode her som gir variabelen minst //den minste av verdiene tall1 og tall2 System.out.println(minst); Mulig løsning: U1Minst.java Oppsummering En variabel er alltid av én bestemt type, og operasjoner avhenger av typen Programmene blir ofte mer dynamiske når man leser inputt fra brukeren Beslutninger (if) lar programmene utføre ulike operasjoner avhengig av verdien til en variabel Programmering handler om problemløsning, og krever kreativitet og oppfinnsomhet Programmering lærer man gjennom trening og atter trening 63 64