Programmering 1
C#
Lars KaggSkolan
Håkan Brorson

Ingår i kursen
- Prov 1
- Prov 2 - Slutprov
- Skriftligt prov
1. Intro
Visual Studio
Intro
Innan vi kan komma igång med programmeringen, måste vi först installera Visual Studio.
Du kommer att installera det program som du kommer att skriva kod i när du programmerar och sedan lära dig att skapa ditt första program.
Tanken är att ni ska lära er grunderna genom att göra textbaserade program, d.v.s. program utan grafik, för att sedan kanske prova att skapa ett 2-dimensionella spel med MonoGame.
Vad är C#
C# (uttalas C sharp) är ett programmeringsspråk som har funnits sedan år 2000 och som utvecklas av Microsoft.
Det har historiskt främst använts för att skapa program som kan köras på datorer som använder Windows men kan sedan några år tillbaka också användas för att skapa program som körs på telefoner, surfplattor, Mac och Linux.
Namnet C# kommer från att C# liknar programmeringsspråken C och C++, #-tecknet kommer från musikens ♯ som innebär att en ton ska höjas.
Tanken med namnet är att man ska tänka att C# är en nyare, bättre variant av de andra C-språken.
Skriva kod
När man programmerar i C# så gör man det genom att skriva kod i vanliga textfiler som man ger filändelsen .cs.
Man kan använda vilken texteditor som hels, men en stor fördel är att använda en IDE
( Integrated Development Environment)
IDE är gjort för att man ska programmera med, de har en texteditor och så brukar en IDE innehålla ett enkelt sätt att konvertera kod som man har skrivit till ett körbart program.
En IDE har ofta många andra smarta funktioner som gör det lättare och snabbare att programmera.
Visual Studio
Det finns en mängd IDE att välja på men när vi programmera i C# så är den vanligaste Visual Studio.


Installera Visual Studio
På webbsidan www.visualstudio.com
Den vi ska ladda ner är:
"Visual Studio Community"
När du kör installationsprogrammet möts du av ett fönster som liknar detta.

Installera Visual Studio
När man installerar Visual Studio får man välja vilken typ av program som man vill kunna skapa och vilka programmeringsspråk man vill kunna använda.
Ju fler programtyper som man vill kunna skapa, desto mer plats kommer installationen ta på din hårddisk.
Vi kommer att skapa program i C# för Windows och behöver då bara välja alternativet:
".NET desktop development"

Installera Visual Studio
1. Create a new project

2. Skriv "console app (.NET Framework)" och dubble klicka.
3. Skriv in ett namn på vad projektet ska heta.
Och tryck på kappen "
Next"
4. Tryck på "Creat"
för att skapa projektet


2. Hello World
Hello World
Det är tradition att skriva "Hello World"
Detta är ett program som skriver ut texten ”Hello world” på skärmen.
Tanken är att man på detta sätt får se den minsta möjliga kod som krävs för att få ett fungerande program.
När man skapar ett nytt program så skapas filen Program.cs där vi skriver koden som bestämmer vad programmet ska göra.
Nästa slide finns koden för hur vi man skriver ut Hello World
Hello World
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Web;
namespace Hello_World
{
internal class Program
{
static void Main(string[] args)
{
Console.WriteLine("Press Enter Key to Exit..");
Console.ReadKey();
}
}
}
Hello World
Raden Console.WriteLine("Hello, World!"); gör så att programmet kommer skriva ut texten Hello world när det körs, den finns alltså med från början i varje program man skapar.
För att testa ditt program så behöver du bara trycka på knappen med en grön "play-pil" i verktygsfältet (eller genom menyn Debug -> Start Debugging eller genom att trycka på F5).

Hello World
När du kör programmet så öppnas ett konsolfönster.
Texten Hello world har skrivits ut.
Press any key to close this window...

3. Historik
Historia
- Äran som den första programmeraren brukar tilldelas Ada Lovelace, dotter till Lord Byron.
- Hon hjälpte Charles Babbage i dennes arbete med den analytiska maskinen som brukar betraktas som det första exemplet på en dator, trots att den aldrig blev färdigställd.
- Programspråket Ada är uppkallat efter henne

Historia
- De tidigaste datorerna hade inga skärmar, utan skrev ut output på papper istället.
- På 60- och 70-talet började datorer med skärmar dyka upp, och så även välkända programmeringsspråk som C, vilket inspirerade till C++ på 80-talet.
- Under denna här tidsperiod blir programmering mer tillgängligt för hemanvändare med språk som BASIC och hemdatorer som Commodore 64, AMIGA och MSX.
- Ytterligare ett språk som blivit väldigt stort (störst, faktiskt) är Java, som kom 1995.




Microscope and calculator, 1952
Commodore 64
5. Kommentarer
Kommentar
- När du skapar ett nytt projekt i Visual Studio kommer du märka att viss text är grå, med massor av snedstreck
- De områdena är kommentarer.
- När programmet körs ignoreras kommentarer. Så du kan skriva vad du vill ha inuti dina kommentarer.
- Men det är vanligt att ha kommentarer som förklarar vad du försöker göra.
- Enradig kommentar: //
Console.WriteLine("Här är lite text.");
// Efter två snedstreck så kan man skriva vad man vill
// Detta är en kommentar
Console.WriteLine("Denna text kommer på en ny rad.");Kommentar
- Fler-rads kommentarer /* */
- Den börjar / * och slutar * / .
Notera också att man kan införa hur många tomma rader man vill på vilka ställen man vill i koden, detta påverkar inte programmet men kan göra det lättare att se vilka delar av programmet som hör ihop.
Console.WriteLine("Denna text kommer på en ny rad.");
/*
Man kan skriva kommentarer på flera
rader på detta sätt.
*/
Console.WriteLine("Den här texten kommer också på en ny rad.");
// Console.WriteLine("Denna text skrivs inte ut");
// Man kan göra nya rader i koden före och efter plustecknen
Console.WriteLine("Denna texten kommer " +
"på samma rad när programmet " +
"körs.");
Kommentar
Kommentarerna i ett program brukar som sagt användas för att förklara delar av koden som kan vara lite svår att förstå vid en första anblick men de kommer i denna bok dessutom användas för att förklara nya programmeringskoncept.
Ställ dig själv frågan "Kommer jag kunna förstå all kod i mitt program om ifall jag stänger ner det nu och öppnar det igen om två månader?" Om svaret är ja behöver du inte skriva någon kommentar, annars bör du göra det.
Strukturerad kod
Hur man formaterar koden man skriver har egentligen ingen större betydelse för koden.
Precis som i fallet med kommentarer kan vettig formatering hjälpa dig själv och andra att lättare läsa och förstå din kod.
De flesta moderna utvecklingsverktyg hjälper dig med att formatera din kod.
Det viktigaste man ska göra är att indentera sin kod. Indentera är svengelska för att göra indrag i marginalen, d.v.s. att börja skriva en bit in på raden.
Man formaterar sin kod med hjälp av tabbar.
Strukturerad kod
Främst gäller detta när man skapar kodblock med hjälp av "{" och"}". Ett exempel på det kan vi se i följande kodsnutt:
namespace Hello_World
{
internal class Program
{
static void Main(string[] args)
{
Console.WriteLine("Vad heter Sveriges största sjö?");
string rättSvar = "vänern";
string användarensSvar = Console.ReadLine();
string användarensSvarSmå = användarensSvar.ToLower();
// Gör jämförelserna utan hänsyn till stora/små bokstäver
if (användarensSvarSmå == rättSvar)
{
Console.WriteLine("Du svarade rätt.");
}
if (användarensSvarSmå != rättSvar)
{
Console.WriteLine("Du svarade fel.");
}
}
}
}
6. Skriva ut
Console.Write
Console.WriteLine
Skriva ut text
För att skriva ut en textsträng i konsolfönstret använder man metoden Console.WriteLine()
Vill vi till exempel skriva ut texten Hello World!
Man kan även skriva ut uträkningar och felmeddelande
Det är viktigt att skriv exakt, stor bokstav, parantes, citationstecken och avsluta med semikolon.
Console.WriteLine("Hello World");Skriva ut text
System betyder att du använder system-biblioteket i ditt projekt.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Hello_World
{
internal class Program
{
static void Main(string[] args)
{
Console.WriteLine("Hello World");
Console.ReadKey();
}
}
}
Namn på klassen och även projektet
I Main så startar alltid programmet.
Koden ska skrivas mellan
"måsvingarna" { }
Console.ReadKey(); gör så att programmet pausas, innan det stäng av
Write & WriteLine
Console.Write
Gör ingen radbrytning
Console.Write("Hello World");Console.WriteLine
Gör en radbrytning
Gör så att texten som kommer efter, kommer på raden under
Console.WriteLine("Hello World");
Console.WriteLine("Hello World");Det går att skriva ut text på en eller flera rader.
Glöm inte " (dubbelfnutt)
när du skriver text
Kombinera flera textsträngar
Console.WriteLine("Dagens datum är: " + "2019-03-18");Skriva ut flera textstränger med hjälp av "+"
Glöm inte att använda citationsteckena!
Observera skillnaden mellan dessa två operationer:
Console.WriteLine("1 + 1");
Console.WriteLine(1 + 1);

