Programmering nivå 1 med Python

Kapitel 3: Problemlösning i programmering

Detta kapitel visar hur programmerare arbetar när de löser problem, planerar lösningar och omvandlar idéer till fungerande program.

Innehållsförteckning

Klicka på ett avsnitt för att hoppa direkt.

3.1 Vad är ett programmeringsproblem

Ett programmeringsproblem är en uppgift som kan lösas med hjälp av ett program.

Programmet ska ta emot information, göra något med informationen och sedan ge ett resultat.

Ett enkelt exempel kan vara ett program som räknar ut hur gammal en person är om fem år.

Problemet kan beskrivas så här som pseudokod:

Fråga användaren efter sin ålder
Räkna ut åldern om fem år
Skriv ut resultatet

Detta problem kan lösas med ett program.

age = int(input("Hur gammal är du? "))
print(f"Om fem år är du {age + 5} år gammal")

Programmeringsproblem finns i många olika områden.

Exempel

  • beräkna resultat i ett spel
  • sortera information i en databas
  • räkna ut priser i en webbshop
  • analysera data

När programmerare arbetar börjar de nästan alltid med att förstå problemet innan de börjar skriva kod.

Ett bra sätt att tänka är att ställa frågor som:

  • Vad ska programmet göra?
  • Vilken information behövs?
  • Vad ska programmet skriva ut?

Genom att förstå problemet tydligt blir det mycket lättare att skriva ett program som fungerar.

3.2 Algoritmer

När man löser ett programmeringsproblem behöver man bestämma vilka steg som ska utföras för att nå en lösning. Denna stegvisa beskrivning kallas en algoritm.

En algoritm är alltså en tydlig serie instruktioner som beskriver hur ett problem ska lösas.

Algoritmer används inte bara i programmering. De finns även i vardagliga situationer där man följer en serie steg.

Exempel är

  • ett recept i matlagning
  • instruktioner för att bygga en möbel
  • vägbeskrivningar

Alla dessa beskriver vilka steg som ska göras och i vilken ordning.

Exempel på en enkel algoritm

Tänk dig ett program som ska räkna ut hur gammal en person är om fem år.

Algoritmen kan beskrivas så här:

fråga användaren efter ålder
spara åldern i en variabel
lägg till 5
skriv ut resultatet

När algoritmen är tydlig kan den enkelt omvandlas till ett program.

age = int(input("Hur gammal är du? "))
print(f"Om fem år är du {age + 5} år gammal")

Varför algoritmer är viktiga

Algoritmer hjälper programmerare att planera en lösning innan de skriver kod, förstå hur ett problem ska lösas och strukturera sina program.

Om man börjar skriva kod direkt utan att tänka igenom algoritmen kan programmet lätt bli svårt att förstå eller innehålla fel.

Egenskaper hos en bra algoritm

En bra algoritm ska vara tydlig, stegvis, logisk och möjlig att följa.

Varje steg ska vara enkelt att förstå och utföra.

Sammanfattning

En algoritm är en steg-för-steg-beskrivning av hur ett problem ska lösas.

Genom att först formulera en algoritm blir det mycket lättare att skriva ett fungerande program.

3.3 Dela upp problem

Många programmeringsproblem kan vara svåra att lösa direkt. Ett vanligt arbetssätt i programmering är därför att dela upp problemet i mindre delar.

När ett stort problem delas upp i mindre delar blir det lättare att förstå och lösa.

Detta arbetssätt används av nästan alla programmerare.

Exempel

Tänk dig att du ska skriva ett program som räknar ut medelvärdet av flera tal.

Om man försöker lösa hela problemet direkt kan det kännas svårt. Men om man delar upp problemet i mindre steg blir det enklare.

Problemet kan delas upp så här:

fråga användaren efter ett tal
fråga efter nästa tal
lägg ihop talen
räkna hur många tal som finns
dela summan med antalet
skriv ut resultatet

När problemet är uppdelat i steg blir det mycket lättare att skriva programmet.

Mindre delar i program

