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 …
}
Else

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

Modulus - 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 = 4

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

  1. Programsekvensen börjar vid Start och kontrollerar sedan ifall villkoret är uppfyllt.
  2. Ifall villkoret är uppfyllt, true (sant) så utförs operationen, är villkoret inte uppfyllt false (falskt) så går programmet vidare.
  3. 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 ];
  1.  Först anger man vilken datatyp fältet innehåller (int)
  2. följt av en hakparantes [ ].
  3. Sedan ger man ett namn
  4. följt av = new int
    Datatypen måste vara densamma vid båda tillfällena.
  5. Avslutningsvis anger man antal element som arrayen ska innehålla inom hakparantes [4]
  6. 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: 148

Få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"};
  1. Hampus

  2. Rebecca

  3. 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 -1

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