Exhaustive Studieanteckningar: Grundläggande Programmering och Datortsvetenskap

Syfte med programmering och grundläggande koncept

  • Automatisera uppgifter: Programmering syftar till att göra receptiva processer snabbare, mer effektiva och mindre felbenägna. Man låter datorn utföra tråkiga eller repetitiva uppgifter automatiskt istället för att människor gör dem manuellt.

    • Exempel på automatisering:

      • Räkna ut poäng i ett spel.

      • Skicka mejl automatiskt.

      • Sortera bilder eller filer.

  • Skapa lösningar: Genom programmering bygger man verktyg, system och applikationer som löser specifika problem i vardagen eller arbetslivet. Det handlar om att bygga appar, spel och program som hjälper människor.

    • Exempel på lösningar: TikTok, Minecraft, bankappar och Spotify.

  • Kommunicera med datorer: Programmering innebär att ge datorn instruktioner på ett språk den förstår. Eftersom datorer inte förstår mänskliga språk som svenska eller engelska, använder man programmeringsspråk som:

    • Python

    • C#

    • Java

Grundläggande programmeringsbegrepp

  • Programmering: Processen att skriva instruktioner som en dator kan tolka och utföra. Det är i essens att skriva instruktioner till datorn (t.ex. "Visa texten Hej!").

  • Programmeringsspråk: Ett verktyg för att kommunicera med datorn, likt ett språk man använder för att "prata" med hårdvaran. Exempel inkluderar Python, C# och JavaScript.

  • Kod: De faktiska instruktionerna som skrivs i ett programmeringsspråk. Exempel: Print("Hej!").

  • Variabel: En behållare eller "låda" som lagrar data vilken kan ändras under programmets körning. En variabel har ett namn (identifierare) och ett värde.

    • Exempel: Namn = "Julia", Ålder = 25.

    • Python-exempel med datatyper:

      • name = "anna" (text/string)

      • Age = 25 (heltal/int)

      • Height = 1.75 (flyttal/float)

      • isStudent = true (sanningsvärde/bool)

    • C#-exempel för utskrift:

      • Console.WriteLine("namn" + name);

      • Console.WriteLine("ålder" + age);

      • Console.WriteLine("längd" + height + meter);

      • Console.WriteLine("Är student" + isStudent);

  • Konstant: En variabel vars värde aldrig ändras efter att programmet har startat. Ett typiskt exempel är PI=3.14PI = 3.14.

Datatyper och Operatorer

  • Datatyper: Olika slags information som kan lagras. Variabler används för att lagra dessa för senare bruk.

    • Text (string): Exempel: "Hej", "Alex".

    • Heltal (int): Exempel: 5, 12.

    • Decimaltal (float): Exempel: 3.14, 1.52.

    • Logiska värden (bool): Kan endast vara True eller False (sant eller falskt). Exempel: ärHungrig = true.

  • Operatorer: Symboler som används för beräkningar och jämförelser (matte-tecken).

    • + : Plus

    • - : Minus

    • * : Gånger

    • / : Delat

    • == : Lika med (jämförelse)

    • % : Modulus (returnerar resten vid heltalsdivision, t.ex. 10%3=110 \% 3 = 1).

Kodstruktur och Logik

  • Kommentar: Text i koden som datorn ignorerar. Den används bara för att hjälpa människor att förstå koden eller förklara syftet med en viss del.

    • Exempel Python: # här räknar vi poäng.

    • Typer av kommentarer:

      • Python: # för enradiga, """ """ (Docstring) för flerradiga.

      • C#: // för enradiga, /* */ för flerradiga.

  • Indentering: Hur kod struktureras med indrag (mellanrum i början av raderna). I vissa språk, som Python, är detta kritiskt eftersom datorn använder indentering för att förstå vilka koddelar som hör ihop logiskt.

    • Exempel:python if x > 5: print("Hej!")                  Här ser datorn att print hör till if-satsen på grund av indraget.

  • Block/Kodblock: Sammanhängande delar av kod som hör ihop, markerade med indrag eller klamrar. Kan liknas vid ett stycke i en bok.

Kontrollstrukturer: Villkor och Loopar

  • Villkor (if-satser/Conditions): Gör att programmet kan fatta beslut. Datorn kan välja olika vägar beroende på om ett villkor är sant eller falskt.

    • Exempel: Om spelaren har 00 liv blir det "Game Over". Om man trycker på hopp-knappen ska karaktären hoppa.

    • Struktur: Består ofta av if, else if (elif i Python), och else (alternativet som körs om inget annat stämmer).

    • Logiska operatorer: Används för att kombinera villkor:

      • && (and): Båda villkoren måste vara sanna.

      • || (or): Minst ett villkor måste vara sant.

      • ! (not): Inverterar villkoret (sant blir falskt).

    • Nästlade if-satser: En if-sats inuti en annan för att kontrollera flera beroende krav. Exempel: python if age >= 10: if ticket: print("Du får komma in")         

  • Loopar: Konstruktioner som gör att kod kan upprepas flera gånger för att hantera repetitiva uppgifter effektivt.

    • Iteration: Varje enskilt varv som loopen kör sitt kodblock.

    • While-loop: Körs så länge ett specifikt villkor är sant.

    • For-loop: Körs ett bestämt antal gånger, ofta genom ett intervall (t.ex. range(5) i Python som skapar talen 0,1,2,3,40, 1, 2, 3, 4).

    • Oändlig loop: En loop som aldrig tar slut för att villkoret alltid är sant (t.ex. While True).

    • Break: Avbryter loopen direkt i förtid.

    • Continue: Hoppar över resten av koden i nuvarande iteration och går direkt till nästa varv.