7. Datatyper
Vad är datatyper
- I programmering lagrar vi hela tiden information i dataminnet för att kunna använda den vid ett senare.
- Gör vi till exempel en uträkning, vill vi ju kunna spara resultatet på uträkningen till ett senare.
- Man kan lagra data i variabler av en viss datatyp.
- Exempel på datatyper är Integers(int) som lagrar heltal, String som sparar text.
Vad är datatyper
- Varje datatyp tar upp en viss plats i dataminnet.
- Du vet kanske redan att en dator enbart hanterar ettor och nollor (det vill säga bits).
- Vi ska inte gå in på detalj, men det viktiga att ta med sig är att stora tal behöver fler bits för att lagras, det vill säga större plats i minnet.
- Det kan var bra att fundera en extra gång på vilken datatyp man ska använda så att man inte slösar på minne
- Eller av misstag försöker spara ett för stort värde i en datatyp där den inte får plats, för då kommer programmet att krascha.
Vanligaste datatyperna
| int |
Sparar heltalsvärden (int står för integer som är engelska för heltal). Kan ha heltalsvärden mellan -2 147 483 648 och 2 147 483 647. |
|---|---|
| double | Sparar decimaltal. Kan innehålla väldigt små och stora tal, upp till 15 siffrors noggrannhet. |
| string | Largar text (behandlar siffror som text) |
| char | Lagrar tecken, exempelvis "C" |
|
boolean |
Kan enbart lagra true (sant) eller false (falskt) |
Heltal
- Vi börjar med heltalen - 0, 1, 2, 3, …, och -1, -2, -3, … ,
- Det finns fyra stycken datatyper som lagrar heltal.
- bitstorlek är hur mycket plats den tar i dataminnet
- int är det vanligaste och det vi kommer använda mest
| Datatyp | Bitstorlek | Min-värde | Max-värde |
|---|---|---|---|
| byte | 8 | -128 | 128 |
| short | 16 | -32 768 | 32 768 |
| int | 32 | -2147 483 648 | 2147 483 648 |
| long | 64 | ≈ −9 × 10^18 | ≈ 9 × 10^18 |
Decimaltal
- Decimaltal - kan man använda sig av float eller double.
- Dessa datatyper är användbara exempelvis när man vill spara ett irrationellt tal som pi eller tal med många decimaler.
- double är det vanligaste och det vi kommer använda mest
| Datatyp | Bitstorlek | Min-värde | Max-värde |
|---|---|---|---|
| float | 32 | ≈ −3.4 × 10^38 | ≈ 3.4 × 10^38 |
| double | 64 | ≈ −1.7 × 10^308 | ≈ 1.7 × 10^308 |
Char & String
- Char är perfekt om man vill spara ett enda enskilt tecken, exempelvis bokstaven "a".
- String använder man när man vill spara ett helt ord eller en hel mening.
- Exempelvis "May the force be with you".
- Man måste alltid börja och sluta med en dubbelfnutt ""
Boolean
- Boolean är en datatyp som endast innehålla värdena true eller false.
- Vilket gör att booleska variabler blir väldigt användbara när man vill köra ett program tills ett villkor är uppfyllt.
- Man kan även tänka att true är en etta (1), och false är en nolla (0).
boolean user = true;
boolean password = false;8. Variabler
int
double
string
char
Variabel
- I program vill man kunna spara data för att kunna använda senare i koden.
T ex man vill mata in ett tal. - För att spara information i programmet när det körs så använder vi oss av variabler.
- En variabel är något värde som vi vill spara (t.ex. användarens namn eller ålder) och det kallas variabel för att värdet kan variera, alltså ändras senare i programmet om vi vill.
- Det finns olika typer av variabler som används för att spara olika sorters värden, t.ex. så finns det en typ som används för text och en annan typ för heltal.
Skapa en Variabel & Deklarera
// Deklarera tre variabler och ge dem värden
string meddelande = "Hej!";
string namn = "John Johnsson";
string yrke = "Programmerare";
// Skriv ut text till användaren
Console.WriteLine(meddelande);
Console.WriteLine("Jag heter " + namn + ", mitt yrke är " + yrke);
// Ändra värdet på variabeln meddelande
meddelande = "Hej då!";
Console.WriteLine(meddelande);
- Först så skapar en variabler
(vilket brukar kallas att deklarera variabler)
man ger en variabel ett värde och sedan använder värdet.
Vilken sorts variabel
Ett namn på variablen
Texten som ska sparas
Ligga mellan dubbelfunttarna
= tilldela innehållet
Namnge en Variabel
Variablerna har fått namn som meddelande, namn och yrke istället för message, name och occupation.
Man kan även använda de svenska bokstäverna å, ä och ö i sina variabelnamn om man vill.
Det är vanligt att använda enbart engelska namn när man programmerar eftersom detta är en förutsättning om man t.ex. vill be om hjälp på internet av andra programmerare som inte kan svenska.
Det går inte att deklarera (skapa) två variabler med samma namn.
Ett variable namn är case sensitivity
int tal och int Tal inte är samma varibel
Variabel
int first_number;
first_number = 10;
Console.WriteLine( "First number = " + first_number );int first_number, second_number, answer;
first_number = 10;
second_number = 20;
answer = first_number + second_number;
Console.WriteLine("Addition Total = " + answer );Exempel olika sätt att tilldela
Variabel
char varCharacter = 'e';
String varWord = "Hello";
Console.WriteLine( varCharacter + varWord );När man deklarera variabler av tecken eller texter så kan man använda både ' (enkla citattecken) och " (dubble citattecken)
9. Operatorer för tal
plus, minus, delat, gånger
i++;
Operatorer
- Plustecknet är en operator, ett tecken som anger att programmet ska göra något med de variabler som står vid det (i detta fall att talen ska adderas).
- Även resten av de fyra räknesätten går att använda med både int-variabler och double-variabler.
int a = 7;
int b = 4;
// c får värdet 11
int c = a + b;
// d får värdet 3
int d = a - b;
// e får värdet 28
int e = a * b;
// f får värdet 1.
// Egentligen är 7 / 4 = 1,75 men alla
// decimaler "huggs bort" vid heltalsberäkningar
int f = a / b;
Om du utför en beräkning, t.ex. en division, med enbart heltal så kommer svaret att vara ett heltal även om det egentligen borde vara ett decimaltal.
Matematiska Operationerna
// a får värdet 1
double a = 7 / 4;
// b får värdet 1.75;
double b = 7.0 / 4;
// c får värdet 1.75
double c = (double)7 / 4;Notera vad som händer vid division av två heltal: svaret blir också ett heltal oavsett om det egentligen borde vara ett decimaltal. Vid divisionen ovan så är 7/4 = 1,75 men decimalerna ”huggs av” och resultatet av divisionen blir 1.
Om något av talen vid division är en double så kommer resultatet att bli en double också och inga decimaler försvinner.
Beräkningar i Console.WriteLine
int tal1 = 10;
int tal2 = 7;
// Alternativ 1
int svar = tal1 - tal2;
Console.WriteLine("Svaret är " + svar);
// Alternativ 2
Console.WriteLine("Svaret är " + (tal1 - tal2));Du måste inte spara resultat av varje beräkning du gör i en variabel om du bara vill skriva ut svaret till användaren.
Det går bra att skriva beräkningar i Console.WriteLine, det är oftast lättare att se vilken beräkning som görs ifall man sätter den inuti en parentes.
++ & --
// a får värdet 1
int a = 1;
int a = a + 1;
a++;
// Nu är a = 2
a--;
// Nu är a = 1 igen
Något som också är väldigt vanligt är att öka eller minska värdet av en variabel med 1.
Man kan då använda ++ eller -- och skriva det direkt efter namnet på variabeln som ska ändras, t.ex.
10. Inmatning & Parse
Console.ReadLine();
Konvertering
int.Parse
double.Parse
Console.ReadLine()
Med hjälp av kommandot Console.ReadLine() så kan du som användare skriva in text och tal i Console-fönstret.
När programmet kommer till raden med Console.ReadLine() så kommer det att stanna där och vänta på att användaren skriver in någonting och sedan trycker på enter.
Console.WriteLine("Skriv ditt namn");
// Läs in användarens namn
string namn = Console.ReadLine();
Console.WriteLine("Hej " + namn);Pausar till användaren skriver något
Spara i variablen
namn
Konvertering med Parse
När man ett tal från användare via Console.ReadLine() så är den en string och för att kunna göra en uträkning så måste man konvertera över den till heltal eller decimal.
Det finns inga inbyggda sätt i C# att läsa in tal från användaren.
Det man istället får göra är att läsa in text från användaren och sedan konvertera texten till ett tal.
Console.WriteLine("Hej! Hur gammal är du?");
// Läs in åldern och konvertera till int
string ålderText = Console.ReadLine();
int ålder = int.Parse(ålderText);int.Parse och double.Parse
int.Parse och double.Parse och texten som ska konverteras skrivs i parentesen.
Notera att decimaltal i C#-kod skrivs med punkt och inte kommatecken vilket är fallet i engelsktalande länder, men när du skriver in decimaltal som användare av programmet så använder du kommatecken om din dators språkinställning är svenska.
Console.WriteLine("Hej! Hur gammal är du?");
// Läs in åldern och konvertera till int
string ålderText = Console.ReadLine();
int ålder = int.Parse(ålderText);
// Beräkna hur gammal personen är om 5 år
int ålderOmFemÅr = ålder + 5;
Console.WriteLine("Om 5 år är du " + ålderOmFemÅr + " år gammal");
// Läs in användarens längd i meter
Console.WriteLine("Hur lång är du? Svar i meter.");
string längdText = Console.ReadLine();
double längd = double.Parse(längdText);
// Beräkna hur lång personen vore om hen var 10 cm längre
double ökadLängd = längd + 0.1;
Console.WriteLine("Om du var 10 cm längre skulle du vara " + ökadLängd + " m.");
int.Parse och double.Parse
Konvertera heltal till decimaltal (d.v.s. spara värdet av en int-variabel i en double-variabel) så behöver man inte skriva någonting särskilt,
men däremot behöver man göra det för att omvandla ett decimaltal till heltal.
int a = 4;
int b = 7;
double c = 5.61;
// Konvertering från double till int
a = (int)c;
// Konvertering från int till double sker automatiskt
c = a;11. If
if
else if
else
switch
Hur fungerar en if
- En if-sats används för att avgöra om en operation ska utföras eller inte.
- Om villkoret är sant(true) - så utförs operationen.
- Om villkoret är falskt(false) - så utförs inte operationen.
- Det går även att kombinera flera if-satser, så kallade else-if och else.

