Variabler, input og beslutninger

Like dokumenter
Input og beslutninger

IN uke 1. Komme i gang med programmering

IN uke 1. Komme i gang med programmering

Et lite oppdrag i bakgrunnen

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

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

Feilmeldinger, brukerinput og kontrollflyt

Løse reelle problemer

Løse reelle problemer

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

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

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

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

IN uke 2. Presis forståelse av programmering

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

INF Notat om I/O i Java

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

INF1000: Forelesning 4. Mer om arrayer Metoder

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

INF 1000 høsten 2011 Uke september

INF1000 undervisningen INF 1000 høsten 2011 Uke september

Innlesing fra fil og metoder med returverdier

UNIVERSITETET I OSLO

INF1000 oppgaver til uke 38 (17 sep 23 sep)

IN Notat om I/O i Java

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

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

Forelesning inf Java 5

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

Forelesning inf Java 5

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

Læreboken på 45 minutter

Programmeringsspråket C

Metoder med parametre, løkker og arrayer

MAT-INF 1100: Obligatorisk oppgave 1

IN uke 2. Presis forståelse av programmering

Programmeringsspråket C

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

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

MAT-INF 1100: Obligatorisk oppgave 1

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

Programmeringsspråket C

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

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

Seminaroppgaver IN1010, uke 2

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

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

Feilmeldinger, kontrollflyt og void-metoder

Forelesning inf Java 1

Eksempel: Body Mass Index (BMI)

2 Om statiske variable/konstanter og statiske metoder.

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

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

Forelesning inf Java 4

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

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

INF1000 (Uke 6) Mer om metoder, tekster

Introduksjon til objektorientert programmering

Forelesning inf Java 3

Oppgaver uke 1: Løsningsforslag

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

INF1000. Marit Nybakken 10. februar 2004

INF1000-SIKT - Notat om I/O i Java

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

INF Uke 10. Ukesoppgaver oktober 2012

løsningsforslag-uke5.txt

2 Om statiske variable/konstanter og statiske metoder.

INF1000 : Forelesning 1 (del 2)

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

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

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

UNIVERSITETET I OSLO

Hvordan løse problemer med programmering?

INF1000 : Forelesning 3

INF1000 : Forelesning 4

INF1000 (Uke 15) Eksamen V 04

INF1000 (Uke 15) Eksamen V 04

UNIVERSITETET I OSLO

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

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

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

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

Forelesning inf Java 3

UNIVERSITETET I OSLO

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

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

Ukeoppgaver INF1000: 12. feb 16. feb

Fra Python til Java, del 2

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

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

Feilmeldinger, kontrollflyt og void-metoder

Kapittel 5: Objektkommunikasjon

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

Løse reelle problemer

Blokker og metoder INF1000 (Uke 6) Metoder

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

Transkript:

Variabler, input og beslutninger Hvordan få et program til å gjøre noe INF1000, uke1 Geir Kjetil Sandve

Programmert fra før? Faget forutsetter ingen programmeringserfaring, og opplegget er tilpasset deretter Vi vet samtidig at noen har programmert før studiet Dersom de første to-tre ukene føles kjent: Reflekter! Er måten det blir presentert på i tråd med din oppfatning? Ville du forklart det annerledes? Refleksjon er utrolig lærerikt i seg selv Vi er også takknemlige for alle konstruktive innspill: Dropp gjerne innom "forum for fagutvikling" - torsdager kl 10-11, rom 1251 Scheme (t.o.m. 18.sep)

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 og frem til andre verdenskrig)

Nå skal dere få være computere! Har noen lagt merke til blyantene på bakerste rad? Det er også post-it lapper under pultene.. Regn ut summen av to nederste tall, skriv denne summen under de andre tallene, og send lappen (og blyant) til personen foran deg Alle som mottar en lapp (fra personen bak) gjør det samme som beskrevet over Jeg samler inn lappene fra fremste rad

Dere har nå 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)

Vi har programmert! Eller rettere sagt: Jeg har programmert dere Oppfordring: Forsøk alltid å først løse problemet for hånd, ut fra presis sekvens av enkle operasjoner

Hva er programmering? "Software development happens in your head, not in an editor" (Andy Hunt) "Programming is all about problem solving. It requires creativity, ingenuity, and invention" ".. combining rich, flexible human thought with the rigid constraints of a digital computer exposes the power and the deepest flaws of both"

