Lambda functions</summary> Wyrażenia lambda to krótkie sposoby definiowania funkcji anonimowych.
Func<int, int> square = x => x * x;
https://learn.microsoft.com/pl-pl/dotnet/csharp/language-reference/operators/lambda-expressions </details>
Interpolacja stringów</summary> https://learn.microsoft.com/en-us/dotnet/csharp/language-reference/tokens/interpolated </details>
.NET SDK – zestaw narzędzi do kompilowania i uruchamiania aplikacji C#. (Instalowany razem z Visual Studio)
Plugin https://marketplace.visualstudio.com/items?itemName=MadsKristensen.CodeCleanupOnSave
Na początek sprawdź czy środowisko .NET jest zainstalowane wpisując w terminalu:
dotnet

Jeśli środowisko jest zainstalowane możliwe jest stworzenie projektu. Poniżej tabelka z popularnymi typami projektów:
| Nazwa Szablonu | Krótka nazwa | Opis |
|---|---|---|
| Aplikacja konsolowa | console |
Tworzy aplikację działającą w terminalu |
| Biblioteka klas | classlib |
Tworzy bibliotekę klas (DLL) |
| Web API | webapi |
Tworzy API w ASP.NET Core bez interfejsu użytkownika |
| Blazor Server | blazorserver |
Tworzy aplikację Blazor Server (renderowanie na serwerze) |
| Blazor WebAssembly | blazorwasm |
Tworzy aplikację Blazor działającą w przeglądarce |
| Aplikacja MVC | mvc |
Tworzy aplikację ASP.NET Core MVC |
| Aplikacja Razor Pages | razor |
Tworzy stronę ASP.NET Core z Razor Pages |
| Usługa w tle | worker |
Tworzy aplikację pracującą w tle |
| Aplikacja Windows Forms | winforms |
Tworzy klasyczną aplikację okienkową (Windows) |
| Aplikacja WPF | wpf |
Tworzy aplikację okienkową w technologii Windows Presentation Foundation |
Pełną listę projektów które możemy utworzyć z wykorzystaniem zainstalowanego SDK można wyświetlić za pomocą polecenia:
dotnet new list # W nowszych wersjach
dotnet new --list # W starszych wersjach
Możliwe jest też tworzenie własnych szablonów. Samouczek tworzenia szablonów
Ogólna składnia polecenia dotnet new jest nastepująca:
dotnet new <nazwa_szablonu> [opcje]
gdzie jako <nazwa_szablonu> należy podać nazwę jednego z zainstalowanych szablonów. Jako [opcje] możliwe jest wskazanie folderu w którym projekt ma zostać utworzony np. dotnet new console -o C:\\Instructions\Lab1. Inną możliwością jest wskazanie wersji dotnet jakiej chcemy użyć dotnet new --framework net8.0
Utwórz projekt aplikacji konsolowej na pulpicie w folderze lab1. Przyjrzyj się strukturze projketu oraz zawartości plików.
Aby skompulować projekt należy przejść do katalogu projektu i wykonać polecenie dotnet build. Po jego wykonaniu w naszym projekcie zostanie utworzony katalog bin w którym znajdziemy plik wykonywalny exe lub dll w zależności od konfiguracji. Zostaną również pobrane i zainstalowane wszelkie zależności NuGet zdefiniowane w projekcie (np. biblioteki zewnętrzne). Te pliki są przechowywane w lokalnym folderze obj/.
Komenda dotnet build czyta ustawienia zawarte w pliku z rozszerzeniem *.csproj, który określa, które pliki mają zostać uwzględnione w kompilacji, jakie są zależności i inne opcje konfiguracyjne.
Jeśli w Twoim projekcie wystąpią błędy, dotnet build je wykryje i wyświetli komunikaty o błędach kompilacji w konsoli. W takim przypadku pliki binarne nie zostaną wygenerowane.
Skompiluj projekt Lab1 wcześniej utworzony na pulpicie.
Aby uruchomić program należy odnaleźć plik plik wykonywalny utworozny po kompilacji (zazwyczaj w katalogu bin). Inną opcją jest wywołanie polecenia dotnet run które najpierw wywoła polecenie build jeśli nie zostało wcześniej wywołane a następnie uruchomi program.
Uruchom projekt Lab1.
IDE (Zintegrowane Środowisko Programistyczne) to aplikacja, która zapewnia wszystkie narzędzia potrzebne do tworzenia oprogramowania w jednym miejscu. IDE zazwyczaj zawiera:
Visual Studio to jedno z najpopularniejszych i najbardziej zaawansowanych IDE stworzone przez Microsoft, które wspiera wiele języków programowania, takich jak C#, C++, F#, Python i wiele innych. Jest to pełne środowisko do tworzenia aplikacji desktopowych, webowych, mobilnych, a także aplikacji dla chmury i IoT. Visual Studio jest dostępne w kilku wersjach, w tym bezpłatnej wersji Visual Studio Community.
Poprzez interakcję z GUI programu Visual Studio wywoływane będą wcześniej wspomniane polecenia.
Po uruchomieniu programu Visual Studio otworzy się ekran powitalny:
umożliwia on:
Otwórz folder z projektem Lab1 za pomocą programu Visual Studio.
Po otwarciu projektu w programie Visual Studio zauważyć możemy, że w naszym katalogu z projektem stworzony został folder .vs. Folder Ten zawiera ustawienia programu Visual Studio specyficzne dla naszego środowiska programistycznego/systemu/komputera/hardweru.
Z tego powodu chcąc udostępnić projekt np. na platformie GitHub folder ten należy wykluczyć ze śledzenia zmian.
Po utworzeniu folderu z projektem powinno wyświetlićsię poniższe okno:

