Föreläsningsöversikt Fö 1.1 & 1.2¶
- Introduktion
- Kursadmin
- Datorer
- Linux
- Programmering
Vem är jag och vad gör jag här?¶
Kursadministration¶
- 3 Examinationsmoment, LAB1, LAB2 och DAT1
- 12 Föreläsningar
- LAB1, U/G, 3 hp
- 3 Grundläggande Python-uppgifter
- 4 Mindre laborationer
- LAB2, U/G, 3 hp
- 3 Större laborationer
- DAT1, U/3/4/5, 2 hp
- Datortenta (2024-05-30)
- Kurshemsidan har denna och all annan information ni kan önska.
Digitala kontaktytor¶
Kurshemsida
- https://www.ida.liu.se/~TDDE44/
- All kursinformation hittar ni här, inkl. föreläsningsbilder och kontaktuppgifter till personal på kursen.
Webreg
- https://www.ida.liu.se/webreg3/TDDE44-2025-1
- (alternativt https://www.ida.liu.se/webreg-beta/TDDE44-2025-1)
- Anmälan till pargrupp.
- Resultat/kommentarer - lärare fyller i återkoppling, systemet skickar e-post
Lisam används alltså inte i denna kurs.
Skicka kursrelaterad e-post¶
- Skicka endast från er LiU-adress
- Ha med kurskoden i ämnesraden
- Om ni läste en annan kursomgång - berätta när ni först läste kursen
Kurslitteratur¶
- Ingen obligatorisk.
- Rekommenderade läsanvisningar finns alltid till:
- Skansholm, J. (2019). Python från början. Studentlitteratur.
- Oftast också till:
- Downey, Allen B. (2015). Think Python: How to Think Like a Computer Scientist. Green Tea Press. http://greenteapress.com/wp/think-python-2e/. (Gratis online och PDF-version finns att ladda ner.)
- Andra bra alternativ:
- Lutz, M. (2013). Learning Python, 6th Edition. O’Reilly Media. (Publiceras i februari eller mars 2025 och blir kanske primär kurslitteratur nästa år, 5e utgåvan är också bra men 10 år gammal.)
- Punch, W. F., & Enbody, R. (2017). The Practice of Computing Using Python, Global Edition, 3/E. Boston: Pearson.
- Zelle, John M., (2017) Python Programming : An Introduction To Computer Science Third Edition. Franklin, Beedle & Associates, 2017. ISBN: 9781590282755, 1590282752
Får man använda ChatGPT (eller annan "Generativ AI")?¶
- Enkla svaret: Nej.
- All kod du lämnar in skall vara skriven av dig och din labbpartner.
- Allt annat klassas som akademiskt fusk.
- Akademiskt fusk → Disciplinnämnden → Avstängning från studierna.
- Men om man bara använder ChatGPT som en extra labbassistent?
- Inte rekommenderat.
- ChatGPT är en dålig pedagog och blir väldigt lätt en krycka.
- Du upptäcker på tentan att förståelse saknas.
"Men i verkligheten kommer jag ju kunna använda ChatGPT"¶
- Wolfram Alpha, Mathematica, eller MATLAB klarar allt som tas upp i alla grundläggande mattekurser.
- Betyder det att du inte behöver kunna Linjär Algebra, Envariabelanalys, Flervariabelanalys, etc.?
- Tänk på den här kursen och grundläggande programmeringsfärdighet på samma sätt.
Lektioner och labbar under VT1¶
- Görs i par som man anmäler i Webreg:
- https://www.ida.liu.se/webreg3/TDDE44-2024-1/LAB1
- Hitta partner först, anmäl sen.
- Prata med er assistent om ni inte hittar en partner.
- Genomförs i Linux-datorsal.
- Ej obligatorisk närvaro, men Laborationerna måste redovisas innan de kan lämnas in.
- Det finns specifika redovisningstillfällen schemalagda i TimeEdit
- Lektioner: Övningsuppgifter som ni bör göra
- Laborationer: Uppgifter som ni måste göra
Inlämning¶
- Inlämning i systemet Sendlab.
- Pythonuppgifterna rättas med automaträttningsskript.
- Rättningskriptet genererar en hash-kod när ni är godkända, denna sparar ni i en txt-fil som ni skickar in i Sendlab här
- https://www.ida.liu.se/sendlab/student/sendprevalidated?code=tdde44_pyuppg_vt25
- Laborationerna redovisas för er assistent som sedan låser upp Sendlab åt er.
- QR-kod för upplåsning hämtar ni här: https://www.ida.liu.se/sendlab/student/request_validation?code=tdde44_labbar_vt25
- Assistenten scannar den och låser då upp er inlämning.
- Ni skickar sedan in kod i Sendlab här: https://www.ida.liu.se/sendlab/student/sendprevalidated?code=tdde44_labbar_vt25
Förändringar sedan förra kursomgången¶
- Delvis omarbetade föreläsningar.
- Reviderad kurshemsida för att enklare hitta relevant information (färre länkar till olika sidor).
- Putsning av labbinstruktioner kommer pågå under kursen, inga ändringar men förtydliganden.
- Något mindre fokus på objektorienterad arkitektur under VT2 och mer fokus på problemlösning och datalogiskt tänkande.
Hur kommer föreläsningarna se ut och vad är deras syfte?¶
Om jag som student skulle välja att inte gå på resten av föreläsningarna, vad är ditt viktigaste råd till mig?¶
Vad är ett program?
"Computer program, detailed plan or procedure for solving a problem with a computer; more specifically, an unambiguous, ordered sequence of computational instructions necessary to achieve such a solution. "
Vad är ett program?
"We are about to study the idea of a computational process. Computational processes are abstract beings that inhabit computers. As they evolve, processes manipulate other abstract things called data. The evolution of a process is directed by a pattern of rules called a program. People create programs to direct processes. In effect, we conjure the spirits of the computer with our spells."
- Abelson and Sussman, Structure and Interpretation of Computer Programs aka The Wizard Book
Hur skriver man instruktioner?
eller
Hur programmerar man?
1943: ENIAC¶
Programmerarna Marlyn Wescoff och Ruth Lichterman implementerar ett program på ENIAC. En grupp* av 6 matematiker, som också hade den "ovanliga" egenskapen att de var kvinnor, blev de första i världen att arbeta heltid med att programmera en elektronisk dator. Och glömdes sedan bort av historien i ca 50 år.
(* Utöver Wescoff och Lichterman; Jean Jennings, Betty Holberton, Fran Bilas och Kay McNulty.)
1945: John von Neumann och den fundamentala datorarkitekturen¶
von Neumann-arkitekturen
- Processorenhet med aritmetisk-logisk enhet och in/ut-register för denna
- Kontrollenhet med aktuellt instruktionsregister och en programräknare som håller koll på nästa instruktion
- Internminne som lagrar både data och instruktioner som används i den aktuella processen
- Externminne för långtidslagring av data och program (sekvenser av instruktioner)
- In- och Utenheter
Binär maskinkod, vår första abstraktion i kod
- Består av långa sekvenser av
1
:or och0
:or som representerar instruktioner och den data som instruktionerna opererar på. - Exempelvis
10111000
,00000000
,10111000
,10001110
,11011000
,11000110
,00000110
,10011110
,00001111
,00100100
,11001101
,00100000
- Med "vanliga" heltal med talbas 10 motsvarar detta
184
,0
,184
,142
,216
,198
,6
,158
,15
,36
,205
,32
- Med "vanliga" heltal med talbas 10 motsvarar detta
- Ofta uttrycker vi 8-bitars sekvenser av binära tal (1 byte) som hexadecimala tal (med talbas 16).
- Vi använder
a
för att representera vanliga heltalet10
,b
för11
, osv. upp tillf
för15
- Exemplet ovan blir då
b8
,00
,b8
,8e
,d8
,c6
,06
,9e
,0f
,24
,cd
,20
- Vi använder
Maskinkod för Intel 8085 (1976), några exempel
Binary | Opcode (hex) | Description |
---|---|---|
10000111 |
87 |
Add the contents of register A to that of the accumulator |
00111010 |
3a |
Load data stored in the given memory address |
01111001 |
79 |
Move data from register A to C |
11000011 |
c3 |
Jump to instruction in specified memory address |
11000001 |
c1 |
Pop from stack and copy to memory registers B + C |
Assemblykod assembleras till maskinkod
MOV AX, 47104
MOV DS, AX
MOV [3998], 36
INT 32
- Ett assemblator-program (eng. assembler), som någon skapat med hjälp av maskinkod, kan använda ovanstående text och producera ett program i maskinkod.
- (Exempel från http://www.swansontec.com/sprogram.html)
C kompileras till assembly- och maskinkod
#include <stdio.h>
int main() {
printf("Hello, World!\n");
return 0;
}
- En kompilator, som någon ursprungligen skapat med hjälp av assemblykod, översätter ett program från kod som vi, med lite övning, kan läsa och förstå, till maskinkod.
Python interpreteras av ett program skrivet i C
print("Hello, World!")
- En interpretator eller programtolk, som oftast skapats i ett kompilerat språk, kan köra program direkt, utan att översätta dem till maskinkod.
Abstraktionshierarki
Abstraktionshierarki
Vilket programmeringsspråk är bäst?¶
Vilket verktyg är bäst?¶
Bättre fråga: Vilket programmeringsspråk är bäst för vårt syfte?¶
Kort om Python

- Födelsedatum: sent 80-tal men officiellt 20e februari 1991
- Skapare: Guido van Rossum (före detta "Benevolent Dictator For Life", eller BDFL, över Python)
- Fyllde 2.0 i oktober 2000
- Fyllde 3.0 i december 2008
- Idag: 3.12
- (I kursen använder vi 3.11)
- Top 5 i de flesta rankningar av popularitet, nr 1 i flera av dem.
- Interpreterat, objekt-orienterat och dynamiskt typat programmeringsspråk.
LiUs GNU/Linux-miljö
Vad i hela fridens namn, jag har ju knappt använt en dator med tangentbord förut?!
Operativsystem¶
It's a UNIX System!¶
Hur brukar det se ut?
Terminalen som användargränssnitt¶
- Syfte: miljö för att utveckla och köra egna program
- Enklare (färre rörliga delar) än ett grafiskt gränssnitt:
- Output: text (en rad/tecken i taget)
- Input: textkommandon
- Kraftfullt, nästan ett programmeringsspråk i sig.
- Jämfört med grafiskt gränssnitt:
- Output: fönster med olika interaktiva grafiska komponenter
- Input: musposition, musklick, tangenttryckningar, objekt som dras och släpps m.m
Jag har hört att det heter skal/prompt/konsol, inte terminal?¶
- Korrekt, begreppen används ofta synonymt men är i strikt mening inte riktigt samma saker. Generellt gäller att...
- Terminalprogrammet tillhandahåller funktionalitet för skalprogram att visa text och ta emot tangentbordstryck från användaren.
- Skalet/skalprogrammet (eng. shell) tillhandahåller ett interaktivt gränssnitt för att köra kommandon.
- Startas automatiskt när vi öppnar terminalprogrammet.
- En typ av interpretator.
- Prompt är den sekvens av tecken som visar att skalet är redo att ta emot ett kommando.
- Tecknet
$
används ofta för att representera en godtycklig prompt i böcker och dokumentation.
- Tecknet
- Konsol är ett specialfall av terminal som är inbyggd i mjukvaran den interagerar med. Man kan säga att terminalprogrammet emulerar operativsystemets konsol. $\leftarrow$ överkurs
- Alla är delar av ett Kommandoradsgränssnitt
Fil (eng. file)¶
- På en dator är alla former av data representerade som filer.
- En fil kan innehålla vad som helst som kan representeras digitalt
- Text
- Bild
- Video
- Ljud
- Körbara program
- Sensordata
- Osv.
- På en modern dator finns miljontals filer, de flesta av dem är vi normalt sett fullständigt ointresserade av.
Katalog (eng. directory)¶
- En speciell typ av fil som "innehåller" andra filer.
- Alla miljontals filer på datorn är organiserade i kataloger i kataloger i kataloger... för att göra det hela hanterbart.
- Vi kallar hierarkier av kataloger i kataloger för katalogstrukturer (eller ibland katalogträd eller filträd).
- På de flesta system har varje användare en hemkatalog där de lagrar sina egna filer.
Trädstrukturer¶
- Hierarkiska strukturer som katalogstrukturer kallas ofta för träd (mer om dem i kurser i diskret matematik eller grafteori).
- Vi kan tänka att trädet startar i roten och att alla kataloger representerar en gren.
- Tänk på att även grenar kan ha mindre grenar i naturen, detsamma gäller våra trädstrukturer.
- Värt att veta är att vi datavetare alltid ritar träd med roten i toppen och grenarna växande nedåt.
- (Sorry, bara att vänja sig.)
Katalogstruktur i UNIX-liknande system¶
Sökväg
- En form av adress för en fil (inte att förväxla med minnesadresser som vi återkommer till senare).
- Skrivs på olika sätt i olika operativsystem, men vi kommer fokusera på Unix/Linux.
- Sökvägen till roten är bara
/
- För att beskriva sökvägen till en fil eller katalog sammanfogar vi katalognamnen med
/
-tecken mellan. - Sökvägen till katalogen
bin
i katalogenusr
är t.ex./usr/bin
Absoluta sökvägar
/home/student_johsj47
Utgår från roten i filsystemet; katalogen "högst upp", och som som alla andra kataloger ligger i
Absolut sökväg till roten i Linux & macOS:
/
Varje fil eller katalog har en unik absolut sökväg.
Den absoluta sökvägen till en fil är densamma oavsett vilken arbetskatalog vi står i.
Exempel på absoluta sökvägar
/home/student_johsj47/katalog1
/home/student_johsj47/katalog2/hejsan/hoppsan
/home/student_johsj47/katalog3/fil7
Sökvägar som adresser¶
- Jämför med en vanlig adress.
- Stina Student
- Björnkärrsgatan 18 D.10
- Linköping
- Sverige
- Vi kan skriva det som en sökväg:
/sverige/linkoping/bjornkarrsgatan/18/d/10/stina_student
Var är vi?

Arbetskatalogen¶
- När ett program körs, t.ex. ett pythonprogram vi skrivit, så körs det alltid i någon katalog.
- Vi säger att det är vår arbetskatalog (eng. working directory).
- Även skalprogrammet har en arbetskatalog, katalogen där kommandon vi kör utförs.
- Vi säger ofta att vi "står i" eller "befinner oss i" en viss katalog.
- Att arbeta via terminalen kräver att vi vänjer oss vid att tänka på var vi systemet vi befinner oss.
- (Detta är direkt överförbart till hur vi arbetar med filer i programmeringen sen.)
- Om vi t.ex. kör ett kommando som skapar en fil, så skapas den i katalogen vi står i. Samma sak om vi sedan kör ett kommando för att ta bort en fil med ett visst namn.
Så var börjar vi?¶
- Varje gång vi startar ett skalprogram så startar vi i
~
- Symbolen
~
utläses som "tilde" och är ett alias till den inloggade användarens hemkatalog. - Den "riktiga" sökvägen till en användares hemkatalog är
/home/användarnamn
- Symbolen
- Vår arbetskatalog är alltså vår hemkatalog, tills vi flyttar på oss.
- Vi kan alltid kontrollera var vi står genom att köra kommandot
pwd
(print working directory)- (I många fall kan vi också se i prompten var vi står.)
Kommandot cd
: change directory
cd
: change directory- Flytta till en annan katalog, en sökväg skickas med som argument till kommandot.
- Exempelvis:
cd /
: flytta till rotkatalogencd ..
: flytta till föräldrakatalogen (en katalog "uppåt" eller "mot roten" från katalogen vi står i)cd -
: flytta tillbaka till den senaste katalogen vi var icd katalognamn
: flytta till underkatalog till arbetskatalogen med namnetkatalognamn
(ger fel om den katalogen inte finns)cd
: specialfall som flyttar till hemkatalogen
Relativa sökvägar
/home/student_johsj47
Utgår från en specifik plats i filsystemet (normalt sett från arbetskatalogen).
Varje fil eller katalog har olika relativa sökvägar beroende på vilken katalog man utgår ifrån.
Exempel på relativa sökvägar till
/home/student_johsj47/katalog3/fil7
fil7
(från/home/student_johsj47/katalog3
)katalog3/fil7
(från/home/student_johsj47/
)../katalog3/fil7
(från/home/student_johsj47/katalog2
)../../katalog3/fil7
(från/home/student_johsj47/katalog2/hejsan
)
Viktiga sökvägar
Absoluta — utgår från en fixerad punkt i filsystemet¶
/
: roten i filsystemet/dev/null
: intigheten, filsystemets svarta hål~adalo256
: hemkatalog för användaren adalo256
"Halvabsoluta" — beror på användaren¶
~
: din hemkatalog~/Downloads
: där filer du laddar ner hamnar
Relativa — utgår från katalogen vi står i¶
.
: ett alias för arbetskatalogen (eng. working directory), dvs. katalogen vi står i..
: ett alias för föräldrakatalogen (eng. parent directory) till den katalog vi står i
Delar av ett kommando¶
option = flaggor/växlar (olika för olika kommandon), t.ex. -l
för kommandot ls
Delar av ett kommando¶
option = flaggor/växlar (olika för olika kommandon), t.ex. -R
för kommandot cp
Exempel på kommandon¶
echo
: skriver ut argument i terminalencd
: byter katalog (arbetskatalog - katalogen man "står i")ls
: visar innehåll i katalogmv
: flytta/döp om fil eller katalog (var försiktig,mv
skriver över om det redan finns en fil med samma namn!)mkdir
: skapa katalogcat
: skriv ut innehåll i filtouch
: skapa ny fil/uppdatera senast ändrad hos existerande filman
: visa hjälptext för kommandonrm
: ta bort en fil (var försiktig här också, det finns ingen papperskorg, borttagna filer är borta)
Kommandot python3
¶
- Startar Python-tolken för Python version 3.X (3.10.12 på våra system)
Interaktiv användning:
$ python3
Skriv och kör ett skript:
$ python3 filnamn
Interaktiv användning¶
- Starta en pythontolk genom att skriva
python3
i terminalen. - Python ersätter skalprogrammet i terminalen.
- Bra för att experimentera, testa och felsöka.
- Avsluta genom att trycka Ctrl-D eller genom att köra python-kommandot
exit()
.- Tekniskt sett så anropar vi funktionen
exit
utan några argument
- Tekniskt sett så anropar vi funktionen
Skriv och kör ett skript¶
- Starta en text-editor (t.ex. VSCode)
- Skriv kod och spara i en fil med exempelvis namnet
hello.py
. - Från terminalen, kör programtolken och skicka med sökvägen till textfilen med pythonkoden som argument genom att skriva
python3 hello.py
- Bra för kod som man vill spara eller sätta i produktion.