30
Programmering 1 C# Magnus Lilja Ulrik Nilsson

Programmering 1 C#

  • Upload
    gleerups

  • View
    4.684

  • Download
    837

Embed Size (px)

DESCRIPTION

Programmering 1 C#

Citation preview

Programmering 1

C#Magnus Lilja Ulrik Nilsson

Programmering 1 C#

I din hand håller du ett läromedel från Gleerups.

Gleerups författare är lärare med erfarenhet från klassrummet.

Lärare och elever hjälper till att utveckla våra läromedel genom

värdefulla synpunkter på både innehåll och form.

Vi förankrar våra läromedel i skolan där de hör hemma.

Gleerups läromedel är alltid utvecklade i samarbete med dig!

Har du som användare frågor eller åsikter, kontakta oss gärna på telefon 040-20 98 00 eller via www.gleerups.se

Författare till detta läromedel är Magnus Lilja och Ulrik Nilsson.

Tack till Ann-Sofie Ingelsson och Kristian Strid som har hjälpt till med granskning

och gett många konstruktiva synpunkter.

Gleerups Utbildning AB Box 367, 201 23 Malmö Kundservice tfn 040-20 98 10 Kundservice fax 040-12 71 05 e-post [email protected] www.gleerups.se

Programmering 1 – C# © 2012 Magnus Lilja, Ulrik Nilsson och Gleerups Utbildning AB Gleerups grundat 1826

Redaktör Per-Olof Bergmark Formgivning Jakob Meijling Bilder inlaga Photodisc®

Omslagsbild Sergei Didyk/iStockphoto®

Första upplagan, första tryckningen ISBN 978-91-40-67402-9

Kopieringsförbud! Detta verk är skyddat av upphovsrättslagen! Kopiering, utöver lärares rätt att kopiera för undervisningsbruk enligt BONUS-Presskopias avtal, är förbjuden. Ingen del av materialet får lagras eller

spridas i elektronisk (digital) form. BONUS-Presskopias avtal tecknas mellan upphovsrättsorganisationer och huvudman för utbildningsanordnare, t ex kommuner/universitet. För information om avtalet hänvisas till utbildningsanordnarens huvudman eller BONUS-Presskopia. Den som bryter mot lagen om upphovsrätt kan åtalas av allmän åklagare och dömas till böter eller fängelse i upp till två år samt bli skyldig att erlägga ersättning till upphovsman/rättsinnehavare.

PrePress Namn, ort och årtal. Tryck Namn, ort och årtal.

Föro

rd

Den här boken riktar sig mot nybörjaren i programmering. Det krävs inga förkunska-per annat än lite datorvana för att kunna installera nödvändig programvara. Boken är främst avsedd att användas som kurslitteratur till gymnasiekursen Programmering 1, och innehållet följer skolverkets beskrivning av kursen enligt Gy 2011. Boken kan också vara till god hjälp för den som vill lära sig programmering på egen hand.

Programmeringsspråket som används är C# (uttalas C-sharp på engelska). Det är ett modernt språk med massor av möjligheter, som samtidigt är enklare att både lära sig och använda än många andra språk. C# har stora likheter med C++ och Java, och kan därför vara intressant även för den som vill lära sig dessa språk. De tre språken tillhör samma familj och kan man ett språk, är steget litet att lära sig de andra.

Boken är upplagd så att den underlättar självständiga studier. Teorin delas upp i lagom små bitar som varvas med exempel, övningar och teorifrågor. Till övningarna och frågorna finns facit sist i boken. Kapitlen avslutas med sammanfattning, repeti-tionsfrågor och ytterligare programmeringsuppgifter.

Kapitlen är skrivna i en ordning som författarna anser lämplig att följa. Det är dock inte strängt nödvändigt att följa alla kapitel från början till slut i den ordning de står. Vissa avsnitt kan mycket väl flyttas fram eller bak om så önskas. Särskilt grunderna i felhantering, som dyker upp i början av sista kapitlet, kan med fördel studeras mycket tidigare. De mest grundläggande kapitlen är 2–5 och 7–11 och bör göras i ordning. En del övningar i kapitel 9 och fram använder kunskaper i grafik från kapitel 8.

Någon gång efter kapitel 9–11 (beroende på ambitionsnivå) har man kommit så långt, att det kan vara lämpligt och roligt att prova något lite större, egendesignat projekt.

Programmering är fantastiskt roligt och utmanande. Det kan vara både vetenskap, teknik och konst i en skön blandning. Att se spännande idéer förverkligade med krea-tiv logik i ett estetiskt tilltalande program som man skapat själv är mycket tillfreds-ställande. En pedagogisk ådra hjälper till att göra programmen så självbeskrivande och lättanvända som möjligt.

Med bästa lyckönskningar,

Magnus Lilja och Ulrik Nilsson

3

Inn

eh

åll

Förord 3

1. Introduktion 6

1.1 Grunder 7

1.2 Datorns funktion 9

1.3 Programstruktur 11

1.4 Om den här boken 12

Repetitionsfrågor 13

Uppgifter 13

2. Introduktion till utvecklings miljön Visual C# 2010 14

2.1 Visual C# 15

2.2 Ett första exempel 17

2.3 Ett C#-programs struktur 20

2.4 Olika typer av fel 22

Sammanfattning 23

Repetitionsfrågor 24

Uppgifter 25

3 Variabler 26

3.1 Grunder 27

3.2 Deklaration 29

3.3 Tilldelning 29

3.4 Typomvandlingar 30

3.5 Tal 32

3.6 Text 34

3.7 Tecken 36

3.8 Unicode 37

3.9 Objekt 40

Sammanfattning 42

Repetitionsfrågor 44

Uppgifter 45

4. Felsökning 46

Sammanfattning 51

5. Operatorer 52

5.1 Grunder 53

5.2 Aritmetiska operatorer 53

5.3 Tilldelande aritmetiska operatorer 56

5.4 Förändringsoperatorer 56

5.5 Relationsoperatorer 58

5.6 Logiska operatorer 60

5.7 Prioriteringsregler 63

Sammanfattning 65

Repetitionsfrågor 66

Uppgifter 67

