~~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~~ ====== Zmienne, typy, operatory ====== ===== Zmienne i ich typy ===== Deklaracje zmiennej: **//''typ nazwa_zmiennej;''//** Zmienne przechowują wartości: * **typ zmiennej:** określa rodzaj danych, zakres wartości, dozwolone operacje na wartości * **nazwa zmiennej:** dozwolone znaki ''a-zA-z0-9_'' (cyfra nie może być pierwszym znakiem) ===== ===== Przykład: int i; // typ całkowity (4B) long j; // typ całkowity (4B) float x; // typ rzeczywisty (4B) double y; // typ rzeczywisty (8B) char znak; // typ znakowy (1B) string napis; // łańcuch znakowy (napis, kolekcja znaków) ===== Zmienne a pola klas ===== using System; // tu nie deklarujemy zmiennych !!! namespace Zmienne { // tu też nie deklarujemy zmiennych class Program { // Zmienna zadeklarowana w tym miejscu staje się polem klasy Program int a; static void Main(string[] args) { // Zmienna zadeklarowana w tym miejscu jest dostępna w funkcji Main int b; } } } ===== Przypisanie wartości ===== Operator przypisania ''='' **//''zmienna = wartość;''//** Przykład: i = 2; j = 4L; // wartość long x = 3.14f; // wartość float y = 4.600; // wartość double c = '*'; // znak gwiazdki napis = "Witaj Świecie"; // łańcuch znakowy ===== Deklaracja z inicjacją ===== **//''typ zmienna = wartość;''//** int i = 2; long j = 4L; float x = 3.14f; double y = 4.600; char c = 'X'; string napis = "Witaj Świecie"; ===== Domyślny typ przy inicjacji ===== //''var zmienna = wartość;''// var i = 2; var j = 4L; var x = 3.14f; var y = 4.600; var c = 'X'; var napis = "Witaj Świecie"; ===== Podstawowe typy ===== {{zajecia:cs:typy_wartosciowe.png?800|}} [[https://www.plukasiewicz.net/CSharp_dla_poczatkujacych/Typy_danych|Typy danych]] ===== Literały ===== ^ Zapis w kodzie C# ^ Typ ^ Opis ^ | 1 | int | Liczba całkowita ze znakiem | | 1U | uint | Liczba całkowita bez znaku | | 1L | long | Liczba całkowita 64-bitowa | | 1UL | ulong | Liczba całkowita 64-bitowa bez znaku | | 1F | float | Liczba | | 1.2M | decimal | Liczba całkowita ze znakiem o zwiększonej precyzji (dzięki zapisowi podobnemu do liczb zmiennoprzecinkowych) | ===== ===== ^ Zapis w kodzie C# ^ Typ ^ Opis ^ | 1.0 | double | Liczba zmiennoprzecinkowa | | 1.2E3 | double | Liczba zmiennoprzecinkowa w notacji naukowej ($1.2\times 10^{3} = 12000.0$ ) | | 0123 | uint | Liczba ósemkowa | | 0x1a | uint | Liczba szesnastkowa | ===== Operatory arytmetyczne ===== ^ Operator ^ Opis ^ Przykład ^ | ''+ '' | dodawanie argumentów | ''x = x + 1'' | | ''- '' | odejmowanie argumentów | ''x = y - 5'' | | ''* '' | mnożenie operatorów | ''x = 5 * 5'' | | ''/ '' | dzielenie operatorów | ''x = x / y'' | | ''% '' | operacja dzielenia modulo | ''x = x % 3'' | | ''%%++ %%'' | zwiększanie wartości o 1 | ''x%%++%%'' lub ''%%++%%x'' | | ''%%-- %%'' | zmniejszanie wartości o 1 | ''x%%--%%'' lub ''%%--%%x'' | Kolejność operacji: mnożenie i dzielenie przed odejmowaniem i odejmowaniem. \\ Pierwszeństwo maja wyrażenia w nawiasach ''( )'' ===== ===== Przykład: double x = 3.14; int k = 42; char znak = 'C'; k = k + 1; x = k - 100; x = x * x; k = x / 2; k++; --k; ===== Kolejność operacji ===== Jaki będzie wynik? 1 + 2 * 3 (1 + 2) * 3 1 / 2 1.0 / 2 1 / 2.0 1.0 / 2.0 * 3.0 int i = 1; Console.WriteLine(++i); Console.WriteLine(i++); ===== Ćwiczenie: pole i obwód koła ===== Napisz program, który wyznaczy pole oraz obwód koła o podanym promieniu $r=2$.\\ {{ zajecia:pp1_2021_1:kolo.png?400 |}} ===== ===== Liczba $\pi$ w C# Math.PI W jaki sposób wczytać liczbę z konsoli? Klasa [[https://learn.microsoft.com/en-us/dotnet/api/system.convert?view=net-6.0|Convert]] k = System.Convert.ToInt32(x); y = System.Convert.ToDouble(x); W jaki sposób wypisac liczbę w konsili? int a = 42; Console.WriteLine("To jest liczba " + a.ToString()); Console.WriteLine("To jest liczba {0}", a); Console.WriteLine($"Liczba wynosi {a}"); ===== Zadanie 2: kalkulator ===== Napisz program, który poprosi użytkownika o podanie 2 liczb rzeczywistych a następnie wypisze ich sumę, różnicę, iloczyn oraz iloraz. \\ Przykładowy wynik działania programu: Podaj dwie liczby: 1 3 Oto wynik: 1.0 + 3.00 = 4.000 1.0 - 3.00 = -2.000 1.0 * 3.00 = 3.000 1.0 / 3.00 = 0.333 Co się stanie gdy druga podana liczba będzie zerem? ===== Operatory relacji ===== ^ Operator ^ Opis ^ Przykład ^ | ''=='' | czy równe ? | ''x == y'' | | ''>'' | czy większe ? | ''x > y'' | | ''<'' | czy mniejsze ? | ''x < y'' | | ''>='' | czy większe lib równe? | ''x >= y'' | | ''%%<=%%'' | czy mniejsze lub równe? | ''x %%<=%% y'' | **Przykład** if ( x == 0 ) { Console.WriteLine("Pamiętaj cholero nie dziel przez zero!"); } ===== Operatory logiczne ===== ^ Operator ^ Opis ^ Przykład ^ | ''%%&&%%'' | operator i (AND) | ''x>5 %%&&%% x<10'' | | ''%%||%%'' | operator lub (OR) | ''x>5 %%|| x <=-5%%'' | | ''! '' | negacja (operator NOT) | ''!x'' | **Przykład** if ( a > 0 && b < 0 ) { Console.WriteLine("Obie wartości są dodatnie"); } ===== Operatory przypisania ===== ^ Operator ^ Opis ^ Przykład ^ | ''= '' | prosty operator przypisania. | ''x = y + z'' | | ''+= '' | operator dodawania i przypisywania w jednym. | ''x += y'' | | ''-= '' | operator odejmowania i przypisywania w jednym. | ''x -= 2.3'' | | ''*= '' | operator mnożenia i przypisania w jednym. | ''x*=Math.PI'' | | ''/= '' | operator dzielenia i przypisania w jednym. | ''x /= 2'' | ===== Inne operatory ===== | ''sizeof()'' | zwraca rozmiar typu danych w bajtach | ''sizeof(int)'', rozmiar: 4 | | ''typeof()'' | zwraca typ klasy | ''typeof(klasa)'' | | ''? :'' | wynikiem jest jedna z dwóch wartość zależnie od spełnienia warunku | ''x = (a < b) ? "TAK" : "NIE" '' | | ''is'' | sprawdzenie, czy obiekt jest danego typu | ''if (x is Int32)'' | | ''as'' | rzutowanie bez zwracania wyjątku jeżeli rzutowanie się nie uda (tylko typy referancyne i nulowalne) | ''y = x as string'' | ===== Rzutowanie (konwersja) typów ===== Rzutowanie jawne (double)42 // wynik 42.0 (int)0.99 // wynik 0, utrata precyzji !!! Rzutowanie niejawne double x = 42; // Jest OK int x = 0.5; // NIE jest OK, błąd int x = (int)0.5; // Jawne rzutowanie, jest OK ale utrata dokładności ===== Konwersja do/z łańcuchów ===== Zamiana łańcuchów na typy liczbowe * Klasa [[https://learn.microsoft.com/en-us/dotnet/api/system.convert?view=net-7.0|System.Convert]] \\ ''ToInt32(), ToDouble(), ToString(), ...'' \\ double x = Convert.ToDouble(Console.ReadLine()); * Metoda ''Parse()'' dla każdego typu wbudowanego \\ double x = double.Parse(Console.ReadLine()); ===== ===== Zamiana na łancych znakowy: * Metoda ''ToString()'' każdego obiektu \\ int x = 42; Console.WriteLine(x.ToString()); * Metoda ''Frormat(wartosc)'' klasy String \\ int x = 42; string s = String.Format("Liczba x = {0}", x); ===== Formatowanie wartości ===== Składnia: ''{indeks:format}'' double x = 2.0 / 3.0; Console.WriteLine("Zmienna x = {0}", x); Console.WriteLine("Zmienna x = {0:F}", x); Console.WriteLine("Zmienna x = {0:F1}", x); Console.WriteLine("Zmienna x = {0:C}", x); Console.WriteLine("Zmienna x = {0:P1}", x); Zmienna x = 0,6666666666666666 Zmienna x = 0,667 Zmienna x = 0,7 Zmienna x = 0,67 zł Zmienna x = 66,7% ===== ===== ^ Format ^ Opis ^ Przykład ^ | ''F'' lub ''f'' | //fixed-point// liczba z przecinkiem | "F" -> 1,294 | | ::: | ::: | "F1" -> 1,3 | | ''E'' lub ''e'' | notaca naukowa | "E" -> 1,123E+002 | | ''C'' lub ''c'' | waluta (zależnie od ustawień lokalizaci) | "C" -> 10,10 zł | | ''P'' lub ''p'' | procent wartości ułamkowej | "P" -> 10,1% | | ''X'' lub ''x'' | zapis szesnastkowy (tylko liczby całkowite) | "X" -> FF | Zobacz: [[https://learn.microsoft.com/en-us/dotnet/standard/base-types/standard-numeric-format-strings|Standard numeric format strings]] ===== Wyrównanie wartości ===== Składnia: ''{indeks,szerokość:format}'' double x = 1.29; Console.WriteLine("|{0}|", x); Console.WriteLine("|{0,10}|", x); Console.WriteLine("|{0,-10}|", x); Console.WriteLine("|{0,-10:F1}|", x); |1,29| | 1,29| |1,29 | |1,3 | ===== Użycie formatowania ===== * ''String.Format(format)'' * łancuchy interpolowane ''$"{zmianna:format}"'' * metoda ''ToString(format)'' double x = 1.29; var s1 = String.Format("|{0,-10:F1}|", x); var s2 = $"|{x,-10:F1}|"; var s3 = x.ToString("F1"); // tylko format wartości Console.WriteLine(s1 + '\n' + s2 + '\n' + s3 ); |1,3 | |1,3 | 1,3