PODSTAWY PROGRAMOWANIA Przetwarzanie danych w C Podstawy tworzenia

  • Slides: 31
Download presentation
PODSTAWY PROGRAMOWANIA Przetwarzanie danych w C++

PODSTAWY PROGRAMOWANIA Przetwarzanie danych w C++

Podstawy tworzenia kodu w C++ Case-sensitive czyli rozmiar ma znaczenie Ignorowanie odstępów (whitespace -

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

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

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

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

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, long typy: short int = short, long int = long Określenie znaku - modyfikatory: signed, unsigned typy: signed int = signed unsigned int = unsigned/unsigned short [int] signed/unsigned long [int] Typ znakowy char może być również traktowany jako liczba całkowita Podstawy programowania - Przetwarzanie danych w C++

Typy całkowite i ich zakresy Rozmiar 1 B = 8 b char Znak 2

Typy całkowite i ich zakresy Rozmiar 1 B = 8 b char Znak 2 B = 16 b short (int) 4 B = 32 b long (int) Ze znakiem signed -128 127 -32 768 32 767 -2 147 483 648 2 147 483 647 Bez znaku unsigned 0 255 0 65 535 0 4 294 967 295 Rozmiar typu int zależy od kompilatora i z założenia powinien odpowiadać szerokości szyny danych komputera, (obecnie 32 b) 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ą

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: Typ Rozmiar Precyzja Zakres wartości float 4 B 7 -8 cyfr (1. 5*10 -45 . . . 3. 4*10+38 ) double 8 B 15 -16 cyfr ( 5*10 -324 . . . 1. 7*10+308) long double 10 B 19 -20 cyfr ( 3. 4*10 -4932. . . 1. 1*10+4932) Podstawy programowania - Przetwarzanie danych w C++

Stałe liczbowe w programie Liczby całkowite wpisane wprost w tekście programu traktowane są jako

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 int 64) 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 Podstawy programowania - Przetwarzanie danych w C++ double

Stałe liczbowe - przykłady 100 // int -23000 U // unsigned int! 1 L

Stałe liczbowe - przykłady 100 // int -23000 U // unsigned int! 1 L // long 500000 (5 mld) // int 64! 50 UL // unsigned long 1. 23234 // double 26. // double, 26. 0. 5 // double, 0. 5 -1. 434 e 25 // double, -1. 434*10^25 1 e 6 // double, 1 mln 5 e-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

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 0 x jako szesnastkowa, np. 010 -077 0 xff -0 x 10 // // 8 -63 255 -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ć

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_zmiennej 1, nazwa_zmiennej 2, . . . ; 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_Kola 1, Pole_Kola 2; Podstawy programowania - Przetwarzanie danych w C++

Korzystanie ze zmiennej Zapamiętanie wartości w zmiennej odbywa się dzięki operatorowi przypisania = Składnia:

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; x=25; y=x; // // utworzenie zmiennych przypisanie wartości zmiennej 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

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 a 1=100 L, a 2, a 3=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ą

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 -a 2*x+(a-1) a>1 a==x+1 x &&(a>1) // // wyrażenia bez operatora działania arytmetyczne relacje 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

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: + - * / Przykłady: a+b x-y rok/12. 0 10/3 10%3 % (tylko całkowite) 2*p // dzielenie „arytmetyczne” // 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

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 * 1 L // 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

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; // f= (float) x / 5; // x= f * 5; // x= (int) f * 5; // x= 2* (int)(1. 0/10+1); // 0 dzielenie całkowite 0. 2, dzielenie zwykłe 0. 2 * 5 = 1. 0 0 * 5 = 0 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

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

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 x y !x x && y x || y 0 0 1 0 0 0 1 1 1 0 1 1 Podstawy programowania - Przetwarzanie danych w C++

Operatory bitowe Operatory bitowe: ~ (negacja/not) & (i/and) | (lub/or) ^ (xor) Działanie jest

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. x y ~x x & y x | y x ^ y 0 0 1 1 0 1 1 1 0 0 0 1 1 0 Podstawy programowania - Przetwarzanie danych w C++

Operatory logiczne i bitowe Przykład: 10 && 25 // 1(nie-zero) && 25(nie-zero) = 1

Operatory logiczne i bitowe Przykład: 10 && 25 // 1(nie-zero) && 25(nie-zero) = 1 10 & 25 // 000000000000001010 // & 0000000000000011001 //------------------// = 000000000000001000 16 Podstawy programowania - Przetwarzanie danych w C++

Operatory przesunięć bitowych Operatory: >> (przesunięcie bitowe w prawo) << (przesunięcie bitowe w lewo)

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(32 b): // 100 : -50 >> 2 // -50: // -12: 00000000000001100100 1111111111111001110 111111111111110011 Podstawy programowania - Przetwarzanie danych w C++

Operatory działań z przypisaniem Operator += (operator zwiększenia) Zapis: x += 5; oznacza: x

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/=2; x%=5; x>>=1; /= // // %= &= x=x+10; x=x/2; x=x%7; x=x>>2; |= 15 7 2 1 ^= <<= >>= (dzielenie całkowite) (reszta z dzielenia) Podstawy programowania - Przetwarzanie danych w C++

Wartość operacji przypisania Wartość operacji przypisania równa jest zmiennej po przypisaniu, np. wyrażenie a=5+5

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

Inkrementacja i dekrementacja Inkrementacja to zmiana pewnej wartości na następną. W praktyce zwykle oznacza to jej zwiększenie o 1 Dekrementacja 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: y = ++x x = x+1; y = x; Postinkrementacja y = x++ Przykłady: int x, y=5; x= y++ +1; x= --y *10 y = x; x = x+1; // x= 6; // x=50; y = --x; x = x-1; y = x; Postdekrementacja: y = x--; y=6; y=5 Podstawy programowania - Przetwarzanie danych w C++ y = x; x = x-1;

Operator warunkowy Wykorzystuje się go w sytuacji gdy chcemy przypisać zmiennej jedną z dwóch

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_zero Warunek 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; y= (x--) ? 100 : 0; y= 25 + ((x<5) ? 25 : 10)); // x=1, y=5 // x=0, y=100 // 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,

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

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

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 1 ( ) nawiasy 2 ++ -- postfix 3 ++ --

Priorytety poznanych operatorów 1 ( ) nawiasy 2 ++ -- postfix 3 ++ -- ~ ! sizeof + - prefix oraz jednoargumentowe 4 (typ) konwersja 5 * / % multiplikatywne 6 + - addytywne 7 << >> przesunięcie bitowe 8 < > <= >= relacje 9 == != porównanie 10 & bitowe and 11 ^ bitowe xor 12 | bitowe or 13 && logiczne and 14 || logiczne or 15 ? : warunkowy 16 17 = *= /= %= += -= >>= <<= &= ^= |= Podstawy programowania - Przetwarzanie danych w C++ , przypisanie przecinek