6. Aktivitetsdiagram och pseudokod 68

6.1 Algoritmer och pseudokod 69

6.2 Kontrollstrukturer 70

6.3 Aktivitetsdiagram 71

Sammanfattning 75

Repetitionsfrågor 76

Uppgifter 77

7. Villkorssatser 78

7.1 if-else 79

7.2 if 84

7.3 if – else if 87

7.4 switch-case 90

7.5 Att jämföra strängar 93

7.6* Villkorsoperatorn ? : 95

Sammanfattning 98

Repetitionsfrågor 100

Uppgifter 102

8. Grafiska gränssnitt och grafik 104

8.1 Grafiska gränssnitt 105

8.2 Grafik 112

Sammanfattning 116

Repetitionsfrågor 118

Uppgifter 119

4

Inn

eh

åll

9. Repetition 122

9.1 While 123

9.2 Do-while 126

9.3 For 127

9.4 Nästlade loopar 129

9.5 Continue och break 131

9.6 Fält 132

Sammanfattning 138

Repetitionsfrågor 139

Uppgifter 141

10. Metoder 142

10.1 Att skriva och anropa en metod 143

10.2 Metoder med flera parametrar 146

10.3 Värdeparametrar 148

10.4 Metoder utan returvärde 150

10.5 Referens och out-parametrar 152

10.6 Fält som parameter 156

Sammanfattning 158

Repetitionsfrågor 160

Uppgifter 162

11. Klasser 164

11.1 Grunder 165

11.2 Att skapa en klass 166

11.3 Att använda en klass 168

11.4 Metoder 170

11.5 Konstruktorer 174

11.6 Egenskaper 175

11.7 Mushändelser 179

11.8 Referenser 181

11.9* Arv 184

Sammanfattning 186

Repetitionsfrågor 188

Uppgifter 189

12. Sortering och sökning 190

12.1 Sortering 191

12.2 Bubbelsortering 193

12.3 Sökning 195

Sammanfattning 198

Repetitionsfrågor 199

Uppgifter 199

13. Samlingar 200

13.1 List 201

13.2 Stack 206

13.3 Kö 210

Sammanfattning 214

Repetitionsfrågor 215

Uppgifter 216

14. Rekursiva metoder 218

14.1 Summor och produkter 219

14.2 Talföljder 222

14.3 Fält 225

14.4 Ett grafiskt exempel 228

Sammanfattning 232

Repetitionsfrågor 233

Uppgifter 234

15. Felhantering 236

15.1 Inmatning 237

15.2 Undantagsfel 238

15.3* Strukturerad felhantering 239

16. Facit till teorifrågor och övningar 242

Register 287

5

Something mysterious is formed, born in the silent void. Waiting alone and unmoving, it is at once still and yet in constant motion.

It is the source of all programs. I do not know its name, so I will call it the Tao of Programming.

If the Tao is great, then the operating system is great. If the operating system is great, then the compiler is great.

If the compiler is great, then the application is great. The user is pleased and there exists harmony in the world.

The Tao of Programming flows far away and returns on the wind of morning.

The Tao of Programming

1Introduktion6

1. Intro

du

ktion

1.1 GrunderEn dator är en på många sätt fantastisk maskin. Den är olik de flesta andra maskiner som människan använt genom historien. Dessa maskiner har varit konstruerade för att utföra en speciell arbetsuppgift. En del av dem har varit ganska komplicerade och sinnrika, men de har fortfarande bara kunnat användas till en enda sak. Vind-möllorna kunde mala mjöl. Ångmaskinen gav mekanisk kraft och radioapparaterna kunde omvandla radiovågor till ljud.

Hårdvara

En dator däremot är sällan konstruerad för ett speciellt ändamål. Datorer används för att styra andra maskiner, kommunicera, övervaka, underhålla, för att lagra stora mängder information och för många andra ändamål. Men alla dessa datorer, fastän de kommer i olika storlekar och skepnader, är principiellt lika under skalet. De inne-håller en eller flera processorer, chip och andra elektroniska komponenter, sådant som vi brukar kalla hårdvara. Men det finns inte många processorer som bara kan visa film, eller bara kan öppna och stänga en dörr. Om man till exempel vill övervaka och styra in- och utpassering genom dörrarna i en byggnad kan man i stora drag köpa vilken dator som helst. Samma dator kan förmodligen dessutom användas till att visa film, skicka e-post och mycket annat.

Mjukvara

För att få en dator att utföra en speciell uppgift krävs ett speciellt program. Program kallas även för mjukvara. Ett program är en mängd instruktioner som talar om vad datorn ska göra. Om en knappsats vid en dörr skickar en sifferkombination till en dator kan processorn till exempel svara med en signal till motorlåset i dörren. Men samma siffror från en film i diskläsaren innehåller förmodligen färgen på en pixel. För att en pixel på skärmen ska tändas med denna färg behövs istället ett helt annat pro-gram, ett program som skickar en signal till grafikkortet istället för till dörren.

Maskinkod

Det finns bara ett begränsat antal operationer till varje processortyp. Operationerna är väldigt enkla, till exempel ”Flytta tal A till adress 10” där adress 10 kan vara en plats i datorns minne, en pixel på skärmen eller ett motorlås i en dörr, eller någon annan elektronisk krets som är ansluten till datorn. Andra operationer är till exempel ”addera tal A och B” eller ”jämför tal A med B”. Dessa grundläggande operationer kal-las för datorns maskinkod, fast i realiteten består de av siffror. Addera kan ha maskin-koden 03. Genom att kombinera instruktionerna på olika sätt kan man få datorn att utföra en viss uppgift. Att få ett program att visa en enkel figur på skärmen kräver till exempel en hel mängd operationer.

Högnivåspråk

Ett modernt program innehåller hundratusentals eller miljontals maskinspråks-instruktioner. Att skriva ett större program på maskinspråk skulle vara näst intill omöjligt. Därför har man uppfunnit programmeringsspråk vars kommandon liknar vanligt människospråk. De kallas högnivåspråk för att skilja dem från maskinspråk. Man kan till exempel skriva saker som ”A+B” för att addera två tal, eller ”DrawRec-tangle” för att visa en rektangel på skärmen. Det finns och har funnits ganska många olika högnivåspråk. Ett av de nyare är för tillfället C# (uttalas c-sharp på engelska). C# är en vidareutveckling av Java och C++, som i sin tur är en vidareutveckling av C. Andra kända språk är Visual Basic och Pascal.

