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)

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

Borel-Cantellis sats och stora talens lag

Vikingen FutureLook. Delphi Finansanalys AB

Systemdesign fortsättningskurs

Räkning med potensserier

Lösningar och kommentarer till uppgifter i 1.1

Tentamen 19 mars, 8:00 12:00, Q22, Q26

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

Datorövning 2 Fördelningar inom säkerhetsanalys

b 1 och har för olika värden på den reella konstanten a.

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

Föreläsning 10: Kombinatorik

Föreläsning G04: Surveymetodik

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.

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

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

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

Duo HOME Duo OFFICE. Programmerings manual SE

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

Tommy Färnqvist, IDA, Linköpings universitet

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

(a) om vi kan välja helt fritt? (b) om vi vill ha minst en fisk av varje art? (c) om vi vill ha precis 3 olika arter?

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

101. och sista termen 1

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

MS-A0409 Grundkurs i diskret matematik I

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

Tentamen Metod C vid Uppsala universitet, , kl

MS-A0409 Grundkurs i diskret matematik Sammanfattning, del I

Trigonometriska polynom

Samtal med Karl-Erik Nilsson

Uppgifter 3: Talföljder och induktionsbevis

Jag läser kursen på. Halvfart Helfart

x 1 x 2 x 3 x 4 x 5 x 6 HL Z x x x

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

Geometriska summor. Aritmetiska summor. Aritmetiska talföljder kallar vi talföljder som. Geometriska talföljder kallar vi talföljder som

Tentamen i Flervariabelanalys F/TM, MVE035

Föreläsning 2: Punktskattningar

Försöket med trängselskatt

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

Databaser - Design och programmering. Databasdesign. Funktioner. Relationsmodellen. Relationsmodellen. Funktion = avbildning (mappning) Y=X 2

Funktionsteori Datorlaboration 1

Remiss Remissvar lämnas i kolumnen Tillstyrkes term och Tillstyrkes def(inition) och eventuella synpunkter skrivs i kolumnen Synpunkter.

Visst kan man faktorisera x 4 + 1

Stat. teori gk, ht 2006, JW F13 HYPOTESPRÖVNING (NCT ) Ordlista till NCT

Tentamen i Elektronik, ESS010, del 2 den 14 dec 2009 klockan 14:00 19:00.

SANNOLIKHETER. Exempel. ( Tärningskast) Vi har sex möjliga utfall 1, 2, 3, 4, 5 och 6. Därför är utfallsrummet Ω = {1, 2, 3, 4, 5,6}.

Datastrukturer och algoritmer

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

b) Bestäm det genomsnittliga antalet testade enheter, E (X), samt även D (X). (5 p)

Intervallskattning. c 2005 Eric Järpe Högskolan i Halmstad. Antag att vi har ett stickprov x 1,..., x n på X som vi vet är N(µ, σ) men vi vet ej

Fakta om plast i havet

Befolkning per födelseland Reviderad metod vid framskrivningar. Version: 2

Tentamen Metod C vid Uppsala universitet, , kl

Cartesisk produkt. Multiplikationsprincipen Ï Ï Ï

Örserumsviken. Förorenade områden Årsredovisning. Ansvar för sanering av förorenade områden. Årsredovisningslagen och god redovisningssed

Tentamen i Statistik, STA A10 och STA A13 (9 poäng) 26 mars 2004, klockan

Databaser - Design och programmering. Databasdesign. Kravspecifikation. Begrepps-modellering. Design processen. ER-modellering

Introduktion till statistik för statsvetare

Minsta kvadrat-metoden, MK. Maximum likelihood-metoden, ML. Medelfel. E(X i ) = µ i (θ) MK-skattningen av θ fås genom att minimera

Tentamen del 2 i kursen Elinstallation, begränsad behörighet ET

Sannolikheten. met. A 3 = {2, 4, 6 }, 1 av 11

Digital signalbehandling Alternativa sätt att se på faltning

Vid mer än 30 frihetsgrader approximeras t-fördelningen med N(0; 1). Konfidensintervallet blir då

Databaser - Design och programmering. Programutveckling. Programdesign, databasdesign. Kravspecifikation. ER-modellen. Begrepps-modellering

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

Allmänna avtalsvillkor för konsument

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

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

2. Konfidensintervall för skillnaden mellan två proportioner.

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

Datorövning 2 Fördelningar inom säkerhetsanalys

Slutrapport Bättre vård i livets slutskede

Kompletterande kurslitteratur om serier

Så här kommer byggherren och entreprenören överens om energianvändningen

NEWTON-RAPHSONS METOD (en metod för numerisk lösning av ekvationer)