Syntaks og fokus public class Hallo { public static void main(string[] args) { 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?

Syntaks og fokus public class Hallo { public static void main(string[] args) { 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 { public static void main(string[] args) { System.out.println("Hallo verden"); Tilsvarende (komplett) program i Python (et annet programmeringsspråk): print Hallo Verden

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

Variabler

Formålet med variabler {Kodefiler u1var1.java.. u1var5.java: kode som introduserer uttrykk og variable I tillegg til å skrive Hallo verden kan du nå: Regne ut utrykk Assosiere en verdi med et navn, og så referere til dette navnet videre

Hva er nå egentlig en variabel Ikke det samme som x og y på ungdomsskolen: dette er mye lettere! IKKE: x2-3x = 28 MEN: x=7 ELLER: x=7*7-3*7 (også helt rett frem) Navn som representerer verdi, eller boks som man putter en verdi inn i..

Et lite og intuitivt program lengde = 7; bredde = 4; areal = lengde * bredde;

Et lite og intuitivt program lengde = 7; bredde = 4; areal = 7 * bredde;

Et lite og intuitivt program lengde = 7; bredde = 4; areal = 7 * 4 ;

Et lite og intuitivt program lengde = 7; bredde = 4; areal = 28 ;

Et lite og intuitivt program lengde = 7; bredde = 4; areal = 28 ; System.out.System.out.println("Rektangelet har storrelse: " + areal) ;

Et lite og intuitivt program lengde = 7; bredde = 4; areal = 28 ; System.out.System.out.println("Rektangelet har storrelse: " + 28 ) ;

Et lite og intuitivt program lengde = 7; bredde = 4; areal = lengde * bredde; System.out.System.out.println("Rektangelet har storrelse: " + areal) ;

Programmet med variabel-initialisering int lengde; int bredde; int areal; lengde = 7; bredde = 4; areal = lengde * bredde; System.out.System.out.println("Rektangelet har storrelse: " + areal) ;

Programmet i komplett versjon public class u1areal { public static void main(string[] args) { int lengde; int bredde; int areal; lengde = 7; bredde = 4; areal = lengde * bredde; System.out.println("Rektangelet har storrelse: " + areal) ;

Programmet, slik man bør fokusere public class u1areal { public static void main(string[] args) { int lengde; int bredde; int areal; lengde = 7; bredde = 4; areal = lengde * bredde; System.out.println("Rektangelet har storrelse: " + areal) ;

Variabel-typer int lengde definerte ikke bare at det var en variabel, den fortalte også maskinen hvilken type verdi denne kunne ha (int=heltall) Siden det er et heltall kunne lengden være 7, men kunne ikke vært 7,1 Vi kunne alternativt definert som "double lengde" - da kunne den vært et tall med desimaler (flyttall)

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

Oppsummering av variabler Variabler kan brukes for mange formål: Representere en bestemt verdi som skal brukes flere plasser, og tillate enkel endring alle steder (samme tall som skal ganges med 2, plusses med 3 osv.) Holde på en mellomregning (holde på areal som lengde ganget med bredde) Holde på verdier hentet utenfra (holde på tastatur-input fra bruker)

Oppsummering av variabler Variabler er av en bestemt type: Man må fra starten av binde seg på om en variabel skal representere tekst eller tall (int, double, String) Datatypen avgjør også hva en bestemt operasjon innebærer (å plusse tallene 20 og 14 gir 34, å plusse tekstene "20" og "14" gir "2014")

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 { public static void main(string[] args) { int tall1; tall1 = 4; int tall2; tall2 = 9; //skriv koden som trengs her for å bytte om verdiene i //variablene tall1 og tall2, uansett hva verdiene er System.out.println( Nå har tall1 blitt ni: + tall1 ); System.out.println( mens tall2 er fire: + tall2 );

Hvorfor blir følgende kode feil? public class u1var1 { public static void main(string[] args) { int tall1; tall1 = 4; int tall2; tall2 = 9; tall1 = tall2; tall2 = tall1; System.out.println( Nå har tall1 blitt ni: + tall1 ); System.out.println( mens tall2 er fire: + tall2 );

Hvorfor blir følgende kode feil? public class u1var1 { public static void main(string[] args) { int tall1; tall1 = 4; int tall2; tall2 = 9; tall1 = 9 ; tall2 = tall1; System.out.println( Nå har tall1 blitt ni: + tall1 ); System.out.println( mens tall2 er fire: + tall2 );

Hvorfor blir følgende kode feil? public class u1var1 { public static void main(string[] args) { int tall1; tall1 = X4; int tall2; tall2 = 9; tall1 = 9 ; tall2 = tall1; System.out.println( Nå har tall1 blitt ni: + tall1 ); System.out.println( mens tall2 er fire: + tall2 );

Hvorfor blir følgende kode feil? public class u1var1 { public static void main(string[] args) { int tall1; tall1 = X4; int tall2; tall2 = 9; tall1 = 9 ; tall2 = 9 ; System.out.println( Nå har tall1 blitt ni: + tall1 ); System.out.println( mens tall2 er fire: + tall2 );

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?

Man må introdusere en tredje variabel! public class u1var1 { public static void main(string[] args) { int tall1; tall1 = 4; int tall2; tall2 = 9; int tall3; tall3 = tall2; tall2 = tall1; tall1 = tall3; System.out.println( Nå har tall1 blitt ni: + tall1 ); System.out.println( mens tall2 er fire: + tall2 );

Man må introdusere en tredje variabel! public class u1var1 { public static void main(string[] args) { int tall1; tall1 = 4; int tall2; tall2 = 9; int tall3; tall3 = 9 ; tall2 = tall1; tall1 = tall3; System.out.println( Nå har tall1 blitt ni: + tall1 ); System.out.println( mens tall2 er fire: + tall2 );

Man må introdusere en tredje variabel! public class u1var1 { public static void main(string[] args) { int tall1; tall1 = 4; int tall2; tall2 = 9; int tall3; tall3 = 9 ; tall2 = 4 ; tall1 = tall3; System.out.println( Nå har tall1 blitt ni: + tall1 ); System.out.println( mens tall2 er fire: + tall2 );

Man må introdusere en tredje variabel! public class u1var1 { public static void main(string[] args) { int tall1; tall1 = 4; int tall2; tall2 = X9; int tall3; tall3 = 9 ; tall2 = 4 ; tall1 = tall3; System.out.println( Nå har tall1 blitt ni: + tall1 ); System.out.println( mens tall2 er fire: + tall2 );

Man må introdusere en tredje variabel! public class u1var1 { public static void main(string[] args) { int tall1; tall1 = 4; int tall2; tall2 = X9; int tall3; tall3 = 9 ; tall2 = 4 ; tall1 = 9 ; System.out.println( Nå har tall1 blitt ni: + tall1 ); System.out.println( mens tall2 er fire: + tall2 );

Man må introdusere en tredje variabel! public class u1var1 { public static void main(string[] args) { int tall1; tall1 = 4; int tall2; tall2 = 9; int tall3; tall3 = 9 ; tall2 = 4 ; tall1 = 9 ; System.out.println( Nå har tall1 blitt ni: + tall1 ); System.out.println( mens tall2 er fire: + tall2 );

Man må introdusere en tredje variabel! public class u1var1 { public static void main(string[] args) { int tall1; tall1 = 4; int tall2; tall2 = 9; int tall3; tall3 = tall2; tall2 = tall1; tall1 = tall3; System.out.println( Nå har tall1 blitt ni: + tall1 ); System.out.println( mens tall2 er fire: + tall2 );

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

Slipp brukeren til! 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å

Enkel input fra brukeren {u1input.java: motta input fra tastatur

Inputt av tall fra brukeren {u1inputsum.java: Motta input i form av heltall fra tastaturet

Beslutninger

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

En uferdig løsning (mangler beslutning) import java.util.scanner; public class u1beslutninguferdig{ public static void main(string[] args) { 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");

Beslutninger i et program: if Selve syntaksen (skrivemåten) er veldig enkel: if (something) {do1; do2;.. if (alder<6) { System.out.println("du er liten"); {u1beslutning1.java

En praktisk kortform: if-else Syntaksen er fremdeles veldig enkel: if (something) {do1; do2;.. else {do3; do4;.. {u1beslutning2.java

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..)

Hvorfor blir følgende løsning feil? if (alder<3) { System.out.println("du er veldig liten"); if (alder<6) { System.out.println("du er liten");

Løsning med kombinert uttrykk if (alder<3) { System.out.println("du er veldig liten"); if (alder>=3 && alder<6) { System.out.println("du er liten");

Løsning med else if if (alder<3) { System.out.println("du er veldig liten"); else if (alder<6) { System.out.println("du er liten");

Og hvorfor går ikke den motsatte else if? if (alder<6) { System.out.println("du er liten"); else if (alder<3) { System.out.println("du er veldig liten");

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 Å lære syntaksen (skrivemåten) er enkelt: 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

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 { public static void main(string[] args) { 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 et navn som representerer en verdi (en boks hvor man kan putte en verdi) 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 Programming handler om problemløsning, og krever kreativitet og oppfinnsomhet Programmering lærer man gjennom trening og atter trening