~~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