7

1. In

tro

du

ktio

n Kompilering

Högnivåspråk skrivs i vanliga textfiler och kallas för källkod. Källkoden måste översät-tas till maskinspråk innan de kan användas av en processor. Översättningen kan ske i flera steg och kallas kompilering. Kompilering genererar vanligen filer med filändelsen .exe om programmet ska köras på Windows-datorer, eller .app om programmet ska köras på Macintosh-datorer. Om man vill att programmet ska kunna köras på både Windows och Mac (eller andra operativsystem) är det vanligt att låta varje dator som ska köra programmet själv göra det sista översättningssteget. Det kallas för interpre-tering eller ”just-in-time” kompilering (JIT).

Bilden nedan visar hur översättningen fungerar i Visual C# för ett spel som heter Pac-man, bara för att ta ett exempel. CIL betyder Common Intermediate Language och är ett mellansteg mellan källkod och maskinkod.

Microsoft Visual C# och .NET

Microsoft Visual C# är ett program för att skapa andra program. Expressversionen är gratis och finns att ladda ner från internet. Microsoft Visual C# är en del av en platt-form som kallas .NET. Plattformen består av ett antal filer och innehåller bland annat färdigskrivna programbitar. Många uppgifter som ett program ska kunna genomföra är rutinmässiga, som till exempel att spara data till en fil på hårddisken. För att slippa skriva samma kod varje gång man vill lägga till en spara-funktion använder man istäl-let spara-funktionen i .NET. Det betyder att alla program du skriver i C# är beroende av .NET-plattformen. De går inte att köra på datorer som saknar .NET.

8

Programmerarens dator

kompilering

Programmet distribueras via internet eller diskar

JIT

Spelarens dator

Källkod

pacman.cs

CIL CIL

pacman.exepacman.exe

Maskinkod

��b���U

Thus spake the master programmer:

– Without the wind, the grass does not move. Without software, hardware is useless.

The Tao of Programming

1. Intro

du

ktion

1.2 Datorns funktionMan behöver inte vara någon datortekniker för att kunna programmera, men man måste känna till de tre komponen-terna processorn, arbetsminnet och hårddisken.

På hårddisken finns data lagrat i magnetiska spår. Datan är uppdelad i filer. Hårddisken är till för att spara data när datorn är avstängd, fast den kan också användas som reserv till arbetsminnet.

När en fil öppnas laddas den till arbetsminnet. I arbetsmin-net lagras också all data som strömmar in i datorn från dess olika portar, där till exempel tangentbordet och musen är anslutna. Arbetsminnet kallas även RAM-minne, primärminne eller internminne. Det är direktkopplat till processorn.

Processorn läser data från arbetsminnet, genomför operationer och skickar tillbaka svaret till arbetsminnet. Processorn kan liknas vid datorns hjärna. Men den tänker inte, den följer bara programmets instruktioner.

Låt oss studera hur processorn och arbetsminnet arbetar tillsammans med ett exem-pel. Antag att du öppnar programmet Kalkylatorn (filen calc.exe) för att räkna ut vad 4 + 3 blir.

Programfönster

Användaren Processorn

1 Startar programmet Ritar fönstret, reserverar plats i minnet och väntar sedan på input.

2 Klickar på knappen 4 Lagrar värdet 4 i arbetsminnet (på reserverad plats A).

3 Klickar på knappen + Lagrar värdet ’+’ i arbetsminnet (på reserverad plats B).

4 Klickar på knappen 3 Lagrar värdet 3 i arbetsminnet (på reserverad plats C).

5 Klickar på knappen = Undersöker värdet i B.Väljer operationen ADD och läser in värdena i A och C.Skickar tillbaka värdet 7 till arbetsminnet (D).Ritar om fönstret med värdet i D i textrutan.Hoppar tillbaka i instruktionskön till den plats där den väntar på input.

9

Skrivhuvud

Fil

Skiva

Arbetsminne

73+4

A B C D

1. In

tro

du

ktio

n

Lägg märke till följande:

Programmet calc.exe innehåller instruktionerna till vad processorn ska göra. >

Programmet är händelsestyrt. Om användaren inte gör något händer inget. >

Programmet är sekventiellt. Alla instruktioner genomförs en i taget i en given >ordning.

Programmet är repeterbart. Processorn kan hoppa till olika instruktioner, även bakåt, >och på så sätt göra om samma sak många gånger.

Minnet delas in i mindre platser som kallas för > variabler, där varje plats ges ett unikt namn och har utrymme för ett värde.

Som programmerare bryr man sig sällan om vad som händer i processorn, men det är bra att ha lite koll på vad som händer i arbetsminnet när man reserverar plats och skickar runt värden mellan platserna. Hur detta går till beskrivs i kapitlet om variabler, men du kommer förmodligen att förstå programmering mycket bättre om du redan nu lär dig att tänka på en variabel som en minnesplats som innehåller ett värde.

10

1. Intro

du

ktion

1.3 ProgramstrukturEn text är uppbyggd av meningar som delas in i avsnitt med olika rubriker, som i den vänstra spalten nedan. På samma sätt är programkod uppbyggd av satser och programblock, som i den högra spalten. Koden här är inte riktig kod, utan en sorts halvkod som bara visar strukturen. Precis som man avslutar en mening med punkt måste man avsluta en sats med semikolon (;).

Vanlig text

Rubrik 1

Mening 1. Mening 2. Mening 3.

Rubrik 2

Mening 4. Mening 5.

Programkod

Programblock 1 { Sats 1; Sats 2; Sats 3; }

Programblock 2 { Sats 4; Sats 5; }

Lägg märke till att programblocket består av en rubrik som kallas för programblock-ets huvud, följt av en klammerparentes { } som innehåller programblockets satser.

