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.
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.
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.
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.
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.
Det program vi ska använda för att skriva och köra C# kod.
1. Ladda ner Visual Studio Community 2019 här:
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 👨💻
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.
Konsolprogram
Graphical User Interface (GUI)
1. Öppna Visual Studio Community 2019 och skapa nytt projekt
2. Välj Console App (.NET Core) i listan av olika projekt man kan skapa
3. Ge ditt projekt ett namn och var det ska ligga på datorn. Tryck Create.
4. Mallen för att skriva ut "Hello World" i konsolen öppnas
5. Kör Applikation genom att klicka på gröna pilen eller F5.
Ett konsolfönster öppnas med utskriften Hello World.
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();
}
}
}
I början behöver vi endast fokusera på programblocket med rubrik Main
Programblock1
{
Sats1;
Sats2;
Sats3;
}
Programblock2
{
Sats4;
Sats5;
}
// Skriver ut texten "Hello World" i konsolen
Console.WriteLine("Hello World!");
Det programmet skickar ut till användaren
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 ä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();
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 + " !");
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)
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
När man deklarerar och tilldelar ett värde i samma sats
string pokemon = "Pikachu";
Variabelnamn
Värde
Datatyp
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
// Två snedstreck markerar kommentar för en rad
/* Snedstreck + asterix markerar kommentar för
för flera rader
*/
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 ä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 ä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;
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 ä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;
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
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.
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
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
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!");
... ä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
Operator | Beskrivning |
---|---|
+ | addition |
- | subtraktion |
* | multiplikation |
/ | division |
% | modulo (behöver ej kunna) |
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;
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;
/* 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
// 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.
När programmet tar beslut utifrån sant/falskt
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
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
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.
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
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
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.
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 |
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?
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?
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;
}
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
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.
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.
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".
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
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
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)
string input;
bool run = true;
while(run == true) {
Console.WriteLine("Vill du avsluta programmet? ja/nej");
input = Console.ReadLine();
if(input == "ja" {
run = false;
}
}
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.
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);
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);
}
// 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"
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.
*
**
***
****
*****
******
*******
********
*********
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.
Använda en array, som är en slags lista som reserverar plats i minnet för flera värden på en gång.
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.
// 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).
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];
//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
//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)
//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]);
}
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!
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"
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
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:
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
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 |
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
En algoritm består av begränsat antal instruktioner som ska utföras för att lösa ett problem
Att lättare förstå hur ett problem ska kunna lösas innan det översätts till programspråk
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
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!
/**
* 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);
}
få tillbaka ett värde från en metod
Metoder och Funktioner är egentligen samma sak.
En metod är en funktion som är associerad till en klass.
I C# har vi bara klasser, därav har vi använt oss av den bedömningen.
static string sayHi(string name)
{
string greeting = "Welcome " + name;
return greeting;
}
static void Main(string[] args)
{
string text = sayHi("John"); // Metoden anropas
Console.WriteLine(text); // Skriver ut "Welcome John"
}
Returnerar värdet greeting
Parameter till metoden
Ger ett värde tillbaka utifån argumentet "John"
static void Main(string[] args)
{
int sum = addNumbers(5, 2);
Console.WriteLine(sum);
}
static int addNumbers(int a, int b)
{
int sum = a + b;
return sum;
}
Samma returtyp
Flera parametrar separeras med komma
static void sayHi(string name)
{
Console.WriteLine("Welcome " + name);
}
static void Main(string[] args)
{
sayHi("John"); // Metoden anropas
// och skriver ut "Welcome John"
}
Metod som inte returnerar ett värde
static void Main(string[] args)
{
int sum = addNumbers(5, 2);
Console.WriteLine(sum);
}
static int addNumbers(int a, int b)
{
int sum = a + b;
return sum;
}
Variabler som deklarers inne i en metod kallas lokala variabler. D kan inte användas utanför metoden. Detsamma gäller parametarna till metoden.
En variabel i en metod har alltså inte något samband med variabler i en annan metod
class Program
{
static int x = 10;
Console.WriteLine(a + b); //Error
static int addNumbers(int a, int b)
{
int sum = a + b;
return sum;
}
static void Main(string[] args)
{
Console.WriteLine(x); // OK
Console.WriteLine(sum); //Error
}
}
Globalt scope
Lokalt scope
Variablers giltighet (synlighet) gäller i det block de är deklarerade och i alla underblock, men ej de överordnade blocken.
Lokalt scope
static void countDown(int n)
{
Console.WriteLine(n);
if(n <= 1)
{
// Basfallet
return;
} else
{
// Metoden anropar sig själv
countDown(n - 1);
}
}
static void Main(string[] args)
{
// Metoden körs
// Skriver ut 5,4,3,2,1
countDown(5);
}
En rekursiv metod måste ha ett basfall som talar om när algoritmen är klar.
Metoden anropar sig själv tills den når basfallet.
Beräkna talsumma med rekursion
Exempel: Talsumman för 5 = 5 + 4 + 3 + 2+ 1
s(1) = 1
s(2) = 2 + 1 = 2 + s(1)
s(3) = 3 + 2 + 1 = 3 + s(2)
s(4) = 4 + 3 + 2 + 1 = 4 + s(3)
s(5) = 5 + 4 + 3 + 2 + 1 = 5 + s(4)
.....
s(n) = n + s(n-1)
En rekursiv definition till ett problem innehåller basfallet och hur problemet kan lösas genom ett eller flera mindre delproblem
En algoritm är en begränsad uppsättning instruktioner som ska utföras i tur och ordning för att lösa en given uppgift
I C# finns det redan färdiga metoder för sortering- och sökning. Men det är bra att ha underliggande kunskap om hur de fungerar!
En lagringstruktur med fler möjligheter än en array.
// Deklarera en lista
List<int> numbers = new List<int>();
Du måste ange datatypen på två ställen
// Inkludera denna högst upp!
using System.Collections.Generic;
using System.Linq;
Metod | Förklaring |
---|---|
Add(element) | Lägger till ett element sist i listan |
AddRange(elements) | Lägger till flera element samtidigt |
Insert(pos, element) | Infogar elementet element i listan i den position som anges av pos. |
RemoveAt(pos) | Tar bort ett element från listan i den position som anges av pos |
Sort() | Sorterar en lista i stigande ordning (numerisk eller alfabetisk ordning) |
IndexOf(element) | Hittar ett element i listan. Returnerar -1 och den inte hittades. |
BinarySearch(element) | Hittar ett element i listan. Listan måste vara sorterad innan denna metod appliceras. |
Clear() | Tömmer listan på dess innehåll |
Count | Ger antalet element i listan |
passar bra för att söka igenom en lista
List<String> pokemons = new List<string>() {
"Pikachu",
"Spearow",
"Eevee"
}; // Lista med fördefinerade värden
foreach (string element in pokemons)
{
Console.WriteLine(element);
// Skriver ut Pikachu, Spearow, Eevee
}
List<String> pokemons = new List<string>();
pokemons.Add("Pikachu");
Console.WriteLine(pokemons[0]); // Skriver ut Pikachu
string[] morePokemons = { "Eevee", "Squirtle" };
foreach(string element in pokemons)
{
Console.WriteLine(element); // Skriver ut Pikachu, Eevee, Squirtle
}
pokemons.RemoveAt(2);
pokemons.Insert(1, "Spearow");
int posEevee = pokemons.IndexOf("Eevee");
Console.WriteLine(posEevee); //Skriver ut 2
foreach (string element in pokemons)
{
Console.WriteLine(element); // Skriver ut Pikachu, Spearow, Eevee
}
pokemons.Sort();
foreach (string element in pokemons)
{
Console.WriteLine(element); // Skriver ut Eevee, Pikachu, Squirtle
}
int posPikachu = pokemons.BinarySearch("Pikachu");
Console.WriteLine(posPikachu); // SKriver ut 1
Exempel Listor
"Varför köra truck, om du endast behöver en liten och snabb bil?"
//Skapa en randomerare som jag kan slumpa tal med
Random randomerare = new Random();
//Slumpa ett tal mellan 0 och 19
int tal = randomerare.Next(20);
//Slumpa ett tal mellan 15 och 31
int nyttTal = randomerare.Next(15, 32);