Föreläsningsöversikt 729G04 Programmering och diskret matematik Kursintroduktion Jody Foo Department of Computer and Information Science (IDA) Linköping University, Sweden Allmän kursinformation Vad är diskret matematik? Vad är programmering? Om labbsalarna och labbmiljön Att läsa på universitet Allmän (och viktig) kursinformation Ni läser här för att ni vill! För att ni vill lära er! Vi förutsätter att ni är har en förmåga att ta egna initiativ: Fråga om något är otydligt, eller om information saknas. Kurspersonal har svårt att åtgärda något annars! Läs tillsammans! Planera dina studier!
Kursorganisation på universitetet Personal Kursansvarig stakar ut en väg fram till målet (kunskapsmålen). Föreläsarna är era guider. Assistenter hjälper er praktiskt. Examinator på en kurs kontrollerar att ni nått målet. Varje kurs har examinationsmoment, en provuppsättning. Det betyder att ni kan hitta er egen väg om ni vill, så länge som ni når målet. Målet finns beskrivet i kursplanen. Kursadministratören ser till att allt registreras m.m. Examinator & kursansvarig: Jody Foo Föreläsare: Jody Foo Labbassistenter: Benjamin Helmersson Elias Åsgård Evelina Rennes Ove Jansson Lektionsassistenter: Ander Märak Leffler Johan Falkenjack Kurssekreterare: Annelie Almquist Vad händer om jag inte pluggar? Ingen kommer tvinga er att plugga eller förbereda er Ni kommer inte att bli bestraffade för att ni inte förbereder er Men... ni får ut mindre av utbildningen om ni inte gör det andra kommer att förutsätta att ni förbereder er och ställa krav på er utifrån den förutsättningen Kurshemsidan http://www.ida.liu.se/~729g04
Kursmål Fråga om ni saknar information! jody.foo@liu.se konstruera grundläggande datorprogram och formella modeller för enkla kognitionsvetenskapliga tillämpningar använda begrepp och modeller från grundläggande diskret matematik förklara vad en algoritm är och tillämpa grundläggande algoritmer använda olika datatyper/datastrukturer använda olika typer av styrstrukturer visa förståelse för vad datormodellering innebär och ha förmåga att konstruera enkla datorprogram Examinationsmoment Examination Examinationsmomenten ska stämma överrens med kursmålen. I denna kurs: UPG1 1,5hp: Hemuppgift i diskret matematik TEN4 2,5hp: Datorsalstenta LAB5 1hp: Individuella labbar LAB6 1hp: Parlabbar Datorsalstenta (G/VG): 14:00-18:00 15 december 2014 Inlämningsuppgift i Diskret matematik (G): 22-26 september 2014 Labborationsuppgifter i Python (G) Betyg G+G+G = G VG + G + G = VG
Hemuppgift Datorsalstenta Uppgifter i diskret matematik som löses individuellt. v39: 22-26 september Programmeringstenta vid dator Godkänd bok får tas med Test-tenta för att prova på hur det känns Laborationer Kursmoment Laborationer görs vid dator Ni kommer behöva lägga ner mer tid än den schemalagda. Vissa labbtillfällen är med handledare, andra utan. Föreläsningar i föreläsningssal Lektioner i föreläsningssal (DM), i datorsal (programmering) Laborationer: i datorsal Labbar som görs individuellt & labbar som görs i grupper om två Inlämning: e-post till er handledare
Mentometer Inslag på föreläsningar med mentometrar Via app, eller på webben: Android: https://play.google.com/store/apps/details? id=com.exittix.exitticket ios: https://itunes.apple.com/se/app/exitticket/id618649934 Webb: https://exittix.com Pilotprojekt - programmering på föreläsning Kurslitteratur Strandh, R. 2014. Introduktion till Datavetenskap. Kuhlman och Dahllöf. 2014. Matematik för språkteknologer. (PDF:er) Miller & Ranum. 2013. How to Think Like a Computer Scientist - Learning with Python: Interactive Edition (Using Python 3.x). URL: http://interactivepython.org/ runestone/static/thinkcspy/index.html. Downey. 2012. Think Python - How to Think Like a Computer Scientist. URL: http://www.greenteapress.com/ thinkpython/. Gratis som PDF/HTML, finns att beställa som bok Kursen är på 6hp utspritt över 18 veckor. ~9h/vecka
Kursmål Diskret matematik http://www.flickr.com/photos/diathesis/402718282/ Diskret, som i åtskiljd, inte som i obemärkt Muffinsar är diskreta Tårtor är kontinuerliga
Diskret matematik behandlar t.ex. teoretisk datavetenskap logik mängdlära kombinatorik grafteori topologi sannolikhet spelteori Diskret matematik i denna kurs Mängder Relationer Funktioner Algoritmer Grafer och träd Varför är diskret matematik viktigt för en kognitionsvetare? Modellering med hjälp av diskret matematik Ett formellt språk för att diskutera teorier och resonera inom/om bl.a. Diskreta modeller AI Språkteknologi Programmering Databaser Begrepp och kunskap om hur dessa används. Diskreta modeller ett sätt att representera data/information/kunskap som kan modelleras och bearbetas av datorprogram språk spelvärld internt tillstånd hos en agent/robot nätverksstrukturer
Notation f(x) =2x +3
{x x 2 N,x<10} Begrepp Ett exempel från uppgiftsanalys Task Layer Diagram - ett sätt att abstrahera och analysera uppgifter (Arnowitz 2004)
Initialt uppgiftsflöde för call-centerapplikation Cykler borttagna och tidsflöde etablerat Open file Open file Add record 0 Find 1 Input name 2 Add record Find Make call 3 Input name Create record Input telephone 4 Check duplicates Create record Input telephone 5 Check duplicates Make call FIG. 11.3. Task set in an application flow chart. 6 FIG. 11.4. Layering result after peeling. Redundanta beroende borttagna Uppgiftsanalysen en diskret modell består av en mängd uppgifter + riktade relationer mellan dem: en graf med hjälp av kunskaper i diskret matematik får vi de begrepp vi behöver för att representera detta i en dator vi kan sedan implementera ett program som hjälper oss skapa ett sådant diagram FIG. 11.5. Task Layer Map.
Modellering med hjälp av diskret matematik Algoritmer ett sätt att lösa problem som kan implementeras av datorprogram söka information tolkning/generering av språk analys av sociala nätverk Vad är programmering?
Progammering och kogvet Datainsamling Interaktionsdesign, interaktions- och webbprogrammering Språkteknologi Simuleringar Artificiell intelligens Närmaste framtiden 729G06 Programmering och logik (Kogvet 1, VT) 729G09 Språkvetenskaplig databehandling (Kogvet 1, VT) 729G43 Artificiell Intelligens (Kogvet 2, HT) D Sharon Pruitt: http://www.flickr.com/photos/pinksherbet/ Varför programmera? För att man är lat... För att datorn kan göra det snabbare För att man vill simulera något För att man vill automatisera något För att det är roligt! För att man vill skapa något För att datorn är bättre på att hantera den typen av data... http://ifttt.com
Vad behöver man för programmera Träning Tid Kunskap
Vad gör man när man programmerar? Problemlösning Dela upp problemet i delproblem Uttrycker sig på ett sätt så att en dator förstår Logiskt Tydligt Små steg i taget http://www.flickr.com/photos/senoranderson/3363262014/ Cargo Bot http://twolivesleft.com/cargobot/ patrick h. lauke: http://www.flickr.com/photos/redux/
Teknik bakom programmering Light Bot http://www.light-bot.com/hocflash.html En vanlig dator En vanlig dator Program / Applikationer Operativsystem Hårdvara Program / Applikationer Operativsystem Hårdvara
Ram (arbetsminne) Hårdvara Lagringsutrymme - Hårddisk (långtidsminne) Extern in- och utmatning (sinnen) CPU/Processor (Hjärna) En vanlig dator Program / Applikationer Operativsystem Hårdvara Operativsystem En vanlig dator Windows: Vista/7/8 Mac OS X: Snow Leopard/Lion/Mountain Lion Linux: Ubuntu, Debian, Red Hat, Slackware BeOS, Solaris... Program / Applikationer Operativsystem Hårdvara
Program En vanlig dator Officeprogram Webbläsare Spel Videouppspelningsprogram Skärmsläckare Här kommer vi hålla till Program / Applikationer Operativsystem Hårdvara Program A program is a sequence of instructions that specifies how to perform a computation. The Way of the Program How To Think Like a Computer Scientist Program skrivs med hjälp av ett programmeringsspråk Programmeringsspråk = formellt språk Svenska, engelska, tyska osv = naturliga språk
Program forts Formella språk skiljer sig från naturliga språk genom att de är: har en strikt syntax saknar tvetydighet är bokstavliga, dvs ingenting "mellan raderna" HAI CAN HAS STDIO? PLZ OPEN FILE "LOLCATS.TXT"? AWSUM THX VISIBLE FILE O NOES INVISIBLE "ERRROR!" KTHXBYE
Högnivå- och lågnivåspråk Fibonaccital Högnivå/Abstrakt Python LISP Java Ada Summan av de två föregående fibonaccitalen. De första två är 0 och 1. 0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55 C Assembler Lågnivå/Maskinnära Maskinkod Fibonaccital F(4) = F(3) + F(2) = (F(2) + F(1)) + (F(1) + F(0)) = (F(1) + 0)) + 1 ) + (1 + 0) = 3 8B542408 83FA0077 06B80000 0000C383 FA027706 B8010000 00C353BB 01000000 B9010000 008D0419 83FA0376 078BD98B C84AEBF1 5BC3 A function in 32-bit x86 machine code to calculate the nth Fibonacci number
fib: mov edx, [esp+8] cmp edx, 0 ja @f mov eax, 0 ret @@: cmp edx, 2 ja @f mov eax, 1 ret @@: push ebx mov ebx, 1 mov ecx, 1 @@: lea eax, [ebx+ecx] cmp edx, 3 jbe @f mov ebx, ecx mov ecx, eax dec edx jmp @b @@: pop ebx ret The same Fibonacci number calculator as above, but in x86 assembly language using MASM syntax def fib(n): if n == 0: return 0 elif n == 1: return 1 else: return fib(n-1) + fib(n-2) The same Fibonacci number calculator, but in Python Vad är programmering? def fib(n): if n == 0: return 0 elif n == 1: return 1 else: return fib(n-1) + fib(n-2) The same Fibonacci number calculator, but in Python Aktivitet där man skapar program. Materialet för skapandet är programkod som skrivs i ett formellt språk. Programmering är en kreativ process som kräver problemstrukturering och problemformulering.
Dagens föreläsning Allmän kursinformation Kort om diskret matematik Kort om programmering Läs Strandh kap 1 för en mer detaljerad introduktion. Nästa föreläsning Mängdlära Vad är en mängd? Hur beskriver man en mängd? Vad kan man göra med en mängd? Hur ritar man en mängd? Läsanvisningar: se kurshemsidan!