Programmering och programspråk

10. Elementen i strukturerad programmering
Sekvens
Selektion
Iteration
Sekvens
Sekvens
En sekvens beskriver något som kan delas upp i en bestämd tidsföljd, t.ex
19.00 Kulturnyheterna
19.10 Regionala nyheter
19.30 Filmkrönikan
eller
06.00 Gomorron Sverige
06.45 Klappar på kredit kan bli dyr affär,
06.50 Svensk hockey på hal is?
07.15 Julkalendern med Allrams höjdarpaket
07.30 Gomorron Sverige
07.49 Boktips för barn
08.10 Är Rumänien redo för EU?
08.20 Möt männen bakom Hipphipp!
09.30 Om barn
10.00 Alla sinnen tillåtna!
Abelli, B. (2004). Programmeringens Grunder – med exempel i C#. Lund: Studentlitteratur
3
Sekvens
public class JSPTest
{
public static void Main ()
{
int a = 2;
int b = 3;
int c = 4;
a = a + b + c;
b = a + b + c;
c = a + b + c;
System.Console.WriteLine("a = " + a);
System.Console.WriteLine("b = " + b);
System.Console.WriteLine("c = " + c);
}
}
Abelli, B. (2004). Programmeringens Grunder – med exempel i C#. Lund: Studentlitteratur
4
Sekvens
JSP
Flödesdiagram
Program
bearbetning
bearbetning
Abelli, B. (2004). Programmeringens Grunder – med exempel i C#. Lund: Studentlitteratur
5
Sekvens, exempel
JSP
Flödesdiagram
Hello
Start
Skriv ut
”Hello World!”
Skriv ut
”Hello World!”
Stopp
public class Hello
{
public static void Main ()
{
System.Console.WriteLine(“Hello World!");
}
}
Abelli, B. (2004). Programmeringens Grunder – med exempel i C#. Lund: Studentlitteratur
6
Sekvens
AreaTest
Inmatning
Skriv
ledtext
Beräkning
Läs
radie
area=PI *
radie*radie
Abelli, B. (2004). Programmeringens Grunder – med exempel i C#. Lund: Studentlitteratur
Utskrift
Skriv area
7
Sekvens
AreaTest
Skriv
ledtext
Läs
radie
area = pi *
radie * radie
Skriv
area
Slut
Abelli, B. (2004). Programmeringens Grunder – med exempel i C#. Lund: Studentlitteratur
8
Sekvens
public class AreaTest
{
public static void Main ()
{
System.Console.WriteLine("Ange radie: ");
double radie = double.Parse(
System.Console.ReadLine() );
double area = 3.1415 * radie * radie;
System.Console.WriteLine("area = " + area);
}
}
Abelli, B. (2004). Programmeringens Grunder – med exempel i C#. Lund: Studentlitteratur
9
Selektion
Relationsoperatorer
==
!=
>
>=
<
<=
Lika med
Inte lika med (Skilt från)
Större än
Större än eller lika med
Mindre än
Mindre än eller lika med
Abelli, B. (2004). Programmeringens Grunder – med exempel i C#. Lund: Studentlitteratur
11
Booleska operatorer
!
||
&&
inte
eller
och
Abelli, B. (2004). Programmeringens Grunder – med exempel i C#. Lund: Studentlitteratur
12
Booleska (logiska) operatorer
! (ICKE)
Om…
a
b
s
s
s
f
f
s
f
f
&& (OCH)
a && b
s
f
f
f
Abelli, B. (2004). Programmeringens Grunder – med exempel i C#. Lund: Studentlitteratur
|| (ELLER)
a || b
s
s
s
f
!a
f
f
s
s
13
Selektion - if
JSP
Flödesdiagram
Program
villkor
sant
(villkor)
o
bearbetning
Abelli, B. (2004). Programmeringens Grunder – med exempel i C#. Lund: Studentlitteratur
falskt
bearbetning
14
Selektion - if, exempel
JSP
Flödesdiagram
SelektionsTest
Sätt
antal = 2
antalkoll
(antal = 2)
Skriv ut "OK, det o
stämde!"
Start
Sätt antal = 2
Är
antal=2?
falskt
sant
Skriv ut "OK, det stämde!"
Stopp
Abelli, B. (2004). Programmeringens Grunder – med exempel i C#. Lund: Studentlitteratur
15
Sekvens
public class IfTest
{
public static void Main ()
{
int antal = 2;
if (antal == 2)
{
System.Console.WriteLine(“OK, det stämde!");
}
}
}
Abelli, B. (2004). Programmeringens Grunder – med exempel i C#. Lund: Studentlitteratur
16
Selektion – if-else
JSP
Flödesdiagram
villkor
Program
(villkor = sant)
(villkor = falskt)
o
bearbetning
sant
falskt
o
bearbetning
bearbetning
bearbetning
Abelli, B. (2004). Programmeringens Grunder – med exempel i C#. Lund: Studentlitteratur
17
Selektion – if-else, exempel
JSP
Flödesdiagram
Start
SelektionsTest
Läs in antal
Läs in antal
antalkoll
sant
Är
antal=2?
(antal = 2)
Skriv "OK,
det stämde!"
falskt
o
Skriv ”Nej,
det blev fel!”
o
Skriv "OK, det
stämde!"
Skriv ”Nej, det blev
fel!”
Stopp
Abelli, B. (2004). Programmeringens Grunder – med exempel i C#. Lund: Studentlitteratur
18
Sekvens
public class IfTest
{
public static void Main ()
{
int antal = int.Parse( System.Console.ReadLine() );
if (antal == 2)
{
System.Console.WriteLine(“OK, det stämde!");
}
else
{
System.Console.WriteLine(“Nej, det blev fel!");
}
}
}
Abelli, B. (2004). Programmeringens Grunder – med exempel i C#. Lund: Studentlitteratur
19
Selektion – if-else, exempel
JSP
Flödesdiagram
SelektionsTest3
Läs in antal
(antal =
1 eller 2)
Skriv "OK,
det stämde!"
Start
Läs in antal
antalkoll
o
Skriv ”Utanför
intervallet!”
o
antal = 1
eller 2?
falskt
sant
Skriv "OK,
det stämde!"
Skriv ”Utanför
intervallet!”
Stopp
Abelli, B. (2004). Programmeringens Grunder – med exempel i C#. Lund: Studentlitteratur
20
Selektion – if-else
public class IfTest
{
public static void Main ()
{
int antal = int.Parse( System.Console.ReadLine() );
if (antal == 1 || antal == 2)
{
System.Console.WriteLine(“OK, det stämde!");
}
else
{
System.Console.WriteLine(“Utanför intervallet!");
}
}
}
Abelli, B. (2004). Programmeringens Grunder – med exempel i C#. Lund: Studentlitteratur
21
Villkorsoperatorn
Kommer ni ihåg Excel?
villkor resultat om sant resultat om falskt
Villkorsoperatorn i C/C++/Java/C#:
villkor ? resultat om sant : resultat om falskt ;
Exempel:
int a = 23;
string b = a >= 10 ? “större” : “mindre” ;
System.Console.WriteLine( b );
(Nu har vi nämnt villkorsoperatorn, men använd hellre if-satser…  )
Abelli, B. (2004). Programmeringens Grunder – med exempel i C#. Lund: Studentlitteratur
22
if - else
Villkorsoperatorn i C/C++/Java/C#:
int a = 23;
string b = a >= 10 ? “större” : “mindre” ;
System.Console.WriteLine( b );
Kan lika gärna (hellre?) använda en if-else-sats:
int a = 23;
string b = null;
if (a >= 10)
{
b = “större”;
}
else
{
b = “mindre” ;
}
System.Console.WriteLine( b );
Abelli, B. (2004). Programmeringens Grunder – med exempel i C#. Lund: Studentlitteratur
23
CompareTo
Används för att jämföra strängar.
Uttrycket s1.CompareTo(s2) ger följande resultat:
<0 om s1 är mindre än s2
=0 om s1 är lika med s2
>0 om s1 är större än s2
Tecken för tecken jämförs
Abelli, B. (2004). Programmeringens Grunder – med exempel i C#. Lund: Studentlitteratur
24
CompareTo ett exempel
string s1 = ”Bo”;
string s2 = ”Hans”;
if( (s1.CompareTo(s2)) > 0 )
{
System.Console.Write(”Bo”);
}
else
{
System.Console.Write(”Hans”);
}
Vad skrivs ut??
Abelli, B. (2004). Programmeringens Grunder – med exempel i C#. Lund: Studentlitteratur
25
Selektion – if-else/switch
JSP
Flödesdiagram
Program
villkor
Alternativ 1
Alternativ 2
(alt 1)
o
bearbetning
(alt 2)
o
bearbetning
(alt 3)
o
bearbetning
Alternativ 3
Abelli, B. (2004). Programmeringens Grunder – med exempel i C#. Lund: Studentlitteratur
bearbetning
bearbetning
bearbetning
26
Selektion – if-else/switch
JSP
Flödesdiagram
Start
SwitchTest
Läs in
antal
Läs in antal
(antal = 1)
Antal-koll
(antal = 2)
o
Skriv ut
”Nu är det galet
igen”
Skriv ut
”OK, det
stämde”
antal
?
1
o
2
o
Skriv ut
”Hmm, så ska
det inte vara”
Skriv ut
”Nu är det
galet igen”
Skriv ut
”OK, det
stämde”
annat
Skriv ut
”Hmm, så
ska det inte
vara”
Stopp
Abelli, B. (2004). Programmeringens Grunder – med exempel i C#. Lund: Studentlitteratur
27
Sekvens – switch
public class SwitchTest
{
public static void Main ()
{
int antal = int.Parse( System.Console.ReadLine() );
switch ( antal )
{
case 1 :
System.Console.WriteLine(“Nu är det galet igen!");
break;
case 2 :
System.Console.WriteLine(“OK, det stämde!");
break;
default :
System.Console.WriteLine(“Hmm, så ska det inte vara!");
break;
}
}
}
Abelli, B. (2004). Programmeringens Grunder – med exempel i C#. Lund: Studentlitteratur
28
Sekvens – if-else
public class IfTest
{
public static void Main ()
{
int antal = int.Parse( System.Console.ReadLine() );
if (antal == 1 )
{
System.Console.WriteLine(“Nu är det galet igen!");
}
else if (antal == 2)
{
System.Console.WriteLine(“OK, det stämde!");
}
else
{
System.Console.WriteLine(“Hmm, så ska det inte vara!");
}
}
}
Abelli, B. (2004). Programmeringens Grunder – med exempel i C#. Lund: Studentlitteratur
29
Iteration
Iteration
JSP
Flödesdiagram
Stomme
falskt
villkor
(villkor)
bearbetning
*
sant
bearbetning
Abelli, B. (2004). Programmeringens Grunder – med exempel i C#. Lund: Studentlitteratur
31
JSP
WhileLoop
summa=0
antal =0
Läs in tal
Talstomme
(tal <> 999)
Tal-bearbetning*
summa = summa + tal
medel = summa / antal
antal = antal +1
Skriv ut
medel
Läs in tal
Flödesdiagram
Start
sant
tal =
999
summa = 0
Medel =
summa /
antal
Skriv ut
medel
falskt
antal = 0
Läs in
tal
summa = summa +
tal
Stopp
antal = antal +1
Läs in tal
Abelli, B. (2004). Programmeringens Grunder – med exempel i C#. Lund: Studentlitteratur
32
Iteration – while
public class WhileLoop
{
public static void Main ()
{
double summa = 0;
int antal = 0;
int tal = int.Parse( System.Console.ReadLine() );
while ( tal != 999 )
{
summa = summa + tal;
antal++;
tal = int.Parse( System.Console.ReadLine() );
}
double medel = summa / antal;
System.Console.WriteLine(“Medel = “ + medel);
}
}
Abelli, B. (2004). Programmeringens Grunder – med exempel i C#. Lund: Studentlitteratur
33
Ett återkommande mönster
Standarditeration
Initiering av
uttrycket för villkoret
(villkor)
...
Förändring av
uttrycket för
villkoret
Iterationen i exemplet
-
iteration
Inläsning av tal
*
(tal är inte 999)
-
iteration
*
Inläsning av tal
...
Abelli, B. (2004). Programmeringens Grunder – med exempel i C#. Lund: Studentlitteratur
...
34
Ett återkommande mönster
Initiering av
uttrycket för
villkoret
villkor
Inläsning av tal
sant
falskt
…
Förändring av
uttrycket för villkoret
sant
tal =
999
falskt
…
Inläsning av
tal
…
Abelli, B. (2004). Programmeringens Grunder – med exempel i C#. Lund: Studentlitteratur
35
Iteration – do-while
JSP
Flödesdiagram
Stomme
bearbetning
(villkor)
bearbetning
*
villkor
sant
falskt
Abelli, B. (2004). Programmeringens Grunder – med exempel i C#. Lund: Studentlitteratur
36
JSP
Flödesdiagram
Iteration – do-while, exempel
Start
DoLoop
Sätt fortsätt till ’n’
Sätt fortsätt till ’n’
Skriv ut
datum
(fortsätt = y)
*
Läs in
fortsätt
Skriv ut
datum
Läs in fortsätt
fortsätt
y
n
Stopp
Abelli, B. (2004). Programmeringens Grunder – med exempel i C#. Lund: Studentlitteratur
37
Iteration - for
JSP
Flödesdiagram
Stomme
villkor
(x ggr)
bearbetning
*
x ggr
bearbetning
Abelli, B. (2004). Programmeringens Grunder – med exempel i C#. Lund: Studentlitteratur
38
Iteration – vad for gör – egentligen…
JSP
Flödesdiagram
initiering
initiering
(villkor)
bearbetning
-
-
*
loopslut
villkor
bearbetning
Abelli, B. (2004). Programmeringens Grunder – med exempel i C#. Lund: Studentlitteratur
loopslut
39
Iteration – men ibland kan vi uttrycka for enklare…
JSP
Flödesdiagram
-
(100 ggr)
bearbetning
*
100 ggr
bearbetning
Abelli, B. (2004). Programmeringens Grunder – med exempel i C#. Lund: Studentlitteratur
40
Iteration - foreach
JSP
Flödesdiagram
Stomme
villkor
*
(för varje x i y)
Bearbetning
för varje x i y
Bearbetning
Abelli, B. (2004). Programmeringens Grunder – med exempel i C#. Lund: Studentlitteratur
41
Iteration – break, continue
Abelli, B. (2004). Programmeringens Grunder – med exempel i C#. Lund: Studentlitteratur
42
Rekursiva metoder
JSP
Inparametrar:
rot, av typen DirectoryInfo
nivå, heltal
Directories
Skapa en sträng indent
med längden nivå
Skriv ut indent och
DirectoryInfo
Rekursiv Iteration
v = rot.GetDirectories()
(för varje nod i v)
*
Directories
(nod, nivå)
Abelli, B. (2004). Programmeringens Grunder – med exempel i C#. Lund: Studentlitteratur
43
Rekursiva metoder
Flödesdiagram
Directories
Inparametrar:
rot av typen DirectoryInfo
nivå, heltal
Skapa en sträng indent
med längden nivå
Skriv ut indent och
DirectoryInfo
villkor
för varje nod i v
v = rot.GetDirectories()
Directories
(nod, nivå + 1)
Stopp
Abelli, B. (2004). Programmeringens Grunder – med exempel i C#. Lund: Studentlitteratur
44
Fällor
• Har du nollställt de variabler du använder innan
du går in i en ny iteration?
• Tänk särskilt på vad det är för värden i de
variabler som ingår i olika villkor.
• I synnerhet i villkorssatser för iterationer, eftersom du
annars kan hamna i en oändlig loop!
• Skrivbordstesta!
Abelli, B. (2004). Programmeringens Grunder – med exempel i C#. Lund: Studentlitteratur
45
Diagram för metoder
JSP
Flödesdiagram
Inparametrar:
a och b (heltal)
Inparametrar:
a och b (heltal)
Max
a>b
returnera r
r=a
(a > b)
r=a
Max
o
r=b
r=b
o
Returnera r
Abelli, B. (2004). Programmeringens Grunder – med exempel i C#. Lund: Studentlitteratur
46
Diagram för metoder
JSP
Flödesdiagram
Inparametrar:
a och b (heltal)
Inparametrar:
a och b (heltal)
Max
Start Max
a>b
(a > b)
Returnera a
o
Returnera b
o
Returnera a
Abelli, B. (2004). Programmeringens Grunder – med exempel i C#. Lund: Studentlitteratur
Returnera b
47
Diagram för metoder
JSP
Flödesdiagram
Start Main
Main
Inläsning
av tal x
Inläsning
av tal y
z = Max(x, y)
Inläsning av
tal x
Inläsning av
tal y
z = Max(x,
y)
Skriv ut
z
Abelli, B. (2004). Programmeringens Grunder – med exempel i C#. Lund: Studentlitteratur
Skriv ut z
Stopp
48
Fler exempel
Statlig inkomstskatt
• Definiera problemet (Ur ”Dags att deklarera”):
”Om din beskattningsbara förvärvsinkomst är
lägst 100 kr men högst 209 100 kr, betalar du
200 kr i statlig inkomstskatt. Om din
beskattningsbara förvärvsinkomst är högre
än 209 100 kr, betalar du statlig inkomstskatt
med 200 kr plus 25% av den del som
överstiger 209 100 kr.”
Abelli, B. (2004). Programmeringens Grunder – med exempel i C#. Lund: Studentlitteratur
50
Statlig inkomstskatt
• Planera för lösningen
• Vid körning av programmet skall man ges tillfälle att mata in
den beskattningsbara förvärvsinkomsten.
• När användaren matat in den aktuella inkomsten skall den
statliga inkomstskatten skrivas ut, föregången av texten ”Den
statliga skatten blir:”
• Vi förutsätter att den inmatade inkomsten är ett heltal.
• Man ska kunna göra godtyckligt många beräkningar utan att
behöva starta programmet igen. För att markera avslutning
ska ett negativt belopp matas in.
Abelli, B. (2004). Programmeringens Grunder – med exempel i C#. Lund: Studentlitteratur
51
Strukturerad Programmering
Start
Mata in
inkomst
[>= 0]
inkomst
[< 0]
Slut
Beräkning
Skriv ut
skatt
Abelli, B. (2004). Programmeringens Grunder – med exempel i C#. Lund: Studentlitteratur
52
Strukturerad Programmering
Beräkning
Start
inkomst
[>= 0 and < 100]
[>= 100 and < 209100]
skatt = 0
skatt = 200
[>= 209100]
skatt = 200 + 25%
Slut
Abelli, B. (2004). Programmeringens Grunder – med exempel i C#. Lund: Studentlitteratur
53
Strukturerad Programmering
Start
Mata in
inkomst
inkomst
[< 0]
Slut
[>= 0 and < 100]
[>= 100 and < 209100]
skatt = 0
skatt = 200
[>= 209100]
skatt = 200 + 25%
Skriv ut
skatt
Abelli, B. (2004). Programmeringens Grunder – med exempel i C#. Lund: Studentlitteratur
54
Statlig inkomstskatt
Start
Tills inkomst < 0
Mata in
inkomst
*
Kolla
inkomst
Skriv ut
skatt
[negativt tal]
[< 100]
o
[>= 100och < 209100]
o
negativ
ingen
Avsluta
Skatt = 0
[> 209100]
låg
o
Skatt =
200
Abelli, B. (2004). Programmeringens Grunder – med exempel i C#. Lund: Studentlitteratur
hög
o
Skatt = 200
+ 25%
55
Strukturerad Programmering
•
Pseudokod:
REPETERA
Läs in inkomst
OM inkomst < 0
avbryt exekveringen
ANNARS OM inkomst > 209100
skatt = 200 + 0.25 * (inkomst - 209100)
ANNARS OM inkomst >= 100
skatt = 200
ANNARS
skatt = 0;
OM-SLUT
Skriv ut "Den statliga skatten blir: " + skatt
LOOP-SLUT
Abelli, B. (2004). Programmeringens Grunder – med exempel i C#. Lund: Studentlitteratur
56
Strukturerad Programmering
int skatt, inkomst;
while (true)
{
Console.Write ("Ange den beskattningsbara inkomsten: ");
inkomst = int.Parse( Console.ReadLine() );
if (inkomst < 0)
{
return;
}
else if (inkomst > 209100)
{
skatt = (int) (200 + 0.25 * (inkomst - 209100));
}
else if (inkomst >= 100)
{
skatt = 200;
}
else
{
skatt = 0;
}
Console.WriteLine("Den statliga skatten blir: " + skatt);
}
Abelli, B. (2004). Programmeringens Grunder – med exempel i C#. Lund: Studentlitteratur
57
Strukturer - poster
class Bok
{
public string titel;
public string författare;
public float pris;
}
class BokTest
{
public static void Main ( )
{
Bok programmeringsbok = new Bok();
programmeringsbok.titel = ”C# från grunden”;
System.Console.WriteLine(programmeringsbok.titel);
}
}
Abelli, B. (2004). Programmeringens Grunder – med exempel i C#. Lund: Studentlitteratur
58
Strukturer - poster
Även poster kan beskrivas med strukturdiagram
class Bibliotek
{
public Bok[] böcker;
}
class Bok
{
public string titel;
public string författare;
public float pris;
}
Vad är den totala
inköpssumman för
alla böckerna?
titel
Bibliotek
*
Bok
författare
Abelli, B. (2004). Programmeringens Grunder – med exempel i C#. Lund: Studentlitteratur
pris
59
Strukturer - poster
Vi börjar med
att renodla vad
vi behöver
använda i
algoritmen.
Summering
summa = 0
Skriv ut
summa
Bibliotek
Som du ser
följer vi helt
enkelt den
struktur som
redan finns!
Vad är den totala
inköpssumman för
alla böckerna?
Abelli, B. (2004). Programmeringens Grunder – med exempel i C#. Lund: Studentlitteratur
(Så länge det
finns böcker)
*
Bok
summa =
pris
summa + pris
60
Strukturer - poster
Vad är den totala inköpssumman för alla böckerna?
class Bok
{
public string titel;
public string författare;
public float pris;
}
class Bibliotek
{
public static void Main()
{
Bok[] böcker = new Bok[2];
double summa = 0;
böcker[0] = new Bok( );
böcker[0].titel = "AAA";
böcker[0].författare = "AAA";
böcker[0].pris = 100;
böcker[1] = new Bok( );
böcker[1].titel = "BBB";
böcker[1].författare = "BBB";
böcker[1].pris = 200;
for (int i = 0; i < böcker.Length; i++)
{
summa = summa + böcker[i].pris;
}
System.Console.WriteLine(summa);
}
}
Abelli, B. (2004). Programmeringens Grunder – med exempel i C#. Lund: Studentlitteratur
61
Strukturerad Programmering
• Pseudokod (exempel ”studenterna”):
skriv ut rubrik
sätt räknare till 0
läs in 1:a studentens resultat
REPETERA så länge studentens resultat
är större än eller lika med 0
läs in studentens namn
skriv ut namn och resultat
OM totalpoäng är mindre än 60
lägg 1 till räknaren
OM-SLUT
läs in studentens resultat
REPETERA-SLUT
skriv ut antalet underkända studenter
Abelli, B. (2004). Programmeringens Grunder – med exempel i C#. Lund: Studentlitteratur
62
Strukturerad Programmering
• Pseudokod (exempel ”studenterna”):
start
A
Skriv
rubrik
resultat
>= 0
falskt
Skriv
antal
sant
antal = 0
Läs 1.a
resultat
A
Läs
namn
start
Skriv
namn, poäng
resultat
< 60
sant
antal =
antal + 1
falskt
Läs
resultat
Abelli, B. (2004). Programmeringens Grunder – med exempel i C#. Lund: Studentlitteratur
63
Strukturerad Programmering
• Pseudokod (exempel ”studenterna”):
Start
Skriv
rubrik
antal = 0
Bearbeta
alla
Läs resultat
Skriv
antal
Bearbeta *
en student
Läs
namn
Skriv
namn, resultat
antal o
= antal + 1
Abelli, B. (2004). Programmeringens Grunder – med exempel i C#. Lund: Studentlitteratur
Läs
resultat
resultat?
----
o
64
Strukturerad Programmering
class Student
{
public string namn;
public int poäng;
}
class Studentpoäng
{
public static void Main ( )
{
int antal;
Student student = new Student();
Console.WriteLine(”Skriv ut antalet underkända studenter”);
antal = 0;
Console.Write("Ange studentens resultat");
student.poäng = int.Parse( Console.ReadLine() );
while (student.poäng >= 0)
{
Console.Write("Ange studentens namn");
student.namn = Console.ReadLine();
Console.WriteLine(student.namn + ” ” + student.poäng);
if (student.poäng < 60) antal++;
Console.Write("Ange studentens resultat");
student.poäng = int.Parse( Console.ReadLine() );
}
Console.WriteLine("antalet undergända studenter är = " + antal);
}
Abelli,}B. (2004). Programmeringens Grunder – med exempel i C#. Lund: Studentlitteratur
65