Page 1

Programmering 1 Magnus Lilja Ulrik Nilsson

C#


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 info@gleerups.se 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örord

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. 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, repetitionsfrå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 kreativ logik i ett estetiskt tilltalande program som man skapat själv är mycket tillfredsstä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


Innehå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

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


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

13. Samlingar  200 13.1  List  201 13.2  Stack  206 13.3  Kö  210 Sammanfattning  214 Repetitionsfrågor  215 Uppgifter  216

Innehåll

9. Repetition  122

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 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


1

Introduktion

6

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


En 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. Vindmöllorna kunde mala mjöl. Ångmaskinen gav mekanisk kraft och radioapparaterna kunde omvandla radiovågor till ljud.

1. Introduktion

1.1 Grunder

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 innehå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 program, 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 kallas för datorns maskinkod, fast i realiteten består de av siffror. Addera kan ha maskinkoden 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 ”DrawRectangle” 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. Introduktion

Kompilering Högnivåspråk skrivs i vanliga textfiler och kallas för källkod. Källkoden måste översättas 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 interpretering eller ”just-in-time” kompilering (JIT). Bilden nedan visar hur översättningen fungerar i Visual C# för ett spel som heter Pacman, bara för att ta ett exempel. CIL betyder Common Intermediate Language och är ett mellansteg mellan källkod och maskinkod. Programmerarens dator

Spelarens dator

Källkod

CIL

CIL

pacman.cs

pacman.exe

pacman.exe

kompilering

�b�U

Maskinkod

J IT

Programmet distribueras via internet eller diskar

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 plattform 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ället 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

Thus spake the ­master programmer: – Without the wind, the grass does not move. Without software, h­ ardware is useless. The Tao of Programming


Man behöver inte vara någon datortekniker för att kunna programmera, men man måste känna till de tre komponenterna processorn, arbetsminnet och hårddisken.

Fil Skiva

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.

Skrivhuvud

1. Introduktion

1.2  Datorns funktion

När en fil öppnas laddas den till arbetsminnet. I arbetsminnet 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 exempel. Antag att du öppnar programmet Kalkylatorn (filen calc.exe) för att räkna ut vad 4 + 3 blir.

Programfönster

Arbetsminne A

B 4

C +

D 3

7

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


1. Introduktion

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


En 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

Programkod

Rubrik 1

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

Mening 1. Mening 2. Mening 3. Rubrik 2 Mening 4. Mening 5.

1. Introduktion

1.3  Programstruktur

Programblock 2 { Sats 4; Sats 5; }

Lägg märke till att programblocket består av en rubrik som kallas för programblockets 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 kompileras 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 blockstrukturen lättare att se genom att bara skriva en sats per rad, och dessutom 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ärskilt tydlig när man har programblock inuti varandra:

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

11


1. Introduktion

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 namnrymder. 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 boken I 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 programmet. 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.

12

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.


rf 1.1 Vad menas med kompilering? rf 1.2 Vad innebär det att ett program är händelsestyrt?

1. Introduktion

Repetitionsfrågor

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; Programblock 3{Sats 5;} Sats 6;}}

13


2

Introduktion till utvecklingsmiljön Visual C# 2010

14

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.


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å ungefä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 projekt som ska skapas och vilket namn det ska ha. Välj Windows Forms Application och ge projektet namnet Exempel02-01.

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

2.1  Visual C#

15

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 formulä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#.


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

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 exempel 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.

16

Om du öppnar mappen MinaProjekt i utforskaren ser du att dess innehåll överrensstä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 översä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.


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 exempel

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

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

Programmet du ska skriva i detta avsnitt illustreras av de två figurerna nedan. Huvudfönstret har en knapp med texten Klicka här. Vid klick på denna visas en meddelanderuta 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 M­ inaProjekt 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 projektet namnet Exempel02-02. För att Exempel02-02 ska bli ditt aktiva projekt måste du högerklicka på Exempel02-02 i fönstret Solution 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. Introduktion till utvecklings­miljön Visual C# 2010

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 egenskapen Size i fönstret Properties, klicka på symbolen 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 exempel finns det en knapp med texten Klicka här. För att lägga till knappen på formulä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 bilden nedan visar finns bland annat kontrollerna Button och CheckBox, det vill säga knapp och kryssruta.

18

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.


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 egenskaper 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#.

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

Koppla en händelse till en kontroll

Skriva källkod Skriv av de två raderna nedan som börjar med MessageBox. Det är viktigt att metoden btnKlick_Click ser ut exakt som nedan. Lägg speciellt märke till det avslutande 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. Introduktion till utvecklings­miljön Visual C# 2010

2.3  Ett C#-programs struktur Nu 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 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23

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(); } private void btnKlick_Click(object sender, EventArgs e) { MessageBox.Show("Mitt första program", "Meddelande", MessageBoxButtons.OK, MessageBoxIcon.Information); } } }

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.MessageBox.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örklaras 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 objektorienterat 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 InitializeComponent() 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


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 M­ essageBox.Show skickas de fyra parametrarna ”Mitt första program”, “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 Meddelande. När användaren klickar på den ska meddelanderutan visas.

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

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 blanktecken, 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. Introduktion till utvecklings­miljön Visual C# 2010

Kommentera källkoden För att göra koden i ett program tydligare brukar man kommentera den. Kommentarer 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 fel Det ä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 kallas 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 felmeddelandena 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 kompilera sedan om programmet. En korrigerad felaktighet kan nämligen minska antalet felmeddelanden ordentligt.

22

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.


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 using using using using using using using

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

System; System.Collections.Generic; System.ComponentModel; System.Data; System.Drawing; System.Linq; System.Text; System.Windows.Forms;

2. Introduktion till utvecklings­miljön Visual 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äkningen avbryts och du får ett felmeddelande.

namespace Exempel02_02 { public partial class Form1 : Form { public Form1() { InitializeComponent(); } } } MessageBox.Show("Mitt förstaprogram", "Meddelande", MessageBoxButtons.OK, MessageBoxIcon.Information);

Visar meddelanderutan

23

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

Händelsemetod

// Kommentar

Kommentarer i koden inleds med //


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

24

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);


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.

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

Uppgifter

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


F

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

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

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

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

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

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

G

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

L

H

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

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

M

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

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

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

K klass  165 klientarea  41 knapp  108 kommentarer  22 kompilering  8

Register

A

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

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

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

P parameter  146 penna  112 pensel  112 PictureBox  106

287


Register

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

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

S satser  11 seed  135 sekvens  70, 72

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

T

U undantagsfel  238 Unicode  37 unitär operator  53 uppräkning  56

V variabel  27 vektor  132 villkorsoperatorn ? :  95 värdeparametrar  148

W while  123

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

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


Programmering 1 C# 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.

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.

CSharp_smakprov_kapitel1o2  

Programmering 1 Magnus Lilja Ulrik Nilsson Har du som användare frågor eller åsikter, kontakta oss gärna på telefon 040-20 98 00 eller via w...