Mellan satserna kan man ha hur många mellanslag, tabbar eller tomma rader man vill. Mellanslag, tabbar och tomma rader gör det lättare att läsa koden, men de kompile-ras inte till maskinkoden. Kompilatorn bestämmer vad som tillhör programblocket bara med hjälp av klammerparenteserna.

Eftersom kod är svårare att läsa än vanlig text brukar man göra block-strukturen lättare att se genom att bara skriva en sats per rad, och dess-utom indentera satserna med en tab eller några mellanslag. Då ser det ut så här:

Programblock 1 { Sats 1; Sats 2; Sats 3; }

Programblock 2 { Sats 4; Sats 5; }

Fördelen med indentering blir sär-skilt tydlig när man har program-block inuti varandra:

Programblock 3 { Sats 1; Sats 2;

Programblock 3A { Sats 3; Sats 4; } }

11

1. In

tro

du

ktio

n Alla satser i ett programblock utförs i den ordning de står, men programblocken behöver inte köras i ordning. Ett programblock kanske körs när användaren klickar på en knapp i programmets fönster. Ett annat programblock körs när användaren klickar på en annan knapp. Då är det användaren som bestämmer vilken ordning blocken körs i. Därför är det väldigt viktigt att använda indentering så att man lätt ser vilka satser som utförs tillsammans.

Det finns olika sorters programblock. Vissa kan man skriva i en egen fil, medan andra vanligen står inuti ett yttre programblock. Nedanstående översikt ger en tjuvtitt på några olika sorters programblock som du kommer att stöta på i boken.

Metod

En metod innehåller oftast bara variabler och satser.

Klass (class)

En klass innehåller oftast bara variabler och metoder, men kan även innehålla andra klasser, som då kallas nästlade klasser. Vanligen skriver man klasser i separata filer.

Namnrymd (namespace)

En namnrymd innehåller framför allt klasser, men kan även innehålla andra namn-rymder. Som programmerare väljer man namn på sina egna klasser, och varje namn måste vara unikt. Det får inte finnas två klasser med samma namn i ett program. I större program med många klasser kan det bli svårt att välja bra och beskrivande namn till alla. Då används namnrymder.

1.4 Om den här bokenI bokens text står det ibland om användaren. Med användaren menas den person som ska köra programmet, till skillnad från programmeraren som skapar program-met. Det är du som är programmerare, men du blir förstås användare när du testar dina program.

Boken är upplagd så att teori varvas med exempel, övningar och frågor. Övningar är sådana som du ska programmera i Visual Studio. Frågorna behöver du bara fundera över och svara på i boken eller ett anteckningsblock.

I slutet av varje kapitel finns en sammanfatting, repetitionsfrågor och uppgifter. Du gör dem på samma sätt som övningarna inne i kapitlet.

12

1. Intro

du

ktion

Repetitionsfrågor

rf 1.1 Vad menas med kompilering?

rf 1.2 Vad innebär det att ett program är händelsestyrt?

rf 1.3 Vad är en variabel?

rf 1.4 Vad har mellanslag, tabbar och rader för betydelse i programkod?

Uppgifter

1.1 Nedan finns halvkod som innehåller kodblock och satser. Strukturera upp koden med rader och indentering så att man lätt ser var ett block börjar och slutar, och vilka block satserna tillhör.

a) Programblock 1{Sats 1; Programblock 2{Sats 2; Sats 3;}}

b) Programblock 1{Sats 1; Sats 2; Programblock 2{Sats 3; Sats 4; Pro-gramblock 3{Sats 5;} Sats 6;}}

13

Visual C# 2010 Express Edition är en utvecklingsmiljö som skapats av Microsoft för att skriva program i C#. Tonvikten i detta kapitel lig­ger på hur denna miljö används för att skapa enkla grafiska program. Kapitlet tar även upp god programmeringsstil och de olika typer av fel du kan råka ut för vid programkonstruktion.

2Introduktion till utvecklingsmiljön Visual C# 2010

14

2. Intro

du

ktion

till utve

ckling

s miljö

n V

isua

l C# 2010

2.1 Visual C#Innan du kan börja skriva dina egna program i C# måste du lära dig använda Visual C#. Det finns andra utvecklingssystem på marknaden men de flesta fungerar på unge-fär samma sätt. Ladda hem Visual C# Express och installera innan du fortsätter. Den här boken använder Visual C# 2010 Express, men andra versioner bör gå att använda utan större svårighet. Oberoende av vilket du använder måste följande steg utföras för att skapa ett program.

1. Skapa ett projekt med de filer som innehåller programmets text, källkoden. En fil med text till ett program kallas källfil och den har ändelsen cs. Exempel på ett filnamn kan vara Exempel02-01.cs.

2. Kompilera källkoden, d v s översätta den till ett körbart program. Vid kompileringen skapas den körbara filen och den får filändelsen exe, till exempel Exempel02-01.exe.

3. Köra programmet. Programkörning kallas också för exekvering.

Skapa ett projekt

1. Starta Visual C#.

2. Välj New Project på File-menyn. I dialogrutan som öppnas anges vilken typ av pro-jekt som ska skapas och vilket namn det ska ha. Välj Windows Forms Application och ge projektet namnet Exempel02-01.

När du klickar på OK-knappen visas detta fönster:

I den vänstra delen finns ett formulär med titeln Form1. Det är detta formu-lär som visas som ett fönster när du kör ditt program. Fönster kallas för form i Visual Studio.

Du kommer att arbeta mest i denna del av utvecklingsmiljön. Här designar du användargränssnittet och skriver källkoden i C#.

15

2. In

tro

du

ktio

n t

ill u

tve

cklin

gs m

iljö

n V

isu

al C

# 20

10

3. Spara projektet genom att välja Save Exempel02-01.sln As på File-menyn. Då visas dialogrutan nedan.

Skriv Exempel02-01 i textrutan Name och MinaProjekt i textrutan Solution Name. I textrutan Location skriver du sökvägen till den mapp där du vill spara dina projekt. Du kan även bläddra dig fram till denna mapp genom att klicka på knappen Browse. Skriver du C:\Programmering1 kommer det att skapas en mapp med namnet Programmering1 direkt på enhet C. Om kryssrutan Create directory for solution är markerad skapas en undermapp med namnet MinaProjekt i mappen Programmering1 och i denna mapp sparas då ditt projekt. Klicka på knappen Save för att spara projektet.