DEL I. Matematiska Institutionen KTH

Uppsala Universitet Matematiska Institutionen Thomas Erlandsson

AMF. I princip är det bara möjligt att flytta privat sparande och sparande där avtalet tecknats efter den 2 februari i fjol.

D 45. Orderkvantiteter i kanbansystem. 1 Kanbansystem med två kort. Handbok i materialstyrning - Del D Bestämning av orderkvantiteter

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

MARKNADSPLAN Kungälvs kommun

TENTAMEN I MATEMATISK STATISTIK Datum: 13 mars 08

1. Test av anpassning.

= x 1. Integration med avseende på x ger: x 4 z = ln x + C. Vi återsubstituerar: x 4 y 1 = ln x + C. Villkoret ger C = 1.

PTKs stadgar. Fastställda vid stämman

Plan för hasselmus vid Paradis, Sparsör

Innanför skalet på centralenheten: Mikroprogrammering

god stiftelsepraxis

Tentamen i Statistik STG A01 (12 hp) 5 mars 2010, kl

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

Tillämpad biomekanik, 5 poäng Plan rörelse, kinematik och kinetik

Exempel på ett litet Ada-program

Av Henrik 01denburg\ Radikaler. För att lösa ekv.: x n = a (n helt, pos. tal) konstruerar man kurvan

Finansiell Statistik (GN, 7,5 hp,, HT 2008) Föreläsning 4 (del 1)

a) Beräkna E (W ). (2 p)

Kollektivt bindande styre på global nivå

NEWTON-RAPHSONS METOD (en metod för numerisk lösning av ekvationer)

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

Tentamen 9 juni 2016, 8:00 12:00, Q21

Transkript:

- 1 - Vad är si? si är amet på e av måga ibyggda fuktioer i Ada (och de återfis i paketet Ada.Numerics.Elemetary_Fuctios) si är deklarerad att ta emot e parameter (eller ett argumet) av typ Float (mätt i radiaer), och att leverera ett av typ Float. pi : costat Float := 3.141593; agle : Float; r : Float; r := si(agle) + 1.0; Put(si(2 * pi - agle), 5, 3, 0); Avädige av si (och adra fuktioer) kallar ma ett arop av si. Aropskostruktioe kräver ett aktuellt för sis parameter - e Float - iom ( ) efter amet. Aktuell parameter. Aropskostruktioe i sig själv är, eller represeterar, ett av type Float. Ett arop ka då aldrig fias som e ege sats, bara som (del av) ett uttryck (formel). Bakom amet si döljer sig förstås e bit programkod som utför beräkige. - 2 - Ega fuktioer Ma ka själv iföra ega fuktioer i sitt program. Det gör ma med e form av deklaratio. Mis: E deklaratio itroducerar ett ytt am samt ger amet e iebörd. Om jag själv vore tvuge att iföra si skulle deklaratioe i pricip se ut så här: fuktioes am fuctio si(arg : Float) -- utför beräkige utifrå arg retur t; parameters am iuti fuktioe parameters datatyp t som aropet ska leverera ts datatyp Och de deklaratioe fis i så fall där deklaratioer ormalt fis! OBS! Fuktioe utförs ite är de deklareras! Deklaratioe ager bara att de hädaefter är tillgäglig. - 3 - E ekel ege fuktio Jag vill ha e fuktio som ger y-koordiate för visst x på de räta lije y = 1,5 x - 0,75, och skriva ut åra pukter på lije: with Text_IO; use Text_IO; procedure fuc_ex package flio is ew Float_IO(Float); use flio; for cout i -50.. 50 loop x := 0.01 * Float(cout); Put(x, 5, 3, 0); Put(y_coeff(x), 8, 3, 0); ed fuc_ex; - 4 - Fuktioer - lite regler (1) Parameter (the_x i exemplet) är till för att fåga upp det ma skickar vid aropet, oavsett hur detta är kostruerat. Parameteramet är e slags geeraliserig av alla upptäkliga former på aropsparameter (aktuellt ): ext : Float; Alla följade kostruktioer är tillåta i rätt sammahag. OBS olika aktuella parametrar: y_coeff(2.3) y_coeff(x) y_coeff(ext) y_coeff(0.9 - x * x) y_coeff(si(ext / 2.0)) OBS! Det är först är fuktiosamet aväds (refereras) i ett arop som fuktioe utförs!

