Föreläsningar 7,8 sept 24, sept 26 v 39). delvis DD Chapter 6.

Relevanta dokument
Egna funktioner. Vad är sin? sin är namnet på en av många inbyggda funktioner i Ada (och den återfinns i paketet Ada.Numerics.Elementary_Functions)

Design mönster. n n n n n n. Command Active object Template method Strategy Facade Mediator

Föreläsning 10: Kombinatorik

Kontrakt baserad design. Design by contract

Tommy Färnqvist, IDA, Linköpings universitet

Programmering med Java. Grunderna. Programspråket Java. Programmering med Java. Källkodsexempel. Java API-exempel In- och utmatning.

Lösningar och kommentarer till uppgifter i 1.1

Induktion LCB Rekursion och induktion; enkla fall. Ersätter Grimaldi 4.1

Inledande matematisk analys. 1. Utred med bevis vilket eller vilka av följande påståenden är sana:

Inledande matematisk analys (TATA79) Höstterminen 2016 Föreläsnings- och lekionsplan

Enjoy Vattenfallsmodellen i funktionella språk

Räkning med potensserier

MS-A0409 Grundkurs i diskret matematik Sammanfattning, del I

1. BERÄKNING AV GRÄNSVÄRDEN ( då x 0 ) MED HJÄLP AV MACLAURINUTVECKLING. n x

Datastrukturer och algoritmer

Enjoy Vattenfallsmodellen i funktionella språk

TENTAMEN I MATEMATISK STATISTIK Datum: 13 mars 08

H1009, Introduktionskurs i matematik Armin Halilovic POLYNOM, POLYNOMDIVISION, ALGEBRAISKA EKVATIONER, PARTIALBRÅKSUPPDELNING. vara ett polynom där a

Kompilering och exekvering. Föreläsning 1 Objektorienterad programmering DD1332. En kompilerbar och körbar java-kod. Kompilering och exekvering

2D1311 Programmeringsteknik för Bio1 och Bio2, vt 2003 Fiktivt prov På flervalsfrågorna är endast ett svar rätt om inget annat anges i frågan! Det rik

Vikingen FutureLook. Delphi Finansanalys AB

