→ Slide 1

Zmienne, typy, operatory

→ Slide 2

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)
→ Slide 3
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;
 
      }
   }
}
→ Slide 4

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 
→ Slide 5

typ zmienna = wartość;

int i = 2;
long j = 4L;        
float x = 3.14f;     
double y = 4.600;
char c = 'X';
string napis = "Witaj Świecie";
→ Slide 6

var zmienna = wartość;

var i = 2;
var j = 4L;        
var x = 3.14f;     
var y = 4.600;
var c = 'X';
var napis = "Witaj Świecie";
→ Slide 7

→ Slide 8
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
→ Slide 9
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;
→ Slide 10

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++);
→ Slide 11

Napisz program, który wyznaczy pole oraz obwód koła o podanym promieniu $r=2$.

Liczba $\pi$ w C#

Math.PI

W jaki sposób wczytać liczbę z konsoli?

Klasa 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}");
→ Slide 12

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?

→ Slide 13
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!");
}
→ Slide 14
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");
}
→ Slide 15
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
→ Slide 16
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
→ Slide 17

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
→ Slide 18

Zamiana łańcuchów na typy liczbowe

  • Klasa 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);
→ Slide 19

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: Standard numeric format strings

→ Slide 20

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       |
→ Slide 21
  • 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