I programmering kan man ofta dela upp problem i delar som att läsa in information, göra beräkningar, fatta beslut och skriva ut resultat.

Om man arbetar steg för steg blir programmet ofta lättare att förstå, lättare att testa och lättare att ändra.

Exempel i Python

Här är ett enkelt program där problemet har delats upp i tydliga steg.

number1 = int(input("Skriv ett tal: "))
number2 = int(input("Skriv ett tal till: "))
summa = number1 + number2
print(f"Summan är {summa}")

Programmet läser in två tal, lägger ihop talen och skriver ut resultatet.

Sammanfattning

Att dela upp problem är ett viktigt arbetssätt i programmering.

Genom att dela upp ett problem i mindre delar blir det lättare att förstå problemet, lättare att skriva programmet och lättare att hitta fel i koden.

3.4 Pseudokod

Innan man börjar skriva kod kan det vara bra att planera lösningen. Ett vanligt sätt att göra detta är att använda pseudokod.

Pseudokod är ett sätt att beskriva ett program med vanliga ord och enkla instruktioner istället för riktig kod.

Det liknar programmering, men man behöver inte följa exakt syntax som i ett programspråk.

Syftet med pseudokod är att planera lösningen på ett problem, tänka igenom vilka steg programmet ska göra och göra det lättare att skriva koden senare.

Exempel

Anta att vi vill skriva ett program som frågar användaren efter ett tal och säger om talet är stort eller litet.

Pseudokoden kan se ut så här:

läs in ett tal
om talet är större än 10
    skriv ut stort tal
annars
    skriv ut litet tal

När lösningen är planerad kan man skriva programmet i Python.

number = int(input("Skriv ett tal: "))
if number > 10:
    print("Stort tal")
else:
    print("Litet tal")

Gör indraget med tab-tangenten. Det är mycket viktigt att du kommer ihåg indraget med tab på nästa rad efter if.

Varför pseudokod är användbart

Pseudokod hjälper programmerare att fokusera på lösningen istället för syntax, förstå programmet innan de skriver koden och planera större program.

Det gör också att andra personer lättare kan förstå hur ett program är tänkt att fungera.

Sammanfattning

Pseudokod är en enkel beskrivning av ett program i steg.

Man använder vanliga ord istället för riktig kod, men strukturen liknar ett program. När pseudokoden är klar blir det ofta mycket lättare att skriva själva programmet.

3.5 Flödesscheman

Ett flödesschema är en grafisk bild av ett program. Det visar programmets steg med hjälp av symboler och pilar.

Flödesscheman används för att planera program, förstå hur ett program fungerar, förklara lösningar för andra och hitta fel i programlogik.

Flödesscheman är en form av diagramteknik för problemlösning.

Sekvens

Sekvens betyder att instruktioner utförs i ordning, steg för steg.

Exempel:

läs in namn
skriv ut namn
skriv ut "Välkommen"

I ett flödesschema visas sekvens som flera steg efter varandra med pilar mellan.

Flödesschema som visar sekvens
Flödesschema för sekvens.

Selektion

Selektion betyder att programmet måste göra ett val.

Programmet kontrollerar om något är sant eller falskt i ett villkor och väljer sedan väg.

Exempel:

om tal > 10
    skriv ut "Stort tal"
annars
    skriv ut "Litet tal"

I ett flödesschema visas detta med en beslutssymbol.

Flödesschema som visar ett villkor
Flödesschema för ett villkor.

Iteration

Iteration betyder att något upprepas flera gånger.

Det kan vara en loop som fortsätter tills ett villkor är uppfyllt.

Exempel:

så länge talet inte är 0
    skriv ut talet
    läs in nytt tal

I ett flödesschema visas iteration genom att en pil går tillbaka till ett tidigare steg.

Flödesschema som visar iteration
Flödesschema för iteration.

Ett flödesschema beskriver samma sak som pseudokod, men i bildform istället för text.

Vanliga symboler i flödesscheman visar start/slut, inmatning/utskrift, bearbetning, beslut och pilar som visar i vilken ordning stegen utförs.

Nedan finns pseudokod som kan omvandlas till flödesscheman.

Exempel 1 - Hälsningsprogram

Pseudokod:

start
fråga efter namn
spara namnet
skriv ut "Hej namn"
slut
Flödesschema för hälsningsprogram
Exempel på ett enkelt hälsningsprogram.

Exempel 2 - Räkna ut summan av två tal

Pseudokod:

start
läs in tal1
läs in tal2
summa = tal1 + tal2
skriv ut summa
slut
Flödesschema för summan av två tal
Flödesschema för att räkna ut summan av två tal.

Exempel 3 - Stort eller litet tal

Pseudokod:

start
läs in tal
om tal > 10
    skriv ut "Stort tal"
annars
    skriv ut "Litet tal"
slut
Flödesschema för stort eller litet tal
Beslutspunkt i ett flödesschema.

Här används en beslutspunkt i flödesschemat.

Exempel 4 - Ålder om fem år

Pseudokod:

start
fråga efter ålder
ålderOmFemÅr = ålder + 5
skriv ut ålderOmFemÅr
slut
Flödesschema för ålder om fem år
Flödesschema för ett program som räknar ut åldern om fem år.

Exempel 5 - Enkel meny

Pseudokod:

start
skriv ut "1 Spela"
skriv ut "2 Avsluta"
läs in val
om val = 1
    skriv ut "Spelet startar"
annars
    skriv ut "Programmet avslutas"
slut
Flödesschema för enkel meny
Flödesschema för en enkel meny.

Exempel 6 - Iteration (Loop / Nedräkning)

Pseudokod:

start
sätt räknare = 3
medan räknare > 0
    skriv ut räknare
    räknare = räknare - 1
skriv ut "Klar!"
slut
Flödesschema för loop och nedräkning
Flödesschema för en enkel loop.

Sammanfattning

Flödesscheman hjälper programmerare att planera program, förstå programlogik och visualisera algoritmer.

I praktiken gör man ofta först Problem, Algoritm, Pseudokod, Flödesschema och sedan Kod.

Det gör det lättare att skapa program som fungerar korrekt.

3.6 Från idé till program

När programmerare skapar ett program börjar de sällan direkt med att skriva kod. Istället arbetar de steg för steg från en idé till ett färdigt program.

Detta arbetssätt gör det lättare att förstå problemet och skapa ett program som fungerar.

Ett vanligt arbetssätt kan beskrivas i följande steg: förstå problemet, planera lösningen, beskriva lösningen, skriva programmet och testa programmet.

Steg 1 - Förstå problemet

Först måste man förstå vad programmet ska göra.

Exempel: Ett program ska fråga användaren efter sin ålder och sedan skriva ut hur gammal personen är om tio år.

Frågor man kan ställa är: Vilken information behöver programmet? Vad ska programmet räkna ut? Vad ska programmet skriva ut?

Steg 2 - Planera lösningen

Nästa steg är att planera hur problemet ska lösas.

Man kan till exempel skriva ner de viktigaste stegen.

fråga efter ålder
spara åldern
lägg till 10
skriv ut resultatet

Steg 3 - Beskriva lösningen

Nu kan man beskriva lösningen mer tydligt med pseudokod.

start
läs in ålder
ålderOmTioÅr = ålder + 10
skriv ut ålderOmTioÅr
slut

Man skulle också kunna rita ett flödesschema som visar samma steg.

Steg 4 - Skriva programmet

När lösningen är planerad kan man skriva programmet i Python.

age = int(input("Hur gammal är du? "))
future_age = age + 10
print(f"Om tio år är du {future_age} år gammal")

Steg 5 - Testa programmet

När programmet är skrivet måste det testas.

Man kan till exempel testa med olika värden. Om användaren skriver 15 ska programmet skriva ut Om tio år är du 25 år gammal.

Om något inte fungerar måste programmet ändras tills det fungerar korrekt.