- 5 - Fuktioer - lite regler (2) Fuktioes parameter (the_x i exemplet) är dea fuktios ege privata egedom, och ige aa stas ä iuti fuktioe själv ka de avädas! Jämför for-satses styrvariabel. the_x kallas formell parameter. ext : Float; y := y_coeff(ext); - 6 - Fuktioer - lite regler (3) E fuktios parametrar fugerar dessutom som om de vore kostater! Det går bara att aväda dess i beräkigar, me det går ite att ge dem ågot ytt! Typiskt olagligt: fuctio Step(x : Iteger) retur Iteger is x := x + 1; Försök att tilldela x - Olagligt! retur x; På motsvarade sätt skulle förstås Get(x); vara olagligt iuti Step, liksom adra sätt att försöka ge parameter ett. ext := ext + the_x; -- Olagligt! Parameters livslägd: the_x skapas först är ett arop till y_coeff äger rum. De upphör att existera är the_x lämas. Det skapas med adra ord e y the_x för varje ytt arop! - 7 - Flera parametrar Fuktioer ka ha fler parametrar ä e, och dessa ka vara av ibördes olika datatyp. Me alla lyder uder samma regler. Öskas: E fuktio som ger de :te siffra ur ett heltal (bakifrå med start på 0). Både detta heltal och ska vara parametrar (och egetlige krävs det att är icke-egativt!): fuctio Digit(r : Iteger; : Iteger) retur Iteger is retur (r / ( ** 10)) mod 10; ed Digit; Vi kapar alltså först bort de siffror som följer efter de :te med geom att (heltals!)dividera med e potes av 10. Se plockar vi ut de då sista siffra geom att mod:a med 10. Notera att (aturligtvis) varke r eller ges ya här! - 8 - E ågot mer komplicerad fuktio (1) Det behövs e fuktio för att beräka :te rote ur e Float, där är e Iteger. Fuktioes specifikatio blir fuctio _root( : Iteger; x : Float) Notera: Ovaståede rad är tillräcklig kuskap för att kua aväda _root! Det är _roots specifikatio. Härledig av e formel: Uppgift: Hitta det a som iebär att a = x. Log a först: l a = l x l a = l x l x l a Exp a se: e = e l a där ju e = a Det iebär att t ka formuleras i Ada som Exp(Log(x) / Float())

- 9 - - 10 - E ågot mer komplicerad fuktio (2) Ett aber! Log(x) klarar aturligtvis ite av 0.0! Me för x = 0.0 ska t av _root alltid bli 0.0. Och om x är < 0.0 existerar e lösig om är udda: x = - x Me om x är < 0.0 existerar överhuvudtaget ige lösig om är jämt! Så vi låter fuktioe urskilja fyra fall grudade på x och, och som gör lite olika åtgärder: x är = 0.0 ge 0.0 tillbaka x är < 0.0, är jämt felutskrift, 0.0 x är < 0.0, är udda - formel x är > 0.0 formel Dessutom iför vi i _root e y variabel som lite stöd. E ågot mer komplicerad fuktio (3) fuctio _root( : Iteger; x : Float) sig : Float := 1.0; -- Tecket! if x = 0.0 the retur 0.0; elsif x < 0.0 the if Is_Eve() the -- Is_Eve? Put("Fel i root!"); retur 0.0; ed if; sig := -1.0; ed if; retur sig * Exp(Log(abs x) / Float()); ed _root; - 11 - - 12 - Lärdomar - utvidgigar E fuktio får iehålla vilka utförade satser som helst, i e hur låg följd som helst. retur ; måste förekomma mist e gåg. Flera förekomster är möjliga, och ofta ödvädigt, som i exemplet. Fuktioer ka också ha sia ega deklaratioer (variabel sig i exemplet). Äve här skrivs sådaa deklaratioer mella is och. Me sådaa deklaratioer (av vilket slag de ä är) existerar överhuvudtaget ite utaför fuktioe! De är liksom parametrara fuktioes privata egedom! Kosekveser, t ex: e fuktio fum ka iuti sig deklarera e aa fuktio sub. Me sub ka ite avädas av å aa del av programmet ä iifrå fum. Parametraras typ och type på t av e fuktio ka vara vilke som helst! E fuktio behöver faktiskt ite ha å parameter alls: fuctio Zero retur 0.0; ed Zero; fast just dea är gaska meigslös, de tillför iget! Om ams sylighet och livslägd procedure Mai is a : Float; x : Iteger; p : Boolea; fuctio foo(x : Float) z : Iteger; z := Iteger(x * a); fuctio fum(a, b : Iteger) x : Iteger; type Sex is (female, male); fuctio sub(a : Sex) p : Boolea; p := x > 1; p := x = 1; De am som existerar här eda är edast a, x, p, foo, fum frå Mai. titta ut ur och uppåt går alltid! titta ut ur och edåt går aldrig titta i i går aldrig

