Men först: Några funktioner ur preluden. Introduktion till programmering. Uppgiften. Variationer av uppgiften. Föreläsning 4

Relevanta dokument
Introduktion till programmering. Standardfunktioner. Vad används datorer till? Standardfunktioner. Föreläsning 2. Prelude. $ ghci...

Funktionell programmering DD1361

Hur man programmerar. Exempel på problemlösning i Python

Kap9. Operatorn.. Hudak 9.4 sid 11. Fermats förmodan, eller Fermats stora sats säger att. xm + ym == zm har heltalslösningar om och endast om m == 2.

Kungliga Tekniska Högskolan Ämneskod 2D1370 Tentamensdag 2001-maj-31 Tentamen i Funktionell Programmering Skrivtid 4 h

DAT043 - föreläsning 8

Introduktion till programmering SMD180. Föreläsning 9: Tupler

I ett program hantera man ofta samlingar av objekt av samma typ.

Introduktion till programmering. Undervisning. Litteratur och examination. Lärare. Föreläsning 1

Webbens grundbegrepp. Introduktion till programmering. Ytterligare exempel. Exempel på webbsida. Föreläsning 5

Introduktion till programmering

Objektorienterad programmering. Fält som funktionsresultat. Mer om fält: att uppdatera ett parameterfält. Kontrast: Parametrar av primitiv typ

Tentamen, Algoritmer och datastrukturer

l uppgiftsformulering l algoritmkonstruktion l verifikation l kodning l testning och avlusning l validering l dokumentering l underhœll Kapitel 2

Strängar. TDDD64 Programmering i Python Föreläsning 4. Peter Dalenius Institutionen för datavetenskap

Objektorienterad programmering Föreläsning 10. Copyright Mahmud Al Hakim Sorteringsalgoritmer

Magnus Nielsen, IDA, Linköpings universitet

Föreläsning 3 Programmeringsteknik och C DD1316. Innehåll i listor. Uppdateringsoperatorer. +,* och listor. Listor. Indexering

Användning av datastrukturer Algoritmer och datastrukturer Obligatorisk Laboration nr 1

Föreläsning 5 i programmeringsparadigm.

Senast. Idag. Icke-strikt evaluering. Strikt evaluering. Testa latheten! Lat evaluering. Plus och minus med lat evaluering. Testa latheten!

Hitta k största bland n element. Föreläsning 13 Innehåll. Histogramproblemet

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

Vem är vem på kursen. Objektorienterad programvaruutveckling GU (DIT011) Kursbok Cay Horstmann: Big Java 3rd edition.

Användning av datastrukturer Algoritmer och datastrukturer Obligatorisk Laboration nr 1

Introduktion till programmering SMD180. Föreläsning 7: Strängar

Föreläsning 6 i programmeringsparadigm. Tips kring programmering i Haskell och kring labbarna.

Föreläsning 6: Introduktion av listor

Datorlära 6. Arbeta med strängar Inmatning med tangentbordet Bygga ett program med inmatning, funktioner, osv

TDDC74 Lab 02 Listor, sammansatta strukturer

Användning av datastrukturer Algoritmer och datastrukturer Obligatorisk Laboration nr 1

Rekursion och induktion för algoritmkonstruktion

Textbearbetning i skalet och man-sidor

Sekvensdatatyper, ASCII och chiffer. Linda Mannila

Föreläsning 11 Datastrukturer (DAT037)

Korsordlösare Sara Hedbrandh Strömberg Programkonstruktion VT 10 Inlämninsguppgift

Lambdas. (och fler design patterns) Objekt-orienterad programmering och design (DIT952) Niklas Broberg, 2017

Föreläsning 13 Testning och strängar

Erfarenheter från labben

Föreläsning Datastrukturer (DAT036)

Instruktioner - Datortentamen TDDD73 Funktionell och imperativ programmering i Python

Objektorienterad programmering E. Algoritmer. Telefonboken, påminnelse (och litet tillägg), 1. Telefonboken, påminnelse (och litet tillägg), 2

Nada, KTH Tentamensdag maj -24 Tentamen i Funktionell Programmering Skrivtid 5 h

6 Rekursion. 6.1 Rekursionens fyra principer. 6.2 Några vanliga användningsområden för rekursion. Problem löses genom:

Programmering II (ID1019) :00-11:00

Introduktion till Haskell

Tentamensdag 2002-aug-20 Tentamen i Funktionell Programmering Skrivtid 5 h