Sant
Falskt
If, Else-If, Else och Switch
-
If– Ett eller flera villkor anger ifall en eller flera operationer ska utföras
-
Else-if – Operationen / operationerna innanför else-if måsvingar utförs ifall villkoret för if-satsen är falskt och villkoret för else-if är sant.
-
Else – utförs ifall if och alla else-if satserna är falska.
- Switch – en sats som kan användas istället för if när man har en flervalssituation.
Logiska Villkor
En if-sats är består av ett booleskt uttryck (uttalas boolskt), ett uttryck som är antingen sant eller falskt, följt av ett kodblock som bara kommer att köras om det booleska uttrycket är sant.
| Logiska villkor | Notation |
|---|---|
| Lika med | == |
| Inte lika med | != |
| Mindre än | < |
| Minde än och lika med | <= |
| Större än | > |
| Större än och lika med | >= |
| Logiskt AND(och) | && |
| Logiskt OR(eller) | || |
Skapa en if-sats
- If-satsen skapas med följande syntax.
- Först används det reserverade ordet if.
- Följt av ett logiskt uttryck inom parentesen.
- Om det är sant(true) så kommer operationen innanför måsvingarna{} utföras.
if (logiskt uttryck) {
Operation/Operationer …
}Exempel på nästa slide
Skapa en if-sats
Exemple - If-sats
Console.WriteLine("Hur gammal är du? Svara i hela antal år.");
int ålder = int.Parse(Console.ReadLine());
if (ålder >= 18)
{
Console.WriteLine("Du är minst 18 år gammal, du får ta körkort.");
}
if (ålder >= 15)
{
Console.WriteLine("Du är minst 15 år gammal, du får köra moped.");
}
if (ålder < 15)
{
Console.WriteLine("Du är för ung för att köra moped.");
}
If-sats med stängar
Det går också att använda if-satser för att undersöka värden för strängar.
Kom ihåg att alltid använda == när du undersöker ett värde i en
if-sats, d.v.s. två ==
Ett = använder man när man ska tilldela en variabel ett värde
Console.WriteLine("Vem var statsminister i Sverige år 1970?");
string användarensSvar = Console.ReadLine();
if (användarensSvar == "Olof Palme")
{
Console.WriteLine("Du svarade rätt!");
}ToLower()
C# är case sensitive vilket innebär att versaler och gemener åtskiljs.
En jämförelse som är skiftlägeskänslig skulle leda till att strängarna "ord" och "ord" är lika, men inte strängarna "ord" och "Ord".

En dator använder en teckenkod som heter ASCII
Datorn ser istället siffror.
Till exempel:
Stora A är 41
Lilla a är 61
Kod-exempel på nästa slide
ToLower() - exempel
Console.WriteLine("Vad heter Sveriges största sjö?");
string rättSvar = "vänern";
string användarensSvar = Console.ReadLine();
string användarensSvarSmå = användarensSvar.ToLower();
// Gör jämförelserna utan hänsyn till stora/små bokstäver
if (användarensSvarSmå == rättSvar)
{
Console.WriteLine("Du svarade rätt.");
}
if (användarensSvarSmå != rättSvar)
{
Console.WriteLine("Du svarade fel.");
}ToLower() - exempel
string användarensSvar = Console.ReadLine().ToLower();Detta går bra för att konvertera till små bokstäver direkt
if (användarensSvar.ToLower() == rättSvar)
{
Console.WriteLine("Du svarade rätt.");
}Går bra att sätta ToLower när vi gör jämförelsen
Och && - eller ||
Med hjälp av booleriska uttrycken && och || så kan vi kontrollera flera uttryck är sanna i en if-sats.
int num = 150;
if(num > 100 && num < 200){
Console.WriteLine("Number: " + num);
}int num = 50;
if(num < 100 || num > 200){
Console.WriteLine("Number: " + num);
}Funkar för tal mellan 100 och 200
Använder och &&
Funkar för tal som är mindre än 100 och större än 200
Använder eller ||
Else
- Else anger vad som ska hända om if-satsen villkort inte uppfylls (false).
- Observera att else inte har något logiskt uttryck.
- Else kommer alltid att utföras om if-satsen är false.
- Det är if som avgör om else ska utföras eller inte.
if (logiskt uttryck) {
Operation/Operationer …
} else {
Operation/operationer …
}
Sant
Falskt
Else
Exempel - else-satsen
int number = 5;
if (number > 6) {
Console.WriteLine("Det här är IF-satsen")
} else {
Console.WriteLine("Det här är ELSE-satsen")
}Else
Exempel - else-satsen
- Vi gör ett program om lampan är släckt och vi trycker på knappen så tänds lampan. Och tvättom, trots att vi tycker på samma knapp.
- Så samma knapp utför olika villkor.
- Vi har två villkor - tänt eller släckt.

Kod på nästa slide
Else - tänd eller släkt
I detta exemplet så ska tända eller släcka en lampa.
Om lampan är tänd "1" så när vi trycker på knappen så ska den ändras till av "0"
isLampOn = 1 //så är lampan tänd
isLampOn = 0 //så är den släkt
int isLampOn = 1; // Lampan är tänd
if (isLampOn == 1)
{
isLampOn = 0; // isLampOn till 0, lampan släcks.
}
else
{
isLampOn = 1; // isLampOn till 1, lampan tänds.
}
Console.WriteLine("Status på lampan: "+isLampOn);Else-if
- Else-if satsen hjälper till att lösa problem om man har flera olika operationer.
- Beroende på vilket villkor som är uppfyllt, ska en specifik operation utföras.
- Man kan ha flertalet else-if satser.
- Om else-if är sann(true) så exekveras inte else.

