330 likes | 642 Views
Zachodniopomorska Szkoła Biznesu. Podstawy programowania. Wykład 2: Przetwarzanie danych w C++. Podstawy tworzenia kodu w C++. Case-sensitive czyli rozmiar ma znaczenie Ignorowanie odstępów ( whitespace - białe znaki) Spacje Tabulacje Znaki nowej linii
E N D
Zachodniopomorska Szkoła Biznesu Podstawy programowania Wykład 2: Przetwarzanie danych w C++
Podstawy tworzenia kodu w C++ • Case-sensitive czyli rozmiar ma znaczenie • Ignorowanie odstępów (whitespace - białe znaki) • Spacje • Tabulacje • Znaki nowej linii • Komentarze: symbol // lub para /* - */ • Układ graficzny i wielkość liter w służbie czytelności • Konwencje • Układ graficzny • Nadawane nazwy • Język • Komentarze z grafiką Podstawy programowania - Przetwarzanie danych w C++
Kolejność kompilacji i wykonania • Podstawową zasadą programowania jest zapis poleceń w kolejności, w jakiej mają być wykonywane, od góry do dołu, a jeżeli kilka instrukcji znajduje się w jednej linii kodu: od lewej do prawej • Kolejność ta nie zawsze dotyczy całości pliku programu ze względu na strukturę programu w języku C++, można jednak założyć, że obowiązuje wewnątrz każdego wydzielonego bloku • Kompilacja: zgodna z kolejnością znaków w pliku,a więc od góry do dołu i od lewej do prawej Podstawy programowania - Przetwarzanie danych w C++
Dane i ich rodzaje • Pracę programu należy rozumieć jako przetwarzanie danych • Przykłady danych różnych rodzajów: • liczba • tekst • znak • adres w pamięci • data i czas • obraz, dźwięk, video • Kodowanie w postaci kombinacji (ciągu) bitów interpretowanych jako liczby • Sposób kodowania danych to reprezentacja Podstawy programowania - Przetwarzanie danych w C++
Typy danych w C++ • Wszystkie dane w programie muszą mieć określony typ definiujący jednoznacznie ich zapis w pamięci • Typy całkowite • Typy zmiennoprzecinkowe • Typ znakowy • Typy pochodne • Wskaźnik • Referencja • Typy złożone • Tablica • Rekord lub klasa • Unia • Pole bitowe Podstawy programowania - Przetwarzanie danych w C++
Typy całkowitoliczbowe • Stosowane do zapisu wartości niewymagających użycia ułamków; ilości, numerów porządkowych itp. • Typ int • Zakres liczb - modyfikatory: short, longtypy: short int = short, long int = long • Określenie znaku - modyfikatory: signed, unsigned typy: signed int = signed unsigned int = unsigned signed/unsigned short [int] signed/unsigned long [int] • Typ znakowychar może być również traktowany jako liczba całkowita Podstawy programowania - Przetwarzanie danych w C++
Typy całkowite i ich zakresy • Rozmiar typu int zależy od kompilatora i z założenia powinien odpowiadać szerokości szyny danych komputera, (obecnie 32b) • Typy int, short i long domyślnie posiadają znak (signed) • Dla typu char własność ta zależy od kompilatora Podstawy programowania - Przetwarzanie danych w C++
Typy zmiennoprzecinkowe • Zapis wartości zawierających ułamki lub zbyt dużych aby reprezentować je za pomocą typów całkowitych • Typy float, double i long double • Różnią się one precyzją zapisu i zakresem dopuszczalnych wartości oraz liczbą bajtów zajętej pamięci: Podstawy programowania - Przetwarzanie danych w C++
Stałe liczbowe w programie • Liczby całkowite wpisane wprost w tekście programu traktowane są jako typ int, chyba że ich wartość wykracza poza zakres tego typu. Wtedy stosowany jest typ całkowity o większym zakresie (np. long lub int64) lub kompilacja kończy się błędem • Znak U po liczbie wymusza utworzenie stałej o typie nieznakowanym (unsigned) • Znak L wymusza utworzenie stałej o typie long • Para znaków UL po liczbie wymusza utworzenie stałej o typie unsigned long • Liczba zawierająca kropkę dziesiętną lub wartość w tzw. notacji naukowej traktowana jest jako double Podstawy programowania - Przetwarzanie danych w C++
Stałe liczbowe - przykłady • 100 // int • -23000U // unsigned int! • 1L // long • 5000000000 (5mld) // int64! • 50UL // unsigned long • 1.23234 // double • 26. // double, 26.0 • .5 // double, 0.5 • -1.434e25 // double, -1.434*10^25 • 1e6 // double, 1 mln • 5e-1 // double, 0.5 Podstawy programowania - Przetwarzanie danych w C++
Stałe ósemkowe i szesnastkowe • Liczby całkowite można podawać, oprócz postaci dziesiętnej, również w kodzie ósemkowym lub szesnastkowym • Stała całkowita rozpoczynająca się od 0 traktowana jest jako liczba ósemkowa, a od 0x jako szesnastkowa, np. • 010 // 8 • -077 // -63 • 0xff // 255 • -0x10 // -16 Podstawy programowania - Przetwarzanie danych w C++
Zmienne • Jeżeli w programie zachodzi potrzeba zapamiętania pewnej wartości lub jej przetwarzania należy zarezerwować odpowiedni obszar w pamięci nadając mu nazwę oraz typ. • Obszar taki wraz z nazwą i typem nazywa się zmienną. • Zmienna zawsze zawiera wartość • Składnia deklaracji (utworzenia) zmiennej: typ nazwa_zmiennej; typ nazwa_zmiennej1, nazwa_zmiennej2,...; • Ograniczenia nazwy: litery wielkie i małe (bez polskich znaków), cyfry oraz znak ‘_’, nie może zaczynać się od cyfry, zwykle max. 32 znaki • Przykłady: int x; unsigned long _Bardzo_Dluga_Nazwa_Zmiennej; float Pole_Kola1, Pole_Kola2; Podstawy programowania - Przetwarzanie danych w C++
Korzystanie ze zmiennej • Zapamiętanie wartości w zmiennej odbywa się dzięki operatorowi przypisania= Składnia: zmienna = wartość; • Od chwili utworzenia zmiennej użycie jej nazwy(za wyjątkiem lewej strony przypisania)oznacza odczyt wartości w niej zapisanej • Przykłady int x,y; // utworzenie zmiennych x=25; // przypisanie wartości zmiennej x y=x; // odczyt wartości ze zmiennej x // i przypisanie tej wartości zmiennej y Podstawy programowania - Przetwarzanie danych w C++
Inicjalizacja zmiennej • Jeżeli chcemy nadać zmiennej pewną wartość początkową, możemy dokonać zwykłego przypisania po jej utworzeniu, np.:int x; x=5; • Możliwe jest jednak połączenie obu czynności czyli nadanie wartości zmiennej już w chwili tworzenia - inicjalizacja, np.: int x=5; float f, d=0.5; long a1=100L, a2, a3=5; • Powoduje to skrócenie zapisu, a w niektórych przypadkach może być jedyną szansą nadania wartości zmiennej(np. zmienne typu const) Podstawy programowania - Przetwarzanie danych w C++
Wyrażenia • Wyrażenie to ciąg symboli, któremu w danej chwili działania programu można przypisać konkretną wartość określonego typu • Do budowy wyrażeń używa się operatorów oraz m.in. stałych i zmiennych odgrywających rolę operandów • Przykłady wyrażeń: 1 x // wyrażenia bez operatora -a 2*x+(a-1) // działania arytmetyczne a>1 a==x+1 // relacje x &&(a>1) // działania logiczne Podstawy programowania - Przetwarzanie danych w C++
Operatory • Operator to symbol oznaczający wykonanie pewnego działania. Obiektem działania jest symbol lub symbole sąsiadujące z operatorem, zwane operandami. • Operatory arytmetyczne jednoargumentowe: + - Przykłady: -a +b // ‘+’ nie daje efektu • Operatory arytmetyczne dwuargumentowe: + - * / % (tylko całkowite) • Przykłady: a+b x-y 2*p rok/12.0 // dzielenie „arytmetyczne” 10/3 10%3 // dzielenie całkowite i reszta Podstawy programowania - Przetwarzanie danych w C++
Typ wyniku działań arytmetycznych • Jeżeli operandy działań arytmetycznych są całkowite , wynik jest typu int, chyba że jeden z operandów był typu long • Jeżeli chociaż jeden z operandów był zmiennoprzecinkowy, wynik jest zmiennoprzecinkowy (takiego typu jak ten operand) • Jeżeli zakres wartości typów operandów jest różny, wynik posiada typ o zakresie odpowiadającym większemu z zakresów operandów • Przykłady: short x; float f; x+2 // short + int = int 10+2.5 // int + double = double f + 10.0 // float + double = double f + 1 // float + int = float 2 * 1L // int + long = long Podstawy programowania - Przetwarzanie danych w C++
Operator konwersji • Opisane wyżej sytuacje dotyczą tzw. konwersji niejawnych czyli zmian typu niezależnych od programisty • Możliwa jest również zmiana typu poprzez konwersję jawną (tzw. rzutowanie) za pomocą operatora () • Składnia: (typ) wyrażenie • Przykłady: short x=1; float f; f= x / 5; // 0 dzielenie całkowite f= (float) x / 5; // 0.2, dzielenie zwykłe x= f * 5; // 0.2 * 5 = 1.0 x= (int) f * 5; // 0 * 5 = 0 x= 2* (int)(1.0/10+1);// 2*(int) 1.1 = 2*1=2 Podstawy programowania - Przetwarzanie danych w C++
Operatory relacji • Operatory relacji: > (większe) < (mniejsze)>= (większe lub równe) <= (mniejsze lub równe) oraz porównania: == (równe) != (różne) Są to operatory dwuargumentowe generujące wartość typu int równą 1 (prawda) lub 0 (fałsz) w zależności od prawdziwości relacji dla podanych operandów • Przykłady: 1==0 // 0 2>=2 // 1 2<1 // 0 0!=0 // 0 x+1 > 2*y-5 // wynik zależy od zmiennych // dla x=5 i y=2: 1 Podstawy programowania - Przetwarzanie danych w C++
Operatory logiczne • Operatory logiczne:! (negacja/not) && (i/and) || (lub/or) Negacja jest jednoargumentowa, pozostałe są dwuargumentowe. Wykonują działania logiczne przy założeniu, że wartość operandu równa jest: 1 (prawda) jeżeli jest on różny od zera 0 (fałsz) jeżeli jest on równy zero Podstawy programowania - Przetwarzanie danych w C++
Operatory bitowe • Operatory bitowe:~ (negacja/not) & (i/and) | (lub/or) ^ (xor) Działanie jest bardzo podobne do działania operatorów logicznych, jednak w tym przypadku działania wykonywane są na każdej z odpowiadających sobie par bitów. Podstawy programowania - Przetwarzanie danych w C++
Operatory logiczne i bitowe • Przykład: 10 && 25 // 1(nie-zero) && 25(nie-zero) = 1 10 & 25 // 00000000000000000000000000001010 // & 00000000000000000000000000011001 //------------------------------------ // = 00000000000000000000000000001000 // = 16 Podstawy programowania - Przetwarzanie danych w C++
Operatory przesunięć bitowych • Operatory: >> (przesunięcie bitowe w prawo) << (przesunięcie bitowe w lewo) powodują przesunięcie wszystkich bitów lewego operandu o liczbę miejsc określoną przez prawy operand.Oba operandy muszą być całkowite. Wypadające bity giną, a wchodzące przyjmują wartość 0(Przy operatorze >> dla wartości ujemnych, z lewej strony wchodzą 1 - powielenie bitu znaku) • Efekt działania operatora >> jest zbliżony do podzielenia liczby przez 2, a operatora << do pomnożenia. • Przykłady: 50 << 1 // 50(32b): 00000000000000000000000000110010 // 100 : 00000000000000000000000001100100 -50 >> 2 // -50: 11111111111111111111111111001110 // -12: 11111111111111111111111111110011 Podstawy programowania - Przetwarzanie danych w C++
Operatory działań z przypisaniem • Operator += (operator zwiększenia) Zapis: x += 5; oznacza: x = x + 5; • Zaletą tego podejścia jest skrócenie zapisu oraz przyspieszenie działania tej operacji (wygenerowany kod maszynowy jest krótszy). Nieco obniża się czytelność tych operacji. • Analogiczne operatory to: -= *= /= %= &= |= ^= <<= >>= • Przykład: int x=5; x+=10; // x=x+10; 15 x/=2; // x=x/2; 7 (dzielenie całkowite) x%=5; // x=x%7; 2 (reszta z dzielenia) x>>=1; // x=x>>2; 1 Podstawy programowania - Przetwarzanie danych w C++
Wartość operacji przypisania • Wartość operacji przypisania równa jest zmiennej po przypisaniu, np. wyrażenie a=5+5 ma wartość 10. • Operacja przypisania może być więc użyta w wyrażeniach, np.: zapis: y = 3+ (a=10); // nawias konieczny oznacza: a = 10; y = 3+a; // czyli 13 • Powoduje to skrócenie zapisu oraz przyspieszenie działania tych operacji kosztem spadku czytelności • Analogicznie działają operatory: -= *= /= %= &= |= ^= <<= >>= • Przykłady: int x, y; y= 1+ (x=4); // x=4, y=1+4=5; y= 2* (x+=11); // x=15, y=2*15=30; y+= 5+(x/=3); // x=5, y=y+5+5=40 y= (x*=2) + (x+=3); // wartości niepewne (kolejność)! Podstawy programowania - Przetwarzanie danych w C++
Inkrementacja i dekrementacja • Inkrementacja to zmiana pewnej wartości na następną.W praktyce zwykle oznacza to jej zwiększenie o 1Dekrementacja to operacja odwrotna (zmniejszenie o 1) • W języku C i C++ operatory tych działań to: ++ i -- • Zapis: ++x; lub x++; oznacza: x = x+1; --x; lub x--; oznacza: x = x-1; • Preinkrementacja Predekrementacja: Postinkrementacja Postdekrementacja: • Przykłady: int x, y=5; x= y++ +1; // x= 6; y=6; x= --y *10 // x=50; y=5 Podstawy programowania - Przetwarzanie danych w C++
Operator warunkowy • Wykorzystuje się go w sytuacji gdy chcemy przypisać zmiennej jedną z dwóch wartości w zależności od pewnego warunku. • Jest to jedyny operator trzyargumentowy (warunek oraz dwie wartości alternatywne) • Zapisywany jest za pomocą symboli: ? i : • Składnia:(warunek) ? wartosc_gdy_niezero : wartosc_gdy_zeroWarunek to dowolne wyrażenie, istotne jest czy jego wartość wynosi zero czy nie. Nawias jest obowiązkowy. • Przykłady: int x, y=5; x= (y>0) ? 1 : 0; // x=1, y=5 y= (x--) ? 100 : 0; // x=0, y=100 y= 25 + ((x<5) ? 25 : 10)); // x=0, y=25+25=50 Podstawy programowania - Przetwarzanie danych w C++
Operator , • Umożliwia on podanie kilku wyrażeń w sytuacji, gdy oczekiwane jest tylko jedno, np. x= (1, b=2); Wartość całego wyrażenia w nawiasie równa jest wartości najbardziej prawego z wyrażeń oddzielonych przecinkami: 2 Wartości wyrażeń wyliczane są w kolejności od lewej do prawej • Przykłady: int x, y; x= (y=1, y+5); // x=6, y=1 y= (1,2,3,4,5); // y=5 x+= (++x, y++); // x=12, y=6 Podstawy programowania - Przetwarzanie danych w C++
Operator sizeof • Operator ten pozwala uzyskać liczbę bajtów konieczną do zapisania podanej wartości lub podanego typu • Składnia: sizeof(wyrażenie) sizeof(nazwa typu) • Przykłady: int x,y; x= sizeof (int); // zwykle 4 x= sizeof(10.0/3); // sizeof(double), zwykle 8 x= sizeof(y)*8; /// liczba bitów dla int: 32 Podstawy programowania - Przetwarzanie danych w C++
Priorytety operatorów • Kolejność interpretowania operatorów nie jest dowolna, regulują ją tzw. priorytety • Na przykład w wyrażeniu: x + 5 * a pierwsze zostanie wykonane mnożenie (ma wyższy priorytet), kolejność ta jest w tym wypadku podyktowana zasadami algebry • Jeżeli oba działania dotyczące pewnego operandu mają jednakowy priorytet, kolejność ich wykonania zależy od kompilatora, zazwyczaj od lewej do prawej • Zmianę kolejności można wymusić za pomocą nawiasów ( ) Podstawy programowania - Przetwarzanie danych w C++
Priorytety poznanych operatorów Podstawy programowania - Przetwarzanie danych w C++