vara ett polynom där a 0, då kallas n för polynomets grad och ibland betecknas n grad( P(

Innehåll Grafräknaren och diskret matematik...1 Vad handlar diskret matematik om?...1 Permutationer och kombinationer...3 Något om heltalsräkning...

101. och sista termen 1

REGULJÄRA SPRÅK (8p + 6p) 1. DFA och reguljära uttryck (6 p) Problem. För följande NFA över alfabetet {0,1}:

Datorövning 2 Fördelningar inom säkerhetsanalys

Duo HOME Duo OFFICE. Programmerings manual SE

Borel-Cantellis sats och stora talens lag

3 Signaler och system i tidsplanet Övningar 3.1 Skissa följande signalers tidsförlopp i lämpligt tidsintervall

Vad är det okända som efterfrågas? Vilka data är givna? Vilka är villkoren?

Linjär Algebra (lp 1, 2016) Lösningar till skrivuppgiften Julia Brandes

Variabler som hör till enskilda objekt. Deklareras på översta nivån i klassen och i regel som private.

Analys av algoritmer. Beräkningsbar/hanterbar. Stora Ordo. O(definition) Datastrukturer och algoritmer. Varför analysera algoritmer?

ENDIMENSIONELL ANALYS B1 FÖRELÄSNING VI. Föreläsning VI. Mikael P. Sundqvist

Uppgifter 3: Talföljder och induktionsbevis

2 b) Bodega bodegan = new Bodega(); double moms = 0.235; String namn = "Vargtass"; System.out.println(namn + " " + moms + bodegan.ändra(moms, namn); S

Genomsnittligt sökdjup i binära sökträd

JAVAUTVECKLING LEKTION 4

Återanvändning. Två mekanismer. Nedärvning av egenskaper (inheritance) Objekt komposition

Det är principer och idéer som är viktiga. Skriv så att du övertygar examinatorn om att du har förstått dessa även om detaljer kan vara felaktiga.

JAVA Mer om klasser och objektorientering

Systemdesign fortsättningskurs

Föreläsning 8 Programmeringsteknik och Matlab 2D1312/2D1305. Klass Object, instans av klass public/private Klassvariabler och klassmetoder

Tentamen i Flervariabelanalys F/TM, MVE035

//Använd main som ett "handtag" för att hålla ihop programmet. //Själva programmet finns i övriga klasser.

Grundkurs i programmering, 6 hp (725G61) Dugga 2 tillfälle 2

Statistisk analys. Vilka slutsatser kan dras om populationen med resultatet i stickprovet som grund? Hur säkra uttalande kan göras om resultatet?

EDAA20 Programmering och databaser. Mål komprimerat se kursplanen för detaljer. Checklista. Föreläsning 1-2 Innehåll. Programmering.

Tentamenskrivning, , kl SF1625, Envariabelanalys för CINTE1(IT) och CMIEL1(ME ) (7,5hp)

Anmärkning: I några böcker använder man följande beteckning ]a,b[, [a,b[ och ]a,b] för (a,b), [a,b) och (a,b].

Sannolikhetslära. c 2015 Eric Järpe Högskolan i Halmstad

MS-A0409 Grundkurs i diskret matematik I

Föreläsning 1 & 2 INTRODUKTION

Uppsala Universitet Matematiska Institutionen Bo Styf. Att repetera.

Mer källkod. Styrstrukturer Val Slingor Operatorer Källkodsexempel med minne. Erik Forslin. Rum 1445, plan 4 på Nada

c n x n, där c 0, c 1, c 2,... är givna (reella eller n=0 c n x n n=0 absolutkonvergent om x < R divergent om x > R n n lim = 1 R.

Mönster. n n n n n. Visitor Decorator Extension Object State Taskmaster

Klassdeklaration. Metoddeklaration. Parameteröverföring

F4. programmeringsteknik och Matlab

Andra ordningens lineära differensekvationer

Fourierserien. fortsättning. Ortogonalitetsrelationerna och Parsevals formel. f HtL g HtL t, där T W ã 2 p, PARSEVALS FORMEL

Att skriva till och läsa från terminalfönstret

Trigonometriska polynom

Universitetet: ER-diagram e-namn

Digital signalbehandling Alternativa sätt att se på faltning

732G Linköpings universitet 732G11. Johan Jernlås. Översikt. Repetition. Muddy. Funktioner / metoder. Punktnotation. Evalueringsordning

DI-institutionen Sid 1 av 6 Hans-Edy Mårtensson Sten Sundin

= (1 1) + (1 1) + (1 1) +... = = 0

Mönster. n n n n n n n n n n. Singleton Monostate Null object Factory Composite Observer Abstract server Adapter Bridge Proxy

som är styckvis kontinuerlig och har styckvis kontinuerlig derivatan. Notera att f (x)

4. Uppgifter från gamla tentor (inte ett officiellt urval) 6

Introduktion till statistik för statsvetare

Kort om klasser och objekt En introduktion till GUI-programmering i Java

Föreläsning 2 Objektorienterad programmering DD1332. Typomvandling

Matematisk statistik TMS063 Tentamen

Induktion och Binomialsatsen. Vi fortsätter att visa hur matematiska påståenden bevisas med induktion.

Bankkonto - övning. Övning 2 Skriv en metod, geträntan, som returnerar räntan.

Övning2. Variabler. Data typer

1. Hur gammalt är ditt barn?

Universitetet: ER-diagram e-namn

Föreläsning 6: Metoder och fält (arrays)

RESTARITMETIKER. Avsnitt 4. När man adderar eller multiplicerar två tal som t ex

Föreläsning 3-4 Innehåll

DEL I. Matematiska Institutionen KTH

LINJÄRA DIFFERENTIALEKVATIONER AV HÖGRE ORDNINGEN

Hambley avsnitt 12.7 (även 7.3 för den som vill läsa lite mer om grindar)

Funktionsteori Datorlaboration 1

Tenta i MVE025/MVE295, Komplex (matematisk) analys, F2 och TM2/Kf2

vara ett polynom där a 0, då kallas n för polynomets grad och ibland betecknas n = grad( P(

FÖRSLAG TILL LÖSNINGAR FÖR TENTAMEN I INTERNETPROGRAMMERING MED JAVA, 5p för SY , kl

Lite om felhantering och Exceptions Mer om variabler och parametrar Fält (eng array) och klassen ArrayList.

Föreläsning 2 sept 05 (Onsdag v 36). DD Chapter 2.

Kapitel 6. Hakparenteser fšr att ange index MŒnga všrden av samma typ

Grundläggande programmering, STS 1, VT Sven Sandberg. Föreläsning 12

LÖSNINGSFÖRSLAG Programmeringsteknik För Ing. - Java, 5p

Föreläsning 3. Signalbehandling i multimedia - ETI265. Kapitel 3. Z-transformen. LTH 2015 Nedelko Grbic (mtrl. från Bengt Mandersson)

Uppsala Universitet Matematiska Institutionen Bo Styf. Genomgånget på föreläsningarna Föreläsning 26, 9/2 2011: y + ay + by = h(x)

1. Hur gammalt är ditt barn?

Tentamen. Programmeringsmetodik, KV: Java och OOP. 17 januari 2002

2D1339 Programkonstruktion för F1, ht 2004

Transkript:

Föreläsigar 7,8 sept 4, sept 6 v 39). delvis DD Chapter 6. Metoder som returerar värde. När vi skriver uttryck ka vi aväda ibyggda operatorer, t ex i uttrycket efter tilldeligssymbole i satse : k = 3*i + j + 4; I uttryck också aväds arop (egelska call, ivocatio) till metoder som fis i färdigskriva klasser på likade sätt som i matematike aväder stadardfuktioer. Så här skrivs till exempel att variabel x (lite del av miet) skall iehålla värdet för sius för 0.5 radiaer och att y skall iehålla cosius för π /4 + absolutvärdet av iehållet av x: x = Math.si(0.5); y = Math.cos(Math.PI/4.0) + Math.abs(x); //Obs paratesera! I e matte -bok skulle det stå x = si 0.5 och y = cos π/4 + x Me hur gör ma om ma vill defiiera ega fuktioer (metoder som returerar värde), och hur aväder ma dem, kaske gåg på gåg? Jo: Java Matte Defiitio av f: f(x) x R R.. class...{ static double f(double x) { Vi defiierar f(x) = x +3 retur x+3; Vi kallar x för (formell) parameter, i matte ofta variabel som ju betyder ågot helt aat i programmerig! Avädig (arop, applikatio) av f...mai(...) { utdata.pritl("f(14.0) = " + f(14.0)); Vad blir f(14)? z = 1; Om z = 1, u = 3.0* f(.0*z); låt u = 3*f(*z) Vi kallar 14.0 och.0 för argumet (i vissa böcker aktuell parameter).

Ytterligare ett exempel. s formel : I e matte-bok ka det stå så här: Om e triagel har sidor med lägdera a, b och c ka triagels yta beräkas med s formel: area(a,b,c) = p(p-a)(p-b)(p-c) där p = (a+b+c) / Beräka ågra triaglars ytor, t ex de egyptiska triagel med sida 3, 4 och 5. Övig: I formel är e sorts operator utlämad. Vilke? Får ma göra så i Java? Detta blir i Java: import java.io.*; public class { static BufferedReader idata = ew BufferedReader(ew IputStreamReader(System.i)); public static void mai(strig[] iargs) throws IOExceptio { System.out.pritl("s formel beräkig av triaglars ytor"); System.out.prit("Ge lägde för sida a : "); double a = Double.parseDouble(idata.readLie()); System.out.prit("Ge lägde för sida b : "); double b = Double.parseDouble(idata.readLie()); System.out.prit("Ge lägde för sida c : "); double c = Double.parseDouble(idata.readLie()); System.out.pritl("Triagels yta = " + area(a, b, c)); public static double area(double ia, double ib, double ic) { double p = (ia + ib +ic) /.0; //s formula retur Math.sqrt(p*(p-ia)*(p-ib)*(p-ic)); /* Körresultat s formel för beräkig av triaglars ytor Ge lägde för sida a : 3.0 Ge lägde för sida b : 4.0 Ge lägde för sida c : 5.0 Triagels yta = 6.0 */ Exemplet visar också hr ma matar i e sträg frå tagetbordet och hur resultatet bifogas som e flerraders-kommetar. Detta är bekvämare ä att aväda JOptioPae för imatig. Defiitoe av utdata förklaras seare.

Sematik = Programmets betydelse. 1. Före mai börjar köra : ALU + CPU (styrig, aritmetik, mie) Dators mie Klassvariabler System out Metodarop, parameter lokala variabler iargs mai(..) a b c Objekt..readLie.. Klassmetoder..mai....area.. idata..pritl.. Double parsedouble Dators skärm Tagetbord När vi startar iterpreter med java startar mai-metode. Dators mie iehåller då dessa metoder och variabler : - Klassvariable System.out refererar till ett objekt som håller reda på skärme och har metode pritl(strig..) som gör att vi ka skriva på skärme. Mer om objekt seare. - Klassvariable idata refererar till ett objekt som håller reda på tagetbordet och har metode Strig readlie() som gör att vi ka läsa i strägar. - Kod för klass-metodera void mai(..) och double area(..) som hör till klasse. - Kod för klassmetode double parsedouble(strig..) som hör till klasse Double. - Dessutom kommer det så läge metode mai exekverar (dvs hela tide) fias e aktiverigspost (frame) för mais parameter iargs samt mais lokala variabler a, b och c.

. När mai kört imatigskommadoa me ite gjort aropet till area : De sju första kommadoa i mai fyller mais lokala variabler a, b och c med värde : ALU + CPU (styrig, aritmetik, mie) Dators mie Klassvariabler System out Metodarop, parameter lokala variabler iargs a b c 3.0 4.0 5.0 mai(..) Objekt..readLie.. Klassmetoder..mai....area.. idata..pritl.. Double parsedouble Dators skärm Tagetbord

3. När mai gjort aropet till area : Miet iehåller u ytterligare e aktiverigspost: - Så läge metode area kör (exekverar) fias e aktiverigspost (frame) för areas parametrar ia, ib, och ic samt areas lokala variabel p. Parmetrara får iitialvärde som är lika med de värde som argumete i aropet har: System.out.pritl("Triagels yta = " + area(a, b, c)); // i mai public static double area(double ia, double ib, double ic) { Första argumetet är uttrycket a som har värdet 3.0 (iehållet i a just u) och detta värde blir iitialvärdet för parameter ia. Pss fylls parameter ib med värdet i variabel b och ic värdet i c. Parametrara fugerar i fortsättige som lokala variabler. ALU + CPU (styrig, aritmetik, mie) Dators mie Klassvariabler System out idata Metodarop, parameter lokala variabler iargs a b c ia ib ic p 3.0 4.0 5.0? 3.0 4.0 5.0 mai(..) area(..) Objekt..readLie....pritl.. Klassmetoder..mai....area.. Double parsedouble Dators skärm Tagetbord

4. När area gjort tilldelige till p : Metode area kör u igåg coh beräkar lokala variable p till ( 3.0 + 4.0 + 5.0 )/.0 = 6.0. Metode areas aktiverigspost ser u ut så här : ia ib ic p 3.0 4.0 5.0 6.0 area(..) 5. När area kört klart och mai kör sitt sista kommado : Det sista metode area gör är att beräka sitt retur värde och lämar detta resultat i CPU:. Metode areas aktiverigspost försvier. Metode mai fortsätter u med att köra sitt System.out.pritl-kommado, som avbröts av aropet. Vid beräkig av pritl-kommados argumet, "Triagels yta = " + area(a,b,c), ka resultatet av aropet till area, som fis i CPU- avädas: ALU + CPU (styrig, aritmetik, mie) Dators mie Klassvariabler System out idata 6.0 Metodarop, parameter lokala variabler iargs a b c 3.0 4.0 5.0 mai(..) Objekt..readLie....pritl.. Klassmetoder..mai....area.. Double parsedouble Dators skärm Triagels yta = 6.0 Tagetbord

Metoder som returerar itet (void). När vi skriver uttryck, i t ex tilldeligar och aropsuttryck, har vi alltså glädje av metoder som returerar värde, speciellt om vi på flera ställe i ett program behöver samma metod. Om vi på flera ställe i ett program har ågra kommado som i stort sett gör samma sak skulle det vara bra att ha ett egetillverkat "super"-kommado som vi kude aväda på dessa ställe. Exempelvis om vi i ett spel-program på flera platser har skrivit dessa satser: System.out.prit("Ställig : "); for (it i = 0; i <= talnu; i = i+1) { System.out.prit(" " + i); System.out.pritl(); Vi ka u i stället skriva (på alla platser där ställige ska skrivas ut): tryckställig(talnu); om vi defiierar e y metod void tryckställig(it ital) på detta sätt: public static void skrivställig(it ital){ System.out.prit("Ställig : "); for (it i = 0; i <= ital; i = i+1) { System.out.prit(" " + i); System.out.pritl(); Äve void-metoder ka defiieras med parametrar och aropas med argumet p s s sätt som returerade metoder. Det fugerar på samma sätt med e y aktiverigspost. Aktiverigsposte för void skrivställig(it ii) har alltså e e parameter för parameter ital. I blocket för for-satse tillkommer e "låda" för blockets lokala variabel i. Avädig av metoder. Att defiiera och aväda metoder krävs praktiskt taget så fort ett program blir ågotsåär stort. Om ma skriver sia ya metoder geerella ka ma t o m ha glädje av dem i adra sammahag. De förtjäar då att ligga i ega klasser och förklaras till public. Ma ka t o m ha glädje av adras klass-metoder frå färdigskriva och färdigkompilerade klasser. Det är detta vi gör med t ex aropet Double.parseDouble. Arope skrivs som <Klassam>.<metodam>(<argumetlista>). Ev krävs import.

Partiella fuktioer och ekel rekursio. Vi defiierar i matte 0! = 1! = (-1)! * för >0 dvs 5! = 4!*5 = (3!*4)*5 = ((!*3)*4)*5 = (((1!*)*3)*4)*5 = ((((0!*1)*)*3)*4)*5 = ((((1*1)*)*3)*4)*5 = (((1*)*3)*4)*5 = ((*3)*4)*5 = (6*4)*5 = 4*5 = 10 me ma ka också räka så här! = 1**... * dvs 5! = 1**3*4*5 =... 10 Ett program som aväder båda sätte att täka : import java.io.*; public class TestFak { static BufferedReader idata = ew BufferedReader(ew IputStreamReader(System.i)); public static void mai( Strig args[] ) throws IOExceptio { //fixa för första varv System.out.prit("Ge ett värde (slute ge <0 ): "); it = Iteger.parseIt(idata.readLie()); while ( >= 0) { //gör det viktiga System.out.pritl("! (Iterativt) = " + fakiter()); System.out.pritl("! (Rec) = " + fakrec()); //fixa för ev ytt varv System.out.prit("Ge ett värde (slute ge <0 ): "); = Iteger.parseIt(idata.readLie());

// retuerar oll för egativa public static it fakiter(it ) { it result = 1; for (it i = 0; i < ; i = i+1) { result = result*(i+1); retur result; // avbryter programmet för egativa public static it fakrec(it ) { if ( < 0) { throw ew RutimeExceptio("Tried to do! for <0"); else if ( == 0 ) { retur 1; else { retur fakrec(-1)*; De lokala variblera i de eda aktiverigsposte i fakiter(it ) vid körig av for-surra: result i 5 0 1 result i 5 1 result i 5 6 result i 5 3 4 result i 5 4 10 De lokal variable (parameter ) i aktiverigspostera och returvärdet i ALU: i fakrec(it ) vid de rekursiva körige: 1 1... 5 5 5 5 5 5 5 5 4 4 4 4 4 4 4 3 3 3 3 3 3 1 1 0 1

Dubbel rekursio. Ett program som gör två rekursiva arop: import java.awt.*; import javax.swig.*; public class DrawTree exteds JApplet { private fial it startmodul = 30; public void pait(graphics g) { drawtree(g, 500, 10, 0, 30*startmodul); private void drawtree(graphics g, it i, it j, it iv, it storlek) { it modul = storlek/30; if (iv == 5) { g.drawoval(i-5*modul, j-5*modul, 8, 8); else { g.drawlie(i, j, i + 8*modul, j + 30); g.drawlie(i, j, i - 8*modul, j + 30); drawtree(g, i + 8*modul, j+30, iv+1, 15*modul); drawtree(g, i - 8*modul, j+30, iv+1, 15*modul); Program av detta slag är svåra att skriva uta rekursio. Körresultat: