Programmering 1

Innehållsförteckning

  1. Grunder
  2. Använda Visual Studio
  3. Ett första exempel: Programmet "Hello World"
  4. Variabler 
  5. Datatyper
  6. Typomvandling
  7. Vad är en operator?
  8. Aritmetiska operatorer
  9. Villkor
  10. Relationsoperatorer
  11. Villkor med flera alternativ
  12. Logiska operatorer
  13. Prioriteringsregler
  14. Introduktion till loopar
  15. while-loopen
  16. Förändringsoperatorer
  17. for-loopen
  18. Nästlade loopar
  19. Arrayer
  20. Metoder
  21. Stränghantering
  22. Flödesdiagram
  23. Namnkonventioner
  24. Facit

1. Grunder

Grunder

  • Om datorn, hårdvara och mjukvara
  • Källkod och maskinkod
  • Olika programmeringspråk
  • Kompilering
  • Programspråket C#
  •  Vad är .NET?

Datorn

En dator är en maskin som utför beräkningar och bearbetar data enligt givna instruktioner. Exempel på olika datorer är persondatorn, miniräknare, mobiltelefon, läsplatta eller spelkonsol.  

En dator består av hårdvara som processor, minneschip och andra elektroniska komponenter.

Den styrs av mjukvara, s.k. program, som kan användas till många olika tillämpningar. Ett program är en samling instruktioner som en dator kan tolka och utföra. De kan vara mycket enkla, som en enkel miniräknare, till att vara mycket komplexa och innehålla miljontals rader kod, som exempelvis ett ordbehandlingsprogram eller ett kraftfullt spel. 

Källkod och maskinkod

Ett program finns i två format, källkod och maskinkod. Maskinkod är 1or och 0or som bara datorn kan förstå. Eftersom det är väldigt jobbigt för oss människor att skapa maskinkod direkt så skrivs program i källkod.

Källkod kan man skriva som vanlig text i en ordbehandlare, rad för rad, i olika stycken (block). Det är viktigt att källkoden skrivs korrekt och med rätt ”grammatik vilket kallas syntax och som beror på det programmeringsspråk som används.

Källkod kan inte datorn förstå rakt av utan den måste översättas till maskinkod (kompileras) så att datorn kan köra programmet (kallas även exekvera). Programmet som översätter källkoden till maskinkod kallas för kompilator.

Programmeringsspråk

Det finns många olika programmeringsspråk; vissa riktar sig mer mot hårdvaran, så kallade lågnivåspråk, andra siktar på att vara enklare att producera och förstå, så kallade högnivåspråk.

Varje språk har sin egen kompilator, dock finns det utvecklingsmiljöer som stödjer användning av flera programspråk samtidigt. Microsoft Visual Studio är ett sådant (den utvecklingsmiljö vi ska använda).
Att använda ett lågnivåspråk kräver i allmänhet mer tid och leder lättare till programmeringsfel än om man skulle använda ett högnivåspråk. Fördelen är att programmeraren har god kontroll över hur programmet beter sig, och en duktig programmerare kan då utnyttja den tillgängliga hårdvaran bättre. Exempel på lågnivåspråk är Assembler, i vissa avseenden C/C++.
Programmeringsspråk som riktar sig mot många plattformar och har som mål att vara enklare att producera och förstå kallas för högnivåspråk. C# är ett högnivåspråk, liksom Java, C++, Python och Javascript.

Kompilering

Källkod måste översättas till maskinkod så att datorn kan tolka instruktionerna och köra programmet. Den översättningen kallas kompilering och kan ske i flera steg. Kompileringen genererar bl.a en fil med filändelsen .exe om programmet ska köras på Windows. Varje programspråk har sin egen kompilator och processen hur källkod kompileras till maskinkod ser därför olika ut.

Kompilera C# källkod

snake.cs

Källkod

snake.exe

CIL

snake.exe

CIL

MASKINKOD

101010...

KOMPILERING

PROGRAMMERARENS DATOR

ANVÄNDARENS DATOR

PROGRAMMET DISTRIBURAS ÖVER INTERNET ELLER DISK

JIT

("just-in-time"

kompilering)

 

När ett C# kompileras översätts det till CIL som står för Common Intermediate Language. Det gör det möjligt för programmet att vara plattformsberoende då det är på användarens dator programmet översätts till maskinkod med det som kallas för JIT.

C#

lite historia

  • Uttalas C-sharp
  • Skapades av Microsoft år 2000
  • Vidareutveckling av Java och C++
  • Språket utvecklas kontinuerligt, nu version 8.0 (2019)
  • Används för att bygga applikationer för desktop, backend, mobil, Unity :-)

