Hösten 2009
Dagens lektion Problemlösningsstrategier Repetition av funktioner Mer om funktioner 2
Problemlösningsstrategier 3
PROBLEMLÖSNINGSSTRATEGIER Strategier Det finns ett flertal olika ansatser till hur man "bäst" löser problem Bottom-up Top-down Divide and Conquer Lokal optimering Trial and error Generate and test Kritiskt tänkande Brainstorming... 4
PROBLEMLÖSNINGSSTRATEGIER Vad är en lösning? Formell beskrivning av hur man går till väga för att lösa ett problem Lösningsbeskrivningen utgår från startvillkor Den använder hela tiden väldefinierade steg Beskrivningen leder fram till ett sluttillstånd (dvs en "lösning") på ett begränsat antal steg 5
PROBLEMLÖSNINGSSTRATEGIER Vad är en lösning? En lösning som uppfyller de mer formella kraven brukar kallas algoritm Ordet algoritm härstammar från den persiska matematikern Muhammad ibn Musa al-khwarizmi Han presenterade ca 820 e.kr. en bok med systematiska lösningar till linjära och kvadratiska funktioner 6
PROBLEMLÖSNINGSSTRATEGIER Exempel på algoritm baserad på bottom-up strategi Bubble sort Vi tittar bara lokalt på värden och försöker ordna bitarna 7
PROBLEMLÖSNINGSSTRATEGIER Exempel på algoritm baserad på top-down strategi Quicksort Vi delar upp listan i två delar så att alla värden mindre än ett specifikt värde hamnar i en del och övriga i en annan del Upprepa ovanstående tills varje del-lista innehåller ett element Det är nu trivialt att sätta ihop delarna till en sorterad lista 8
PROBLEMLÖSNINGSSTRATEGIER Exempel på algoritm baserad på divide and conquer strategi Merge sort Dela listan på två delar Upprepa med varje dellista När dellistorna endast innehåller ett element sätts de ihop parvis till sorterade listor Sedan sätts de sorterade listorna ihop till längre och längre listor och till slut är hela listan sorterad 9
PROBLEMLÖSNINGSSTRATEGIER Exempel på algoritm baserad på lokal optimering Att betala tillbaks rätt växel Börja med att betala tillbaks den största möjliga valör (på mynt/sedel) Subtrahera återbetalat belopp från växeln och börja om 10
PROBLEMLÖSNINGSSTRATEGIER Exempel Skriv ett program som tar ett belopp och räknar upp en växel Utgå från att det finns sedlar/mynt i följande valörer: 1000kr, 500kr, 100kr, 50kr, 20kr, 10kr, 5kr, 1kr, 50 öre 11
Repetition av funktioner 12
REPETITION AV FUNKTIONER Att dela upp program Att dela upp program i mindre delar, funktioner är ett viktigt koncept i programmering. Viktigt när identisk kod upprepas för att få struktur och överblick Alla språk har även inbyggda funktioner 13
REPETITION AV FUNKTIONER Den svarta lådan Indata Funktion Utdata 4, 3 Beräkna 4 3 64 14
REPETITION AV FUNKTIONER Parametrar, returvärde och argument Givet noll, en eller flera parametrar utför en funktion en specifik uppgift vilket resulterar i ett returvärde. Parameter En variabel som fått sitt värde vid anropet. Returvärde Ett värde som returneras till den anropande miljön när funktionen avslutas. En funktion anropas med ett antal argument. Varje argument motsvarar en av parametrarna i funktionen. 15 Argument Värden som skickas med vid anrop av en funktion, och som tilldelas funktionens paramterar.
REPETITION AV FUNKTIONER Funktionsanrop x = foo(3, hej ) Tilldelning Argument 1 Argument 2 Funktionen foo Parameter 1 Parameter 2 Returvärde 16
REPETITION AV FUNKTIONER Skriva egna funktioner Funktionen definieras innan den används Den utgörs av funktionshuvudet med efterföljande kodblock. Funktionshuvudet anger namn på funktionen, samt vilka parametrar den har Avslutas (oftast) med att funktionen returnerar ett resultat. 17
REPETITION AV FUNKTIONER Skriva egna funktioner import sys def int_pow(param1, param2): value = 1 for i in range(param2): value = param1 return value arg1 = int(sys.argv[1]) arg2 = int(sys.argv[2]) print int_pow(arg1, arg2) 18
Mer om funktioner 19
MER OM FUNKTIONER Standardvärden Man måste ange lika många argument som det finns parametrar. Man kan dock ange ett standardvärde på en parameter Anges alla argument gäller dem Utelämnas argumentet gäller standardvärdet 20
MER OM FUNKTIONER Exempel def multiprint(text, n=5): for i in range(n): print text multiprint("python", 7) # Skriver ut "Python" 7 ggr multiprint("python") # Skriver ut "Python" 5 ggr 21
MER OM FUNKTIONER Vad är en bra funktion och vad är en dålig funktion? En funktion ska ha EN uppgift Ett tydligt och beskrivande namn Inte för många parametrar Försök enbart att ha ETT returvärde I Python kan dock flera värden returneras med en lista eller tupel Enkelt sätta upp riktlinjer - svårare i praktiken 22