Input och Output (I/O)

  • Input: Data som användaren matar in i programmet.

    • Exempel: namn = input("Vad heter du?").

  • Output: Resultatet eller informationen som programmet visar tillbaka för användaren.

    • Exempel: print("Hej Julia!").

  • Formaterade strängar:

    • Python (f-strängar): print(f"Hej {name}").

    • C#: Console.WriteLine($"Hej {name}");.

Algoritmer och Problemlösning

  • Algoritm: En tydlig följd av steg för att lösa ett problem, likt ett recept vid matlagning (t.ex. 1. Ta fram mjölk, 2. Blanda ingredienser, 3. Grädda).

  • Pseudokod: En förenklad, språkoberoende beskrivning av ett programs logik skriven på vanligt språk. Det är en planering och inte riktig kod ännu.

  • Flödesschema: En visuell representation av stegen i en algoritm med standardiserade symboler:

    • Oval: Start- och slutpunkter.

    • Pilar: Visar flödets väg.

    • Parallellogram: Inmatning eller utmatning (t.ex. "Ange namn").

    • Diamant: Beslut eller fråga (sant/falskt).

    • Rektangel: Aktivitet eller instruktion (t.ex. "Beräkna summan").

    • Hexagon: Förberedelse eller initiering.

  • Sortering: Processen att ordna element (stigande 1,2,3...1, 2, 3... eller fallande 5,4,3...5, 4, 3...).

    • Bubble Sort: En enkel algoritm som jämför grannar och byter plats om de ligger i fel ordning. Dess tidskomplexitet beskrivs ofta som O(n2)O(n^2), vilket innebär att tiden ökar snabbt när mängden data ökar.

Avancerade Begrepp

  • Funktioner: Små, återanvändbara kodblock som utför specifika uppgifter. De hjälper till att organisera koden och möjliggör abstraktion (man kan använda funktionen utan att förstå exakt hur dess inre fungerar).

    • Argument: Information som skickas in till funktionen.

    • Returvärde: Det värde funktionen skickar tillbaka.

    • Void (C#): Indikerar att funktionen inte skickar tillbaka något värde.

  • Rekursion: När en funktion anropar sig själv istället för att använda en loop.

  • Moduler/Bibliotek: Förskriven kod som kan importeras (t.ex. import math i Python) för att använda färdiga funktioner som andra har skapat.

  • Objektorienterad programmering (OOP): Ett sätt att bygga program med "objekt" som innehåller både data (t.ex. en bils färg) och funktioner (t.ex. att bilen kan bromsa).

Felhantering och Debugging

  • Syntaxfel: Fel i kodens struktur (som stavfel) som hindrar programmet från att köras.

  • Semantik: Kodens faktiska innebörd. Ett program kan ha korrekt syntax men göra fel saker logiskt (t.ex. räkna minus istället för plus).

  • Undantagshantering: Metoder för att fånga och hantera fel under körning så att programmet inte kraschar (t.ex. att säga "Du måste skriva ett nummer" om någon skriver bokstäver).

  • Debugging (felsökning): Processen att identifiera och rätta till buggar i koden.

Hårdvara och Mjukvara

  • Hårdvara: De fysiska komponenterna man kan ta på:

    • Processor (CPU): Datorns hjärna som utför beräkningar och bearbetar instruktioner. Den arbetar internt endast med maskinkod (ettor och nollor).

    • RAM (Primärminne): Korttidsminne som lagrar data tillfälligt medan program körs. Raderas när datorn stängs av.

    • Sekundärminne (Lagring): Permanent lagring för filer, program och operativsystem (t.ex. SSD eller hårddisk).

    • Moderkort: Kopplar samman och samordnar alla delar.

    • Grafikkort (GPU): Specialiserat för grafik och matematiska matrisoperationer.

    • In- och utenheter (I/O): Tangentbord/mus (inmatning) samt skärm/högtalare (utmatning).

  • Mjukvara: Program och operativsystem (Windows, macOS, Linux) som instruerar hårdvaran.

Kompilering och Exekvering

  • Källkod: Den textbaserade kod som programmeraren skriver.

  • Kompilering/Tolkning: Processen att översätta källkod till maskinkod som processorn förstår.

    • C#: Källkod rightarrow\\rightarrow Mellanliggande kod (IL) rightarrow\\rightarrow CLR (Common Language Runtime) översätter till maskinkod.

    • Python: Källkod rightarrow\\rightarrow Bytekod rightarrow\\rightarrow PVM (Python Virtual Machine) exekverar och översätter till maskinkod.

  • Körning (runtime): Det som händer medan programmet är igång och exekveras.

Datastrukturer: Listor och Arrayer

  • Lista (Python): Dynamisk datastruktur som kan ändra storlek och innehålla olika datatyper.

  • Array (C#): Datastruktur med fast storlek som bestäms vid skapandet.

  • Index: Positionen för ett element, börjar alltid på 00. Om Fruits = ["äpple", "banan"], så är Fruits[0] lika med "äpple".

  • Operationer: Append (lägg till), Remove (ta bort), Len/Length (kolla antal element), Sortera.

Utvecklingsmiljö (IDE)

  • IDE (Integrated Development Environment): Programvara för att skriva och testa kod effektivt (t.ex. Visual Studio, VS Code, PyCharm).

  • Funktioner i en IDE:

    • Syntaxmarkering: Färgkodning av kod.

    • Autokomplettering: Föreslår kod under skrivandet.

    • Integrerad terminal: För att köra kommandon direkt.

    • Git-integration: För versionshantering.

  • SDK (Software Development Kit): Samling verktyg som behövs för att bygga program för en specifik plattform (t.ex. .NET SDK för C#).