Falskt
Sant
Falskt
Sant
Falskt
Sant
Falskt
Sant
Else-if
- Else-if har samma syntax som if.
- else-if är reserverade ord liksom if och else
- Följt av ett logiskt uttryck inom parentesen
- Inom måsvingar {} anger man operationerna
- If har högre prioritet än else-if
if (logiskt uttryck) {
Operation/Operationer …
} else if (logiskt uttryck) {
Operation/Operationer …
} else {
Operation/Operationer …
}Else-if exempel
- Skapa ett program som skriver ut hur stor rabatten är,
med hjälp av if, else-if och else.
- En butik har följande rabattsystem:
- Är köpet är större än 500 kronor får man 5 % rabatt.
- Är köpet är större än 1000 kronor får man 10 % rabatt.
- Är köpet är större än 1500 kronor får man 15 % rabatt.
- Är köpet är större än 2000 kronor får man 20 % rabatt.

Kod
nästa
slide
Else-if exempel
int totalkonstnad = 400;
if (totalkonstnad >= 2000) // större eller lika med 2000
{
Console.WriteLine("Rabatten är 20%");
}
else if (totalkonstnad >= 1500) // större eller lika med 1500
{
Console.WriteLine("Rabatten är 15%");
}
else if (totalkonstnad >= 1000) // större eller lika med 1000
{
Console.WriteLine("Rabatten är 10%");
}
else if (totalkonstnad >= 500) // större eller lika med 500
{
Console.WriteLine("Rabatten är 5%");
}
else // Om ingen av ovanstående if-satser är uppfyllda
{
Console.WriteLine("Rabatten är 0%");
}Switch
switch – Bra om man jämför samma variabel om och om igen
Switch-satsen används istället för if-satsen när man har en flervalssituation.
Switch är en kompakt version av if och är effektiv när man ska välja mellan ett specifikt antal operationer.
Switch kan innehålla en variable eller ett uttryck, heltal, char eller String
Jämförelse
Switch - If
Console.WriteLine("Detta program kan berätta vilka de 5 bästa filmerna genom tiderna är. Vilken position vill du veta om?");
string val= Console.ReadLine();
switch (val)
{
case "1":
Console.WriteLine("Star Wars");
break;
case "2":
Console.WriteLine("Gudfadern");
break;
case "3":
Console.WriteLine("Gudfadern del 2");
break;
case "4":
Console.WriteLine("The Dark Knight");
break;
default:
Console.WriteLine("Schindler's List");
break;
}Console.WriteLine("Detta program kan berätta vilka de 5 bästa filmerna genom tiderna är. Vilken position vill du veta om?");
string val= Console.ReadLine();
if (val == "1")
{
Console.WriteLine("Star Wars");
}
else if (val == "2")
{
Console.WriteLine("Gudfadern");
}
else if (val == "3")
{
Console.WriteLine("Gudfadern del 2");
}
else if (val == "4")
{
Console.WriteLine("The Dark Knight");
}
else if (val == "5")
{
Console.WriteLine("Schindler's List");
}
else
{
Console.WriteLine("Du valde inte rätt tal.");
}
Switch med String
String typeOfDay = "Monday";
switch (typeOfDay)
{
case "Monday":
Console.WriteLine("Start of work week");
break;
case "Tuesday":
case "Wednesday":
case "Thursday":
Console.WriteLine("Midweek");
break;
case "Friday":
Console.WriteLine("End of work week");
break;
case "Saturday":
case "Sunday":
Console.WriteLine("Weekend");
break;
default:
Console.WriteLine("Invalid day of the week: " + typeOfDay);
break;
}12. Modulus
Vi är två personer som ska dela på äpplen, får bara ta hela äpplen
Modulus

= 0
rest (det som blir över)


= 1


= 0


= 1









if(2 % 2 == 0)
Sant
Falskt
Sant
Falskt
Skriver i C# och får ut om det är true eller false
if(3 % 2 == 0)
if(4% 2 == 0)
if(5 % 2 == 0)
Hur blir det om man kolla mot 3 istället?
Nästa slide
Nu kolla vi mot 3 istället
Modulus

































= 0 if(3 % 3 == 0) True
= 1 if(4 % 3 == 0) False
= 2 if(5 % 3 == 0) False
= 0 if(6 % 3 == 0) True
= 1 if(7 % 3 == 0) False
= 2 if(8 % 3 == 0) False
Modulus
Modulus är en rest-operator, dvs. den beräknar resten (istället för kvoten) vid division.
Tecknet för modulus är % (procenttecknet)
Modulus blir t.ex. väldigt användbart när vi ska undersöka delbarhet.
Om a är delbart med b så ger a % b resultaten 0 (ingen rest).
Console.WriteLine(5 % 2);
// 1
Console.WriteLine(7 % 8);
// 7
Console.WriteLine(26 % 13);
// 0Modulus - Jämnt eller udda
Console.WriteLine("Skriv ett tal: ");
int i = int.Parse(Console.ReadLine());
if ( i % 2 == 0 )
{
Console.WriteLine("Jämnt tal: " + i);
}
else {
Console.WriteLine("Udda tal: " + i);
}| Tal | Rest |
|---|---|
| 1%2 | 1 |
| 2%2 | 0 |
| 3%2 | 1 |
| 4%2 | 0 |
| 5%2 | 1 |
Modulus
Modulus är en matematisk term där vi räknar ute resten det som blir över.
int x = 7;
int y = 2;
int mod = x % y;
// mod blir då resten när vi delar 7 med 2 --> mod = 1
int x = 8;
int Y = 4;
int mod = x % y;
// Här blir mod = 0, för att vi får ingen rest när vi delar 8 med 4
int x = 9;
int y = 5;
int mod = x % y;
// Resten blir --> mod = 413. Text och index
Text och index
Vi ska bearbeta strängar och se är hur tecknen i en sträng numreras.
Platsen som ett tecken har i en sträng kallas för tecknets index och är helt enkelt tecknets plats i nummerordning där det första tecknet har index 0.
| Tecken | P | r | o | g | r | a | m | m | e | r | i | n | g |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Index | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 |
Text och index
Med hjälp av vad som kallas för en range på engelska, ungefär intervall eller område på svenska, så kan man klippa ut en del av en sträng.
string text = "Programmering";
// Klipp ut en ny text från index 2 och 3
string delAvText = text[2..4]; // og
Console.WriteLine(delAvText);
// Skriv ut variabeln text från index 5 till slutet
Console.WriteLine(text[5..]); // ammering
// Skriv ut variabeln text från index 0 till 6, alltså de första 7 tecknen
Console.WriteLine(text[..7]); // Program
Börjar på bokstaven nr 2
(bokstaven finns kvar)
Slutar på bokstaven 4
(bokstaven försvinner)
Text och index
Utveckla vidare så kan man leta efter tecken i en sträng.
För att åstadkomma detta använder programmet också en metod som kan användas med strängar som heter IndexOf och letar reda på den första förekomsten av ett tecken eller sträng inuti en annan sträng.
Console.WriteLine("Vänligen skriv in ditt förnamn och efternamn");
string helaNamnet = Console.ReadLine();
// Hitta mellanslaget i namnet
int mellanslagsIndex = helaNamnet.IndexOf(" ");
// Ta reda på förnamn och efternamn
string förnamn = helaNamnet[..mellanslagsIndex];
string efternamn = helaNamnet[(mellanslagsIndex + 1)..];
Console.WriteLine("Ditt förnamn är " + förnamn + ".");
Console.WriteLine("Ditt efternamn är " + efternamn + ".");index+1 så att du får index som är efter mellanslag
14. Loopar
while
for
do while
Vilken loop ska man använda?
Vad är en Loop
- När man vill upprepa en operation eller sekvens flera gånger så använder vi av oss en loop.
- Loopar är ett sätt att upprepa en operation ett viss antal gånger.
- Det finns olika sorters loopar som används beroende om man vill att en operation ska utföras.
- De tre vanligaste looparna
- While-loopen
- For-loopen
- Do-loopen
Hur fungerar en Loop
En loop kan illustrera med hjälp av flödesschemat
- Programsekvensen börjar vid Start och kontrollerar sedan ifall villkoret är uppfyllt.
- Ifall villkoret är uppfyllt, true (sant) så utförs operationen, är villkoret inte uppfyllt false (falskt) så går programmet vidare.
- Loopen upprepar sedan processen och går tillbaka och kollar ifall villkoret är uppfyllt.

