Survey
* Your assessment is very important for improving the workof artificial intelligence, which forms the content of this project
* Your assessment is very important for improving the workof artificial intelligence, which forms the content of this project
Introduktion till programmering TDDC66 Datorsystem och programmering Föreläsning 1 Peter Dalenius Institutionen för datavetenskap 2013-09-02 Översikt • Vad är programmering? • Kursens målsättning och organisation • Hur använder man progamspråket Python? 3 Vad är ett program och hur programmerar man? 4 Programmering i ett nötskal program en uppsättning regler eller instruktioner med uppgift att styra en dators beräkningar (Nationalencyklopedin) komponenterna programspråket och dess konstruktioner 5 processen principer för hur man utformar program resultatet hur program körs och hur de påverkar folk Datorns utveckling – en kort historik Tidiga datorer, ofta militära 40-, 50-talet 1940 1950 1960 Persondatorer för hem och kontor 80-, 90-talet 1970 Stordatorer för industrin 60-, 70-talet 6 1980 1990 Mobila enheter 10-talet 2000 2010 Internet för vanligt folk 90-,00-talet Hur långt kommer vi i den här kursen? 7 Några roliga saker vi inte hinner med... • Hur man designar grafiska gränssnitt • Hur datorer kommunicerar med varandra över nätverk • Hur man lagrar information i databaser • Hur man startar processer för att få saker att hända samtidigt • Hur man hanterar större programmeringsprojekt • Hur man gör appar Vi kommer att fokusera på grunderna i programmering och hur man etablerar goda vanor för att bli en bra programmerare. Allt det andra – och mycket mer – kommer längre fram. 8 Hur passar programmering in i mitt framtida jobb? 9 Svensk industri är beroende av mjukvara... 10 Hur lär man sig att programmera? 11 Enligt Peter Norvig, forskningschef på Google... • Bli intresserad av programmering, så att du orkar lägga ner 10000 timmar på träning. • Skriv många olika program. • Prata med andra programmerare och läs deras kod. • Om du vill, läs på universitet. • Arbeta i projekt tillsammans med andra programmerare. • Ta över projekt efter andra programmerare. • Lär dig åtminstone ett halvt dussin olika programmeringsspråk. Peter Norvig (2001) Teach Yourself Programming in Ten Years. http://norvig.com/21-days.html 12 Varför har vi valt programspråket Python? 13 Pythons historik • Skapades i slutet av 1980-talet av holländaren Guido van Rossum, som fortfarande spelar en stor roll för språkets utveckling. • Det åttonde mest populära programspråket i världen. [1] • Version 3.0, som vi kommer använda, kom i december 2008. Det var en ganska stor förändring som inte är bakåtkompatibel. • Fri programvara. [1] TIOBE Programming Community Index July 2012 http://www.tiobe.com/index.php/content/paperinfo/tpci/index.html 14 Fördelar med Python • Lätt att komma igång med. • Har en stabil användarbas både på universitet och i industrin. • Funkar bra både för systemprogram och för tillämpningar. • Neutralt i förhållande till olika programmeringsparadigm. • Kan användas för att illustrera koncept inom programmering. 15 Målsättning • Datorsystem • använda IDA:s datorsystem såpass bra att det inte blir så mycket praktiska problem i framtida programmeringskurser • Programmering 16 • konstruera enklare program i Python • förklara hur program fungerar genom att använda korrekt datavetenskaplig terminologi Upplägg Aktivitet Föreläsningar Lektioner 17 Tid i HT1 Innehåll 24 h Introduktion, översikt, sammanfattning (ligger alltid steget före) 8 h Genomgångar, förberedelser, exempel, torrövningar Laborationer 26 h Arbete med övningar och uppgifter, diskussioner, redovisningar Eget arbete 60 h Läsa, öva, experiementera, arbeta med övningar och uppgifter Examination UPG1 Webbaserad datorintroduktion Slutuppgift Prova på-laborationer LAB1 Laborationsomgång 1-2 TDDC66 Datorsystem och programmering vecka 35-38 Python vecka 38-51 TDDD73 Funktionell och imperativ programmering i Python 18 LAB1 Laborationsomgång 3-7 DAT1 Datortentamen Tillåtet och otillåtet samarbete • Allt arbete med examinerande uppgifter i kursen TDDC66 Datorsystem och programmering ska ske enskilt (förutom i prova på-laborationerna när arbetet sker i par). • I kursen TDDD73 Funktionell och imperativ programmering i Python (d.v.s. i praktiken från labbomgång 3) kommer ni att arbeta i par som ni själva får välja. • Vad är enskilt arbete? Var går gränsen för fusk? • Universitetets disciplinnämnd kan vid fusk stänga av studenter upp till sex månader, vilket innebär att man ej får delta i undervisning och inte får några studiemedel. 19 Kurslitteratur • John M. Zelle (2010) Python Programming: An Introduction to Computer Science. Second Edition. ISBN 978-1-59028-241-0 • Boken har ett bra pedagogiskt upplägg som ansluter väl till det vi vill göra i kursen. • Den täcker dock inte allt som vi vill gå igenom, så en del saker kommer enbart att tas upp på föreläsningar. • Om man skaffar en annan Python-bok, se till att den täcker Python 3! 20 Personal • Examinator: Peter Dalenius • Kursadministratör: Anna Grabska Eklund • Lektions- och laborationsassistenter: 21 • D1A: Anders Märak Leffler, Hugo Lindholm • D1B: Peter Larsson Green, Torbjörn Lönnemark • D1C: Jonas Wallgren, Per Eklund • U1: Fredrik Heintz, Rickard Andersson Information och kommunikation • På kurswebben finns all information om kursen man behöver: http://www.ida.liu.se/~TDDC66 22 • Laborationsmaterial • Föreläsningsbilder • Länk till schema • Planering och deadlines • Regler för redovisning och komplettering • m.m. Hur man startar Python-interpretatorn 23 Hur man använder Python-interpretatorn >>> 2+3 5 >>> 2+4*5-6 16 >>> print("Hello world!") Hello world! >>> def greeting(): ... print(”Nobody expects the Spanish Inquisition.") ... print(”Our chief weapon is surprise... and fear.") ... >>> greeting() Nobody expects the Spanish Inquisition. Our chief weapon is surprise... and fear. 24 Hur man använder Python-interpretatorn >>> def skryt(namn): ... print("Det är bra att kunna Python.") ... print(namn, "är jättebra på Python.") ... >>> skryt("Peter") Det är bra att kunna Python. Peter är jättebra på Python. >>> skryt("Jenny") Det är bra att kunna Python. Jenny är jättebra på Python. >>> skryt <function skryt at 0x218390> >>> print <built-in function print> 25 Vårt första Python-program 26 1. Skriv ut lite informativ text 2. Läs in en rad från användaren, försök tolka vad som matades in och spara detta i variabeln x Vad gör programmet? 3. Börja gissa att roten ur x är x/2 och spara gissningen i variabeln guess def find_root(): print("This program tries to find the square root of a number.") x = eval(input("Enter a number: ")) guess = x/2 for i in range(5): 4. Upprepa de guess = (guess + x/guess)/2 följande raderna print(guess) 5 gånger find_root() 5. Räkna ut en ny bättre gissning och skriv ut den 27 Newton-Raphsons metod för att räkna ut kvadratroten av ett tal x. Varför så mycket mellanrum? def find_root(): print("This program tries to find the square root of a number.") x = eval(input("Enter a number: ")) guess = x/2 for i in range(5): guess = (guess + x/guess)/2 print(guess) find_root() Underordnade rader måste skjutas in en bit på raden, indenteras. 28 Newton-Raphsons metod för att räkna ut kvadratroten av ett tal x. Olika sätt att köra vårt program zaza4 <23> python3 newton.py This program tries to find the square root of a number. Enter a number: 2 1.5 1.4166666666666665 1.4142156862745097 1.4142135623746899 1.414213562373095 zaza4 <24> python3 Python 3.2.2 (default, Mar 7 2012, 13:44:00) [GCC 3.4.6] on sunos5 Type "help", "copyright", "credits" or "license" for more information. >>> 29 Hur man använder Python-interpretatorn >>> import newton This program tries to find the square root of a number. Enter a number: 2 1.5 1.4166666666666665 1.4142156862745097 1.4142135623746899 1.414213562373095 >>> newton.find_root() This program tries to find the square root of a number. Enter a number: 10 3.5 3.178571428571429 3.162319422150883 3.1622776604441363 3.162277660168379 30 Hur man använder Python-interpretatorn >>> from newton import * This program tries to find the square root of a number. Enter a number: 3 1.75 1.7321428571428572 1.7320508100147274 1.7320508075688772 1.7320508075688772 >>> find_root() This program tries to find the square root of a number. Enter a number: 5 2.25 2.236111111111111 2.2360679779158037 2.23606797749979 2.23606797749979 31 Ordning och reda på programkoden Programkod organiseras i moduler, och om man inte gör något speciellt kommer varje fil att bli en modul. import newton Ladda in modulen (filen) newton. Funktioner i modulen går att anropa med newton.funktionsnamn from newton import * Ladda in modulen (filen) newton så att allt som finns i den går att anropa direkt. Detta är bra för våra små program, men blir rörigt när vi kommer lite längre fram. 32 Satser – ryggraden i ett program • Ett Python-program består av ett antal satser (eng. statements) som utförs i tur och ordning. Än så länge har vi i huvudsak stött på följande typer av satser: • Enkla satser • Tilldelning (eng. assignment) • Funktionsanrop • Sammansatta satser 33 • Iteration med for • Funktionsdefinition Olika typer av satser: Tilldelning Hur ser det ut? namn = uttryck Vad händer? Uttrycket beräknas och resultatet sparas i den namngivna variabeln. def find_root(): print("This program tries to find the square root of a number.") x = eval(input("Enter a number: ")) guess = x/2 for i in range(5): guess = (guess + x/guess)/2 print(guess) find_root() 34 Olika typer av satser: Funktionsanrop Hur ser det ut? funktionsnamn(frivilliga argument) Vad händer? Argumenten skickas till funktionen, underprogrammet, för behandling. def find_root(): print("This program tries to find the square root of a number.") x = eval(input("Enter a number: ")) guess = x/2 for i in range(5): guess = (guess + x/guess)/2 print(guess) find_root() Funktionsanrop som inte är självständiga satser 35 Olika typer av satser: Iteration med for Hur ser det ut? for namn in område: undersatser Vad händer? Undersatserna körs så många gånger som området specificerar. def find_root(): print("This program tries to find the square root of a number.") x = eval(input("Enter a number: ")) guess = x/2 for i in range(5): guess = (guess + x/guess)/2 print(guess) find_root() 36 Olika typer av satser: Funktionsdefinitioner Hur ser det ut? def funktionsamn(frivilliga argument): undersatser Vad händer? Undersatserna sparas för att kunna anropas senare. def find_root(): print("This program tries to find the square root of a number.") x = eval(input("Enter a number: ")) guess = x/2 for i in range(5): guess = (guess + x/guess)/2 print(guess) find_root() 37 Olika typer av satser: Selektion Enkelt val Tre eller fler alternativ if a > 0: print(“positivt") if 0 <= a < 10: print("ental") elif a < 0: print("negativt") else: print("tio eller mer") Två alternativ if a > 0: print(“positivt") else: print(“negativt") 38 Inför första laborationstillfället • Ta reda på vilken labbgrupp du är med i (se kurswebben). • Ta reda på när den labbgruppen har sitt första labbtillfälle (se schemat). • Dyk upp på rätt plats i rätt tid. Våra laborationer brukar börja kvart över. De flesta har sin första laboration i eftermiddag. 39 Bildkällor: http://en.wikipedia.org/wiki/File:Windows_9X_BSOD.png http://mcsp.wartburg.edu/zelle/python/ http://en.wikipedia.org/wiki/File:Eniac.jpg http://en.wikipedia.org/wiki/File:UnivacII.jpg http://en.wikipedia.org/wiki/File:IBM_PC_5150.jpg http://en.wikipedia.org/wiki/File:Acer_Aspire_8920_Gemstone_by_Georgy.JPG http://en.wikipedia.org/wiki/File:Htc_Touch_Pro2_Georgy.JPG http://en.wikipedia.org/wiki/File:Lego_Color_Bricks.jpg http://commons.wikimedia.org/wiki/File:Lego_at_Work.jpg http://www.swedsoft.se/ www.liu.se