1 2 Operacje na zmiennych Kolejność operacji: deklaracja, inicjacja bool decyzja; int licznik, lp; double stvat, wartpi; char Znak; string S1, S2 = "Kowalski"; przypisanie wartości podstawienie decyzja = true; licznik = 1558; lp = 1; stvat = 0.22; wartpi = 3.14; Znak = 'a'; S1 = "Jan"; pobranie w instrukcji wejścia (Console.Readln() będzie!) Wybrane operatory w C# Arytmetyczne : + - * / % double x = 20, y = 10; double z = x + y; //z = 30 z = x - y; //z = 10 z = x * y; //z = 200 z = 7 % 3; //z = 1, reszta z dzielenia całkowitego dzielenie całkowitych wynik jest całkowity! z = 6 / 5; // z = 1.0 nie 1.2 Inkrementacji i dekrementacji: ++ -- z = 10; //z=10 z--; //z=9 ale x = z-- //z=9, x=10! --z; //z=8 x = --z //z=8, x=8! Łączenie tekstu: + string s = "Ala ma "; string s2 = s + "kota"; //s2 = "Ala ma kota" 3 Operatory cd. Relacyjne: ==!= < > <= >= bool b; int i =10, j =20; b = i > j; //b = false Logiczne: &&! && iloczyn logiczny (koniunkcja) (też & - nie optymalizuje), suma logiczna (alternatywa),! negacja logiczna. 1
Przypisania: = += -= *= /= %= x += 2; // x = x + 2; x -= 2; // x = x - 2; x *= 2; // x = x * 2; x /= 2; // x = x / 2; x %= 2; // x = x % 2; double x = 10, y = 5, z = 2; double a = x - y - z; //a=3 - od lewej do prawej double a = x = y = z; //a=2 od prawej do lewej 4 5 6 Operatory cd. Plus (minus) jednoargumentowy: + - Dostęp do składowej:. (kropka) nazwę kontenera (nazwa przestrzeni nazw, nazwa klasy, nazwa struktury) od nazwy rzeczy zagnieżdżonej (nazwa podprzestrzeni, nazwa klasy, nazwa metody ) Wyrażenie warunkowe: warunek? wyraż1 : wyraż2; double x, modul; modul = x < 0? -x : x; Indeksowania: [ ] dostęp do elementów tablicy Lokalność zmiennych double z, x; z = 10; int j, i = 10, k = 15; j = i + k; x = j; Unikalność nazw //abs(x) Nazwa musi być unikalna w danym bloku kodu (C++ dobrze, C# źle): int x; //zagnieżdżony blok ; double x; //błąd, ta sama nazwa! 2
ale int x; double x; //OK, inny blok 7 8 9 10 Dane do programu Odczyt z konsoli Console.ReadLine(); zawsze tekst (s = "2" + "2" =>?) zwraca wartość coś trzeba z nią zrobić! s = Console.ReadLine(); s = s + Console.ReadLine(); Console.ReadKey(); //czeka na znak zgodność typu! int i = Console.ReadLine(); //błąd! trzeba dokonać konwersji typu //czyta, czeka na Enter Konwersja typów danych Nie zawsze możliwa (tekst liczba?) Jak: Convert.To + nazwa typu na liczbę ToInt16, ToInt32, ToDouble, ToDecimal, string s= 2 ; i = Convert.ToInt16(s); na znak, tekst: ToChar, ToString //s tekst!!! char Zn = Convert.ToChar(65); // litera A s = Convert.ToString(i)+Convert.ToString(i); //22 s = Convert.ToString(i + i); //4 Metody klasy Convert Pobieranie i wypisywanie wartości zmiennych Pobieranie int i; i = Convert.ToInt32(Console.ReadLine()); 3
Wypisywanie Console.WriteLine(s); Formatowanie złożone String.Format("Tekst 0,10:C tekst",x); Console.WriteLine("Tekst 0,10:C tekst",x); Ogólna postać: index[,n][:symbol] np.: 0,12:F4 11 12 13 Składnik index tzw. specyfikator parametru, obowiązkowy liczba (od 0); wskazuje element na liście specyfikator 0 formatuje pierwszy obiekt na liście, specyfikator 1 formatuje drugi obiekt na liście itd. element użyty wielokrotnie, np. liczba hex., wykładniczo, liczb.: 0:X 0:E 0:N kolejność odwołania dowolna: 1 0 2 obiekt bez odwołania ignorowany specyfikator za duży wyjątek Składnik n n - liczba całkowitą ze znakiem preferowana szerokość sformatowanego pola, jeżeli mniejsza niż długość formatowanego ciągu - ignorowany (=dlg. faktyczna) wartość uzupełniana spacją: n > 0 - wyrównanie do prawej, n < 0 - wyrównanie do lewej znak, (przecinek) wymagany! Element symbol symbol - format odp. dla typu obiektu. dla liczby - podać ciąg standardowego lub niestandardowego formatu liczb, obiekt DateTime - podać ciąg standardowego lub niestandardowego formatu daty i godziny, jeżeli brak: będzie używany ogólny specyfikator formatu ( G ) dla typu liczbowego, daty i godziny lub wyliczeniowego 4
Znak : (dwukropek) wymagany! 14 Przykłady Suma dwu liczb Suma dowolnych liczb Iloraz test! 15 16 17 18 19 Testowanie wyrażeń logicznych Warunki w programie na wartość wprowadzanej danej liczba z określonego zakresu (wiek, waga, ocena) odpowiedź: tak, nie, K/M (mężczyzna, kobieta), format wprowadzanej danej liczba ( 5..2, 2 5, eeeee określone znaki (opcje w menu) zapis na dysku, wydruk, dostęp do sieci, operacje matematyczne (dzielenie, pierwiastkowanie, ) Błędy użytkownika przewidzieć, sprawdzać, oprogramować Instrukcja wyboru if else Problem ; if warunek instrukcja; else instrukcja co oznacza: c = 0; if (b!= 0); c = a\b; Zagnieżdżone instrukcje if else Warunki złożone Operatory - przypomnienie && iloczyn logiczny (koniunkcja), 5
suma logiczna (alternatywa),! negacja logiczna. Wynik: true, false: wiek od 18 do 65 lat: (wiek >= 18 && wiek <=65) waga <5, 15): (waga >= 5 && waga<15) student lub uczeń: (status== S status== U ) zmienna: (x > 2.53 && x <= 2.53) 20 21 22 1 Przykład Liczba dni w miesiącu: int y = 2007, m = 10, d = 0; if (m == 1 m == 3 m == 5 m == 7 m == 8 m == 10 m == 12) d = 31; if (m == 4 m == 6 m == 9 m == 11) d = 30; if (m == 2) //potrzebne?? if (y % 4 == 0) d = 29; else d = 28; Console.WriteLine("Miesiąc 0 to 1 dni", m, d); Kaskadowy If Zagnieżdżony (kaskadowy) if y=2007; m=10; d=0; if (m==1 m==3 m==5 m==7 m==8 m==10 m==12) d = 31; else if (m==4 m==6 m==9 m==11) d = 30; else if (y % 4==0) d = 29; else d = 28; Problem czytanie(a,b); if (a>=0) if (b>=0) Console.WriteLine( pole= 0, a*b); else Console.WriteLine( Błędna wartość! ); do którego if odnosi się else? Wybór wielowariantowy - switch Składnia: switch(wyrazenie)//bez średnika! case wartosc1: instra1; ; instran; case 6
2 case wartoscn: instrn1; ; instrnn; default: instr1; ; instrn; wyrażenie: typu całkowitego (sbyte, byte, short, ushort, int, uint, long, ulong, char); dowolnego typu wyliczeniowego; typu string, wartosc1 wartoscn: znane w czasie kompilacji (literały lub stałe nazwane), typ zgodny z typem wyrażenia wyrażenie, break ewetualnie goto, throw lub return bez break OR warunków default opcjonalnie 23 24 switch przykład int dzien = 3; string nazwa = ""; switch (dzien) case 1: nazwa = "poniedziałek"; case 2: nazwa = "wtorek"; case 3: nazwa = "środa"; //uzupełnić! case 7: nazwa = "niedziela"; default: nazwa =???"; break Testowanie poprawności danych instrukcja ReadLine() string operacja Convert.To wykonywana bezwarunkowo obsłużyć błędy wykonania (tzw. wyjątki)! funkcja bool Int32.TryParse( string s, out int result) 7