Du skal testes dotnet-kommandoen til at oprette og køre .NET-projekter. Dette gøres direkte fra et terminal-vindue som kører bash eller zsh. Andre terminal-typer kan også bruges, men i det følgende antages der en af de to.
dotnet new --list.dotnet new blazorwasm -o mit-blazor-projekt.Du har nu en folder med et nyt blazor-projekt i. Test at projektet virker sådan her:
cd mit-blazor-projekt).dotnet watch.dotnet run i stedet. Se om nye ændringer i koden stadig bliver indlæst eller ej.Til sidst skal du prøve at lave et console-projekt i stedet. Gør følgende:
console i stedet for blazorwasm.Tag dit console-projekt fra sidste opgave, eller lav et nyt, og smid følgende kode ind i Program.cs.
Console.WriteLine("Skriv dit navn:");
var input = Console.ReadLine();
Console.WriteLine($"Hej {input}");
Kør programmet og se at det virker.
Du skal nu prøve at debugge programmet, dvs. sætte et breakpoint på sidste linje. Herefter skal programmet startes op med debugging. Hvis du bruger vscode, er det lidt bøvlet, men du kan bruge vejledningen herunder. Bruger du Visual Studio, behøver du ikke lave en launch.json først, men burde blot kunne starte programmet direkte op i debugging. Til gengæld er det lidt svært at finde Terminalen i Visual Studio.
Her er vejledningen til vscode. Med Visual Studio skal du selv prøve at gøre noget svarende til punkt 6 og frem.
launch.json skal have følgende indhold. Dog skal filnavnet “test-project.dll” erstattes med et filnavn der matcher navnet på lige netop dit projekt:{
"version": "0.2.0",
"configurations": [
{
"name": ".NET Core Launch (console)",
"type": "coreclr",
"request": "launch",
"preLaunchTask": "build",
"program": "${workspaceFolder}/bin/Debug/net6.0/test-project.dll",
"args": [],
"cwd": "${workspaceFolder}",
"console": "integratedTerminal",
"stopAtEntry": false
}
]
}
Kom du igennem alle steps? Prøv igen, men med følgende ændringer:
Skriv en rekursiv metode der beregner n!, også kaldet for “n fakultet”. Hvis du skal have genopfrisket fakultet fra matematikken, kan du læse om det i den danske wikipedia.
Den rekursive definition er givet ved
0! = 1n! = n * (n - 1)! hvor n > 0.Du kan skrive koden i et console-projekt direkte i Program.cs. Strukturér koden sådan her:
// Program.cs
Console.WriteLine(Opgave3.Faculty(5)); // Output skal være '120'.
class Opgave3 {
public static int Faculty(int n) {
// TODO: Skriv koden til fakultet her!
}
}
Du må ikke benytte loops i din kode!
Kør koden med dotnet run.
I følgende delopgaver må du ikke benytte loops!
Skriv en rekursiv metode der implemeterer Euclids algoritme der finder største fælles divisor af to positive heltal. Den største fælles divisor af to tal er det største heltal der går op i begge tal.
Euclids algoritme Største Fælles Divisor, sdf(a,b), kan defineres som:
b hvis b <= a og b går op i a.sfd(b,a) hvis a < bsfd(b, a % b) ellersBemærk at % betyder “modulu”.
Nu skal du lave en rekursiv funktion der opløfter et tal i n’te potens. Eksempel: Hvis n er 4, skriver man 5⁴ som læses som “5 opløftet til fjerde potens”, og resultatet her er 625.
Den rekursive definition er givet ved
n⁰ = 1np = n(p - 1) * n, hvor p > 0.Brug samme kodestruktur som før. Husk at du nu har to input: n og p.
Skriv en rekursiv metode der beregner a * b hvor a og b er to hele tal større end eller lig med nul.
Det er ikke tilladt at benytte * i koden til at gange tal sammen. Det hele skal løses rekursivt kun med sammenligninger, + og -.
Den rekursive definition er givet ved
a * b = (a - 1) * b + b hvor a > 1Skriv en rekursiv metode der returnerer s med karaktererne i omvendt rækkefølge.
For eksempel skal kaldet Reverse(“EGAKNANAB”) = “BANANAKAGE”.
Beskriv først den rekursive definition som i de andre delopgaver, for hvordan man vender en string. Programmér dernæst den rekursive metode.
Man må selvfølgelig ikke benytte indbyggede metoder der vender en string.
Følgende rekursive metode gennemløber en mappestruktur på din computer og udskriver alle filnavne:
// Program.cs
// Input 'path' er den mappe man starter i
Opgave5.ScanDir("C:\\Users\\Kristian");
class Opgave5 {
public static void ScanDir(string path) {
DirectoryInfo dir = new DirectoryInfo(path);
FileInfo[] files = dir.GetFiles();
// Udskriver alle filerne
foreach (FileInfo file in files) {
Console.WriteLine(file.Name);
}
DirectoryInfo[] dirs = dir.GetDirectories();
// Kalder rekursivt på alle undermapper
foreach (DirectoryInfo subdir in dirs) {
ScanDir(subdir.FullName);
}
}
}
Gør nu følgende:
public static int ScanDirCount(String path).// Før
D:
D:\Hewlett-Packard
D:\Hewlett-Packard\BiosUpdate
D:\Hewlett-Packard\BIOS
D:\Hewlett-Packard\BIOS\New
D:\Hewlett-Packard\BIOS\Current
D:\Hewlett-Packard\BIOS\Previous
// Efter
D:
D:\Hewlett-Packard
D:\Hewlett-Packard\BiosUpdate
D:\Hewlett-Packard\BIOS
D:\Hewlett-Packard\BIOS\New
D:\Hewlett-Packard\BIOS\Current
D:\Hewlett-Packard\BIOS\Previous