TENTAMEN MOM1 GRUNDLÄGGANDE PROGRAMMERINGSTEKNIK OCH

Visualisering med Rhino/Vray/Photoshop av modell som skapats i Revit. AADA15 Revit Workshop 2017 LTH Ludvig Hofsten

Laboration: Whitebox- och blackboxtesting

Alfabeten, strängar och språk. String

String [] argv. Dagens Agenda. Mer om arrayer. Mer om arrayer forts. String [] argv. argv är variabelnamnet. Arrayer och Strängar fortsättning

Föreläsning 7 i programmeringsparadigm. Ytterligare Högre ordningens funktioner: filter, foldr foldl. Hutton 7.2, 7.3 och 7.4.

Algoritmanalys. Genomsnittligen behövs n/2 jämförelser vilket är proportionellt mot n, vi säger att vi har en O(n) algoritm.

Algoritmer. Två gränssnitt

TDIU01 - Programmering i C++, grundkurs

Lite mer om Javas stöd för fält. Programmering. Exempel: vad är det största talet? hh.se/db2004. Fält samt Input/Output

Instruktioner - Datortentamen TDDD73 Funktionell och imperativ programmering i Python TDDE24 Funktionell och imperativ programmering del 2

Exempel: Förel Rekursion III Nr 14. Uno Holmer, Chalmers,

Instuderingsfrågor, del D

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

10. Mängder och språk

TDDC30. Objektorienterad programmering i Java, datastrukturer och algoritmer. Föreläsning 9 Jonas Lindgren, Institutionen för Datavetenskap, LiU

Objektorienterad Programkonstruktion

Datastrukturer, algoritmer och programkonstruktion (DVA104, VT 2015) Föreläsning 6

Påminnelse: en datatyp för bilder. Programmering. En datatyp för bilder. Spegelbild. hh.se/db2004

TDDC30 Programmering i Java, Datastrukturer och Algoritmer Lektion 3

Tommy Färnqvist, IDA, Linköpings universitet

Problemlösning och funktioner Grundkurs i programmering med Python

DD1361 Programmeringsparadigm. Carina Edlund

Översikt. Stegvis förfining. Stegvis förfining. Dekomposition. Algoritmer. Metod för att skapa ett program från ett analyserat problem

Indexerade variabler

Föreläsning 13 Innehåll

Rekursion och induktion för algoritmkonstruktion

Datastrukturer och algoritmer

Instruktioner - Datortentamen TDDD73 Funktionell och imperativ programmering i Python

ITK:P1 Föreläsning 1. Programmering. Programmeringsspråket Java. Stark typning Explicit typning Strukturerat Hög säkerhet

Tentamen för kursen Objektorienterad programvaruutveckling GU (DIT010)

Typkonvertering. Java versus C

tentaplugg.nu av studenter för studenter

TDIU01 (725G67) - Programmering i C++, grundkurs

Outline. Objektorienterad Programmering (TDDC77) Abstrakta klasser. Abstrakta metoder. Abstrakta klasser. Gränssnitt. Uppräkningar (enum) Ahmed Rezine

Föreläsning 2. Länkad lista och iterator

Programmering II (ID1019) :00-11:00

TAIU07 Matematiska beräkningar med MATLAB för MI. Fredrik Berntsson, Linköpings Universitet. 15 januari 2016 Sida 1 / 26

Föreläsning 3. Stack

Föreläsning 13. Rekursion

Erfarenheter från labben

Föreläsning 2 Programmeringsteknik och C DD1316. Mikael Djurfeldt

OBJEKTORIENTERAD PROGRAMVARUUTVECKLING. Övningstentamen 2

Tentamen , Introduktion till Java, dtaa98, dtea53

Objektorienterad Programmering (TDDC77)

Några inbyggda funktioner (med resultat!) Introduktion till programmering D0009E. Föreläsning 4: Villkor och rekursion. Modulus-operatorn.

n Detta för att kunna koncentrera oss på n Tal: number? n Symboler: symbol? n Strängar: string? n Tecken: char? n Boolskt: boolean?

TENTAMEN PROGRAMMERINGSMETODIK MOMENT 2 - JAVA, 4P

Recap Mera om nya typer Kort Fält. Programmering. Sommarkurs Verónica Gaspes. IDE-sektionen.

Föreläsning 8: Exempel och problemlösning

Tentamen Datastrukturer D DAT 035/INN960

Algoritmer, datastrukturer och komplexitet

Idag. statiska metoder och variabler. private/public/protected. final, abstrakta klasser, gränssnitt, delegering. wrapper classes

