Algoritmer och interaktiv Python



Relevanta dokument
Föreläsning 2 Programmeringsteknik och C DD1316. Mikael Djurfeldt

Språket Python - Del 1 Grundkurs i programmering med Python

Föreläsning 2 Programmeringsteknik och C DD1316. Programmering. Programspråk

Objektorienterad Programmering (TDDC77)

Föreläsning 2 Programmeringsteknik DD1310. Programmering. Programspråk

Föreläsning 10 Datalogi 1 DA2001. Utskrift på skärmen. Syntax. print( Hej ) Hur är det? Hej. print( Hej,end= ) print( Hur är det? ) HejHur är det?

I Skapa Hej.java och skriv programmet. I Kompilera med javac Hej.java. I Rätta fel och repetera tills du lyckas kompilera ditt program

Introduktion till programmering och Python Grundkurs i programmering med Python

SMD 134 Objektorienterad programmering

Inledande programmering med C# (1DV402) 27+15=42 1 (22)

Programmering för språkteknologer I, VT2012. Rum

Välkomna! Datalogiskt tänkande och programmering 15 augusti WiFI Nätverk: Conventumwifi Lösenord: conventum2018

Dela, koda och korrigera! Undervisningsmaterial inom digital kompetens

Föreläsning 2 Programmeringsteknik och Matlab DD1312. Programspråk. Utskrift på skärmen

Alla datorprogram har en sak gemensam; alla processerar indata för att producera något slags resultat, utdata.

Introduktion till programmering D0009E. Föreläsning 1: Programmets väg

Planering av ett större program, del 2 - for och listor. Linda Mannila

Lär dig programmera! Prova på programmering med enkla exempel! Björn Regnell

Föreläsning 2 Programmeringsteknik och Matlab DD1312. Programspråk. Utskrift på skärmen

TDIU01 - Programmering i C++, grundkurs

Övningsuppgifter kapitel 8

Föreläsning 2 Programmeringsteknik DD1310. Programmering. Programspråk

Programmering i C++ En manual för kursen Datavetenskaplig introduktionskurs 5p

Programmering A. Johan Eliasson

Extramaterial till Matematik Y

Föreläsning 3: Typomvandling, villkor och val, samt textsträngar

1/15/2013. DD1310/DD1314/DA3009 Programmeringsteknik. Lärandemål... Vilka läser kursen? ...fler lärandemål VARFÖR? Föreläsning 1

TDDC77 Objektorienterad Programmering

Föreläsning 1 & 2 INTRODUKTION

Introduktion till programmering SMD180. Föreläsning 2: Variabler, uttryck och satser

Exempel på ett litet Ada-program

DD1314 Programmeringsteknik

DD1310/DD1314/DA3009 Programmeringsteknik LÄRANDEMÅL... Vilka läser kursen? ...FLER LÄRANDEMÅL. Föreläsning 1

Programmering, grundkurs, 8.0 hp, Elektro, KTH, hösten Programmering: att instruera en maskin att utföra en uppgift, kräver olika språk:

Objektorienterad programmering i Java I. Uppgifter: 2 Beräknad tid: 5-8 timmar (OBS! Endast ett labbtillfälle) Att läsa: kapitel 5 6

Klassdeklaration. Metoddeklaration. Parameteröverföring

Grundkurs i programmering - intro

Objektorienterad Programmering (TDDC77)

Dagens föreläsning. Repetition. Repetition - Programmering i C. Repetition - Vad C består av. Repetition Ett första C-program

Variabler och konstanter

Föreläsning 2 Programmeringsteknik och C DD1316

Imperativ programmering. Föreläsning 2

Introduktion till formella metoder Programmeringsmetodik 1. Inledning

CS - Computer science. Datateknik Informationsbehandling Datalogi Datavetenskap (ÅA 2008)

Övningsuppgifter till föreläsning 2 Variabler och uttryck

Föreläsning 3.1: Datastrukturer, en översikt

Föreläsningsanteckningar, Introduktion till datavetenskap HT S4 Datastrukturer. Tobias Wrigstad

Grunderna i stegkodsprogrammering

Övning2. Variabler. Data typer

Inledning. Vad är ett datorprogram, egentligen? Olika språk. Problemlösning och algoritmer. 1DV433 Strukturerad programmering med C Mats Loock