Fönstret Solution Explorer i Visual C# ser nu ut som på bilden till höger.

Solution ’MinaProjekt’ är en så kallad lösningsfil och den innehåller en referens till ditt projekt. En lösningsfil kan hålla reda på flera projekt.

Exempel02-01 är en projektfil och den håller bland annat reda på de filer som ingår i ditt projekt. Varje projekt är ett program. När man skapar en programsvit som till exem-pel Office skulle Office kunna vara lösningen och Word, Excel och de övriga programmen som ingår i Office skulle kunna vara de olika projekten.

Form1.cs är en källfil i C# och det är i denna fil du kommer att skriva dina program.

Program.cs är också en källfil i C#. Dess uppgift är att skapa och visa ditt programs huvudfönster.

Om du öppnar mappen MinaProjekt i utforskaren ser du att dess innehåll överrens-stämmer med listan i Solution Explorer. I mappen finns lösningsfilen MinaProjekt och en mapp med namnet Exempel02-01. Mappen Exempel02-01 innehåller bland annat projektfilen Exempel02-01 och källfilerna Form1.cs och Program.cs.

Kompilera källkoden

Innan ett program kan köras måste källkoden kompileras. Vid kompileringen över-sätts källkoden till CIL (Common Intermediate Language) och den lagras i en fil med ändelsen exe. Denna fil kan köras av alla datorer som har .NET.

Du har ännu inte skrivit någon egen källkod men när du gör ett projekt skapas en del källkod automatiskt av Visual C#. Denna kod har till uppgift att skapa och visa ett tomt fönster. Om du högerklickar på formuläret i Visual C# och väljer View Code ser du den automatskapade koden i filen Form1.cs. För att visa formuläret i designläge igen högerklickar du på källkoden och väljer View Designer.

16

2. Intro

du

ktion

till utve

ckling

s miljö

n V

isua

l C# 2010

För att kompilera källkoden väljer du Build Solution på Debug-menyn. Då skapas en fil med namnet Exem-pel02-01.exe och den ligger i mappen Exempel02-01\bin\Release.

Köra programmet

För att köra programmet väljer du Start Debugging på Debug-menyn. Då visas ett tomt fönster med titeln Form1.

Avsluta Visual C# genom att klicka på Exit på File-menyn.

Övning 2.1

Leta upp filen Exempel02-01.exe i mappen Exempel02-01\bin\Release.

Vad händer om du dubbelklickar på filen?

2.2 Ett första exempelProgrammet du ska skriva i detta avsnitt illustreras av de två figurerna nedan. Huvud-fönstret har en knapp med texten Klicka här. Vid klick på denna visas en medde-landeruta med texten Mitt första program.

Skapa ett nytt projekt i Visual C#

Starta Visual C#. Öppna lösningsfilen MinaProjekt genom att klicka på Open Project i File-menyn. I dialogrutan som öppnas bläddrar du dig fram till filen MinaProjekt och dubbelklickar på den.

Skapa ett nytt projekt genom att högerklicka på Solution 'MinaProjekt' i Solution Explorer. Välj sedan Add New Project som bilden visar. I dialogrutan som visas väljer du Windows Forms Application och ger pro-jektet namnet Exempel02-02. För att Exem-pel02-02 ska bli ditt aktiva projekt måste du högerklicka på Exempel02-02 i fönstret Solu-tion Explorer och välja Set as StartUp Project. Detta projekt kommer då att köras när du väljer Start Debugging på Debug-menyn För att visa formuläret som tillhör Exempel02-02 dubbelklickar du på Form1.cs som ligger under Exempel02-02 i Solution Explorer.

17

2. In

tro

du

ktio

n t

ill u

tve

cklin

gs m

iljö

n V

isu

al C

# 20

10

Ställa in egenskaper för formuläret

Ett fönster har flera egenskaper som storlek, bakgrundsfärg och titel. Egenskaperna sätts i fönstret Properties. För att visa detta fönster klickar du på View i menyraden och väljer Other Windows, Properties Window. Formuläret i detta exempel ska ha titeln Exempel och bredden och höjden ska vara 200 pixlar. För att sätta dessa egenskaper markerar du formuläret genom att klicka på det med musen. Leta sedan upp egenska-pen Size i fönstret Properties, klicka på symbo-len framför Size och ge egenskaperna Width och Height värdet 200. Ändra på motsvarande sätt egenskapen Text till Exempel.

Kompilera och kör ditt projekt. Fönstret som då visas har de egenskaper du skrivit in.

Lägga en kontroll på formuläret

De objekt ett grafiskt användargränssnitt består av kallas för kontroller eller fönster-komponenter. Exempel på kontroller är knappar, etiketter och textrutor. I vårt exem-pel finns det en knapp med texten Klicka här. För att lägga till knappen på formu-läret gör du så här.

1. För muspekaren över fliken Toolbox. Då öppnas den så kallade verktygslådan och den innehåller bland annat de kontroller som kan placeras på ett formulär. Som bil-den nedan visar finns bland annat kontrollerna Button och CheckBox, det vill säga knapp och kryssruta.

2. Tryck ned vänster musknapp på kontrollen Button och dra den till mitten av formuläret.

För att underlätta programmeringen ska alla kontroller ges ett beskrivande namn. Knappars namn brukar inledas med btn och ett bra namn på denna knapp kan vara btnKlick. Markera knappen genom att klicka på den och ändra sedan egenskapen Name i fönstret Properties till btnKlick. Ändra även egenskapen Text till Klicka här.

18

2. Intro

du

ktion

till utve

ckling

s miljö

n V

isua

l C# 2010

Koppla en händelse till en kontroll

Kontrollerna som ligger på ett formulär kan kopplas till olika typer av händelser. Ett exempel på en händelse för en knapp är att användaren klickar på den med musen. För att koppla händelsen musklick till din knapp btnKlick gör du så här.

1. Klicka på knappen btnKlick.