Transkript:

Introduktion till programmering Men först: Några funktioner ur preluden Vad är skillnaden mellan head str och take 1 str? Föreläsning 4 Ett större exempel. head :: [a] -> a take :: Int -> [a] -> [a] tail :: [a] -> [a] head xs ger första elementet i xs. tail xs ger listan som återstår då det första elementet tas bort. Bägge ger fel om argumentlistan är tom. fst :: (a,b) -> a snd :: (a,b) -> b Funktioner för att välja ut komponenterna i ett par. Uppgiften Variationer av uppgiften Givet en text, skapa en frekvenslista som för varje ord anger hur många gånger ordet förekommer i texten. Listan ska vara sorterad efter frekvens. För Röda rummet börjar listan och 3247 att 1892 han 1694 en 1671 det 1633 i 1604 som 1275 är 992 jag 990 den 963 med 899 Många varianter möjliga listan alfabetiskt i stället. Ange relativa frekvenser i stället. Ignorera interpunktion; han och han. ska vara samma ord. Ignorera skillnaden mellan stora och små bokstäver; han och Han ska vara samma ord.... Hur kan vi lösa problemet? Detta verkar betydligt svårare än vad vi gjort tidigare.

igen (efter frekvens) [("vet",3),("han",2),("allt",1),("att",1),("inte",1),("jag",1)] igen (efter frekvens) [("vet",3),("han",2),("allt",1),("att",1),("inte",1),("jag",1)] Formattera Standardbibliotek Försök hitta delproblem som redan är lösta Att sortera är en mycket vanlig uppgift. Finns inte en funktion för detta i preluden? Nej(!) Men i biblioteksmodulen Data.List, som dokumenteras på http://www.haskell.org/ghc/docs/6.12.2/html/libraries/ API Ett bibliotek beskriver de funktioner som ingår i form av ett API (Application Programming Interface), bestående av namn, typ och en kort beskrivning av vad funktionen gör, t ex sort :: Ord a => [a] -> [a] The sort function implements a stable sorting algorithm. Hur ska man gruppera? En till hjälpfunktion från Data.List group :: Eq a => [a] -> [[a]] The group function takes a list and returns a list of lists such that the concatenation of the result is equal to the argument. Moreover, each sublist in the result contains only equal elements. For example, group "Mississippi" = ["M","i","ss","i","ss","i","pp","i"] Nästa steg Definiera den grupperingsfunktion vi vill ha med hjälp av group.

Kan man sortera par? Den fullständiga lösningen Ja, det kan man! Sortering sker i första hand efter första komponenten, i andra hand efter den andra. Så vi gör om freqs genom att byta plats på de två komponenterna i varje par. Ett litet problem Sortering sker nu i växande ordning; vi vill ha avtagande. Lätt fixat! Vi får lägga till en reversering av resultatet. Sedan återstår endast formattering. import Data.List main = interact translate translate s = format(reverse(sort(freqs(group(sort(words s)))))) freqs xs = [(length x, head x) x <- xs] format xs = unlines [snd x ++ " " ++ show (fst x) x <- xs] Funktionskomposition Variationer Vi har definierat translate genom successiva transformationer, litet analogt med rör (pipes) i Unix. Det finns en operator för detta i Haskell, men funktionerna skrivs i omvänd ordning: translate = format. reverse. sort. freqs. group. sort. words Vi slipper alla parenteserna, vi ser lättare de olika stegen och vi slipper hitta på ett variabelnamn för indata! Normalisering Vi kan normalisera indata genom att ta bort alla tecken utom bokstäver, blanktecken och radbyten; ersätta stora bokstäver med små. normalize s = [tolower c c <- s, isalpha c isspace c] Vi har utnyttjat tre funktioner från Data.Char: tolower :: Char -> Char isalpha :: Char -> Bool isspace :: Char -> Bool

En visualisering: histogram och ********************************** det *********************** han ********************* att ******************* en ***************** i **************** som *************** jag ************** på ************* den *********** är ********** så ********* med ********* för ******** Bara en annan formattering! Att upprepa ett tecken Vi behöver preludfunktionen replicate :: Int -> a -> [a] Ex: replicate 10 a = "aaaaaaaaaa" En ny variant av format format xs = unlines [ snd x ++ "\t" ++ replicate (div (fst x) 100) * x <- xs ] Tab-tecknet \t gör att asteriskerna (för det mesta) börjar i samma kolumn. Varje asterisk betyder 100 förekomster av ordet. Hur fås detta?