Grundlæggende programmering - Darhaq/WikiOpgave GitHub Wiki

Målpinde

1. Eleven kan anvende et programmeringssprog til at udarbejde mindre konsolprogrammer, herunder fejlfinde og teste dem. (overordnet mål som punkt 1-12 dækker.)

using System;
using System.Linq;
using System.Collections.Generic;
using System.Security.Cryptography.X509Certificates;

namespace SearchEngine
{
    public enum SøgeKriterier
    {
        Lærer,
        Elev,
        Fag
    }

    public abstract class Person
    {
        public string ForNavn { get; set; }
        public string EfterNavn { get; set; }

        public Person(string forNavn, string efterNavn)
        {
            ForNavn = forNavn;
            EfterNavn = efterNavn;
        }
    }

    public abstract class Lærer : Person
    {
        public Lærer(string forNavn, string efterNavn) : base(forNavn, efterNavn) { }

        public abstract List<Fag> GetSubjectsTaught();
    }

    public abstract class Elev : Person
    {
        public Elev(string forNavn, string efterNavn) : base(forNavn, efterNavn) { }

        public abstract List<Fag> GetSubjectsEnrolled();

    }

    public abstract class Fag
    {
        public string Navn { get; set; }
        public Lærer Lærer { get; set; }
        public List<Elev> Elever { get; set; }

        public Fag(string navn, Lærer lærer, List<Elev> elever)
        {
            Navn = navn;
            Lærer = lærer;
            Elever = elever;
        }
    }

    public class H1Lærer : Lærer
    {
        public H1Lærer(string forNavn, string efterNavn) : base(forNavn, efterNavn) { }

        public override List<Fag> GetSubjectsTaught()
        {
            List<Fag> fagLært = new List<Fag>();

            foreach (var fag in H1Fag2.AlleFag)
            {
                if (fag.Lærer == this)
                {
                    fagLært.Add(fag);
                }
            }

            return fagLært;
        }
    }

    public class H1Elev : Elev
    {
        public H1Elev(string forNavn, string efterNavn) : base(forNavn, efterNavn) { }

        public override List<Fag> GetSubjectsEnrolled()
        {
            List<Fag> subjectsEnrolled = new List<Fag>();

            foreach (var fag in H1Fag2.AlleFag)
            {
                if (fag.Elever.Contains(this))
                {
                    subjectsEnrolled.Add(fag);
                }
            }

            return subjectsEnrolled;
        }
    }

    public class H1Fag : Fag
    {
        public H1Fag(string navn, Lærer lærer, List<Elev> elever) : base(navn, lærer, elever) { }

    }

    public static class H1Fag2

    {
        public static List<Fag> AlleFag { get; set; }

        static H1Fag2()
        {
            var lærer1 = new H1Lærer("Niels", "Olesen");
            var lærer2 = new H1Lærer("Flemming", "Sørensen");
            var lærer3 = new H1Lærer("Peter", "Suni Lindeskov");
            var lærer4 = new H1Lærer("Henrik", "Vincents Poulsen");

            var elev1 = new H1Elev("Alexander", "Mathias Thamdru");
            var elev2 = new H1Elev("Allan", "Gawron");
            var elev3 = new H1Elev("Andreas", "Carl Balle");
            var elev4 = new H1Elev("Darab", "Haqnazar");
            var elev5 = new H1Elev("Felix", "Enok Berger");
            var elev6 = new H1Elev("Jamie", "J. d. I. S. E.-D.");
            var elev7 = new H1Elev("Jeppe", "Carlseng Pedersen");
            var elev8 = new H1Elev("Joseph", "Holland-Hale");
            var elev9 = new H1Elev("Kamil", "Marcin Kulpa");
            var elev10 = new H1Elev("Loke", "Emil Bendtsen");
            var elev11 = new H1Elev("Mark", "Hyrsting Larsen");
            var elev12 = new H1Elev("Niklas", "Kim Jensen");
            var elev13 = new H1Elev("Rasmus", "Peter Hjorth");
            var elev14 = new H1Elev("Sammy", "Damiri");
            var elev15 = new H1Elev("Thomas", "Mose Holmberg");
            var elev16 = new H1Elev("Tobias", "Casanas Besser");

            var fag1 = new H1Fag("Grundlæggende Programmering", lærer1, new List<Elev> { elev1, elev2, elev3, elev4, elev5, elev6, elev7, elev8, elev9, elev10, elev11, elev12, elev13, elev14, elev15, elev15, elev16 });


            AlleFag = new List<Fag> { fag1 };
        }
    }