Sant
Falskt
While-loop
- While-loopen används för att upprepa en sekvens av operationer flera gånger.
- Detta möjliggör generella och dynamiska program eftersom kod kan återanvändas ett ex antal gånger.
- Om antalet inte är fast värde, rekommenderas while-loop.
- While-loopen skapas med det reserverade ordet while, följt av ett villkor inom parantes.
- Inom måsvingarna specificeras alla operationer som ska exekveras (utföras) om och om igen, så länge som villkoret är uppfyllt (true).
while (villkor) {
operationer
}While-loop - Exempel
- Exemplet skriver ut “Hello, World!” så länge villkoret är uppfyllt, det vill säga så länge som variabeln i är mindre än 5
- Programmet kommer alltså skriva ut textraden “Hello, World” fem gånger och sedan avsluta while-loopen.
int i = 0; // Deklarerar variabelen i, tilldelas 0.
while (i < 5) // Så länge i är mindre än 5, ska loppen köras.
{
Console.WriteLine("Hello, World!"); // Skriver ut "Hello, World!".
i++; // i = i + 1
}i++; ökar i med ett varje gång den körs
Så i++; funkar på samma sätt som i=i+1;
i++;i=i+1;While-loop - Exempel
int i = 0;
while (i < 5)
{
Console.WriteLine("Hello, World!");
i++;
}Skapar variablen i och innehåller siffran 0
Kollar om i är större än 5
"slutar på när i är 4"
Ökar i med 1
i=i+1;
For-loop
- For-loopen används när man vet hur många gångar loopen ska köras
- For-loopen börjar med att kolla om ett villkor är uppfyllt, true.
- Ifall villkoret är uppfyllt (sant) så kommer operationerna att utföras.
- När operationerna är utförda ökas ett värde, och går till början av for-loopen igen.
- Är villkoret fortfarande uppfyllt (efter att initialvärdet har ändrats), så utförs operationerna igen. Detta fortsätter så länge villkoret är uppfyllt.
- När villkoret inte längre är inte uppfyllt, false, (falskt) så går programmet vidare.

Sant
Falskt
For-loop
- For-loopens "huvud" har tre komponenter:
- Startvärde: anger vid vilket värde som loopen börjar räkna ifrån, ofta int i = 0.
- Villkor: avgör vilket logiskt villkor som ska vara uppfyllt för att exekvera loopen, t.ex. en variabel som är mindre än ett visst värde.
- Förändring: säger hur initialvärdet ska förändras, t.ex. öka, minska osv.
for (startvärde; villkor; förändring){
operation / operationer
}For-loop
-
Startvärdet: vilket nummer ska loopen starta på och för det mesta så skapar man en ny variabel, går även att använda en redan deklarerad variabel. int i = 0;
-
Villkor: Här anger man hur många gånger loopen ska upprepas
i < 5, det vill säga fem gånger i detta exempel.
- Förändring: specificerar man hur mycket som variabeln ska ändras efter varje loop, i detta fall öka med 1.
// for-loopen upprepar operationen så länge som i är mindre än 5
for (int i = 0; i < 5; i++)
{
// Skriver ut textsträngen "Räknare: " samt värdet på variabeln i.
Console.WriteLine("Räknare: " + i);
}For-loop
Skapar variablen i och innehåller siffran 0
for (int i = 0; i < 5; i++)
{
Console.WriteLine("Räknare: " + i);
}Kollar om i är större än 5
"slutar på när i är 4"
Ökar i med 1
i=i+1;
Do While-loopen
- En do while-loop utför först det som finns i loopen och kollar sedan om den ska försätta.
- Detta leder till att do while-loopen alltid körs minst en gång
- Är användbar då vi vet att en operation av en while-loop ska utföras innan villkoret för loopen ska kontrollerats.
Do While-loopen
- Do-loopen börjar med att utföra en sekvens av operationer.
- När operationerna är utförda, kontrollerar do-loopen om ett villkor är uppyllt eller inte.

- Är villkoret uppfyllt så utförs sekvensen av operationer igen.
- Är villkoret inte uppfyllt, fortsätter programmet som vanligt.

Sant
Falskt
Do While-loopen
- Do-loopen har många likheter med while-loopen, men notera skillnaderna i deklarationen.
- Innanför måsvingar specificerar man ett kodblock, en sekvens av operationer som ska utföras.
- Detta kodblock kommer utföras minst en gång.
- Är detta villkor uppfyllt, så kommer kodblocket utföras återigen.
do
{
operationer
} while (villkor);Do While - exempel
int i = 0;
// Start på Do-loopen
do
{
// skriver ut text och variablen
Console.WriteLine("i har värdet: " + i);
i++; // ökar i med 1
} while (i < 3); // Kontrollerar om värdet på i är mindre än 3
Do While
int i = 0;
do{
System.out.println("i har värdet: " + i);
i++;
}while (i < 3);
Skapar variablen i och innehåller siffran 0
Kollar om i är större än 5
"slutar på när i är 4"
Ökar i med 1
i=i+1;
Do While - Exempel
Console.WriteLine("Skriv ett tal: ");
int j = int.Parse(Console.ReadLine());
do
{
Console.WriteLine("i: " + j);
j++;
} while (j < 10);
Console.WriteLine("Värde efter loopen: " + j);Console.WriteLine("Skriv ett tal: ");
int i = int.Parse(Console.ReadLine());
while (i < 10)
{
Console.WriteLine("i: " + i);
i++;
}
Console.WriteLine("Värde efter loopen: " + i);while-loop
do while-loop
Vilken loop ska man använda?
| Typ av loop | Används när man... |
|---|---|
| while | ... inte vet hur många gånger loopen behöver köras. |
| for | ... vet hur många gånger loopen behöver köras. |
| do while | ... inte vet hur många gånger loopen behöver köras men man vill vara säker på att den körs minst en gång. |
15. Flödesschema
Flowchart - Flödesschema
- Flödesschema är ett diagram som visar en process, ett system eller en datoralgoritm.
- Flödesscheman använder rektanglar, ovaler, diamanter och pilar för att definiera typ av steg.
- Om vi tar hänsyn till alla olika former av flödesscheman, är de ett av de vanligaste diagrammen på planeten, som används av både tekniska och icke-tekniska personer inom många fält.
Flowchart - Flödesschema



In- och output anges med denna symbol
Programet
startar eller slutar
Pilar sammanbindningen flödesdiagrammen och ger en bättre överblick över programmet än vad pseudokod gör.
Flowchart - Flödesschema


Något utförs.
Kallas process och rymmer beräkningar och händelser som inte omfattas av de andra symbolerna, d.v.s ej val eller in- och utput.
Ett val mellan två alternativ.
Denna symbol betyder val eller beslut.
(if och switch) men även utgöra en del av en loop (for, while och do..while).
Flowchart - Flödesschema

if (tal < 10)
{
tal = 10;
}Flowchart - Flödesschema

if (tal < 10)
{
tal = 1;
}
else
{
tal = tal / 10;
}
Flowchart - Flödesschema
do{
System.out.print(tal);
tal++;
}while(tal<10);while(tal<10){
System.out.print(tal);
tal++;
}

Flowchart - Flödesschema

15. Figuruppgifter
Introduktion
-
Ladda ner projektet figurUppgifterna_C.zip
-
Zippa upp mappen och lägg i mappen repos
-
C:\Users\hakan.brorson_ksgyf\source\repos
-
Öppnare i Visual Studio välj "Open a local folder"