Sammanfattning

Program utvecklas ofta i flera steg: idé, problem, algoritm, pseudokod, program och testning.

Genom att arbeta på detta sätt blir det lättare att skapa program som fungerar och är lätta att förstå.

3.7 Exempel: temperaturprogram

Nu ska vi se ett exempel på hur man kan gå från ett problem till ett färdigt program.

Problemet är att skapa ett program som frågar användaren efter en temperatur i grader Celsius och sedan skriver ut temperaturen i grader Fahrenheit.

Steg 1 - Förstå problemet

Programmet ska fråga efter en temperatur i Celsius, räkna om temperaturen till Fahrenheit och skriva ut resultatet.

Formeln för att omvandla Celsius till Fahrenheit är F = C × 9 / 5 + 32.

Steg 2 - Algoritm

Algoritmen kan beskrivas så här:

läs in temperaturen i Celsius
räkna ut temperaturen i Fahrenheit
skriv ut resultatet

Steg 3 - Pseudokod

start
läs in temperatur i Celsius
fahrenheit = celsius × 9 / 5 + 32
skriv ut temperaturen i Fahrenheit
slut

Steg 4 - Pythonprogram

celsius = float(input("Skriv en temperatur i Celsius: "))
fahrenheit = celsius * 9 / 5 + 32
print(f"Temperaturen i Fahrenheit är {fahrenheit}")

Hur programmet fungerar

Programmet läser in temperaturen från användaren, omvandlar temperaturen till ett decimaltal, räknar ut temperaturen i Fahrenheit och skriver ut resultatet.

Om användaren skriver 20 ska programmet skriva ut Temperaturen i Fahrenheit är 68.0.

Sammanfattning

I detta exempel har vi gått igenom hela processen: problem, algoritm, pseudokod och program.

Detta är ett vanligt arbetssätt när programmerare utvecklar program.

3.8 Övningar

I dessa övningar ska du arbeta med problemlösning i programmering. Försök att först tänka igenom lösningen innan du börjar skriva kod.

Arbeta gärna i följande steg: förstå problemet, skriv en enkel algoritm, skriv pseudokod, skriv programmet i Python.

Övning 1 - Hälsningsprogram

Skriv ett program som frågar användaren efter sitt namn och skriver ut en hälsning.

Programmet ska skriva ut:

Hej namn

Fundera först på vilken information programmet behöver och vad programmet ska skriva ut.

Övning 2 - Ålder om tio år

Skriv ett program som frågar användaren efter sin ålder, räknar ut hur gammal personen är om tio år och skriver ut resultatet.

Övning 3 - Summan av två tal

Skriv ett program som läser in två tal från användaren, räknar ut summan och skriver ut resultatet.

Exempel på resultat:

Summan är 25

Övning 4 - Temperaturprogram

Skriv ett program som läser in en temperatur i Celsius, räknar om temperaturen till Fahrenheit och skriver ut resultatet.

Tips: Formeln är F = C × 9 / 5 + 32.

Övning 5 - Medelvärde

Skriv ett program som läser in tre tal, räknar ut medelvärdet och skriver ut resultatet.

Tips: Medelvärde = summan av talen delat med antalet tal.

Övning 6 - Största talet

Skriv ett program som läser in två tal, avgör vilket tal som är störst och skriver ut resultatet.

Tips: Du kan använda if i programmet.

3.9 Reflektionsfrågor

  1. Vad är ett programmeringsproblem?
  2. Varför är det viktigt att förstå problemet innan man börjar skriva kod?
  3. Vad är en algoritm?
  4. Ge ett exempel på en algoritm i vardagen.
  5. Varför är det ofta bra att dela upp ett stort problem i mindre delar?
  6. Vad är pseudokod?
  7. Varför kan pseudokod göra det lättare att skriva ett program?
  8. Vad är ett flödesschema?
  9. Vilken skillnad finns mellan pseudokod och ett flödesschema?
  10. Vilka steg brukar programmerare följa när de går från en idé till ett färdigt program?