    class Program

    {
        static void Main(string[] args)
        {
            while (true)
            {
                Console.WriteLine("Indtast søgekriterier (Lærer, elev eller fag):");
                string criteriaString = Console.ReadLine();

                if (Enum.TryParse<SøgeKriterier>(criteriaString, out var Kriterier))
                {
                    switch (Kriterier)
                    {
                        case SøgeKriterier.Lærer:
                            Console.WriteLine("Indtast lærerens navn:");
                            string lærerNavn = Console.ReadLine();
                            var matchingTeachers = H1Fag2.AlleFag.Select(s => s.Lærer)
                                .Where(t => t.ForNavn.Equals(lærerNavn, StringComparison.OrdinalIgnoreCase));
                            Console.WriteLine($"Fag undervist af {lærerNavn}:");
                            foreach (var fag in matchingTeachers.SelectMany(t => t.GetSubjectsTaught()))
                            {
                                Console.WriteLine(fag.Navn);
                            }
                            break;

                        case SøgeKriterier.Elev:
                            Console.WriteLine("Indtast den studerendes navn:");
                            string elevNavn = Console.ReadLine();
                            var matchingStudents = H1Fag2.AlleFag.SelectMany(s => s.Elever)
                                .Where(p => p.ForNavn.Equals(elevNavn, StringComparison.OrdinalIgnoreCase));
                            Console.WriteLine($"Fag indskrevet af {elevNavn}:");
                            foreach (var fag in matchingStudents.SelectMany(s => s.GetSubjectsEnrolled()))
                    {
                                Console.WriteLine(fag.Navn);
                            }
                            break;

                        case SøgeKriterier.Fag:
                            Console.WriteLine("Indtast emnets navn:");
                            string fagNavn = Console.ReadLine();
                            var matchingSubjects = H1Fag2.AlleFag
                                .Where(s => s.Navn.Equals(fagNavn, StringComparison.OrdinalIgnoreCase));
                            Console.WriteLine($"Emne {fagNavn} er undervist af:");
                            foreach (var lærer in matchingSubjects.Select(s => s.Lærer))
                            {
                                Console.WriteLine($"{lærer.ForNavn} {lærer.EfterNavn}");
                            }
                            Console.WriteLine($"Fag {fagNavn} er indskrevet af:");
                            foreach (var elev in matchingSubjects.SelectMany(s => s.Elever))
                            {
                                Console.WriteLine($"{elev.ForNavn} {elev.EfterNavn}");
                            }
                            break;
                    }
                }
            }
        }
    }
}

2. Eleven kan vælge en hensigtsmæssig datatype til en opgave.

using System;

namespace Datatyper
{
    class MainClass
    {
        public static void Main(string[] args)
        {
            //int = heltal, float = kommatal, double = kommatal, char = karakter (bogstaver)

            //float myFloat = 10.15; //du kan bruge float men double er the way to go
            int myInt = -150;
            double myDouble = -40.321;
            char myChar = 'a';

            Console.WriteLine(myInt);
            Console.WriteLine(myDouble);
            Console.WriteLine(myChar);
            Console.ReadKey();

           
        }
    }
}

3. Eleven kan oprette og gøre brug af både enkelt-og multidimensionelle arrays.

introduktion til arrays

using System;