C# .NET

  • C# är en del av plattformen .NET
  • Plattformen .NET innehåller en massa färdigskriven kod som underlättar för programmerare (ex skapa grafik, skriva till fil, e.t.c)
  • När du skriver program i C# är man beroende av .NET plattformen. Plattformar som vill köra .NET program behöver alltså ha .NET installerat. Det finns förinstallerad i många Windows-versioner, men kan också installeras på Mac OS och Linux.

2. Använda Visual Studio

Det program vi ska använda för att skriva och köra C# kod.

Visual Studio

programmet vi ska använda!

  • IDE, Integrated Development Environment
  • Används för att skriva C# program 
  • ... men kan användas till många fler programspråk

Installera Visual Studio

1. Ladda ner Visual Studio Community 2019 här:

    https://visualstudio.microsoft.com

2. Välj Download Visual Studio 👉 Community 2019

3. Öppna installationsfilen. Ett vitt fönster med                    Installing Visual Studio Community 2019

    dyker upp.

4. Markera rutan med rubriken .NET Desktop Development

5. Installationen kan ta ett tag. Starta programmet

    när den är färdig  👨‍💻

Visual Studio

  • Console Application
  • Windows Forms Application
  • WPF Application
  • Windows Store

Med Visual Studio kan man skapa många applikationer

Vi kommer att börja programmera konsolapplikationer. Då kan vi enklast fokusera på grunderna i programmering.

Olika typer av program

Konsolprogram

Graphical User Interface (GUI)

Komma igång med Visual Studio

1. Öppna Visual Studio Community 2019 och skapa nytt projekt

Komma igång med Visual Studio

2. Välj Console App (.NET Core) i listan av olika projekt man kan skapa

Komma igång med Visual Studio

3. Ge ditt projekt ett namn och var det ska ligga på datorn. Tryck Create.

 

Komma igång med Visual Studio

4. Mallen för att skriva ut "Hello World" i konsolen öppnas

 

Komma igång med Visual Studio

5. Kör Applikation genom att klicka på gröna pilen eller F5.

    Ett konsolfönster öppnas med utskriften Hello World.

 

3. Ett första exempel

Programmet "Hello World"

// Krävs för at kunna använda konsolen
using System; 
  
// Namnet på namnrymden 
namespace HelloWorld { 
      
    // klassnamnet
    class Program { 
          
        // Metoden Main(). Här börjar programmet köras!
        static void Main(string[] args) { 
              
            // Skriver ut texten "Hello World" i konsolen
            Console.WriteLine("Hello World!"); 
              
            // Hindrar konsolen från att stängas ner direkt
            Console.ReadKey(); 
        } 
    } 
} 

Program som skriver ut "Hello World" i konsolen

I början behöver vi endast fokusera på programblocket med rubrik Main

Programstruktur

  • Språklig text är uppbyggd av meningar som delas in i avsnitt med olika rubriker.
  • På samma sätt är programkod uppbyggd av satser och programblock.
 Programblock1 
 {
 	Sats1;
        Sats2;
        Sats3;
 }
 
 Programblock2 
 {
 	Sats4;
        Sats5;
 }
  • Ett programblock består av en rubrik som kallas programblockets huvud.
  • Det som står innan för klammerparenteserna { } tillhör blocket. Där kan man mellanslag, tabbar och tomma rader så att koden blir lätt att läsa.
  • En sats är en instruktion till datorn att utföra något. Alla satser i programblocket utförs i den ordning de står.
// Skriver ut texten "Hello World" i konsolen
Console.WriteLine("Hello World!"); 

Output

Det programmet skickar ut till användaren

4. Variabler

Variabler

  • I programmering är en variabel en lagringsplats för data.
  • Den håller en reserverad plats i datorns arbetsminne.
  • Namnet variabel kommer från att dess data kan förändras  under programkörningen.

Deklarera en variabel

Att reservera plats i minnet för ett värde kallas för att deklarera en variabel. Då måste man ange ett variabelnamn och variabelns datatyp. Vi kommer strax till att förklara vad en datatyp är.

string namn;

Datatyp

Variabelnamn

Tilldelning

Tilldelning är när ett värde sparas i en variabel. 

Värdet sparas till en plats i datorns minne.

namn = "Pikachu";

Variabelnamn

Värde

När man använder datatypen string måste man skriva dubbla citattecken runt värdet (texten) som man tilldelar variabeln.

namn = Console.Readline();

Input

Det användaren skickar till programmet

 Läser in text från användaren som tilldelas en variabel med namnet "namn"

/* Deklarera en variabel som hanterar
   text (datatypen string) */
string namn;

/* Input från användaren tilldelas 
   variabeln "namn" */
namn = Console.Readline();

// Output till användaren
Console.WriteLine("Hej " + namn + " !");

Exempel

Läs in text från användaren (input), tilldela värdet till en variabel och skriv ut variabelns värde till användaren (output)

"Sätta ihop" text och variabelvärden

string name = "John Doe";
string age = "19";

Console.WriteLine("Hej jag heter " + name + " och är " + age + " år gammal");

Görs med +-tecknet och kallas för stängkonkatinering

Initiering

När man deklarerar och tilldelar ett värde i samma sats

string pokemon = "Pikachu";

Variabelnamn

Värde

Datatyp

Deklarera flera variabler

 int tal1, tal2, summa;

Det går även bra att deklarera fler variabler på en och samma rad förutsatt att de är av samma datatyp

Regler för variabelnamn

  • Varje variabel måste ha ett namn som är unikt i sitt programblock.
  • Kan innehålla bokstäver, siffror och understrykningstecknet _
  • Det första tecknet får inte vara siffra
  • C# skiljer på stora och små bokstäver (case-sensitive)
  • Brukligt är att första bokstaven är liten (gemen)
// Två snedstreck markerar kommentar för en rad

/* Snedstreck + asterix markerar kommentar för 
   för flera rader
*/

Kommenterar

  • Text som ignoreras av själva programmet
  • Bra för att anteckna, skriva förklaringar för sig själv och någon annan som ska förstå koden

5. Datatyper

Datatyper

  • Olika värden i datorns program kräver olika mycket plats
  • Exempelvis, ett heltal som 3 tar mindre plats än ett decimaltal som 3.14
  • För att datorn ska hantera minne på ett effektivt sätt anger man alltid vilken datatyp en variabel har
  • I den här kursen kommer vi behandla datatyperna string, char, int, double och bool

string

En string är en eller flera tecken som bildar en text (teckensträng). När man anger en strängs innehåll använder man dubbla citattecken " " runt texten.

string name = "John Doe";

char

char är en förkortning av character som betyder tecken. En char kan endast innehålla ett tecken. När man anger en char använder man enkla citattecken ' ' runt innehållet. 

char sign = '+';

int

int är en förkortning för integer som betyder heltal. Den kan ge högst värdet 2 147 483 647. När man använder int till räkneoperationer kan bara alltså bara heltal hanteras. 

int number = 43;

double

Till skillnad mot int kan double hantera decimaltal. När man ska decimalkommat skriver man punkt. Bra att använda när man vill räkna med decimaltal. Exempelvis ger division oftast ett decimaltal.

double number = 3.14;

bool

bool är en förkortning för boolean och är döpt efter George Boole som studerade logik. Det är en datatyp som bara kan innehålla ett av värdena true (sant) eller false (falskt). Om vi skulle jämföra om 5 > 4 skulle detta ge true. 3 < 2 skulle ge false.

bool gameOver = false;

Exempel

int v.s double

int hanterar enbart heltal. double kan även hantera decimaltal. Vad blir resultatet av följande uträkningar?

int sträcka = 10;
int tid = 4;
int hastighet = sträcka/tid; 


double sträcka = 10;
double tid = 4;
double hastighet = sträcka/tid; 


(avrundas neråt

till ett heltal)

Hastighet = 2.5

Hastighet = 2

Olika datatyper

Datatyp Värdegräns Utrymme
string text 2 byte / tecken
char ett tecken 2 byte
int heltal ± 2^8 4 byte
double decimaltal
 ±1.7×10^308
8 byte
bool true eller false 1 byte

Man mäter datorns minneskapacitet i byte.

Variabelsången :-)

6. Typomvandling

Typomvandling

Ibland behöver man omvandla från ett värde till en annan. Det kallas för typomvandling. Exempelvis läser metoden Console.ReadLine() endast in datatypen string. Om vi läsa in ett tal som vi vill utföra en räkneoperation med måste  en typomvandling göras. 

string input = Console.ReadLine();

int nowAsInt = Convert.ToInt32(input);

Typomvandlar

Till vilken datatyp

Typomvandling

Det går också bra att skriva konverting och inläsning på samma rad.

int input = Convert.ToInt32(Console.ReadLine());




double input = Convert.ToDouble(Console.ReadLine());


Typomvandlar till double

Typomvandlar till int

Exempel på typomvandling

Vi vill läsa in dagens datum och avgöra hur många år det är kvar till nästa fotbolls VM. 

// Deklarera variabler
int now, yearsLeft, vmQuatar = 2022;

/* Läser in aktuellt årtal och
   typomvandlar från string till int*/
now = Convert.ToInt32(Console.ReadLine());

// Beräknar differensen av två heltal
yearsLeft = now - vmQuatar;

// Skriver ut till användaren hur många år det är kvar
Console.WriteLine("Det är " + yearsLeft + " kvar till VM i Quatar!");

7. Vad är en operator?

Operator

... är en symbol för något som ska utföras. Exempelvis plustecknet vid matematisk addition.

I C# finns flera olika operatorer. Vi ska utforska de aritmetiska-, förändrings-, relations- och de logiska operatorerna.

3 + 4

operand

operand

operator

8. Aritmetiska operatorer

Aritmetiska operatorer

Operator Beskrivning
+ addition
- subtraktion
* multiplikation
/ division
% modulo

Aritmetiska operatorer

int tal1 = 100;
int tal2 = 10;
int resultat;

// 1. Addition
resultat = tal1 + tal2; 

// 2. Subtraktion
resultat = tal1 - tal2; 

// 3. Multiplikation
resultat = tal1 * tal2;

// 4. Division
resultat = tal1 / tal2; 









Exempel

int tal1 = 100;
int tal2 = 10;
int resultat;

// 1. Addition
resultat = tal1 + tal2; 

// 2. Subtraktion
resultat = tal1 - tal2; 

// 3. Multiplikation
resultat = tal1 * tal2;

// 4. Division
resultat = tal1 / tal2; 









Exempel

/* Vi skriver värdet på variablerna
   direkt i deklarationen istället för att
   läsa in från användare, för denna gång :-) */
int tal1 = 23, tal2 = 20, tal3 = 28;

/* Variabel med datatyp för decimaltal */
double medel;

// Beräknar medelvärdet
medel = (tal1 + tal2 + tal3)/3

// Skriver ut medelvärdet till användaren
Console.WriteLine("Medelvärdet är " + medel);












Beräkna medelvärdet av 3 st heltal

Modulo %

// Exempel 1
int differensen = 1000 - 450;
int kvot = differensen / 100; 
int antalHundralappar = floor(kvot); // Ger 6 hundralappar 
int rest = differensen % 100; // Ger 50 kr som rest

// Exempel 2 
int tid = floor(270/60); // Ger 4 timmar
int minuter = 270 % 60; // och 30 min






Ger rest vid heltalsdivision

Exempel 1:  Du betalar 1000 kr och kvittot är på 450 kr. Hur många            hundralappar får du tillbaka och vad blir resten?

Exempel 2: Räkna ut att 270 minuter består av 4 timmar och 30 minuter.

9. Villkor

När programmet tar beslut utifrån sant/falskt

Villkor

Pseudokod

Mata in tiden

Om tid är större än 22

    skriv: "Gå och lägg dig"

annars

    skriv: "Läs en bok"

Flödesdiagram

Hur?

if(5 > 2) {
/* Om villkoret är SANT ska 
   kodraderna i detta block 
   utföras
*/
} 
else {
/* Om villkoret är FALSKT ska 
   kodraderna i detta block 
   utföras
*/
}

Använda if/else sats

VILLKOR

10. Relationsoperatorer

Relationsoperatorer

Jämförelse  Symbol Exempel Värde
    lika med == a == b false
   inte lika med != a != b true
     större än > a > b false
större än eller lika med >= a >= b false
mindre än < a < b  true
mindre än lika med <= a <= b  true

Exempel om a = 3, b = 5

Används för att jämföra två operander.

Övning: Relationsoperatorer

Avgör om följande uttryck är sant (true) eller falskt (false)

Om a = 3, b = 4, c = 4, så är: 

a) a == b  _________              g) b > a   _________

b) b == c  _________              h) b <= c _________

c)  c == a  _________               i) a <= c  _________

                                                

d)  a < b  _________                j) b >= c  _________

e)  a > b  _________                k) c <= a  _________

f)  b < a   _________

if/else

Console.WriteLine("Vad är klockan nu?")
int tid = Convert.ToDouble(Console.ReadLine());




if(tid > 22) 
{
// Om SANT, så ska detta utföras
Console.WriteLine("Gå och lägg dig");
} 
else 
{
// Om FALSKT, så ska detta utföras
Console.WriteLine("Läs en bok");
}

använda relationsoperatorer

Är värdet i tid större 22? Om ja, SANT, annars FALSKT

if/else


int secret = 13;
int guess = Convert.ToInt32(Console.ReadLine());




if(guess == secret) 
{
Console.WriteLine("Congrats!");
} 
else {
Console.WriteLine("Try again...");
}

använda relationsoperatorer 

Jämförelse. Är värdet i guess lika med värdet i secret? Om ja, SANT, annars FALSKT

if/else


int age = Convert.ToInt32(Console.ReadLine());






if(age >= 18) 
{
Console.WriteLine("Du är myndig. Får ta körkört. Gå på krogen.");
} 
else {
Console.WriteLine("Du får vänta " + (18-age) + " år in du är 18 år.");
}

använda relationsoperatorer 

Är värdet i age är större än eller lika med 18? Om ja, SANT, annars FALSKT.

11. Villkor med flera alternativ

Villkor med flera alternativ

if-else satsen kan endast hantera ett val mellan två situationer, SANT eller FALSKT.

I många situationer kan man behöva hantera tre eller fler eller fler alternativ.

Studera följande intervall:

Antal poäng Betyg
36 A
25 C
18 E

Flera if-satser och else


int points = Convert.ToInt32(Console.ReadLine());

if(points >= 36) 
{
Console.WriteLine("Betyg A");
} 
if(points >= 25) 
{
Console.WriteLine("Betyg C");
}
if(points >= 18) 
{
Console.WriteLine("Betyg E");
}
else {
Console.WriteLine("Snart klarar du.");
}

villkor med flera alternativ

Om points = 37, vad skrivs ut?

if/else if/else


int points = Convert.ToInt32(Console.ReadLine());

if(points >= 36) 
{
Console.WriteLine("Betyg A");
} 
else if(points >= 25) 
{
Console.WriteLine("Betyg C");
}
else if(points >= 18) 
{
Console.WriteLine("Betyg E");
}
else {
Console.WriteLine("Snart klarar du.");
}

villkor med flera alternativ

Om points = 37, vad skrivs ut? Skillnad mot förra exemplet?

Skillnad med else if-sats?

En if-sats kommer alltid att köras om villkoret är SANT.

En else if-sats kommer endast att köras om föregående villkor var FALSKA. D.v.s endast ett alternativ om minst ett av alternativen är sanna.

switch-satsen

en variant av if/else if/else-satsen

     int userChoice = Convert.ToInt32(Console.ReadLine());
     
     switch (userChoice)
            {
                case 1:
                    Console.WriteLine("Du har valt nr 1");
                    break;
                case 2:
                    Console.WriteLine("Du har valt nr 2");
                    break;
                case 3:
                    Console.WriteLine("Du har valt nr 3");
                    break;
                case 4:
                    Console.WriteLine("Du har valt nr 4");
                    break;
                default:
                    Console.WriteLine("Var god välj ett alternativ nr 1-4");
                    break;
            }

12. Logiska operatorer

Hur skapar du ett villkor som är SANT om en variabel X är större än 100 och mindre än 200 🤔?

Vad måste gälla?

Jo, att både X > 100 OCH X < 200!

Vi behöver alltså använda oss av två villkor.

Logiska operatorer

Logisk operator  Symbol Exempel Värde
OCH  && uttryck1
and
uttryck2
true om båda är sanna annars false
   ELLER  || uttryck1
or 
uttryck2
true om minst ett är sant, annars false
   INTE ! !uttryck false om uttrycket är sant, annars true

Används för att undersöka flera villkor samtidigt

OCH - &&



int X = Convert.ToInt32(Console.ReadLine());




if(X > 100 && X < 200) 
{
Console.WriteLine("Det okända talet är mellan 100 och 200");
} 
else {
Console.WriteLine("Utanför intervallet...");
}

Logiska operatorn som är  sann då endast alla uttryck är sanna (eng. AND)

Här måste X både vara större än 100 och mindre än 200 för att hela utrycket ska vara SANT.

ELLER - ||

bool solenSkiner = false;
double badTemperatur = 21;




if(solenSkiner || badTemperatur > 20) 
{
Console.WriteLine("Vi går och badar");
} 
else {
Console.WriteLine("Vi badar när solen skiner eller
badtemperaturen är över 21 grader");
}

Logiska operatorn som är SANT då minst ett av utrycken är sanna. 

Här räcker det att antingen solenSKiner är SANT eller badTemperatur är större än 20 för att hela uttrycket ska vara sant.

INTE - !

bool gameOver = false;



if(!gameOver) 
{
Console.WriteLine("Spelet avslutas");
} 
else {
Console.WriteLine("Du får fortsätta spela");
}

Logiska operatorn INTE, !, då FALSKT blir SANT, eller SANT blir FALSKT

Här blir gameOver = true och villkoret hamnar i "Spelet avslutas".

Övning: Logiska operatorer

Avgör om följande uttryck är sanna eller falsk. Sätt true för sant och false för falskt.

a)  1 < 2  &&  5 > 4       _________

b)  1 == 2  &&  1 <  2   _________

c)  1 == 2  ||  1 == 1    ________

d)  3 <= 4  ||  3 >= 4    ________

e)  3 <= 4  &&  3 >= 4  _________

f)  2 < 1  ||  2 == 0      _________

g)  5 < 5  &&  5 > 5      _________

h)  5 < 5  ||  5 >  5      _________

Om a = 1, b = 2, och c = 3:

i)  a < b  &&  a > b       _________

j)  a < b  ||  a > b        _________

k)  a < c  &&  b < c       ________

l)  a > c  ||  c > b         ________

m)  a == b  &&  a < c   _________

n)  a <= b  &&  a <= c  _________

o)  b <= c  ||  b >= a   _________

13. Prioriteringsregler

Prioriteringsregler

När man skriver uttryck med flera operatorer så måste det finnas regler för i vilken ordning de ska utvärderas. Precis som i matematiken är det viktigt att multiplikation och division genomförs innan addition och subtraktion. 

1. Räknesätten ( * och /, sedan + och -)

2. Jämförelser

