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 1-or och 0-or 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.
En kompilator översätter källkod till maskinkod, lagrar den i en exekverbar fil, så att datorn kan tolka instruktionerna och köra programmet (exekvera). Pythonkod översätts också till maskinkod men interpretaras istället för att kompileras. Till skillnad från kompilatorn tolkar en interpretator maskinkoden direkt, den läser en instruktion i taget och utför den.
.
Hjälper dig att köra, felsöka, formatera kod, etc.
Konsolprogram (terminalen)
Graphical User Interface (GUI)
Programmet "Hello World"
# Skriver ut texten "Hello World" i terminalen
message = "Hello World"
print(message)
Det programmet skickar ut till användaren
# Anges i början av en kommentarrad
I VS Code kan du även markera koden till vill markera och välja
Edit -> Toggle Line Comment eller Toggle Block Comment
Variabler tilldelas med ett variabelnamn till vänster och ett värde till höger om likamedstecknet
total_points = 1034
Variabelnamn
Värde
Variabler måste alltid tilldelas innan de kan användas i programmet. Annars blir det fel när man kör (exekverar) programmet. Felet brukar lyda "undefinied variable.."
Här tilldelas variabeln pokemon värdet med texten "Pikachu". Eftersom det är en text och inte ett tal så skriver man den med citattecken.
pokemon = "Pikachu"
Variabelnamn
Värde
python_is_awesome = 100
another_var = python_is_awesome
python_is_awesome = 1234
x, y, z = 50, 30, 100
Det värde som man tilldelar en variabel måste vara av giltig datatyp. Pythons mest vanliga datatyper:
DATATYP | BESKRIVNING |
---|---|
str | En sekvens av tecken. Benäms string, sv sträng. Med enkla eller dubbla citattecken. Ex "name" eller 'name' |
int | Heltal som 1, 32, 4, o.s.v står för eng heltal |
float | Decimaltal som 1.3, 4.56, osv. Obs! använd punkt, ej kommatecken |
bool | True eller False, d.v.s sant eller falskt |
list | En ordnad sekvens av värden av olika datatyper. Ex [1,2,3] eller ["a", "b", "c"] |
Med flera!
my_str = "a hat"
my_other_str = 'a cat'
En sträng, d.v.s en sekvens av tecken kan antingen deklareras med enkla citattecken ' eller dubbla ".
Du kan använda antingen eller, men tänk på att du är konsekvent vilken du använder i samma programfil.
str_one = "john"
str_two = "doe"
str_three = str_one + " " + str_two # john doe
Med konkatenering menas att man "sätter ihop" flera strängar efter varandra. Det gör man med + - operatorn
Man kan också använda += - operatorn
str_one = "ice"
str_one += " cream"
str_one # ice cream
INTEGER | FLOAT |
---|---|
4 | 6.1 |
57 | 1.3333 |
10 | 0.0 |
Två huvudtyper av nummer:
Integer är heltal och float är decimaltal
my_str = "moonlight"
print(type(my_str)) # Skriver ut <class 'str'>
my_int = 666
print(type(my_int)) # Skriver ut <class 'int'>
my_float = 666.666
print(type(my_float)) # Skriver ut <class 'float'>
För att veta vilken datatyp en variabel är av använder du type()
python_variable = True
print(python_variable) # True
python_variable = "a dog"
print(python_variable) # a dog
python_variable = None
print(python_variable) # None
python_variable = 22 / 7
print(python_variable) # 3.142857142857143
Python är flexibelt att tilldela variabler värde av olika datatyper.
Detta kallas dynamisk typning,
Andra språk som C++/C#/Java, m.fl har inte dynamisk typning, utan statisk typning.
Regler som måste följas, annars blir det fel i programmet!
Pythonprogrammare brukar använda sig av namnkonventioner så att koden blir enhetlig både för sig själv och andra. Ingen regel, utan mer om hur du uppför dig som kodare
_cats
2cats
cats2
hey%%%you
CATS != Cats
print
print_all
namn = input("Skriv ditt namn:")
Det användaren skickar till programmet
Läser in text från användaren som tilldelas till variabeln namn.
Metoden input() läser in värdet som string, d.v.s namn blir av datatypen str.
birth_year = int(input("Skriv in ditt födelseår:"))
current_year = int(input("Skriv in nuvarande årtal:"))
age = current_year - birth_year
Behövs göras när man vill omvandla en variabel av en viss datatyp till en annan. Använd datatypens namn och () kring utrycket.
Ett bra exempel på detta är när du behöver ha ett nummer, int eller float, från input() för att kunna utföra matematiska operationer.
Med int() omvandlas här en str till int
Hantera nummer och matematik
SYMBOL | FUNKTION |
---|---|
+ | Addition |
- | Subtraktion |
* | Multiplikation |
/ | Division |
** | Exponentiering |
% | Modulo |
// | Integer division |
Som du mest kommer att använda:
tal1 = 100
tal2 = 10
# 1. Addition
resultat = tal1 + tal2
# 2. Subtraktion
resultat = tal1 - tal2
# 3. Multiplikation
resultat = tal1 * tal2
# 4. Division
resultat = tal1 / tal2
resultat = 1 + 2 # 3 <class 'int'>
resultat = 3 / 4 # 0.75 <class 'float'>
resultat = 1 + 0.75 #1.75 <class 'float'>
resultat = 5 // 2 # 2 <class 'int'>
# Med // avrundas divisionen till närmsta heltal (neråt)
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. Parenteser
2. Potenser
3. Multiplikation/Division
4. Addition/Subtraktion
# Vi tilldelar tre olika variabler var sitt värde
tal1 = 23, tal2 = 20, tal3 = 28
#Beräknar medelvärdet
medel = (tal1 + tal2 + tal3)/3
# Skriver ut medelvärdet till användaren
print("Medelvärdet är " + medel)
Beräkna medelvärdet av 3 st heltal
Ger rest vid heltalsdivision
print(10 % 8) # Skriver ut 2
print(15 % 4) # Skriver ut 3
print(60 % 30) # Skriver ut 0
print(240 % 13) # Skriver ut 6
Exempelområden
Ett villkor är en fråga som man besvaras ja eller nej. Exempelvis är 2 större än 1? Det är alltså ett logiskt uttyck som kan antingen vara sant eller falskt.
I Python motsvarar det True eller False .
if-satsen är en enkel selektion som avgörs om villkoret är sant eller falskt.
Ditt program kan alltså ta olika vägar utifrån om uttrycket är True eller False.
Sats(er)
Villkor
FLÖDESSCHEMA
Sant
Falskt
PYTHONKOD
if villkor:
sats(er)
Endast om villkoret är uppfyllt utförs sats(erna).
Tänk på att raden efter kolonet (:) måste vara indraget och tillhör pythons syntax. Indragningen avgör när en if-sats avslutas.
if 2 > 1:
#Om villkoret är SANT ska denna sats utföras
print("2 är större än 1!!!")
# Ingen indragnong, if-satsen har avslutats
print("Ok lätt som en plätt. Programmet avslutas.")
VILLKOR
... är en symbol för något som ska utföras. Exempelvis plustecknet vid matematisk addition.
I Python finns flera olika operatorer. Vi ska utforska de aritmetiska (matematiska)-, jämförelse-, logiska- och förändringsoperatorerna.
3 + 4
operand
operand
operator
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 3 > 2 skulle detta ge True. 3 < 2 skulle ge False.
truthy = 3 > 2 # True
falsy = 3 < 2 # False
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 | True |
mindre än | < | a < b | True |
mindre än lika med | <= | a <= b | True |
Tar in två värden och jämför dem. Exempel om a = 3, b = 5.
Värdena kan vara av vilken datatyp som helst int, float, str, bool. Komma bara ihåg att de du jämför med måsta vara av samma datatyp!
Vad är nu skillnaden mellan att använda
=
==
eller
gameOver = False
Alternativ 1
Villkor
FLÖDESSCHEMA
Sant
Falskt
PYTHONKOD
if villkor:
alternativ 1
else:
alternativ 2
If-else satsen är ett val mellan två alternativ, ett tvåvägsval. Till skillnad från if-satsen utförs även ett andra alternativ om villkoret är falskt.
Alternativ 2
if 2 > 1:
#Om villkoret är SANT ska denna sats utföras
print("2 är större än 1!!!")
# Ingen indragnong, if-satsen har avslutats
print("Ok lätt som en plätt. Programmet avslutas.")
VILLKOR
Alternativ 1
Villkor
FLÖDESSCHEMA
Sant
Falskt
PYTHONKOD
if villkor:
alternativ 1
else:
alternativ 2
If-else satsen är ett val mellan två alternativ, ett tvåvägsval. Till skillnad från if-satsen utförs även ett andra alternativ om villkoret är falskt.
Alternativ 2
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 |
if 2 > 1:
#Om villkoret är SANT ska denna sats utföras
print("2 är större än 1!!!")
# Ingen indragnong, if-satsen har avslutats
print("Ok lätt som en plätt. Programmet avslutas.")
VILLKOR
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".
x = 10
formatted = f"I've told you {x} times already!"
/* 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)
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.
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;
}
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);