Föreläsning 1

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