TDDE44 Programmering, grundkurs Föreläsning 1 Jody Foo, jody.foo@liu.se
Föreläsningsöversikt Vad ingår i "Programmering, grundkurs"? Kursöversikt Datorer, program, programmeringsspråk Kort om nästa föreläsning
Grundkurs i programmering
Kursens syfte Första gången kursen går. Ersätter TDDC74 "Programmering, abstraktion och modellering" (programmering i Scheme, LISP dialekt) Övergripande mål för denna kurs: se till att ni kan använda programmering som ett verktyg
Kursplan använda aktuella datorsystem för laborativ verksamhet redogöra för grundläggande begrepp relaterade till datavetenskap, programmering och programspråk lösa programmeringsrelaterade problem metodiskt med hjälp av ett interaktivt arbetssätt med implementering, testning och felsökning konstruera abstraktioner med varierande grad av stöd i det underliggande programmeringsspråket lösa programmeringsproblem genom att bryta ner det i delproblem konstruera rekursiva och iterativa algoritmer
Kurshemsida https://www.ida.liu.se/~tdde44
Kursupplägg Period 1 Grundläggande konstruktioner: inbyggda datatyper, loopar, funktioner Hur man testar program, delar upp ett program i funktioner Laboration 1-4 Period 2 Introduktion till objektorienterad programmering Laboration 5-7
Kursupplägg
Laborationer och redovisningar Period 1 (lab 1-4) en laboration = 2 veckor förberedande lektion redovisning Laboration 1-3: Pythonuppgifter + tillämpningsuppgift Laboration 4: Större tillämpningsuppgift
Laborationer och redovisningar Period 2 (lab 5-7) en laboration = 3 veckor förberedande lektion redovisning
Kurslitteratur Ingen obligatorisk kurslitteratur Litteraturtips finns dock på kurshemsidan
Programmerbar maskin
Universell turingmaskin (översikt) Oändligt antal rutor som kan innehålla en symbol (eller vara tom) Maskinen kan befinna sig i ett ändligt antal tillstånd Maskinen läser aktuell ruta Beroende på indata och aktuellt tillstånd utför maskinen en specifik operation och hoppar till nästa tillstånd Videotips: https://www.youtube.com/watch?v=-zs_zfg4w5k
Blinkenlights Frontpanelen hos en IBM System/360 Modell 91 By MBlairMar)n - Own work, CC BY-SA 4.0, h9ps://commons.wikimedia.org/w/index.php?curid=50243909
von Neumann-arkitekturen Data och program lagras i gemensamt minne Instruktioner utförs sekventiellt, en instruktion i taget En operand ("en styck data") bearbetas åt gången Central processorenhet, Central Processing Unit (CPU) styrenhet aritmetisk-logisk enhet Primärminne, Random Access Memory (RAM)
Program Program används som homonym - ett "ord" flera betydelser dvs. ett ord kan användas för att representera fker än ett begrepp program (1): instruktioner som utförs av en dator program (2): exekverbar data som en användare kan köra på en dator program (3): instruktioner i datorns minne program (4):...
CPU + Minne Ett program sett från den lägsta abstraktionsnivån: numeriska värden i minnet som representerar instruktioner läses och avkodas av processorn som sedan utför den avkodade instruktionen Ettor och nollor: binära talsystemet 0: 0 1: 1 10: 2 11: 3 100: 4 101: 5
Maskinkod Numerisk sekvens i minnet: 184, 0, 184, 142, 216, 198, 6, 158, 15, 36, 205, 32 Resultat på en PC som kör MS-DOS: ett dollartecken i vänstra nedersta hörnet på skärmen. Det tar extremt lång tid att programmera genom att skriva maskinkod.
Assembler MOV AX, 47104 MOV DS, AX MOV [3998], 36 INT 32 Exempel från http://www.swansontec.com/sprogram.html
Lågnivåprogrammering Maskinkod Assemblerkod
Ökad abstratktionsnivå
Kompilering och interpretering Kompilering ~ översättning av kod + process för att göra kompilerade koden körbar = exekverbar fil Interpretering = tolkning av kod En programtolk "läser" källkod och utför det som står i koden. programtolken står för att ge processorn instruktioner / skapa maskinkod.
Programmering på högre nivå
Högnivåprogrammering Python Java JavaScript C#
Python
Kort om Python Födelsedatum: sent 80-tal Skapare: Guido van Rossum Fyllde 2.0 i oktober 2000 Fyllde 3.0 i december 2008 Idag: 3.7.2 och 2.7.15 Interpreterat, men det finns en uppsjö av möjligheter Stöd för flera olika programmeringsparadigm Populärt som "nybörjarspråk" Finns till flera plattformer, även inbäddade system
Stort community Konferenser runt om i världen av olika storlek Många, ramverk som används i produktion inom många områden 15 november 2018. h9ps://blog.github.com/2018-11-15-state-of-the-octoverse-top-programming-languages/
Skriva och köra pythonprogram
Datormiljön på IDA Operativsystem: Linux (Ubuntu) Inloggning med LiU-ID Möjlighet att logga in från egen dator via ThinLinc https://www.ida.liu.se/local/students/remote/index.sv.shtml
Två sätt 1.Interaktivt genom att skriva in ett kommando i taget 2.Genom att skriva programmet i förväg Interaktiv användning: använda IDE eller starta Python i terminalen Skriva program i förväg: skriv programkod i textfil och starta Python och ange textfilen som program
Interaktiv användning Starta pythontolken genom att skriva kommando i terminalen python3 eller ipython3 Avsluta med Ctrl-D
Köra ett program som skrivits i förväg Gör så här: Från terminalen, kör programtolken och skicka sökvägen till textfilen med pythonkoden som argument exempel: $ python3 hello.py
Beståndsdelar i ett program värden (value): t.ex. siffror eller text (kallas för strängar)
Datatyper: Heltal och flyttal De flesta programmeringsspråk skiljer på heltal och decimaltal (eller flyttal som det kallas för inom datavetenskapen) Flyttal och heltal är olika datatyper, float och int Flyttal skrivs i Python med punkt. Exempel: 1.0, 3.1415, -4.5 Heltal skrivs som vanligt. Exempel: 1, -10, 6000 Både flyttal och heltal kan vara antingen positiva eller negativa i Python.
Datatyp: sträng En sträng är en sekvens av tecken. Skiljer på sträng och variabel genom att en sträng skrivs inom citattecken. "Ada" "boll" "far är rar"
Beståndsdelar i ett program värden (value): t.ex. siffror eller text (kallas för strängar) operatorer (operators): token/symbol som står för en instruktion
Matematiska operatorer Matematiska operatorer addition: + subtraktion: - multiplikation: * division: / division trunkerat till närmaste heltal // modulo (rest vid division): %
Användning av operatorer Operatorer vi kan använda på siffror 5 + 5 10 10-198 -188 8.9 * 10 89.0 29 / 3 9.666666666666666 29 // 3 9 29 % 3 2 Operatorer vi kan använda på strängar "hej" + "san" "hejsan" "hej" * 2 "hejhej"
Beståndsdelar i ett program värden (value): t.ex. siffror eller text (kallas för strängar) operatorer (operators): token/symbol som står för en instruktion variabler (variable): namngivna referenser till värden uttryck (expression): ett uttryck kan beräknas till ett värde (ibland säger man även utvärderas istället för beräknas)
Variabler, tilldelning och uttryck Tilldelning: = Exempel x = 5 x = 7 + 9 voltage = 5 * (3 + 6) Variabeln i vänsterledet tilldelas värdet till i högerledet. Om högerledet är ett uttryck beräknas det innan tilldelningen kan ske Ett uttryck kan beräknas till ett värde Exempel på uttryck: användning av operatorer funktionsanrop
Variabler, tilldelning och uttryck För att öka värdet på en variabel med 1 skrivs min_variabel = min_variabel + 1 Nedanstående förkortade syntax kan också användas min_variabel += 1 Följande förkortningar finns += -= *= /=
Funktionsanrop, en typ av uttryck En funktion, definierad med matematisk notation f(x) = 2x Ett anrop till funktionen, vi "stoppar in ett värde" f(10) 20 Ett funktionsanrop är ett uttryck som beräknas till ett värde.
Inbyggda funktioner för omvandling mellan datatyper Ett heltal kan omvandlas till ett flyttal genom att använda funktionen float(). Exempel: float(5) 5.0 Flyttal kan omvandlas till ett heltal genom att använda funktionen int(). Vid omvandlingen huggs alla decimaler bort. Exempel: int(3.1415) 3 Vill man ha avrundning används funktionen round(). Som också kan ta emot ett andra argument för antal decimaler. Exempel: round(3.1415) 3 round(3.1415, 2) 3.14
print() - en inbyggd funktion som skriver ut värden print("hej") x = 56 namn = "Beata" print(namn) print(x + 487)
Beståndsdelar i ett program värden (value): t.ex. siffror eller text (kallas för strängar) operatorer (operators): token/symbol som står för en instruktion variabler (variable): namngivna referenser till värden uttryck (expression): ett uttryck kan beräknas till ett värde (ibland säger man även utvärderas istället för beräknas) nyckelord (keywords): speciella ord som refererar till instruktioner som ska utföras skiljetecken (punctuators)
Definiera en funktion i Python def f(x): return 2 * x resultat = f(10) Med hjälp av nyckelorden def och return samt skiljetecknet : kan vi definiera funktionen f(x) = 2x i Python. När funktionen anropas returnerar den värdet som fås när uttrycket 2*x beräknas.
Beståndsdelar i ett program värden (value): t.ex. siffror eller text (kallas för strängar) operatorer (operators): token/symbol som står för en instruktion variabler (variable): namngivna referenser till värden uttryck (expression): ett uttryck kan beräknas till ett värde (ibland säger man även utvärderas istället för beräknas) nyckelord (keywords): speciella ord som refererar till instruktioner som ska utföras skiljetecken (punctuators) sats (statement): fullständig instruktion
Satser och uttryck En sats motsvarar "en mening", dvs minsta beståndsdelen i programmeringsspråk som har betydelse. Exempel på satser: uttryck korrekt användning av nyckelord Ett uttryck kan beräknas till ett värde (ibland säger man även utvärderas istället för beräknas) Exempel på uttryck användning av operatorer funktionsanrop
Nyckelord och betydelsebärande tecken Vissa ord har speciell betydelse i Python def return Korrekt användning av nyckelord ger oss en sats. Vissa tecken används på samma sätt som skiljetecken i naturligt språk. Exempel: nyckelord som påbörjar ett block har ett : innan första raden på det nya blocket tecknet # påbörjar en kommentar, resten av raden ses inte som Pythonkod.
Block Vissa nyckelord påbörjar ett eget block (t.ex. nyckelordet def) För att visa vad som ingår i ett block används indentering i Python Indentering: inskjutning av textrad med tab-tecken eller blankstegstecken (standard är 4 blanksteg per nivå)
Funktioner i Python Definition av funktion med matematisk notation: f(x) = 2 * x Definition av samma funktion i Python def f(x): return 2*x Syntax: def funktionsnamn(argument1, argument2,..., argumentn): sats1 sats2 sats3...
Vad vi gått igenom idag Datorn, programmering och programmeringsspråk Programmera python funktioner och returvärden datatyper: heltal, flyttal, strängar
Nästa föreläsning Ny datatyp: list Mer om strängar Komma åt funktionalitet via moduler Skript - körbara textfiler