1 Texthantering. 1.1 Typen char. Exempel, skriv ut alfabetet

1 Datorn som miniräknare. 1.1 Räkneoperationer. 1.2 Variabler

F2 Datatyper och variabler. ID1004 Objektorienterad programmering Fredrik Kilander

Objektorienterad programmering i Java

EDAA20 Programmering och databaser. Mål komprimerat se kursplanen för detaljer. Checklista. Föreläsning 1-2 Innehåll. Programmering.

Föreläsning 1 & 2 INTRODUKTION

Laboration 1 Introduktion till Visual Basic 6.0

Datatyper och kontrollstrukturer. Skansholm: Kapitel 2) De åtta primitiva typerna. Typ Innehåll Defaultvärde Storlek

Föreläsning 2. Variabler, tilldelning och kodblock{} if-satsen Logiska operatorer Andra operatorer Att programmera

Parameteröverföring. Exempel. Exempel. Metodkropp

Bakgrund och motivation. Definition av algoritmer Beskrivningssätt Algoritmanalys. Algoritmer. Lars Larsson VT Lars Larsson Algoritmer 1

Kompilering och exekvering. Föreläsning 1 Objektorienterad programmering DD1332. En kompilerbar och körbar java-kod. Kompilering och exekvering

DATALOGISK TÄNKANDE OCH PROGRAMMERING CETIS OKTOBER 2017

Programmera i C Varför programmera i C när det finns språk som Simula och Pascal??

Programmering med Java. Grunderna. Programspråket Java. Programmering med Java. Källkodsexempel. Java API-exempel In- och utmatning.

Introduk+on +ll programmering i JavaScript

Föreläsning 2. Operativsystem och programmering

Användarhandledning Version 1.2

732G Linköpings universitet 732G11. Johan Jernlås. Översikt. Repetition. Strukturdiagram. Styra. Algoritmer. Val

Programstruktur och terminologi. Programmet producerar följande utskrift i terminalfönstret: Ett Javaprogram består av en eller flera klasser

Inledande programmering med C# (1DV402) 85/2=42. OBS! Heltal 1 (13)

Hej Då, Karel! Programmering. Vårt första Javaprogram. hh.se/db2004. Java. Grundtyper, variabler och arrayer

Datalogi I, grundkurs med Java 10p, 2D4112, Fiktiv tentamen, svar och lösningar och extra kommentarer till vissa uppgifter 1a) Dividera förs

Extramaterial till Matematik Y

F4. programmeringsteknik och Matlab

Föreläsning 8: Aritmetik och stora heltal

OBS! All teori i detta och följande dokument kompletteras med genomgångar på lektionerna. Så det är viktigt att närvara och göra egna anteckningar.

Labb i Datorsystemteknik och programvaruteknik Programmering av kalkylator i Visual Basic

Programmering I Tobias Wrigstad fredag, 2009 augusti 28

Program & programmering

Operatorer Tilldelning Kodblock { } if satsen Logiska uttryck Att programmera

EDAA20 Programmering och databaser. Mål komprimerat se kursplanen för detaljer. Om att lära sig programmera. Föreläsning 1-2 Innehåll.

Applets med komponenter