Introduktion
Viktigt att tänka på!
-
Alla koordinater anges från fönstrets övre vänstra hörn till figurens övre vänstra hörn.
-
x ökar åt höger.
-
y ökar nedåt. (tvärtemot matematikens värld)
-
Så längst upp till vänster ligger koordinaten (0,0)
X
Y
Kommando för rita
| SetColor(Color.blue) | Från och med nu ritas allt med blått. |
|---|---|
| DrawRect(x, y, bredd, höjd) | Icke ifylld rektangel, värden sätts med (int). |
| DrawOval(x, y, bredd, höjd) | x,y anges även här till ett tänkt “hörn”. |
| FillRect() och FillOval() | För att rita “tårtbitar” eller “glada munnar”. |
| DrawLine(x1,y1, x2,y2) | En linje från punkt ett till punkt två. |
Egna Färger - Color myColor
| SetColor(255,255,0); | Ange RGB med int 0-255 |
|---|---|
| SetColor(1f, 0.5f, 0); | Ange RGB med float 0-1 |
| SetColor(myColor); | Notera att Color inte behövs framför myColor |
Figuruppgifterna
- En liten bit ner i funktionen står en rad if-satser. Varje if-sats motsvarar en uppgift.
-
De fem första uppgifterna är redan påbörjade.
Vill man lösa en annan uppgift skriver man dit en ny if-sats med uppgiftens nummer.
Så här ser första if-satsen ut:
if (figurNr == 1)
{
// Ritar en svart kvadrat.
// Hur gör du fler utan att skriva DrawRect fler gånger?
SetColor(Color.Black);
DrawRect(250, 200, 40, 40);
}Figuruppgifterna
-
När programmet körs första gången så syns ett fönster med en scrollist längst ner som står på noll. Fyrkanten som ritas inuti if-sats noll syns i fönstret.
-
Genom att dra i scrollisten så ser man det som ritas i de andra if-satserna. Alltså elevens lösningar på de andra uppgifterna.
Regler
-
Eleven ska rita upp figurerna som hittas i “prisskåpet”.
-
Den enda grundregeln som finns är att ett ritkommando (t.ex. drawRect eller fillOval) bara får användas EN gång per uppgift.
-
DrawRect och DrawOval får såklart användas en gång vardera men inte mer.
-
Uppgifterna måste lösas genom att loopa och använda if-satser och variabler.
-
Eleven får göra hur som helst så länge hen håller sig inom if-satsen för den uppgiften.
-
För en större utmaning finns avancerade regler på de flesta uppgifter.
-
För det mesta spelar inte storlek eller färg så stor roll på uppgifterna, men en del uppgifter är det viktigare på. En del uppgifter blir märkbart lättare om
Uppgift 1
Använda ritkommando EN gång.
if (figurNr == 1)
{
// Ritar en svart kvadrat.
SetColor(Color.Black);
DrawRect(220, 200, 40, 40);
}
Fortsätt med Uppgift 1 på nästa slide
Uppgift 1
Du får inte använda något ritkommando mer än EN gång.
Avancerat: Du får bara använda EN variabel: loopvariabeln.
if (figurNr == 1)
{
// Ritar en svart kvadrat.
// Hur gör du fler utan att skriva DrawRect fler gånger?
SetColor(Color.Black);
for (int i = 220; i < 571; i += 70)
{
DrawRect(i, 200, 40, 40);
}
}
16. Array
Array
-
Vi har tidigare spara värden i variabler, exempelvis:
int tal = 10; -
Variabeln tal, av typen int (heltal), tilldelas värdet 10.
-
Men tänk om vi har hundra värden som vi vill spara samtidigt? Tusen värden? En miljon värden?
-
För att kunna hantera en väldigt stor mängd av data samtidigt, använder vi oss av arrayer
(även kallat fält eller listor). -
Nu kan vi börja spara flera värden i en och samma variabel.
int[] arr = {22, 8, 97, 3};Array - Hur Fungerar
-
Om man tänker en variabel som ett objekt/låda som innehåller ett värde.
-
Array istället har flera lådor "Byrå".
-
För att komma åt en låda,
så har varje låda ett index.
-
Index börja alltid på 0
1
0
1
2
3


4
5
6
7
8
9
10
11
Array - Tänka på
-
Efter vald datatyp så behöver vi skriva två hakparenteser [ ] så kompilatorn vet att det är ett fält vi vill initiera.
-
Indexering börjar alltid på 0, det vill säga första värdet får index 0. Andra värdet får index 1 och så vidare.
-
Alla värden i en array måste vara av samma datatyp. Exempelvis kan du inte spara en double i ett fält med datatypen int.
-
Det går inte ändra antal element i en array efter att den har skapats.
Array - Skapa
-
En array är uppbyggd:
datatyp[] namn = new datatyp[ antal element ];- Först anger man vilken datatyp fältet innehåller (int)
- följt av en hakparantes [ ].
- Sedan ger man ett namn
- följt av = new int
Datatypen måste vara densamma vid båda tillfällena. - Avslutningsvis anger man antal element som arrayen ska innehålla inom hakparantes [4]
- följt av semikolon.
int[] field = new int[4];Array - Skapa
-
Vi har nu skapat ett fält av datatypen int med namnet field, fältet innehåller fyra element och under varje element står index för respektive element.
-
Eftersom vi inte initierade något startvärde för elementen i fältet så har de alla automatiskt tilldelats värdet 0.
int[] field = new int[4];field[1]
field[0]
field[2]
field[3]
0
0
0
0
field
Array - Skapa
-
Nu kan vi börja att spara ned värden i fältet
-
Varje element nås med hjälp av dess index.
field[0] = 22;
field[1] = 8;
field[2] = 97;
field[3] = 3;field[1]
field[0]
field[2]
field[3]
22
8
97
3
field
Array - Skapa
-
Det går att skapa en array och tilldela på samma gång.
Datatyp[] namn = { värde, värde, värde, värde, … } ;field[1]
field[0]
field[2]
field[3]
22
8
97
3
field
int[] field = {22, 8, 97, 3};- Med hjälp av en rad kod har vi skapat en array av datatypen int med namnet field, fältet innehåller fyra element och har initierade värden.
Array - Vilken metod
-
Ifall arrayen inte har initierade värden eller många element som inte har initierade värden så är metod 1 att föredra.
int[] field = new int[4];int[] field = {22, 8, 97, 3};field[0] = 22;
field[1] = 8;
field[2] = 97;
field[3] = 3;- Känner du dig osäker på fält och hur de är uppbyggda och deklareras så använd dig av metod 1. Den tar lite längre tid att deklarera och är mer utförlig, men det kan bidra till att öka förståelsen.
- Ett fält där varje element har ett startvärde så är metod 2 smidigare och snabbare att använda sig av.
17. Array med loopar
Hitta position
Söka position
Hitta jämna tal - Modulus
Array - Summera
-
Nu ska vi testa att summera alla heltal i en array.
-
Vi en variabel med namn total och en array med namn field som innehåller fyra heltal:
int total = 0;
int[] field = {20, 33, 40, 55};- För att räkna ut summan av alla tal i arrayen, kan vi loopa igenom alla tal med en enhanced for-loop och spara summan i variabeln total:
for (int i = 0; i < field.Length; i++)
{
total = total + field[i];
}
Console.WriteLine("Total: " + total);Utskrift:
"Total: 148Får automatisk längden på loopen
Array - Söka position
- Om vi ska söka igenom en array, t.ex. leta efter positionen för ett visst element.
- Vi kommer använda oss av en while-loop, för att hitta positionen, när någon av de villkoren inte uppfylls så avbryts while-loopen.
- För att se ifall elementet på den positionen i array överensstämmer med det eftersökta värdet så kommer vi använda en if-sats som ifall värdet hittas ändrar boolean variabeln till sant och loopen kommer sluta. Skulle värdet inte överensstämma så kommer positionsvariablen att öka med ett för att kolla nästa position i fältet.
Exempel på nästa slide
Array - Söka
int[] field = { 5, 6, 33, 54, 77, 87, 32, 78, 98 }; // Array vi ska söka igenom
int searched = 78; // Det eftersökta värdet
int pos = 0; // För att kunna spara ned positionen (index)
Boolean found = false;
while (pos < field.Length && !found)
{
if (field[pos] == searched)
{
found = true; // Vi har hittat värdet
}
else
{
pos++; // Öka positionsvariabeln
}
}
// Om vi sedan vill skriva ut positionen
if (found == true)
{
Console.WriteLine("Värdet hittades på index: " + pos);
}
// Eller om vi inte hittade värdet
else
{
Console.WriteLine("Värdet kunde ej hittas i den genomsökta array");
}Array - Vanliga Fel
-
Ett vanligt misstaget är när man försöka komma åt ett element som inte existerar.
-
Om vi tar ett enkelt exempel så kommer det vara enklare att sedan när vi går in på vanliga algoritmer.
-
Vi skapar ett fält och tänker sedan spara ned ett värde i fältet.
int[] field = new int[10];
int[10] = 5;Detta ger en error för field har 10 element, med index räckvidd från 0 till 9.
0,1,2,3,4,5,6,7,8,9
Array - Exempel Jämna Tal
Vi ska skriv ett programsegment som skriver ut antalet element som är udda tal.
int[] field = {2, 20, 3, 13, 15, 3, 9, 10, 1, 5, 8};int count = 0;Vi skapa en räknare som vi kan uppdatera för varje udda tal som vi hittar.
Vi kommer använda oss av en for-loop för att gå igenom Arrayen.
for (int i = 0; i < field.Length; i++)
{
// Om element ej är jämnt delbart med 2 (dvs ojämnt), öka Count med 1.
if (field[i] % 2 == 0)
{
count++;
}
}
Console.WriteLine(count);-
Inne i for-loopen använder vi en if-sats med villkoret att ifall talet är ej jämnt delbart med 2, det vill säga ett ojämnt tal, så kommer vi öka räknaren count med ett.
Förklaring på modulus på nästa sida
Array - Exempel Jämna Tal
Vi är två personer som ska dela på äpplen, får bara ta hela äpplen
Modulus