namespace Arrays
{
    class MainClass
    {
        public static void Main(string[] args)
        {
            int[] numbers = {0, 2, 4, 6, 8, 10};
            numbers[5] = -25;
            Console.WriteLine(numbers[5]);
            //index 0 = 0, index 1 = 2, index 2 = 4, index 3 = 6, index 4 = 8, index 5 = 10
            //må ikke gå mindre eller højere end dine valgte arrays
        }
    }
}

// Arrays er en samling af værdier i samme kasse. Indeholder som regel int værdier
// Index er indgangen/døren til værdien
// starter ved 0 og forøges med en for hvert element i array'ed

arrays - temperatur

using System;

namespace ArraysTemperatur
{
    class MainClass
    {
        public static void Main(string[] args)
        {
            Double sum = 0;
            Temp t = new Temp(100, 52, 98, 30, 11, 54, 87);

        }
        public class Temp
        {
            private int[] temp = new int[7]; // array 
            public Temp(int d1, int d2, int d3, int d4, int d5, int d6, int d7)
            {

                temp[0] = d1;
                temp[1] = d2;
                temp[2] = d3;
                temp[3] = d4;
                temp[4] = d5;
                temp[5] = d6;
                temp[6] = d7;


                {
                    for (int c = 0; c < 7; c++) ;
                }

                Console.Write("Gennemsnittet er {0} ");

                {

                }

            }
        }
    }
}
  • Et multidimensionalt array er et array med mere end én dimension. Bruges ofte i scenarier, der involverer tabel osv.
matrix = [
    [1, 2, 3],
    [4, 5, 6],
    [7, 8, 9]
]

# Accessing elements by row and column indices
print(matrix[1][2])  # Output: 6 (second row, third column)
  • enkelt dimensional array indeholder elementer i en lineær sekvens. Tilgås ved hjælp af et enkelt indeks
  • Indeholder elementer i en gitterlignende struktur med flere dimensioner. Tilgængelig ved hjælp af flere indekser (en for hver dimension).

4. Eleven kan erklære og anvende simple metoder.

static int AddNumbers(int a, int b)
{
    int result = a + b;
    return result;  // Denne værdi returneres
}

5. Eleven kan diagrammere sit arbejde.

image

6. Eleven kan benytte forskellige kontrolstrukturer.

If/Else statement

using System;

namespace Ifelsestatements
{
    class MainClass
    {
        public static void Main(string[] args)
        {
            int dice = 6;
            // 3+ for at ramme
            if (dice >= 3) {
                if (dice == 6)
                    Console.WriteLine("CRITICAL HIT!");
                else
                    Console.WriteLine("Hit!");

                Console.WriteLine("Monster takes damage");
            }
            else
                Console.WriteLine("Miss!");
        }
    }
}

//Udføre ikke else miss! eller noget andet statement siden if statement er true: 5 >= 3
//Hvis dice er mindre end 3 så går den ned til else miss! statement fordi if statement er false: 2 >= 3
//else if (dice == 6)
//Console.WriteLine("CRITICAL HIT! MONSTER LOST ITS HEAD!");
//Else if, når man gerne vil adde en anden if statement

For og while loops

using System;

namespace Loops
{
    class MainClass
    {
        public static void Main(string[] args)
        {
            //while loop:

            int i = 0;
            while (i <= 10) 
            Console.WriteLine(i);
            i++;
            //Kan skrives i en sætning hvis du ligger i++ i writeline parenteserne
            //post inscrement^^ Den tæller op til 10 fra 0
            //hvis du skriver det ++i så tæller den faktisk en mere op, så fra 0 til 11

            //do-while loop

            int i = 0;
            do {
            Console.WriteLine(i++);
            } while (i <= 10);


            //både while og for loop
            int k = 0; //initialiseringen er her
            while (k <= 10) { //boolske udtryk er her
                Console.WriteLine(k); 
                k++; //ændringen er her

            }

            for (int i = 10; i >= 0; i--)
                Console.WriteLine(i);

            //resultatet er at den tæller fra 0-10 2 gange. En gang for while loop, den anden for for loop
                

        }
    }
}