3. Logiska operatorer (förutom ICKE ! )

4. Tilldelningar

Exempel prioriteringsregler

svar = 3 + 2 * 3 < 5 && 4/4 >= 1 || true;

svar = 3 +   6   < 5 &&  1  >= 1 || true;

svar =       9   < 5 &&  1  >= 1 || true;

svar =        false  &&  true    || true;

svar =              false        || true;

svar =                              true;

* och  /

+ och -

+ och -

Jämförelser

Logiska operatorer, && sedan ||

Tilldelning

14. Introduktion till loopar

Repetitionssatser

Loopar används för att kunna köra ett block kod flera gånger. En iteration (=upprepning) är ett varv inuti en loop.

I denna kurs lär vi oss loopen för:

while

for

och

(de är snarlika, men lite olika syntax och användningsområden)

 

15. while-loopen

Exempel while-loop

string input;
bool run = true;

while(run == true) {
	
    Console.WriteLine("Vill du avsluta programmet? ja/nej");
    
	input = Console.ReadLine();

	if(input == "ja" {
    	run = false;
    } 
    
}

16. Förändringsoperatorer

Förändringsoperatorer

Operator  Symbol Exempel Samma som Om tal är 3, blir det
Uppräkning ++ tal++ tal = tal + 1 4
Nedräkning -- tal-- tal = tal -1 2

Enklare sätt att öka eller minska med 1.

while-loop

En while-loop körs så länge villkoret är uppfyllt

 int counter = 1;
 
 while(counter < 10)
   {
     counter++;
   }
   
 //Räknaren är 10
 Console.WriteLine(counter);
int counter = 1;
 
if(counter < 10)
   {
     counter++;
   }
   
 //Räknaren är 2
 Console.WriteLine(counter);
loop2

17. for-loopen

for-loopen

Initierar räknaren

Sker bara en gång

Kontrollerar räknaren

Sker innan varje loop

Ändrar räknaren

Sker efter varje loop

for-loopen fungerar likadant while-loopen, men här skrivs initiering, kontroll och uppräkning på samma rad.

 

for(int i = 1; i < 10; i++) 
{
 Console.WriteLine(i);
}
loop2

Exempel for-loop

// Läser in talet som det ska summeras till
int num = Convert.ToInt32(Console.ReadLine());

// Börja med att summan är 0
int sum = 0;

// Loopa från 1 upp till talet som det ska summeras till
for(int i = 1; i <= num; i++) {
	
    // Addera varje heltal till variabeln "sum" 
	sum = sum = i;
    
}

// Skriv ut resultatet till användaren
Console.WriteLIne("Talsumman för " + num + " är " + sum);

En for-loop som adderar alla tal upp till ett valfritt tal "num"

18. Nästlade loopar

Nästlade loopar

for(int i = 0; i < 10; i++) {
    
    for(int j = 0; j < i; j++) {
    
    	Console.Write("*");
        
    }
    
    Console.WriteLIne("");
    
}

Det går bra ha en loop i en loop, det kallas nästlade loopar. Här skriver den yttre loopen ut varje raden och den inre antal * som motsvar radnumret.

*

**

***

****

*****

******

*******

********

*********

19. Arrayer

Hur gör man om man vill hantera många värden? Exempelvis olika temperaturer under längre tid. Det blir opraktiskt att deklarera en variabel för varje värde.

Problemet

Använda en array, som är en slags lista som reserverar plats i minnet för flera värden på en gång.

Lösning

Arrayer

För att nå ett värde i arrayen måste man veta vilken plats i arrayen värdet ligger, detta kallas index

4  1 9 8 10 5 2 1 7
0 1 2 3 4 5 6 7 8

index

Obs! Startar på 0!

Denna array har storlek 9, från index 0 till 8

Värde

En array är en variabel som innehåller flera värden av samma typ. Det är en lista som lagrar flera värden och är praktisk för att hantera större mängder data. 

Deklarera en array

// En array som innehåller 3 element som är av datatypen string
string[] pokemons = {"Pikachu", "Wartotle", "Squirtle"};
  
// En array som innehåller 5 element som är av datatypen int
int[] numbers = {3, 4, 8, 8, 0};
  
  
  

När du vet vilka värden du vill ha från början (fördefinierad array).

Deklarera en array

När du inte vet vilka värden du har från början.

// En array av dataypen string som kan innehålla max 5 värden
string[] friends = new string[5];
 
// En array av dataypen int som kan innehålla max 10 värden
int[] numbers = new int[10];
 

Hämta ett värde från en array

//Deklarerar en int array med 5 platser och initerierar dess värden
int[] numbers = { 4, 1, 9, 8};

/* Hämtar värde från arrayen "number" på position 0 
   och tilldela till variabeln valuePos0 */
int valuePos0 = numbers[0];

/* Hämtar värde från arrayen "number" på position 3 
   och tilldela till variabeln valuePos3 */
int valuePos3 = numbers[3];

Console.WriteLine(valuePos0); // Skriver ut 4
Console.WriteLine(valuePos3); // Skriver ut 8

Tilldela ett värde i en array

//Deklarerar en int array med 5 platser och initerierar dess värden
int[] numbers = { 4, 1, 9, 8};

/* Tilldelar värdet för elementet i arrayen "numbers" 
   på position 0 till 43 */
numbers[0] = 43;

/* Tilldelar värdet för elementet i arrayen "numbers" 
   på position 3 till 59 */
numbers[3] = 59;

Console.WriteLine(valuePos0); // Skriver ut 43 (gamla värde 4 ersätts)
Console.WriteLine(valuePos3); // Skriver ut 59 (gamla värde 8 ersätts)

 for-loopar          arrayer 

//Deklararer en int array med 10 platser 
int[] numbers = new int[10];

 Console.WriteLine("Skriv in 10 st heltal:");

//1. Fyller en array med 10 st heltal genom att loopa genom varje index. 
// Metoden .Length ger oss längden på arrayen 
for (int i = 0; i < numbers.Length; i++)
{
 numbers[i] = Convert.ToInt32(Console.ReadLine());
            
}

//2. Skriver ut varje värde i arrayen från 1)
for (int i = 0; i < numbers.Length; i++)
{
  Console.WriteLine(numbers[i]);
}

20. Metoder

Metoder

  • Ändrar inte i funktion, bara i struktur
  • DRY-principen (Don't Repeat Yourself)
  • Handlar om att återvinna sin kod (eng refactoring)
  • Istället för att upprepa kod kan man anropa metoden ifråga
  • Kallas i vissa fall funktioner

Main-metoden

där programmet börjar

using System;

namespace Metoder
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("Hello World!");
        }
    }
}