2. Klicka på händelseknappen i fönstret Properties. Då visas de händelser knappen kan utsättas för. I fönstret Properties kan du alltså välja mellan att visa knappens egen-skaper eller vilka händelser den kan utsättas för.

För att visa händelserna klickar du på händelseknappen.

För att visa egenskaperna klickar du på egenskapsknappen.

3. Dubbelklicka i textrutan till höger om händelsen Click. Då skapas automatiskt en så kallad metod med namnet, btnKlick_Click och det är denna metod som anropas när användaren klickar på knappen. Formuläret växlar även till kodläge så att du kan skriva källkoden i C#.

Skriva källkod

Skriv av de två raderna nedan som börjar med MessageBox. Det är viktigt att meto-den btnKlick_Click ser ut exakt som nedan. Lägg speciellt märke till det avslu-tande semikolonet.

private void btnKlick_Click(object sender, EventArgs e) { MessageBox.Show("Mitt första program", "Meddelande", MessageBoxButtons.OK, MessageBoxIcon.Information); }

Kompilera och kör programmet. Om du inte kan köra programmet betyder det att du inte har skrivit av programmet korrekt. Ändra då i källkoden så att den ser ut exakt som ovan.

Då programmet körs visas ditt fönster med en knapp. När du klickar på knappen visas meddelanderutan.

För att avsluta programmet måste du först stänga meddelanderutan genom att klicka på OK-knappen. Sedan stänger du formuläret genom att klicka på krysset i det övre högra hörnet.

19

2. In

tro

du

ktio

n t

ill u

tve

cklin

gs m

iljö

n V

isu

al C

# 20

10

2.3 Ett C#-programs strukturNu ska vi titta närmare på programmet från föregående avsnitt. Källkoden i filen Form1.cs visas i Exempel 2.2.

Exempel 2.2

using1 System;using2 System.Collections.Generic;using3 System.ComponentModel;using4 System.Data;using5 System.Drawing;using6 System.Linq;using7 System.Text;using8 System.Windows.Forms;namespace9 Exempel02_02{10 11 public partial class Form1 : Form {12 13 public Form1() {14 InitializeComponent();15 }16 17 private void btnKlick_Click(object sender, EventArgs e) {18 19 MessageBox.Show("Mitt första program", "Meddelande", 20 MessageBoxButtons.OK, MessageBoxIcon.Information); }21 }22 }23

Rad 1–8: Dessa rader läggs automatiskt till källkoden när du skapar ett Windowsprojekt och de gör att du enklare får tillgång till de komponenter som används i programmet. För att visa en meddelanderuta ska man skriva System.Windows.Forms.Message-Box.Show. Om man i stället lägger till using System.Windows.Forms i början av programmet räcker det att skriva MessageBox.Show för att visa meddelanderutan. System.Windows.Forms är en så kallat namnrymd och alla komponenter som är definierade i C# ligger i en namnrymd.

Rad 9–16: Även dessa rader skapas automatiskt av Visual C# och deras exakta innebörd förkla-ras i senare kapitel i boken. I nuläget kan du bara acceptera att dessa rader behövs i alla program du skriver men för helhetens skull ges ändå en kortfattad beskrivning. Alla fönsterprogram i C# har samma grundläggande struktur och då det är ett objekt-orienterat språk bygger det på så kallade klasser. Vårt program består av en klass med namnet Form1. Beskrivningen av klassen inleds med en vänsterklammer på rad 12 och avslutas med en högerklammer på rad 22. Klassen ligger i en namnrymd (name-space) som har fått namnet Exempel02_02, rad 9. På raderna 13 till 16 definieras en så kallad konstruktor och dessa rader körs när fönstret skapas. Anropet Initiali-zeComponent() på rad 15 har till uppgift att sätta egenskaperna för alla kontroller man lagt på sitt formulär. Här får till exempel formuläret titeln Exempel.

20

2. Intro

du

ktion

till utve

ckling

s miljö

n V

isua

l C# 2010

Rad 17–21: Här definieras metoden btnKlick_Click och det är denna metod som körs när du klickar på knappen i fönstret. Mellan vänsterklammern, {, på rad 18 och högerklammern, }, på rad 21 står metodens källkod. Den visar meddelande rutan som visas på bilden till höger.

Till metoden MessageBox.Show skickas de fyra parametrarna ”Mitt första pro-gram”, “Meddelande”, MessageBoxButtons.OK och MessageBox Icon.Information. Om du jämför dessa med bilden ser du att den första bestämmer texten, den andra titeln, den tredje knappen och den fjärde ikonen.

Övning 2.2

Skapa ett projekt med namnet Övning02-02 i Visual C#. Skriv sedan ett program enligt bilden nedan. På huvudfönstret ska det finnas en knapp med texten Medde-lande. När användaren klickar på den ska meddelanderutan visas.

Programmeringsstil

Det är viktigt att de program du skriver är tydliga och lättlästa. Med en bra struktur kommer bl. a. felsökningen av programmet att underlättas avsevärt. Studera därför bokens exempel noggrant och lägg speciellt märke till hur vi använder oss av blank-tecken, tomma rader och indenteringar (indrag av text). Kompilatorn bryr sig inte om dessa tecken och de kan därför användas för att göra programmen mer lättlästa. I exempel 2.2 syns det tydligt var btnKlick_Click -metoden börjar och slutar, då det är en tom rad innan btnKlick_Click och genom att MessageBox.Show-metoden har indenterats.

Metoden btnKlick_Click skulle ha kunnat skrivas på följande sätt, men det är inte att rekommendera, då metodens uppbyggnad inte framträder lika tydligt.

private void btnKlick_Click(object sender, EventArgs e){ MessageBox.Show( "Mitt förstaprogram", "Meddelande", MessageBoxButtons.OK, MessageBoxIcon.Information);}

21

2. In

tro

du

ktio

n t

ill u

tve

cklin

gs m

iljö

n V

isu

al C

# 20

10

Kommentera källkoden

För att göra koden i ett program tydligare brukar man kommentera den. Kommenta-rer inleds med teckensekvensen //. Allt som står på samma rad och bakom // hoppas över av kompilatorn. Här kan då förklaringar och andra upplysningar skrivas. I käll-koden nedan har två kommentarer lagts till.

