~~NOCACHE~~
~~REVEAL theme=simple&disableLayout=0&transition=none&controls=1&show_progress_bar=1&build_all_lists=0&show_image_borders=0&horizontal_slide_level=2&enlarge_vertical_slide_headers=0&show_slide_details=1&open_in_new_window=1&size=1024x768~~
====== Pierwszy program ======
===== Środowisko pracy =====
* **Środowisko IDE**
* [[https://visualstudio.microsoft.com/pl/vs/|MS Visual Studio Community/Professional/Enterprise 2022 (Windows)]]
* Visual Studio Code (Windows, Linux, Mac)
* **Repozytorium kodu**
* [[https://git-scm.com/|git]]
* [[https://github.com/|GitHub]]
{{https://1000logos.net/wp-content/uploads/2020/08/Visual-Studio-Logo.png?100|}}
{{https://visualstudio.microsoft.com/wp-content/uploads/2019/09/vs-code-responsive-01-1.png?70|}}
{{https://git-scm.com/images/logo@2x.png?100|}}
{{https://1000logos.net/wp-content/uploads/2021/05/GitHub-logo-768x432.png?100|}}
===== .Net =====
{{https://learn.microsoft.com/pl-pl/dotnet/standard/library-guidance/media/cross-platform-targeting/platforms-netstandard.png?800|}}
===== =====
* **.NET Standard** - specyfikacja interfejsów API .NET, które są dostępne we wszystkich implementacjach platformy .NET.
* **.NET 5** to implementacja platformy .NET (Microsoft)
* **.Net Framework** zasadnicza platforma zarządzana dla aplikacji desktopowych (na pulpit)
* **.Net Core** platforma open-source, docelowo następca platformy .NET, Windows, Linux, macOS (dawniej OS X)
===== Standard .Net =====
{{zajecia:cs:dotnet_wersje.png?800|}}
Zobacz: [[https://docs.microsoft.com/pl-pl/dotnet/standard/net-standard]]
===== Pierwszy program =====
using System;
namespace Hello
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine("Hello World!");
}
}
}
===== Ćwiczenie =====
* utwórz nowy projekt w Visual Studio: szablon ''"Aplikacja konsolowa (.Net Core)"'' w języku C#
* skompiluj i uruchom program
* sprawdź zawartość katalogu, w którym znajduje się program (projekt). Jakie pliki wygenerował proces kompilacji?
* spróbuj odnaleźć utworzony plik wykonywalny w katalogu projektu i uruchom go za pomocą kliknięcia myszą lub podając jego nazwę w wierszu poleceń
* dokonaj zmian w programie, wprowadzając do niego błędy i zaobserwuj komunikaty zwracane przez kompilator. Czy w przypadku wystąpienia błędu kompilacji powstał program wynikowy?
===== Nowy projekt konsolowy =====
{{zajecia:cs:vs_nowy_projekt.png?500}}
{{zajecia:cs:vs_aplikacja_konsolowa.png?500}}
===== Kod =====
* **namespace** - przestrzeń nazw
* ''namespace Hello'' \\ przestrzeń nazw naszego projektu
* ''using System'' \\ udostępnia przestrzeń nazw System
===== =====
* **class** - klasa, z niej powstają obiekty, ale to inny temat
* ''class Program'' \\ klasa związana z naszym programem
* **metody** - operacje związana z klasami (obiektami)
* ''Program.Main()'' \\ metoda uruchamiana przy starcie programu
* ''System.Console.WriteLine()'' \\ pisze linę tekstu, metoda klasy ''Console'' z przestrzeni nazw ''System''
* **kropka** (''.'') - operator dostępu, \\ **średnik** ('';'') - oznacza koniec instrukcji
===== Visual Studio =====
{{zajecia:cs:vs_hello.png?800 |}}
===== =====
* Edytor kodu
* podpowiedzi i uzupełnianie składni
* analiza kodu i wykrywanie błędów w czasie edycji
* Eksplorator rozwiązań - struktura projektu
* rozwiązania -> projekty -> pliki projektu -> program.cs, plik.exe, ...
* Okno błędów i ostrzeżeń kompilatora
* Debugger (odpluskwiacz)
===== Skróty klawiszowe =====
| ''Ctrl+Shift+B'' lub ''F7'' | Kompilacja projektu |
| ''F5'' | Kompilacja i uruchomienie w trybie debugowania |
| ''Ctrl + F5'' | Kompilacja i uruchomienie bez debugowania |
| ''Ctrl+.'' lub ''Alt+Enter'' | Podpowiedź lub propozycja rozwiązania problemu |
| ''F1'' | Pomoc, dokumentacja wskazanej klasy/metody |
| ''Ctrl+Spacja'' | Uzupełnianie kodu |
===== Ćwiczenie - Jak masz na imię? ======
Napisz program, który prosi użytkownika o podanie imienia a następnie wypisze komunikat powitalny, np. "Witaj Marek".
Podaj imię: Marek
Witaj Marek !
===== =====
Co jest potrzebne do wykonania?
* zmienna do której wczytamy imię (napis), \\ zmienna typu ''string'' (łańcuch) \\ string imie;
* operacja wczytująca napis [[https://learn.microsoft.com/en-us/dotnet/api/system.console.readline?view=netcore-3.1|Console.ReadLine()]] \\ string imie = Console.ReadLine();
* operator ''='' przypisania wartości
===== Operacje wejścia/wyjścia konsoli =====
* ''[[https://learn.microsoft.com/pl-pl/dotnet/api/system.console.writeline?view=netcore-3.1|Console.WriteLine(dane)]]'' wypisuje dane i przechodzi do następnej linii
* ''[[https://learn.microsoft.com/pl-pl/dotnet/api/system.console.write?view=netcore-3.1|Console.Write(dane)]]'' wypisuje dane
* ''[[https://learn.microsoft.com/pl-pl/dotnet/api/system.console.readline?view=netcore-3.1|Console.ReadLine()]]'' wczytuje linię tekstu
===== Ćwiczenie =====
Do poprzedniego programu dodaj komunikat błędu w sytuacji, gdy użytkownik nie podał imienia, tzn. gdy długość wprowadzonego napisu wynosi 0.
Potrzebujemy:
* instrukcji warunkowej
* operatora porównania wartości ''%%==%%'' lub ''<''
* własność ''string.Length'' zawiera ilość znaków w napisie
===== Instrukcja warunkowa if() =====
{{zajecia:pp1_2021_1:if3.png?800|}}
**Przykład**
if (imie.Lenght > 0)
{
Console.WriteLine("Brawo!");
}
===== Ćwiczenie =====
Zmień poprzedni program w taki sposób aby podane imię zostało wypisane w pionie (po jednej literze w linii)
Podaj imię: Ewa
Witaj
E
w
a
Potrzebujemy:
* pętli oraz dodatkowej zmiennej całkowitej (typ ''int'')
* łańcuch to kolekcja znaków o indeksach 0, 1, 2, 3, ...
===== Pętla while() =====
{{zajecia:pp1_2021_1:while3.png?800|}}
**Przykład:**
int i=0;
while(i < 10)
{
Console.WriteLine(i);
i = i + 1;
}
===== Pomoc i dokumentacja MSDN =====
* ustaw kursor na wskazanym elemencie kodu i wciśnij ''F1''
* [[https://learn.microsoft.com/pl-pl/dotnet/api/system.console?f1url=%3FappId%3DDev16IDEF1%26l%3DPL-PL%26k%3Dk(System.Console)%3Bk(DevLang-csharp)%26rd%3Dtrue&view=net-6.0|Console]] opis klasy Console
* [[https://learn.microsoft.com/pl-pl/dotnet/api/system.console.writeline?f1url=%3FappId%3DDev16IDEF1%26l%3DPL-PL%26k%3Dk(System.Console.WriteLine)%3Bk(DevLang-csharp)%26rd%3Dtrue&view=net-6.0|WriteLine]] opis metody WriteLine
* [[https://learn.microsoft.com/pl-pl/dotnet/api/system?view=net-6.0|System]] zawartość przestrzeni nazw System
* [[https://learn.microsoft.com/pl-pl/dotnet/api/system.string?f1url=%3FappId%3DDev16IDEF1%26l%3DPL-PL%26k%3Dk(System.String)%3Bk(DevLang-csharp)%26rd%3Dtrue&view=net-6.0|String]]