EN METOD - DÄR PROGRAMMET BÖRJAR -MÅSTE FINNAS!

Exempel på metod

using System;


namespace Metoder
{
    class Program
    {
        static void Main(string[] args)
        {
            //Skriv ut Simpsonfamiljen
            Console.WriteLine("Marge");
            Console.WriteLine("Maggie");
            Console.WriteLine("Homer");
            Console.WriteLine("Lisa");

            //Här händer en massa annat

            //Skriv ut Simpsonfamiljen
            Console.WriteLine("Marge");
            Console.WriteLine("Maggie");
            Console.WriteLine("Homer");
            Console.WriteLine("Lisa");
        }
    }
}

Upprepas. Bör "kapslas in"

Exempel på metod

using System;

namespace Metoder
{
    class Program
    {
        static void Main(string[] args)
        {

            //Metoden printSimpsonFamily anropas
            PrintSimpsonFamily();

            //Här händer en massa annat

            //Metoden printSimpsonFamily anropas, igen.
            PrintSimpsonFamily();

        }

        //Skriver ut Simpsonfamiljen
        static void PrintSimpsonFamily()
        {
            Console.WriteLine("Marge");
            Console.WriteLine("Maggie");
            Console.WriteLine("Homer");
            Console.WriteLine("Lisa");
        }
    }
}

Koden inkapslad i en metod

Metoden anropas från main-metoden

Metoden anropas från main-metoden

static är ett reserverat ord som vi kommer beröra senare

Reserverat ord. Metoden ger inte något tillbaka (returnerar) - vi återkommer om det!

using System;

namespace Game
{
    class Game
    {
        //Default character name
        static string CharacterName = "John Doe";
        
        static void Main(string[] args)
        {
            StartGame();
            NameCharacter();
            Console.ReadKey();
        }
        
        static void StartGame()
        {
            Console.WriteLine("Game Title");
            Console.WriteLine("Welcome to ...");
           
        }

        static void NameCharacter()
        {
            Console.WriteLine("What would you like your character's name to be?");
            CharacterName = Console.ReadLine();
            Console.WriteLine("Great! Your character is now named " + CharacterName);
        }

    }
}

EXEMPEL METODER

INFÖR TEXTÄVENTYR

using System;


namespace Game
{
    class Game
    {
      
        static void Main(string[] args)
        {
            
            Console.Write("A stranger approaches...");
            Dialog("Have you seen..?");
            Console.Write("1) Yes, 2) No, 3) Repeat the question");
            Console.ReadKey();
        }


        static void Dialog(string message)
        {
             Console.ForegroundColor = ConsoleColor.Cyan;
             Console.Write(message);
             Console.ResetColor();
        }
        
      

    }
}

Att ta in information i en metod - PARAMETER

Definiera en metod

Anropa en metod

21. Stränghantering

Escapesekvenser