// Metoden visar en meddelanderuta. private void btnKlick_Click(object sender, EventArgs e) { // Här visas meddelanderutan. MessageBox.Show( "Mitt förstaprogram", "Meddelande", MessageBoxButtons.OK, MessageBoxIcon.Information); }

2.4 Olika typer av felDet är endast i undantagsfall som ett lite större program fungerar första gången det körs. Du kommer att upptäcka att du får ägna en hel del tid åt att leta efter fel i dina program. När man rättar till felaktigheter i ett program säger man att man avlusar, eller debuggar, det. Det kan förekomma tre olika typer av fel i ett program:

> kompileringsfel > exekveringsfel > logiska fel

Kompileringsfel är fel som beror på att man inte har följt de språkregler som gäller i C#. Exempel på sådana fel är stavfel och glömda semikolon eller parenteser. De kal-las kompileringsfel då de upptäcks vid kompileringen och denna typ av fel är relativt enkla att korrigera då kompilatorn skriver ut felmeddelanden. Tyvärr är felmedde-landena inte alltid helt enkla att tolka och ett annat problem är att ett fel på en rad kan få kompilatorn att upptäcka ”felaktigheter” i efterliggande satser trots att de är korrekta. Börja därför med att rätta ett eller ett par fel du enkelt kan hitta och kom-pilera sedan om programmet. En korrigerad felaktighet kan nämligen minska antalet felmeddelanden ordentligt.

Som programmerare kommer du att få många kompileringsfel och det är bra att bli bekant med felmeddelandena tidigt. Lägg därför in några fel i övning 2.2 och se om du kan tolka felmeddelandena. Pröva till exempel först med att ta bort den första klammerparentesen, {, i Click-metoden. När du kompilerar programmet hittas fem fel trots att programmet bara innehåller ett. Felen visas i fönstret Error List som ligger under formulärfönstret.

22

2. Intro

du

ktion

till utve

ckling

s miljö

n V

isua

l C# 2010

Exekveringsfel är fel som gör att programmet kraschar och ett vanligt fel är division med noll. Jämför med en beräkning med miniräknare, du kan slå in 5/0, men beräk-ningen avbryts och du får ett felmeddelande.

Logiska fel gör att programmet kan köras men inte ger det förväntade resultatet. Om du vill beräkna summan av två tal men av misstag skriver tal1 – tal2 så har du ett logiskt fel.

Sammanfattning

Syntax Beskrivning

using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; namespace Exempel02_02 { public partial class Form1 : Form { public Form1() { InitializeComponent(); } } }

Den grundläggande strukturen hos ett fönsterprogram i C#.

MessageBox.Show("Mitt förstaprogram", "Meddelande", MessageBoxButtons.OK, MessageBoxIcon.Information);

Visar meddelanderutan

private void btnKlick_Click(object sender, EventArgs e) { }

Händelsemetod

// Kommentar Kommentarer i koden inleds med //

23

2. In

tro

du

ktio

n t

ill u

tve

cklin

gs m

iljö

n V

isu

al C

# 20

10

Repetitionsfrågor

rf 2.1 Vilka tre fel finns i programmet nedan?

private void btnKlick_Click(object sender, EventArgs e) MessageBox.show("Det finns tre fel", "Meddelande", MessageBoxButtons.OK, MessageBoxIcon.Information) }

rf 2.2 Vilka tre olika typer av fel kan uppstå då man konstruerar ett program?

rf 2.3 Hur ser meddelanderutan ut när nedanstående sats körs?

MessageBox.Show( "Vill du spara filen?", "Spara", MessageBoxButtons.YesNo, MessageBoxIcon.Question);

24

2. Intro

du

ktion

till utve

ckling

s miljö

n V

isua

l C# 2010

Uppgifter

2.1 Skriv ett program som visar fönstret nedan. Formulärets bakgrundsfärg är röd när programmet startar. Vid klick på knappen Blå ska bakgrundsfärgen bli blå och vid klick på knappen Röd ska bakgrundsfärgen bli röd.

Kontrollernas egenskaper visas i tabellen nedan. Ställ in egenskaperna i fönstret Properties.

Kontroll Egenskap Värde

Form Name BackColor Text

Form1 Red Uppgift

Button Name Text

btnRöd Röd

Button Name Text

btnBlå Blå

För att ändra formulärets färg vid programkörningen till blå skrivs raden nedan på lämpligt ställe i programkoden.

BackColor = Color.Blue;

2.2 Skriv ett program som visar fönstret nedan. Det innehåller två knappar och en etikett (label). När man klickar på knappen Höger ska etiketten flytta sig åt höger och när man klickar på Vänster ska den flytta sig åt vänster.

Kontrollernas egenskaper visas i tabellen nedan. Ställ in egenskaperna i fönstret Properties.

Kontroll Egenskap Värde

Form Name Text

Form1 Uppgift

Button Name Text

btnVänster Vänster

Button Name Text

btnHöger Höger

Label Name Text

lblFlytta Vänster eller höger

För att flytta etiketten åt höger vid programkörningen skrivs raden nedan på lämpligt ställe i programkoden.

lblFlytta.Left = lblFlytta.Left + 10;

25

Re

giste

r

Aaddition 53aktivitetsdiagram 71algoritm 69arbetsminne 9aritmetiska operatorer 53array 132arv 184åtkomstmärken 169

Bbildruta 106binära operationer 53binär sökning 195bool 27, 28break 91, 131breakpoint 48bubbelsortering 193bugg 47

Ccase 91catch 239char 27, 28class 165, 166ClientSize 172Color 112CompareTo 93const 30continue 131

Ddatatyper 27default 91deklaration 29division 53.NET 8double 27, 28do-while 126

Eegenskaper 40, 175element 132ELLER 60ellips 113Equals 93etikett 108exceptions 238exekveringsfel 22

Ffelsökningsläge 47float 27, 28flyktsevens 125for 127fält 132, 156, 225färger 112

Ggrafik 112grafiska gränssnitt 105Graphics 113, 172GroupBox 107gruppruta 107

