Föreläsning 1 Introduktion TDDD86: DALP Utskriftsversion av föreläsning i Datastrukturer, algoritmer och programmeringsparadigm 1 september 2015 Tommy Färnqvist, IDA, Linköpings universitet 1.1 Innehåll Innehåll 1 Administrativ information 1.1 Upplägg . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1 1 2 DALG – introduktion 2 3 C++ – introduktion 3.1 Vad är C++ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.2 C++ ute i världen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5 5 6 1 1.2 Administrativ information Lärare och personal • • • • • • Kursledare, examinator, föreläsningar: Tommy Färnqvist [email protected] Assistent, labbar (D2.a): Filip Strömbäck [email protected] Assistent, labbar (D2.b): Victor Lagerkvist [email protected] Assistent, labbar (D2.c): Amir Aminifar [email protected] Assistent, labbar (U2): Arian Maghazeh [email protected] Kursadministratör: Anna Grabska Eklund [email protected] 1.3 1.1 Upplägg Litteratur • C++ – C++ Primer 5/E, Lippman, Lajoie, Moo (2012) – The C++ Programming Language 4/E, Stroustrup (2013) • Datastrukturer och algoritmer – OpenDSA • Programmeringsparadigm – Föreläsningsanteckningar och länkat material 1.4 Examination • • • • UPG2 1hp — Inlämningsuppgift (U,G) UPG1 2hp — Datorbaserade inlämninguppgifter (U,G) DAT1 3hp — Datortentamen (U,3,4,5) LAB1 5hp — Laborationskurs (U,3,4,5) • Slutbetyg på kursen är det poängviktade medelvärdet av betygen på DAT1 och LAB1, avrundat till närmsta heltal. 1 1.5 Laborationer • Åtta laborationsuppgifter – Genomförs i par – Godkända labbar ger betyg 3 på LAB1 – Högre betyg genom att lösa extra labbuppgifter eller bonusproblem • Labbtillfällen även till för frågor kring DALG-materialet och OpenDSA • Var vänlig registrera er för ordinarie labbar senast 4 sep i webReg 1.6 Din insats i kursen • • • • • • • Följ undervisningen (om du vill) Läs kurslitteraturen Plugga under hela kursen Gör datorlabb 1–8 Lös extralabbar och bonusproblem för att samla poäng Gör inlämningsuppgiften Tenta! Första chansen är den 22:a december Kursens hemsida http://www.ida.liu.se/~TDDD86/ 1.7 Direkta påbyggnadskurser TDDD20 Konstruktion och analys av algoritmer Grundläggande tekniker. (Giriga algoritmer, dekomposition och dynamisk programmering.) NP-fullständighet. (Teorin för NP-fullständighet och dess konsekvenser.) Inexakta metoder. (Konstruktion och analys av approximationsalgoritmer och randomiserade algoritmer.) TDDD38 Avancerad programmering i C++ I denna kurs studeras konstruktioner och mekanismer i programmeringsspråket C++. Kursens tyngdpunkt ligger på avancerade konstruktioner och avancerad användning av C++ men är inte en systemkonstruktionskurs, problemlösningskurs eller liknande. 1.8 2 DALG – introduktion DALG Datastrukturer Hur lagrar man data effektivt • Teoretiskt sett effektiva datastrukturer • Praktiskt sett effektiva datastrukturer Algoritmer Hur löser man problem effektivt • Analys av komplexitet • Exempel på olika slags algoritmer – Sorteringsalgoritmer – Grafalgoritmer • Konstruktionsmetoder 1.9 2 Simuleringsalgoritmer Numeriskaalgoritmer ”Scientificcomputing” Kodoptimering ikompilator Heltalsprogrammering Analys avprog. repr.i kompilator Linjärprogrammering DALGADTerSorteringGrafer Strängsökning Internetalgoritmer Algoritmer försociala nätverk Datoralgebra Algoritmer förnätverksflöden Kryptografiskaalgoritmer Databaser Beräkningsgeometri Datorgrafikoch multimedia 1.10 Varför ska man plugga DALG? Gammalt ursprung, nya möjligheter • Studiet av algoritmer har pågått åtminstone sedan Euklides • Formaliserades av Church och Turing på 1930-talet • Vissa viktiga algoritmer upptäcktes av studenter i liknande kurser som denna! 1.11 Varför ska man plugga DALG? För att kunna lösa annars olösbara problem • T.ex. nätverkskonnektivitet 1.12 Varför ska man plugga DALG? För intellektuell stimulans 3 1.13 Varför ska man plugga DALG? För att bli en kunnig programmerare 1.14 Varför ska man plugga DALG? För att DALG kan hjälpa oss att lista ut saker om livet och universum Datorbaserade modeller ersätter matematiska modeller alltmer i dagens vetenskap 4 1.15 3 C++ – introduktion 3.1 Vad är C++ Programmeringsspråk • Vissa språk fokuserar på att program ska exekvera snabbt • Vissa språk fokuserar på att göra det enkelt att skriva kod • Vissa språk fokuserar på att utföra en viss uppgift extremt väl 1.16 C++ historik: C • C skapades 1972 och gjorde succé • C gjorde det enklare att skriva snabb kod för olika plattformar 1.17 Hello world i C #include<stdio.h> #include<stdlib.h> int main() { puts("Hello, world!"); return EXIT_SUCCESS; } 1.18 C++ historik: C • C var populärt eftersom det var enkelt – Inte mycket överflödig syntax – Extremt snabb exekvering – Tillgängligt överallt det finns en C-kompilator • C kritiserades eftersom det var enkelt – Inga objekt eller klasser – Svårt att programmera även vissa enkla saker 1.19 C++ historik 1980 1983 ... 1998 2011 2014 C med klasser C++ skapades av Bjarne Stroustrup: Nyare versioner med multipelt arv, mallar/templates, undantag ISO-standard, definierar standardbiblioteket Ny ISO-standard, C++11 Upprensning av C++11 1.20 5 Hello world i C++ /* * hello.cpp * This program prints a welcome message * to the user. */ #include<iostream> using namespace std; int main() { int i = 0; cout << "Hello, world!" << endl; return 0; } 1.21 Vad är C++ • • • • All C-kod är giltig kod i C++ (med några få undantag) Vad som är giltig kod i C++ bestäms av en standard på drygt 1400 sidor C++ är populärt bland annat eftersom det ger väldigt hög prestanda Definitivt inte ett enkelt språk 1.22 3.2 C++ ute i världen Användare av C++ (företag) 1.23 Användare av C++ (webbläsare) 1.24 6 Användare av C++ (mjukvara) 1.25 Användare av C++ (spel) 1.26 Användare av C++ (Java) • Den JVM som är allra vanligast att använda är skriven i C++ 1.27 Vad är C++ • C++ är ett programmeringsspråk som förenklar komplexa uppgifter utan att offra prestanda • Att lära sig att skriva “bra C++” är ett mycket bra sätt att öka sin förståelse för programmering generellt 1.28 7 Vad är C++ template <typename T> Widget<T>& Widget<T>::operator=(const Widget& other) { Widget copy(other); swap(copy); return *this; } 1.29 8
© Copyright 2024