= 0
rest (det som blir över)


= 1


= 0


= 1









if(2 % 2 == 0)
Sant
Falskt
Sant
Falskt
Skriver i C# och får ut om det är true eller false
if(3 % 2 == 0)
if(4% 2 == 0)
if(5 % 2 == 0)
Hur blir det om man kolla mot 3 istället?
Nästa slide
Nu kolla vi mot 3 istället
Modulus

































= 0 if(3 % 3 == 0) True
= 1 if(4 % 3 == 0) False
= 2 if(5 % 3 == 0) False
= 0 if(6 % 3 == 0) True
= 1 if(7 % 3 == 0) False
= 2 if(8 % 3 == 0) False
-
En illustrera på det här exemplet med en figur kan vi tänka oss det som följande.
-
Notera hur counter (räknaren) ökar med +1 för varje udda tal.

Array - Exempel Jämna Tal
-
Skapa en array och fyll med namnen nedan:
-
Givet array names i koden nedan, som innehåller namn.
Array - Exempel Omvänd
{"Erik", "Stina", "Tom", "Gustav", "Amanda", "Elin", "Rebecca", "Hampus"};-
Hampus
-
Rebecca
-
Elin osv …
Lösning på nästa slide
- För en loop som skriver ut namnen i omvänd ordning
- Det vill säga:
Array - Exempel Omvänd
String[] names = {"Erik", "Stina", "Tom", "Gustav", "Amanda",
"Elin", "Rebecca", "Hampus"};
for (int i = 0; i < names.Length; i++)
{
Console.WriteLine(i + 1 + ". " + names[names.Length - 1 - i]);
}- i+1 i utskriften så det börja på 1 (i är ju 0)
- "names.lenght" är 8 vilket är storleken på arrayen
- Arrayens går från 0 till 7 och då måste vi minska med ett.
"names.lenght – 1" (8-1) - Lägg sedan till variablen i "names.lenght – 1 – i" (8-1-1)
- i är 0 första rundan, nästa 1,2,3,4....
Lösning:
-
Skriv ett program som gör så att de element med jämna index (0, 2, 4 … ) tilldelas deras respektive indexvärde samt att de element med ojämna index får värdet ett.
-
Med andra ord:
Array - Udda och Jämna
int[] field = new int[25];Index 0: 0
Index 1: 1
Index 2: 2
Index 3: 1
Index 4: 4
Index 5: 1
Index 6: 6 osv..
int[] field = new int[25];
// Gå igenom array
for (int i = 0; i < field.Length; i++)
{
// Kolla ifall index är jämnt
if (i % 2 == 0)
{
field[i] = i;
}
// Om inte jämnt ge det värdet 1
else
{
field[i] = 1;
}
// Skriva ut index med respektive värde
Console.WriteLine("Index " + i + ": " + field[i]);
}
Lösning:
Array - Udda och Jämna
18. Array - Flerdimensionell
Array - Flerdimensionell
-
Vi betraktade en Endimensionella Array som listor med värden.
-
På samma sätt kan vi se en Flerdimensionell Array i två dimensioner som ett rutnät
(matriser med rader och kolumner). -
Det medför då att vi får fler index och det brukar beskrivas som fält av fält vilket medför att raderna kan ha olika längd.
Array - Skapa Flerdimensionell
-
Tvådimensionella arrayer är lämpliga att använda om man har information som är tvådimensionell, t.ex. hur en karta ser hur.
-
Flerdimensionella arrayer används ofta tillsammans med nästlade loopar.
// Skapa en "karta" med 6 tal
int[,] talkarta = new int[2, 3];
talkarta[0, 0] = 1;
talkarta[0, 1] = 2;
talkarta[0, 2] = 3;
talkarta[1, 0] = 4;
talkarta[1, 1] = 5;
talkarta[1, 2] = 6;
// Talet 5 kommer att skrivas ut
Console.WriteLine(talkarta[1, 1]);Array - Skapa Flerdimensionell
// Skapa en karta med strängar
string[,] karta = new string[3, 3];
karta[0, 0] = "A";
karta[1, 0] = "B";
karta[2, 0] = "C";
karta[0, 1] = "D";
karta[1, 1] = "E";
karta[2, 1] = "F";
karta[0, 2] = "G";
karta[1, 2] = "H";
karta[2, 2] = "I";
// Skriv ut innehållet i kartan med strängar
for (int y = 0; y < 3; y++)
{
for (int x = 0; x < 3; x++)
{
Console.Write(karta[x, y]);
}
Console.WriteLine();
}
| y / x | 0 | 1 | 2 |
|---|---|---|---|
| 0 | A | B | C |
| 1 | D | E | F |
| 2 | G | H | I |
Array - Skapa Flerdimensionell
Vi skapar en tvådimensionell array (en tom array) som har 4 rader och 3 kolumner.x
int[,] twoField = new int [4,3];
Vill vi sedan redigera eller använda ett element i matrisen så gör vi det enkelt på samma sätt som för endimensionella fallet.
// Sätter in två värden i matrisen
twoField[0,2] = 15;
twoField[2,1] = 7;
// Här lägger vi ihop två celler
int sum = twoField[0,2] + twoField[2,1];
// sum = 15 + 7 = 22
int multi = twoField[0,2] * twoField[2,1];
// multi = 15 * 7 = 105
Array - Skapa Flerdimensionell
- Vi kan också skapa flerdimensionell array med metod 2 som vi såg för endimensionella fallet. Där vi initierar värden direkt när vi skapar array.
int[,] twoField2 = { {2, 3},
{34, 56},
{44, 654, 43},
{2, 3, 23, 44}};
- Viktigt! - vi inte har skapat en 4 x 4 matris utan att raderna har olika många kolumner.
- Till exempel om vi skulle vilja lägga till ett element på index [ 1 ,2 ]
- så kommer vi att få OutOfBoundsException.
- Vi behöver i såna fall skapa en ny array för att kunna lägga till fler index.
twoField2[1][2] = 15;
19. Arraylist

Arraylist
-
ArrayList är en inbyggd standardklass i Java som gör det enkelt och smidigt att arbeta med data som kan komma att förändras i antal under arbetets gång.
-
Om vi behöver förändra hur många lagringsplatser vi har.
-
Så vet vi från början att vi kan komma att behöva ändra storleken på antalet lagringsplatser så är en ArrayList att föredra över en array.
-
Vi kan illustrera en ArrayList på liknande sätt som en Array och tänka oss att vi har flera lagringsplatser som bara forsätter