Hhårdvara 7hämtametod 177högnivåspråk 7

IICKE 60if 84if-else 79if – else if 87indentering 11index 36, 132infogande sortering 191insertion sort 191instanser 165instanstansvariabler 165int 27, 28IntelliSense 180interpretering 8Invalidate 173iteration 70, 74

J”just-in-time” kompilering (JIT) 8jämföra strängar 93jämförelseoperatorer 58

Kklass 165klientarea 41knapp 108kommentarer 22kompilering 8

kompileringsfel 22komplementvillkor 62konstruktor 40, 174koordinatsystem 41källkod 8kö 210

LLength 132List 201ListBox 107listruta 107logiska fel 22logiska operatorer 60, 82lokala variabler 150long 27loop 123

Mmaskinkod 7medlemsvariabler 165metodanrop 146metoddefinition 145metoder 40mjukvara 7modulus 53, 54multiplikation 53mushändelser 179

Nnedräkning 56.NET 8null 182nästlade loopar 129

Oobjekt 40, 165OCH 60OnPaint 113, 172operand 53operatorer 53outparameter 154

Pparameter 146penna 112pensel 112PictureBox 106

287

Re

gis

ter

prioriteringsregler 63prioritetsordning 63private 169, 175processor 9programblock 11properties 176pseudokod 69public 169punktoperator 175

Rreferenser 181referensparameter 152rektangel 113rekursiv metod 219relationsoperatorer 58, 81returtyp 145RGB-systemet 112ritmetoder 171

Ssatser 11seed 135sekvens 70, 72

sekventiell sökning 195selektion 70, 73short 27slumptal 135slumptalsgenerator 135stack 206Step Over 49stoppunkt 48string 27, 28strängar till tal 30subtraktion 53switch 91switch-case 90sättmetod 177

Ttal till strängar 30teckentabell 39textruta 108this 174throw 240tilldelning 29try 239TryParse 237typomvandling 30

Uundantagsfel 238Unicode 37unitär operator 53uppräkning 56

Vvariabel 27vektor 132villkorsoperatorn ? : 95värdeparametrar 148

Wwhile 123

288

The programmers of old were mysterious and profound. We cannot fathom their thoughts, so all we do is describe their appearance.

Aware, like a fox crossing the water. Alert, like a general on the battlefield. Kind, like a hostess greeting her guests. Simple, like uncarved blocks of wood.

Opaque, like black pools in darkened caves.

Who can tell the secrets of their hearts and minds? The answer exists only in Tao.

The Tao of Programming

Den här boken riktar sig mot nybörjaren i programmering. Det krävs inga förkunskaper annat än lite datorvana för att kunna installera nödvändig programvara. Det finns gratis programvara som kan användas för att arbeta med boken t.ex. Visual C# 2010. Boken är främst avsedd att användas som kurslitteratur till gymnasiekursen Programmering 1, och innehållet följer skolverkets beskrivning av kursen enligt Gy 2011. Boken kan också vara till god hjälp för den som vill lära sig programmering på egen hand.

Lärarmaterial kommer från hösten 2012 att finnas som lärarwebb. Allt extra material såsom facit till kapitlens avslutande uppgifter, prov förslag m.m. kommer att kunna hämtas digitalt. Detta ger en större flexibilitet för läraren och ger även utökade möjligheter att använda projektor eller IWB. Innehållet uppdateras kontinuerligt, vilket innebär att denna resurs för läraren blir mer omfångsrik med tiden.

Programmering 1 C#

Författare till Programmering 1 C# är Magnus Lilja och Ulrik Nilsson. Båda två har mång årig erfarenhet av att undervisa i programmering.

46

PR

OG

RA

MM

ER

ING

Pedagogisk programmering, 100% anpassad till Gy 2011

Programmering 1 C#Programmering 1 C# är ett helt nytt läromedel som behandlar det allt mer populära programmeringsspråket C#. Lärobokens struktur påminner om våra övriga programmeringsböcker, och bjuder på många exempel och övningar. Boken gör det enkelt för eleverna att arbeta självständigt och kräver ingen tidigare erfarenhet av program-mering. Till materialet görs även en lärarwebb som är gemensam för de tre programmeringsspråken.

Programmering 1 C++Programmering 1 C++ lär ut grun-derna i programmering utifrån språket C++. Boken påminner om den tidigare Programmering A C++, men är anpassad till den nya ämnesplanen enligt Gy 2011 och har utökats med ett avsnitt om grafi ska gränssnitt. Programmering 1 C++ gör det enkelt för eleverna att arbeta självständigt och kräver ingen tidigare erfarenhet av programmering. I texten fi nns gott om exempel och boken avslutas med ett antal större projektuppgifter samt lösningar. Till materialet görs även en lärarwebb som är gemensam för de tre programmeringsspråken.

Programmering 1 JavaProgrammering 1 Java lär ut grunderna i programmering utifrån språket Java. Boken är anpassad till den nya ämnes-planen enligt Gy 2011 och kräver ingen tidigare erfarenhet av programmering. Programmering 1 Java gör det enkelt för eleverna att arbeta självständigt. I texten fi nns gott om exempel och boken avslutas med ett antal större projektupp-gifter samt lösningar. Till materialet görs även en lärarwebb som är gemensam för de tre programmeringsspråken.

Är Gleerups programmeringsböcker rätt för mig? Jag vill ha nya läromedel som är anpassade till Gy 2011. Jag tycker det är viktigt med tydligt struktur och

genomtänkta övningar som underlättar självstudier. Jag önskar lärarstöd (lärarwebb) med lösningar, prov mm.

för alla tre programmerinsspråk - samlade på ett ställe.

Författare: Nilsson/Silborn

Tre nyheter i tre språk – programmering

för Gy 2011!

Programmering 1 C#Faktabok* 40-67402-9 P 399:-

Programmering 1 C++Faktabok** 40-67709-9 P 399:-

Programmering 1 JavaFaktabok** 40-67710-5 P 399:-

Programmering 1Lärarwebb, skollicens 12 mån** 40-67403-6 P 1 540:-

* Utkommer våren 2012 ** Utkommer sommaren 2012