- 13 - Subrutier - procedurer Fuktioer är e form av subrutier. E aa form är procedurer. Till exempel är de ibyggda subrutie Put(x, w) (där x och w är Iteger-) e procedur. Procedurer och fuktioer har mycket gemesamt: de represeterar e bit programkod som fis å aa stas de bite kod har försetts med ett am de ka ha parametrar de utförs bara är ma gör ett arop vid aropet aväder ma amet och skickar med aktuella parametrar iom ( ) både procedurer och fuktioer ka göra ega, privata deklaratioer de ka iehålla e följd av godtyckliga satser programmerare ka själv deklarera ya procedurer och fuktioer feomee sylighet och livslägd gäller alla subrutier - 14 - Fuktioer och procedurer - ea skillade (1) Aropet av e fuktio är i sig ett, och får bara fias där ett förvätas! Aropet av e procedur är e sats (e order ), och får bara fias där e sats förvätas. Satser har ite. x, y : Float; Put(si(x - 0.5), 5, 4, 0); -- OK si(x - 0.5); -- FEL y := Put(x, 4, 4, 0); -- FEL Eftersom procedurer sakar och arope av dem ite ka igå i uttryck (formler) har deras uppgifter aa karaktär. Syftet med att aväda Put(x, w) är ju ite att skapa ågot ytt åt programmet, uta att skriva ut ett frå programmet till omvärlde! Därför ka ma aldrig es försöka deklarera e procedurs typ. Jämför följade specifikatioer: fuctio fu( : Iteger) procedure proc( : Iteger) is - 15 - - 16 - Fuktioer och procedurer - ea skillade (2) Relaterat till tidigare exempel Bctable : Utskrift av tabelles huvud där skulle mycket väl kua vara e särskild procedur: -- WriteHeader(max) skriver tabelles -- huvud med kolumera 0 - max: procedure WriteHeader(max : Iteger) is Put(" k ="); for UderValue i 0.. max loop Put(UderValue, 5); ed WriteHeader; Notera att det ite fis ågot retur blad de utförade satsera! Avslut och återhopp till aropsplatse sker automatiskt vid sista ed. Me satse retur; uta ågot bifogat ka avädas på varje plats där procedure skall avsluta sitt jobb. Fuktioer däremot måste ju ha mist e retur ; Fuktioer och procedurer - adra skillade (1) Iuti e fuktio fugerar parametrar som kostater! Det är på samma sätt med procedurer me dessa ka dessutom ha e aa form av parametrar! procedure GetPositiveIteger(x : i out Iteger) is loop Put( Ge ett heltal > 0: ); Get(x); exit whe x > 0; A, B : Iteger; GetPositiveIteger(A); GetPositiveIteger(B);

- 17 - Fuktioer och procedurer - adra skillade (2) Geom att i deklaratioe av e procedur age att e viss parameter skall vara i out talar ma om att i procedure ka det amet både avädas i ett uttryck och tilldelas ya (det är ite lägre e kostat) till de parameter måste ma vid aropet skicka med ett variabelam är procedure ger de parameter ett ytt kommer det att gälla också de medskickade (aktuella) variabel! Procedures parameteram blir alltså ett alias för det variabelam ma skickar med vid arop. Vi har att göra med två olika sk parametermodes: det ormala, där subruties parameter fugerar som e kostat, och som ka aropas med valfritt uttryck (kallas i-mode). Populistiskt: Skicka ett i out-mode, där procedures parameter fugerar som e valig variabel, och som måste aropas med ett variabelam. Populistiskt: Skicka e variabel fuktioer tillåter bara de ormala, procedurer båda formera - 18 - E jämförelse fuktio - procedur fuctio Roudig(x : Float) retur Float(Iteger(x)); procedure Roud(x : i out Float) is x := Float(Iteger(x)); De gör samma jobb me levererar resultatet på olika sätt. Därför aväds de också på olika sätt: f : Float; Put(Roudig(f), 4, 2, 0); Roud(f); Put(f, 4, 2, 0); Notera också amskillade som grudar sig på skillade mella hur de båda aväds: verbet Roud - ett kommado, e uppmaig substativet Roudig - ett objekt (= ) OBS - dea beskrivig är lite föreklad! - 19 - Värde kotra sats - e gåg till v := 1.0 - si (0.5 * pi ) ; am tilldeligssats Put(x / 2.0, 5, 3, 0) ; procedurarop, e sats Ett är alltså ett slags MÅTT - E sats säger vad som ska ske med! Sats = uppmaig eller kommado!