6. Ge korta beskrivningar av följande begrepp a) texteditor b) kompilator c) länkare d) interpretator e) korskompilator f) formatterare ( pretty-print

Programmeringsteknik med C och Matlab

Python. Python är, som Scheme, ett interpreterat språk men det finns kompilatorer för Python.

Tentamen Grundläggande programmering

1 Funktioner och procedurell abstraktion

Planering Programmering grundkurs HI1024 HT 2014

Planering Programmering grundkurs HI1024 HT data

Python. Python är, som Scheme, ett interpreterat språk men det finns kompilatorer för Python.

Föreläsning 5: Introduktion av pekare

Viktiga begrepp. Algoritm. Array. Binärkod. Blockprogrammering. Bugg / fel och felsökning. Dataspel. Dator

Programmering, grundkurs, 8.0 hp HI1024, HI1900 etc., Tentamen TEN1. Måndagen den 10 januari 2011,

732G Linköpings universitet 732G11. Johan Jernlås. Översikt. Repetition. Felsökning. Datatyper. Referenstyper. Metoder / funktioner

Variabler, värden och typer

Räkna med C# Inledande programmering med C# (1DV402)

Enkla datatyper minne

Uppgift 1 - programmet, Uppg6.m, visade jag på föreläsning 1. Luftmotståndet på ett objekt som färdas genom luft ges av formeln

Grundläggande datalogi - Övning 1

Transkript:

Algoritmer och interaktiv Python Linda Mannila 11.9.2007

Denna föreläsning Räkneövningstider Algoritmer Interaktiv Python Datatyper Variabler Typning

Repetition Vad vi än skall göra måste vi veta hur vi skall bära oss åt för att få det gjort Kan inte köra bil om vi inte vet hur man gör Omöjligt (åtminstone himla dumt ) att hoppa i 10 m djupt vatten om vi inte kan simma MEN - vi kan gå i bilskolan och ta simlektioner för att lära oss En dator vet inte hur den skall göra något och kan inte lära sig Användaren måste förklara vad datorn skall göra och hur programmering

Repetition För att få en dator att göra något måste vi skriva ett program som exakt berättar för datorn vad den skall göra, och hur den skall göra det, steg för steg Datorn kan sedan exekvera (köra) programmet utför varje steg tills det slutliga målet är nått Instruktioner (satser) är den verkliga grunden i ett program, och används för att manipulera data, utföra beräkningar, skriva ut data på skärmen osv.

Program skapas i faser 1. Definiera problemet 2. Identifiera input och output 3. Designa en algoritm 4. Representera algoritmen (flödesschema och/eller pseudokod) 5. Skriv programkoden 6. Testa programmet (kör det) 7. Debugga programmet (fixa eventuella fel)

Vad är en algoritm? En mängd steg-för-steg instruktioner som berättar exakt hur ett problem skall lösas (ett recept ) Exakta, entydiga och fullständiga instruktioner Problemet måste vara välspecifierat Algoritmer kan uttryckas med vanligt språk (svenska, finska, kinesiska), i ett programmeringsspråk, med pseudokod eller med flödesscheman

Vad är ett program? En algoritm som implementerats så att den kan utföras av en dator Uttrycks i ett programmeringsspråk

Fasters resa Problem Din gamla faster från Amerika skall komma på besök, men du hinner inte möta henne på flygfältet. I stället måste du henne instruktioner för hur hon kan ta sig till ditt hus på egen hand. Du ger henne tre olika alternativ: Ta en taxi 1. Gå till taxi-stationen 2. Hoppa in i en taxi 3. Ge chauffören hemadressen Hyr en bil 1. Gå till biluthyrningsdisken på flygfältet 2. Hyr en bil 3. Använd kartan för att hitta ända fram Ta bussen 1. Ta buss 57 till centrum 2. Byt till buss 61 3. Stig av på Rådhusgatan 4. Gå två kvarter söderut

Fasters resa Alla alternativ är en algoritm, dvs. en samling steg-gör-steginstruktioner Alla tre algoritmer leder till samma resultat, men på olika sätt Även inom programmering flera olika algoritmer för hur man kan utföra en viss uppgift eller lösa ett problem Varje algoritm har sina för- respektive nackdelar Taxi snabbt men dyrt Bil kräver mer av din faster men flexibelt Buss långsamt men billigt Man väljer algoritm beroende på omständigheterna

En algoritm måste... vara välordnad klart i vilken ordning de olika instruktionerna skall utföras innehålla entydiga instruktioner inte kunna tolkas på olika sätt, ingen tvekan om betydelsen kunna utföras alla instruktioner som ingår måste gå att utföra. Ej t.ex. instruktion som kräver att vi dividerar med noll alltid ge ett resultat annars omöjligt veta om algoritmen har utförts eller om den ännu är på hälft avslutas inom ändlig tid inga evighetsprogram, måste alltid komma till ett slut

Koka te Version 1: 1.Koka vatten 2.Sätt tepåsen i en kopp 3.Häll vatten i koppen

Koka te Version 2: 1. Fyll en kastrull med vatten. 2. Sätt kastrullen på spisplattan. 3. Vänta tills vattnet kokar. 4. Ta av kastrullen från plattan. 5. Ta fram en tepåse. 6. Sätt påsen i en kopp. 7. Lyft vattenkastrullen. 8. Luta kastrullen så att vattnet rinner ner i koppen. 9. Vänta tills koppen är full. 10. Ställ tillbaka kastrullen på plattan.

Poängen? När man programmerar måste man vara otroligt exakt och detaljerad Precis allt som datorn skall göra måste skrivas ut

Att skapa program Ett program är helt enkelt en lösning på ett problem Det svåra ligger i att komma på lösningen För att ett program skall fungera som man tänkt: för- och eftervillkor Förvillkor => Program => Eftervillkor Om förvillkoren är uppfyllda då man startar programmet kommer eftervillkoren att vara uppfyllda då man har kört programmet

Att skapa program Jag är snål på sockerkaka men har ingen. Hur skall jag få en? Vissa förutsättningar som måste gälla för att du skall kunna lösa problemet ingredienser som behövs en funktionsduglig ugn kakform veta hur man bakar en kaka, dvs. ett recept Kakbakningens förvillkor

Att skapa program Förvillkor: Du har alla ingredienser och annat som behövs Program: Receptet Eftervillkor: Nygräddad sockerkaka

Att skapa program Förvillkor: Det som måste gälla för att programmet skall kunna köras Program: Den implementerade algoritmen / koden Eftervillkor: Det resultat man är ute efter

Spaghettikod Första programmen skrivna i högnivåspråk var ofta svåra att läsa och förstå användningen av GOTO-satser, (berättar för datorn att hoppa till en viss rad i programmet) spaghettikod, massa hopp fram och tillbaka i koden, svårhittade fel

Spaghettikod, exempel 10 i = 0 20 i = i + 1 30 print i; " squared = "; i * i 40 if i < 10 then goto 20 50 print "Program Completed." 60 end Problem?

Strukturerad programmering Edsger Dijkstra (1930-2002) Mål: program som är lättare att skriva, läsa och underhålla Samma utgångspunkt: en mängd instruktioner som tillsammans bildar ett program. I stället för hoppsatser: Tre olika typer av instruktioner Vissa skall utföras en gång Upprepas Kanske inte utföras alls

Tre instruktionstyper Sekvens: allt i tur och ordning Först sedan sist Villkorliga: valmöjlighet, kanske inte utförs alls Om... så... Iterativa: repeteras, om och om igen Upprepa, tills, medan,...

No more spaghetticode 10 i = 0 20 i = i + 1 30 print i; " squared = "; i * i 40 if i < 10 then goto 20 50 print "Program Completed." 60 end Strukturerad, anti-spaghettiversion for i in range(1,10): print i, "squared =", i ** 2 print "Program Completed."

Representera algoritmer Algoritmer planera program med papper och penna, utan dator och programmeringsspråk lösningsmodell som sedan kan implementeras och exekveras Hittills uttryckt i naturligt språk Mer exakta alternativ: pseudokod flödesscheman

inte programmeringsspråk Pseudokod & flödesscheman låter oss strukturera algoritmer (program) klart och tydligt utan att behöva använda ett programmeringsspråk viktiga när man designar program

Pseudokod vs. flödesscheman Pseudokod ( nästan kod ) beskriver algoritmer exakt med ord Flödesscheman beskriver algoritmer exakt grafiskt med figurer

Flödesscheman, symboler

Flödesscheman, symboler

Flödesscheman, symboler Start In- eller utmatning Stop Funktion, underprogram

Koka makaroner Start vatten gryta koka vatten makaroner -> gryta tills makaroner mjuka eller lång tid gått låt makaroner koka Slut

Algoritmer i algoritmer Vanlig approach: Dela problemet i mindre delar ( divide and conquer ) Här t.ex. egen algoritm för att koka vatten Input: vatten, gryta, spis 1. Häll vatten i gryta 2. Ställ gryta på spis 3. Vrid på platta 4. Vänta tills vatten kokar

Algoritmer i algoritmer Start Slut

Uppgift Parvis minst en i paret bör ha snörade skor Skriv en algoritm för hur man knyter skosnören Pseudokod, flödesschema eller båda

Äntligen... Dags att börja programmera - Interaktiv Python -

Repetition Python är ett tolkat språk Den interaktiva prompten >>> Instruktionerna körs (exekveras) genast de skrivs in Omedelbar feedback du ser resultatet genast

Python som räknemaskin Skriv in beräkningar vid prompten och tryck enter Vanliga aritmetiska operationer:

Python som räknemaskin Operationerna utförs i samma ordning som i matten: 1. parenteser () 2. exponenter ** 3. multiplikation *, division /, och rest % 4. addition + och subtraktion -

Datatyper Värden kan vara av olika typ t.ex. text är inte ett tal behöver en egen typ Primitiva datatyper (eng. primitives) Grundläggande typer, bastyper Motsvarar ett enda värde Samlingar (eng. collections) Kombinationer av de primitiva Kan innehålla flera värden

Datatyper: Tal Heltal (eng. integer) tal utan decimaldel 13, 23, 1128, -99 etc. Flyttal (eng. Float) tal med decimaldel 2.3, -0.0076, 19.89, 6.0 etc. Obs! Punkt, inte komma! Komplexa tal (eng. complex) 4+3j Long Stora heltal 62081372132

Division När ett heltal divideras med ett annat utförs heltalsdivision: 12 / 5 = 2 1 / 3 = 0 För att få reda på resten kan man använda rest-operatorn (%) 12 % 5 = 2 1 % 3 = 1

Flyttalsdivision >>> 12 / 5 2 >>> 12.0 / 5 2.3999999999999999 För att få flyttalsdivision måste minst ett av talen vara ett flyttal. >>> 12 / 5.0 2.3999999999999999 >>> 12.0 / 5.0 2.3999999999999999

Datatyper: Strängar Text i programmeringsspråk kallas för strängar Sträng = text innanför citationstecken Både ' och " kan användas Detta är en sträng Och det här Strängar kan innehålla citationstecken Han sade: Hoppsan högt

Utskrift på skärmen Python Java

Strängoperationer Både + och * kan användas med strängar + operatorn konkatenerar (fogar ihop) två strängar >>> print Hej" + då! skriver ut Hejdå! Operatorn * repeterar en sträng >>> print 3 * "ha" skriver ut hahaha

Bart Simpson >>> print "I won t teach others to fly * 100 Skriver ut texten 100 gånger! Men, efter varandra hur få dem på skilda rader?

Bart Simpson >>> print ("I won t teach others to fly + \n ) * 100 eller >>> print ("I won t teach others to fly\n * 100 Specialtecknet \n skriver ut en ny rad.

Foga ihop strängar med tal Använd kommatecken för att foga ihop strängar med t.ex. tal >>> print "2 + 2 blir", 2 + 2 >>> print "3 * 4 blir", 3 * 4 >>> print 100-1, "är det samma som 100-1"

Variabler Variabel = namn som refererar till ett värde Plats i datorns minne för att lagra data så att vi kan komma åt det senare igen. Variabeln är ett namn som refererar till ett värde (pekar på den minnescell som innehåller det värdet) Linda mitt_namn

Variabler I Python skapas en ny variabel samtidigt som man ger den ett värde. Detta görs genom en och samma tilldelningssats >>> mitt_namn = Linda = kallas tilldelningsoperator Efter tilldelningen kan man använda variabelnamnet var som helst i koden där ett värde av samma datatyp passar in >>> print Hej, mitt_namn Hej Linda

Variabler OBS! En variabel som lagrar en primitiv datatyp kan bara innehålla ett värde i taget! Om man tilldelar en variabel ett nytt värde skrivs det gamla över! >>> mitt_namn = Linda >>> print mitt_namn Linda >>> mitt_namn = Linus >>> print mitt_namn Linus >>> age = 45 >>> age = age +1 >>> print age 46

Variabelnamn Variabelnamn får inte vara ett nyckelord börja med en siffra innehålla otillåtna tecken (t.ex. $, %,?, =) Skillnad på små och stora bokstäver minbil är inte samma variabel som minbil Vänj dig från början vid att använda namn som betyder något: Dåligt: vd = 7 Bra: veckodagar = 7

Typning Python har dynamisk typning kan själv avgöra vilken datatyp en variabel har type(variabelnamn) Andra programmeringsspråk har ofta statisk typning programmeraren måste deklarera alla variabler till den datatyp som den skall kunna innehåll

Typning Python: vikt = 55.5 (Python vet att vikt är en flyttalsvariabel) age = 25 (Python vet att age är en heltalsvariabel) ord = dag (Python vet att namn är en strängvariabel) Statiskt typade språk (t.ex. Java): float vikt = 55.5 int age = 25 String ord = dag