Escape-sekvens Förklaring Exempel i kod Utseende i program
\n Ny rad "Album: \n The Wall"  Album
The Wall
\t  Infoga tabbavstånd "Album: \t The Wall"  Album           The Wall
\" Visa citattecken "Album: \"The Wall\"" Album: "The Wall"
\\ Visa ett bakvänt streck "Album: Pink Floyd \\The Wall" Album Pink Floyd\The Wall

Det bakvända snedstrecket / inleder något som kallas escapesekvens (flyktsekvens). Dessa är bra att känna till:

Få information om strängar!

  • Kom ihåg att en sträng kan hanteras som en array!
  • mening[2] - ta reda på tecken på index 2 i strängen (arrayen)
  • Length - få information om antalet platser i strängen (arrayen)
 string sentence = "Det här är en kort text";
 Console.WriteLine(sentence[0]); //Skriver ut plats 0 - D
 Console.WriteLine(sentence[9]); //Skriver ut plats 0 - r
 Console.WriteLine(sentence.Length); //Skriver ut antal tecken i strängen sentence

Användbara  metoder för strängar

Metod Förklaring
ToUpper() Gör alla tecken till versaler
ToLower()  Gör alla tecken till gemener
Contains(string value) Ger true/false om value finns i strängen
IndexOf(char value) Ger positionen för value
Substring(int startindex, int length) Ger delsträngen från startindex till antal tecken length
Trim() Tar bort whitespace innan och efter

Exempel på metoder för strängar

    string sentence = "  Det här är en kort text  ";
            
    string upper = sentence.ToUpper();
    Console.WriteLine(upper);

    string lower = sentence.ToLower();
    Console.WriteLine(lower);

    bool contains = sentence.Contains("text");
    Console.WriteLine(contains);
    contains = sentence.Contains("txt");
    Console.WriteLine(contains);

    int index = sentence.IndexOf("D");
    Console.WriteLine(index);

    string substring = sentence.Substring(3, 5);
    Console.WriteLine(substring);

    string trimmed = sentence.Trim();
    Console.WriteLine(trimmed);

Programkod

Utskrift i konsolen

23. Flödesdiagram

att planera sin kodning...

Vad är en algoritm?

Algoritm

En algoritm består av begränsat antal instruktioner som ska utföras för att lösa ett problem

Pseudokod & Flödessdiagram

  • Om en algoritm uttrycks på vårt vanliga språk kallas det för pseudokod
  • Ett flödesdiagram visar med symboler hur ett problem ska lösas och ger en bra överblick

Att lättare förstå hur ett problem ska kunna lösas innan det översätts till programspråk

Flödesdiagram

En algoritm kan delas upp i ett begränsat antal instruktioner. Varje instruktion illustreras med en symbol som förbinds med pilar.

Start eller stopp

Något utförs

Ett val mellan två alternativ (selektion)

sats

sats

sats

sats

sats

sats

sats

sats

sats

sats

villkor

sant

falskt

SEKVENS

SELEKTION

ITERATION

villkor

sant

falskt

Flödesdiagram på verkligt problem!

Start

Stopp

Läs i tal1

Läs i tal2

Skriv tal1

Skriv tal2

tal1>tal2

sant

falskt

FLÖDESDIAGRAM

PSEUDOKOD

Uppgift: Jämföra två inmatade tal och skriva ut det tal som är störst

Läs in två tal, tal1 och tal2

Om tal1 är större än tal2

  skriv ut tal1

annars

  skriv ut tal2

Övning

Flödesdigram: Hur gjorde du frukost imorse?

23. Namnkonventioner

Namnkonventioner C#

Variabelnamn och argument

Metoder (och allt annat)


 int currentScore; 
 string firstName;

Använd camel-case!


static void SayMessage() {

  Console.WriteLine("Hey!");

}

Använd pascal-case!

Hur man kommentera en metod

 		
   /**
   * Den här metoden frågar efter användarens karaktärsnamn
   * och sedan skriver ut karaktärsnamnet i konsolen. 
   * Utskriften är grön då namnet efterfrågas.
   * @param - 
   * 
   * @author Sandra Larsson
   * @since  2019-12-10
   */
   static void NameCharacter()
   {

   Console.WriteLine("You need a code name for this mission. What will it be?");
   Console.ForegroundColor = ConsoleColor.Green;
   Console.Write("Enter your code name: ");
   CharacterName = Console.ReadLine();
   Console.ResetColor();
   Console.WriteLine("Your code name is confirmed to be " + CharacterName);

   }

Facit

Övning Relationsoperatorer

Övning Logiska operatorer

a) false   b) true   c) false   d) true   e) false   f) false   g) true   h) true   i) true   j) true   k) false 

a) true   b) false   c) true   d) true   e) false   f) false   g) false  h) false   i) false   j) true   k) true  l) true

m) false   n) true   o) true 

Programmering 1 t.o.m PROV - Printversion

By Sandra Larsson

Programmering 1 t.o.m PROV - Printversion

The hole shabang

  • 151