Arraylist - Skapa
-
Det är några saker som skiljer sig från när vi deklarerar en ArrayList gentemot en Array.
-
Istället för [ ], som vi använde för en Array ska vi nu använda, < > istället.
-
Då vi endast kan spara objekt i en ArrayList så behöver vi ange omslagsklassen vid deklarationen, det vill säga att vi inte kan spara primitiva datatyper i en ArrayList.
-
Notera parenteserna på slutet av deklarationen också
ArrayList<Integer> numbers = new ArrayList<Integer>();
ArrayList<Character> initials = new ArrayList<Character>();Arraylist - Egenskaper
-
Java har ett par inbyggda kommandon i (containerklassen)
-
Dessa används bland annat för att ta bort, lägga till, modifiera eller läsa av värden i en lista
-
Det är samma kommandon för ArrayList som för List, förutom namnet på paketet vi importerar
-
Om vi väljer att arbeta med ArrayList så behöver vi först importera paketet java.util.ArrayList
-
Vi kan sedan skapa en lista med Integers som inte kommer att innehålla några element till en början.
// Importera längst upp på sidan
import java.util.ArrayList;
ArrayList <Integer> listEx = new ArrayList<Integer>();Arraylist - Lägga till, tabort
-
För att lägga till ett element, "X", längst bak i listan använder vi den inbyggda metoden
-
Vi får då resultatet ( sista platsen i listan med index: n)
listEx.add(X);
- Man kan även välj vilken position.
- Man lägger först vilken
plats sen var som ska vilken
plats och sedan vad vi ska
stoppa på den platsen.
listEx.add(Z,X);
- Om man vill ta bort ett element använder man remove
listEx.remove(Z);Arraylist - Läsa Av, Modifiera
-
Läsa av och modifiera element
listEx.get(Z);
// Resultatet blir elementet på plats nr Z i listan
listEx.set(Z,X);
// Ersätter elementet på plats Z i listan med X-
Fler användbara egenskaper för arraylist
listEx.size();
// Ger antalet element i listan
listEx.indexOf(X);
// Returnerar index av första förekomsten av elementet X,
// ifall X inte finns i listan så returneras -1Arraylist - Loopa igen
-
Om vi vill gå igenom en lista från början till slut för att t.ex. summera ihop elementen i listan eller kanske för att skriva ut elementen så gör vi det på samma sätt som för ett fält, vi kan använda en for-loop.
int total = 0; // För att kunna summera ihop värdena
for (int i = 0; i < listEx.size(); i++) {
total = total + listEx.get(i); // Räkna ihop totalen
System.out.println(listEx.get(i)); // Skriva ut varje element
}20. Metoder
Metod eller funktion
Metod kan vi börja att se som återvinning av kod.
Istället för att skriva liknande kod på flera ställen så kan vi istället göra en metod.
Metoden kan vi anropa istället för att skriva koden om och om igen.
Metod - exempel 1
Om vi vill skriva ut veckodagarna två gånger men inte direkt efter varandra.
Console.WriteLine("Måndag");
Console.WriteLine("Tisdag");
Console.WriteLine("Onsdag");
Console.WriteLine("Torsdag");
Console.WriteLine("Fredag");
Console.WriteLine("Lördag");
Console.WriteLine("Söndag");
//Här görs något annat, t.ex inmatning eller beräkningar
//för exemplet är det inte instressant.
Console.WriteLine("Måndag");
Console.WriteLine("Tisdag");
Console.WriteLine("Onsdag");
Console.WriteLine("Torsdag");
Console.WriteLine("Fredag");
Console.WriteLine("Lördag");
Console.WriteLine("Söndag");Metod - exempel 1
Istället för att skriva ut samma kod två gånger så kan vi istället
"kapsla in" koden i en metod och anropa metoden.
Utanför Main, inuti class
Main
Skapa metoden
SkrivUtVeckodagar();
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace Exmpel1
{
class Program
{
static void SkrivUtVeckodagar()
{
Console.WriteLine("Måndag");
Console.WriteLine("Tisdag");
Console.WriteLine("Onsdag");
Console.WriteLine("Torsdag");
Console.WriteLine("Fredag");
Console.WriteLine("Lördag");
Console.WriteLine("Söndag");
}
static void Main(string[] args)
{
SkrivUtVeckodagar();
//Här körs annan kod
SkrivUtVeckodagar();
}
}
}Metod - exempel 2
Vi vill skriva ut texten
"Hello" tio gånger,
texten "world" nio gånger texten "!" åtta gånger.
for (int i = 0; i < 10; i++)
{
Console.WriteLine("Hello");
}
for (int i = 0; i < 9; i++)
{
Console.WriteLine("World");
}
for (int i = 0; i < 8; i++)
{
Console.WriteLine("!");
}Metod - exempel 2
Vi vill skriva ut texten
"Hello" tio gånger,
texten "world" nio gånger texten "!" åtta gånger.
static void UpprepaText(string text, int antal)
{
for (int i = 0; i < antal; i++)
{
Console.WriteLine(text);
}
}
static void Main(string[] args)
{
UpprepaText("Hello", 10);
UpprepaText("World", 9);
UpprepaText("!", 8);
}
Metoden använder två inparametrar.
En string för det som ska skrivas ut och en int för antalet gånger.
Metod - exempel 3
Vi vill räkna ord i en text. Vi kommer att använda metoden Split
Delar på mellanslag och vi får ut en array av strings med antal ord.
Void inget värde i retur
int returnera ett värde.
static int AntalOrd(string text)
{
string[] delar = text.Split(' ');
return delar.Length;
}
static void Main(string[] args)
{
Console.Write("Mata in en text: ");
string text = Console.ReadLine();
Console.WriteLine("Du matade in " + AntalOrd(text) + " ord!");
}Metod - Returparameter
Vanligaste anledningen till att man vill ha en returparameter är om metoden skall skapa något nytt, t.ex. ett resultat av en beräkning som i exempel 3.
Om man inte ska returnera något så deklarera metodens med void.
Metoder som returnera något måste avslutas med return följt av en variabel.
Det finns ingen begränsning på inparametrar.
Men man måste anropa metoden med lika många och av samma datatyp.
Metod - Överlagrade
Överlagrade metoder bär samma namn som en tidigare metod.
Man kan deklarera två exakt likadana metoder, det som ska skiljas är antalet inparametrar och vilken datatyp
Skillnaden mellan 5 och 5.0 är att 5.0 är ett decimaltal (double), 5 int
static void Main(string[] args)
{
DoSomething();
DoSomething(5);
DoSomething(5.0);
DoSomething(3, "hej");
}
static void DoSomething()
{
//Ingen inparameter alls
}
static void DoSomething(int i)
{
//Inparameter av typen int
}
static void DoSomething(double i)
{
//Inparameter av typen double
}
static void DoSomething(int i, string s)
{
//Två inparametrar
}21. Windows Form Application
GUI - Graphic User Interface
Vi kommer att göra en enkel miniräknare
GUI - Graphic User Interface
- Vi börjar med att skapa ett nytt project
- Windows Forms App (.NET Framework)


GUI - Graphic User Interface
Klicka på Create
Nu har vi skapa en Form


GUI - Graphic User Interface
Till vänster har vi Toolbox, där har vi knappar och textboxar m.m.
Klicka på häftstiftet för att låsa fliken

GUI - Add Two Numbers
label1 - Text: First Number
label2 - Text: Second Number
label3 - Text: Result
label4 - Text: Name: lblResult
button1 - Text: Sum - Name: btnSum
textBox1 - Name: txtNumber1
textBox2 - Name: txtNumber2

GUI - Add Two Numbers
Dubbel klicka på button "sum" vilket gör så att du kan skriva kod.
Skriv in följande kod:
private void btnSum_Click(object sender, EventArgs e)
{
int num1, num2, sum;
num1=Convert.ToInt32(txtNumber1.Text);
num2 = Convert.ToInt32(txtNumber2.Text);
sum = num1 + num2;
lblResult.Text = sum.ToString();
}

GUI - MessageBox
MessageBox är en klass i C# som visar ett meddelande i ett eget liten fönster.
MessageBox används för att bekräftelser på en uppgift eller för att ge varningar innan en uppgift görs eller är klar.

GUI - MessageBox
Skapa ett nytt form.
Lägg till en button.
Dubbel klicka på button och lägg till koden:

private void button1_Click(object sender, EventArgs e)
{
MessageBox.Show("Hello World");
}GUI - MessageBox
MessageBox med Title
private void button1_Click(object sender, EventArgs e)
{
string message = "Simple MessageBox";
string title = "Title";
MessageBox.Show(message, title);
}
GUI - MessageBox Buttons
I en MessageBox så kan man även ha Yes och Cancel knappar
private void button1_Click(object sender, EventArgs e)
{
string message = "Do you want to close this window?";
string title = "Close Window";
MessageBoxButtons buttons = MessageBoxButtons.YesNo;
DialogResult result = MessageBox.Show(message, title, buttons);
if (result == DialogResult.Yes) {
this.Close();
} else {
// Do something
}
}- OK
- OKCancel
- AbortRetryIgnore
- YesNoCancel
- YesNo
- RetryCancel
Det finns några metoder på en MessageBox
GUI - MessageBox Icon
Det går även att lägga till iconer i en MessageBox
string message = "Do you want to abort this operation?";
string title = "Close Window";
MessageBoxButtons buttons = MessageBoxButtons.AbortRetryIgnore;
DialogResult result = MessageBox.Show(message, title, buttons, MessageBoxIcon.Warning);
if (result == DialogResult.Abort) {
this.Close();
}
elseif(result == DialogResult.Retry) {
// Do nothing
}
else {
// Do something
}
- None
- Hand
- Question
- Exclamation
- Asterisk
- Stop
- Error
- Warning
- Information
Det finns några ikoner på en MessageBox
Programmering 1 - C#
By Håkan Brorson
Programmering 1 - C#
En kurs på Lars Kaggskolan av Håkan Brorson
- 897