Switch statements/cases

using System;

namespace SWITCHCASE
{
    class MainClass
    {
        public static void Main(string[] args)
        {
            string tast;


            Console.WriteLine("Vælg drink ");

            tast = Console.ReadLine(); 

            switch (tast)

            {

                case "1":

                    Console.WriteLine("sex on the beach - 150$ ");

                    break;

                case "2":

                    Console.WriteLine("bloody mary - 300$ ");

                    break;

                case "3":

                    Console.WriteLine("vodka soda - 20$ ");

                    break;


                default:

                    Console.WriteLine("Du har ikke tastet 1,2 eller 3 tast return");

                    break;

            }

            Console.ReadKey();
        }
    }
}

7. Eleven kan erklære og bruge variable samt konstanter.

using System;

class Program
{
    static void Main(string[] args)
    {
        // Deklarer variabler for længde og bredde
        double længde, bredde;
        
        // Tildel værdier til variablerne
        længde = 5.0;
        bredde = 3.0;

        // Beregn arealet af rektanglet
        double areal = længde * bredde;

        // Vis resultatet
        Console.WriteLine("Rectangle Areal: " + areal);

        // Angiv en konstant for konvertering
        const double KonverteringRate = 0.621371;

        // Konverter kilometer til miles
        double kilometer = 10.0;
        double miles = kilometer * KonverteringRate;

        // Vis den konverterede afstand
        Console.WriteLine("Distance i Miles: " + miles);

8. Eleven kan redegøre for brugen af kodekommentar.

  • 1-linjes kodekommentar
  • multi-linjers kodekommentar
int alder = 25;  // Gemmer brugerens alder

/*
Denne kodeblok beregner den
nedsatte pris for et produkt.
Den tager højde for den oprindelige
pris og den gældende rabat.
*/

9. Eleven kan versionsstyre sit arbejde.

  • viser jeg selv fysisk

10. Eleven kan benytte et debugging-værktøj.

  • breakpoints
  • F-5 debugging

11. Eleven kan vælge hensigtsmæssige datatyper til variable og metoder.

using System;

class Program { static double CalculateCircleArea(double radius) { double area = Math.PI * radius * radius; return area; }

static void Main(string[] args)
{
    double circleRadius = 3.5;  // Radius of the circle

    double area = CalculateCircleArea(circleRadius);
    Console.WriteLine("Circle Area: " + area);
}

}

- Vi bruger double til variablen circleRadius, da radius kan have decimalværdier.

I metoden CalculateCircleArea:

- Vi bruger double til radius-parameteren, da radius kan have decimalværdier.
- Vi bruger Math.PI, som er en foruddefineret konstant af typen double, til at repræsentere den matematiske konstant π.
- Metoden BeregnCirkelAreal returnerer en double-værdi, der repræsenterer det beregnede areal.

## 12. Eleven kan erklære og oprette metoder i et objekt med og uden returværdi og parametre, samt gøre brug af disse.
```csharp
using System;

class BankAccount
{
    private decimal balance;  // Privat field to store account balance

    public void Deposit(decimal amount)
    {
        balance += amount;
    }

    public void Withdraw(decimal amount)
    {
        if (amount <= balance)
        {
            balance -= amount;
        }
        else
        {
            Console.WriteLine("Insufficient balance.");
        }
    }

    public decimal GetBalance()
    {
        return balance;
    }
}

class Program
{
    static void Main(string[] args)
    {
        BankAccount account = new BankAccount();  // Create a bank account

        account.Deposit(1000);                   // Deposit $1000
        account.Withdraw(300);                   // Withdraw $300

        decimal balance = account.GetBalance();  // Get the remaining balance
        Console.WriteLine("Current Balance: " + balance.ToString("C"));
    }
}
  • Jeg opretter en BankAccount-klasse med et privat felt balance til at gemme saldoen.
  • Vi definerer metoder i klassen
  • Main method
⚠️ **GitHub.com Fallback** ⚠️