// Pętla for
for (int i = 0; i < 5; i++)
{
Console.WriteLine("Iteracja: " + i);
}
// Pętla foreach
string[] fruits = { "Jabłko", "Banan", "Pomarańcza" };
foreach (string fruit in fruits)
{
Console.WriteLine(fruit);
}
// Pętla while
int i = 0;
while (i < 5)
{
Console.WriteLine("Iteracja: " + i);
i++;
}
// do while
int i = 0;
do
{
Console.WriteLine("Iteracja: " + i);
i++;
} while (i < 5);
int x = 10;
if (x > 15)
{
Console.WriteLine("x jest większe niż 15");
}
else if (x > 5)
{
Console.WriteLine("x jest większe niż 5, ale mniejsze lub równe 15");
}
else
{
Console.WriteLine("x jest mniejsze lub równe 5");
}
// Operator trój argumentowy (terrary operator)
int x = 7;
string result = (x > 5) ? "x jest większe niż 5" : "x jest mniejsze lub równe 5";
Console.WriteLine(result);
int a = 10; // Zmienna typu całkowitego
double b = 3.14; // Zmienna typu zmiennoprzecinkowego
string name = "Jan"; // Zmienna typu string
bool isActive = true; // Zmienna typu logicznego
var x = 5; // Typ zostanie automatycznie ustalony jako int
var y = "Hello"; // Typ zostanie automatycznie ustalony jako string
// Tablice
int[] numbers = { 1, 2, 3, 4, 5 };
Console.WriteLine(numbers[2]); // Wyświetli "3"
// Listy
using System.Collections.Generic;
List<string> fruits = new List<string>();
fruits.Add("Jabłko");
fruits.Add("Banan");
fruits.Add("Pomarańcza");
foreach (var fruit in fruits)
{
Console.WriteLine(fruit);
}
// Słownik
using System.Collections.Generic;
Dictionary<int, string> students = new Dictionary<int, string>();
students.Add(1, "Jan");
students.Add(2, "Anna");
students.Add(3, "Piotr");
Console.WriteLine(students[2]); // Wyświetli "Anna"
// Tablica wielowymiarowa bez zainicjalizowanych wartości
float[,,,] tab = new float[3, 2, 6, 4];
Random rand = new Random();
for (int i = 0; i < tab.GetLength(0); i++) // 1st dimension
{
for (int j = 0; j < tab.GetLength(1); j++) // 2nd dimension
{
for (int k = 0; k < tab.GetLength(2); k++) // 3rd dimension
{
for (int l = 0; l < tab.GetLength(3); l++) // 4th dimension
{
tab[i, j, k, l] = (float)rand.NextDouble();
}
}
}
}
for (int i = 0; i < tab.GetLength(0); i++) // 1st dimension
{
for (int j = 0; j < tab.GetLength(1); j++) // 2nd dimension
{
for (int k = 0; k < tab.GetLength(2); k++) // 3rd dimension
{
for (int l = 0; l < tab.GetLength(3); l++) // 4th dimension
{
Console.WriteLine($"tab[{i}, {j}, {k}, {l}] = {tab[i, j, k, l]}");
}
}
}
}
// Tablica dwuwymiarowa
int[,] matrix = {
{ 1, 2, 3 },
{ 4, 5, 6 },
{ 7, 8, 9 }
};
Console.WriteLine(matrix[1, 1]); // Wyświetli "5"
// Tablica dwuwymiarowa "ząbkowana" - każdy wiersz ma inną długość
int[][] jaggedArray = new int[3][]; // Tablica z 3 elementami (które są tablicami)
jaggedArray[0] = new int[] { 1, 2, 3 }; // Pierwsza tablica
jaggedArray[1] = new int[] { 4, 5 }; // Druga tablica
jaggedArray[2] = new int[] { 6, 7, 8, 9 }; // Trzecia tablica
// Wyświetlanie tablicy ząbkowanej
for (int i = 0; i < jaggedArray.Length; i++)
{
for (int j = 0; j < jaggedArray[i].Length; j++)
{
Console.Write(jaggedArray[i][j] + " ");
}
Console.WriteLine();
}
Zapoznaj się z dokumentacją:
Witaj, imię użytkownika
Napisz program, który zapyta użytkownika o jego imię, a następnie wypisze na ekranie powitanie z jego imieniem.
Tabela studentów Napisz program, który przechowuje dane na temat studentów w 3 listach. Jedna list aprzechowuje Imiona, druga nazwiska, trzecia numer albumu. Wypisz dane na temat studentów w konsoli w postaci tabelarycznej.
Fibonacci Sequence
Napisz program, który generuje ciąg Fibonacciego do n-tego elementu, gdzie n jest liczbą podaną przez użytkownika.
Podpowiedź: Fibonacci to ciąg liczb, w którym każda liczba (po pierwszej i drugiej) jest sumą dwóch poprzednich. Możesz użyć pętli lub rekurencji.
Sprawdzanie liczby pierwszej
Napisz program, który sprawdza, czy podana przez użytkownika liczba jest liczbą pierwszą.
Podpowiedź: Liczba pierwsza to taka liczba, która jest większa niż 1 i dzieli się tylko przez 1 oraz samą siebie. Sprawdź dzielniki liczby do pierwiastka z tej liczby.
Rekurencyjne obliczanie silni
Napisz program, który oblicza silnię liczby n za pomocą funkcji rekurencyjnej.
Podpowiedź: Silnia z liczby n to iloczyn wszystkich liczb od 1 do n (n!). Możesz rozwiązać to rekurencyjnie, definiując silnię jako n * silnia(n-1).
Tablica - transpozycja macierzy
Napisz program, który wykona transpozycję macierzy (zamiana wierszy na kolumny) dla tablicy 2D o wymiarach n x m.
Podpowiedź: Transpozycja macierzy polega na zamianie miejscami elementów wierszy i kolumn. Możesz użyć dwóch zagnieżdżonych pętli.
Anagramy
Napisz program, który sprawdzi, czy dwie podane przez użytkownika słowa są anagramami (składają się z tych samych liter ale w różnej kolejności).
Podpowiedź: Posortuj oba ciągi znaków i porównaj je. Jeśli są identyczne, to słowa są anagramami.
Kalkulator z obsługą podstawowych operacji
Napisz prosty kalkulator, który umożliwia użytkownikowi wybór jednej z operacji (dodawanie, odejmowanie, mnożenie, dzielenie), a następnie wprowadzenie dwóch liczb i wykonanie operacji.
Podpowiedź: Użyj instrukcji switch lub if do wyboru odpowiedniej operacji i wykonania obliczeń.
Konwersja liczby do zapisu binarnego
Napisz program, który zamienia liczbę dziesiętną na jej reprezentację binarną (za pomocą własnej implementacji, bez użycia metody Convert.ToString()).
Podpowiedź: Podziel liczbę przez 2, zapisuj reszty z dzielenia i odwrotnie zbuduj wynik. Możesz użyć pętli while.
Sortowanie - algorytm bąbelkowy (Bubble Sort)
Napisz program, który sortuje tablicę liczb całkowitych w porządku rosnącym, używając algorytmu bąbelkowego (Bubble Sort).
Podpowiedź: Algorytm bąbelkowy polega na porównywaniu kolejnych elementów tablicy i zamienianiu ich miejscami, jeśli są w złej kolejności. Pętla powinna przejść przez całą tablicę.
Liczenie wystąpień słów w tekście
Napisz program, który liczy, ile razy dane słowo występuje w podanym przez użytkownika tekście (niezależnie od wielkości liter).
Podpowiedź: Użyj metody String.Split() do podzielenia tekstu na słowa, a następnie zliczaj wystąpienia danego słowa (np. za pomocą Dictionary<string, int>).
Szukaj największej i najmniejszej liczby w tablicy
Napisz program, który znajdzie największą i najmniejszą liczbę w tablicy liczb wprowadzonych przez użytkownika.
Podpowiedź: Przejdź po wszystkich elementach tablicy, porównując je z aktualnie znalezionymi największą i najmniejszą liczbą.