390 likes | 623 Views
Podstawy informatyki (4). wykład : 15 godz. ćwiczenia : 15 godz. Prowadzący: dr inż. Jacek Piątkowski. Przykład :. *wsk ob1 * ob2. C++. Wyrażenia i operatory. Wyrażenie składa się z jednej lub wielu operacji. Operacje reprezentuje się za pomocą operatorów.
E N D
Podstawy informatyki (4) wykład : 15 godz. ćwiczenia : 15 godz. Prowadzący: dr inż. Jacek Piątkowski
Przykład : *wsk ob1 * ob2 C++ Wyrażenia i operatory • Wyrażenie składa się z jednej lub wielu operacji. • Operacje reprezentuje się za pomocą operatorów. Obiekty, na których wykonuje się operacje są argumentami operacji . • Operatory - jednoargumentowe – działają na jednym argumencie, - dwuargumentowe – działają na dwóch argumentach. jednoargumentowy operator wyłuskania przekazuje wartość pamiętaną pod adresem przechowywanym przez obiekt wsk dwuargumentowy operator mnożenia określa iloczyn dwóch argumentów - ob1 oraz ob2.
Wyrażenie złożone jest wówczas, gdy występują w nim co najmniej dwa operatory. Kolejność wykonywanych operacji określają reguły pierwszeństwa. C++ Wyrażenia i operatory • Obliczenie wyrażenia polega na wykonaniu jednej lub wielu operacji i uzyskaniu wyniku tych operacji. Przykład: 2.71, "START" dzielna Wartością wyrażenia 2.71 jest liczba 2.71 typu double. Wartością napisu START jest adres pierwszego znaku napisu (typu char* ). Wartością zmiennej dzielna jest jej p-wartość .
C++ Wyrażenia i operatory • Operator przypisania = powoduje zapamiętanie nowej wartości w pamięci przyporządkowanej argumentowi po lewej stronie operatora. Argument występujący po lewej musi być l-wartością Typ danych wyniku operacji przypisania jest taki sam, jak typ argumentu po lewej stronie operatora przypisania. int i; int* wi; wi = &i; Operatory przypisania można składać pod warunkiem, że wszystkie argumenty tych operatorów są tego samego typu. int i, j; i = j = 0;
C++ Wyrażenia i operatory • Operatory arytmetyczne Wynik dzielenia liczb całkowitych jest całkowity. Operator % może być stosowany wyłącznie do liczb całkowitych.
C++. Wyrażenia i operatory . Operatory arytmetyczne Przykład: #include <iostream> using namespace std; int main() { int i1=3, i2=5; double d1=2.5, d2=7.5; cout << i1/i2 << "\t" << i2/i1 << endl; cout << i1%i2 << "\t" << i2%i1 << endl; cout << d2/d1 << "\t" << d1/d2 << endl; cout << d2/i1 << "\t" << i2/d1 << endl; // d2%d1 ; błąd // d2%i1 ; błąd // i2%d1 ; błąd return 0; } Wynik: 0 1 3 2 3 0.333333 2.5 2
C++. Wyrażenia i operatory . Przykład . Najprostsza postać programu w C++ • Każdy program napisany w C++ musi posiadać funkcję main #include <iostream> using namespace std; int main() { cout << "ABC" ; return 0; } • Pomiędzy nawiasami { } jest umieszczana treść (ciało) tej, jak i każdej innej funkcji. • Wartość zwracana przez instrukcję return jest wartością, która zostaje przekazana do systemu operacyjnego po zakończeniu działania programu. #include <iostream> - dyrektywa preprocesora powodująca wstawienie do naszego programu zawartości pliku nagłówkowego iostream using namespace std;- dyrektywa używania przestrzeni nazw std , umożliwia odwoływanie się w programie do wszystkich składowych przestrzeni nazw bez posługiwania się nazwą kwalifikowaną np. std::cout cout << "ABC" ;- instrukcja powodująca wyprowadzenie do standardowego urządzenia wyjściowego (w tym wypadku na ekran monitora) napisu ABC
C++. Wyrażenia i operatory . Operatory arytmetyczne • Arytmetyczne sytuacje wyjątkowe – sytuacje, w których wartość wyrażenia jest niepoprawna lub niezdefiniowana (np. dzielenie przez zero, problem przepełnienia). #include <iostream> using namespace std; int main(){ unsigned char uc1=225, uc2=32; int i1=1, i2=8; short s1=16384; double d1=512; uc1=uc1+uc2; // przepełnienie uc2=uc2*i2; // przepełnienie s1=s1+s1; // przepełnienie cout << i1*uc1 << endl; cout << i1*uc2 << endl; cout << s1 << endl; cout << d1/uc2 << endl; return 0; } Wynik: 1 0 -32768 inf
C++ Wyrażenia i operatory • Operatory porównania relacji oraz logiczne. • Operatory porównania i relacji służą do obliczania wartości „prawda” lub „fałsz” ( true - 1, false - 0 ).
C++. Wyrażenia i operatory . Operatory porównania relacji oraz logiczne • Operator negacji logicznej ! daje w wyniku wartość true , jeżeli argument ma wartość 0; w przypadku odwrotnym wynikiem jest false. • Wynikiem operatora iloczynu logicznego && jest prawda wtedy i tylko wtedy, gdy oba argumenty są prawdziwe. • Wynikiem operatora sumy logicznej || jest prawda wówczas, gdy którykolwiek z argumentów jest prawdziwy. • Wartości argumentów oblicza się w kolejności od lewej do prawej strony wyrażenia. while( wsk!=0 && *wsk < wart_graniczna && !koniec ) { //... }
C++ Wyrażenia i operatory • Operatory inkrementacji ++ i dekrementacji -- pozwalają na zwarty zapis dodawania i odejmowania liczby 1, ( i++; tj. i=i+1; ) posiadają postać przyrostkową i przedrostkową. #include <iostream> using namespace std; int main() { int i = 0; int j = 0; cout << ++i << endl; // inkrementacja przedrostkowa cout << j++ << endl; // inkrementacja przyrostkowa cout << --i << endl; // dekrementacja przedrostkowa cout << j-- << endl; // dekrementacja przyrostkowa return 0; } Wynik: 1 0 0 1
C++ Wyrażenia i operatory • Operatory bitowe - działają na argumentach tak jak na uporządkowanych zbiorach bitów, - mogą być stosowane wyłącznie wobec argumentów typu całkowitego. W przypadku operatorów bitowych zaleca się stosowanie argumentów bez wyróżnionego bitu znaku.
C++. Wyrażenia i operatory . Operatory bitowe • Operator negacji bitowej ~ realizuje operację NOT unsigned char uc=151; uc = ~uc; • Operatory przesuwania << , >> powodują przesunięcie zawartości bitów lewego argumentu operatora o określoną liczbę pozycji ( w lewo lub prawo ). unsigned char uc=3; uc << 1; uc << 2; uc >> 3;
C++. Wyrażenia i operatory . Operatory bitowe • Operatory: koniunkcji bitowej & , alternatywy bitowej | oraz różnicy syme- trycznej ^ realizują dla odpowiadających sobie pozycją bitów obydwu argumentów operacje AND, OR oraz XOR . unsigned char uc1=101; unsigned char uc2=170; unsigned char wynik; wynik = uc1 & uc2; wynik = uc1 | uc2; wynik = uc1 ^ uc2;
C++ Wyrażenia i operatory • Złożone operatory przypisania : +=, -=, *=, /=, %=, <<=, >>=, &=, ^=, |= . pozwalają na bardziej zwarty zapis wyrażenia. x = x + y; x += y; x *= y; x = x * y; . . . . . .
C++ Wyrażenia i operatory • Operator arytmetyczny if. wyrażenie1 ? wyrażenie2 : wyrażenie3; Jeżeli wyrażenie 1 daje wartość true to wyznaczana jest wartość wyrażenia 2 , która staje się zarazem wartością zwracaną przez cały operator; w przeciwnym przypadku wyznaczana jest wartość wyrażenia 3 i to ona staje się wartością zwracaną przez operator.
C++. Wyrażenia i operatory . Operator arytmetyczny if #include <iostream> using namespace std; int main(){ int i=5, j=10, k=15; cout << "liczbą większą spośród " << i << " oraz " << j << " jest " << ( i > j ? i : j ) << endl; cout << "liczbą największą spośród " << i << ", " << j << " oraz " << j << " jest " << ( i > j ? ( i > k ? i : k ) : ( j > k ? j : k ) ) << endl; return 0; }
C++ Wyrażenia i operatory • Operator przecinkowy - jest używany jako operator oddzielający od siebie wyrażenia w ciągu wyrażeń; - wynikiem wyrażenia przecinkowego ( obliczanego kolejno od strony lewej do prawej ) jest wartość ostatniego z wyrażeń. #include <iostream> using namespace std; int main() { int a1 = 0, a2 = 0; int b = 1, c = 2, d = 3, e = 4; a1 = (++b, ++c, ++d, ++e); a2 = ++b, ++c, ++d, ++e ; cout << "a1 = " << a1 << endl; cout << "a2 = " << a2 << endl; return 0 } Wynik: a1 = 5 a2 = 3
C++ Wyrażenia i operatory • Operator sizeof - przekazuje liczbę bajtów będącą rozmiarem specyfikatora typu lub wyrażenia; - może występować w jednej z dwóch postaci: sizeof (specyfikator_typu); sizeof wyrażenie; #include <iostream> using namespace std; int main() { cout << "short : " << sizeof(short) << endl; cout << "int : " << sizeof(int) << endl; cout << "double: " << sizeof(double) << endl; cout << " 'z' : " << sizeof 'z' << endl; cout << " 3.14 : " << sizeof 3.14 << endl; cout << "\"ALA\" : " << sizeof "ALA" << endl; return 0; } Wynik: short : 2 int : 4 double : 8 ‘z’ : 1 3.14 : 8 ”ALA” : 4
C++ Wyrażenia i operatory • Pierwszeństwo i łączność operatorów 2P – poziom 2 , łączność od prawej do lewej ( x = a=b=c=0; ) 13L – poziom 13, łączność lewej do prawej ( x = a*b*c*d; )
C++ Wyrażenia i operatory • Pierwszeństwo i łączność operatorów
C++. Wyrażenia i operatory . Pierwszeństwo i łączność operatorów Im wyższy poziom tym większe pierwszeństwo danego operatora. Operatory na tym samym poziomie pierwszeństwa wykonywane są od lewej do prawej strony wyrażenia. Reguły pierwszeństwa można pominąć stosując nawiasy wyodrębniające podwyrażenia. Obliczanie podwyrażeń zaczyna się od tych, które zawarte są w naj- bardziej wewnętrznych parach nawiasów . Każde podwyrażenie zastępowane jest jego wynikiem, po czym wykonywane są dalsze obliczenia. //... cout << 4 * 5 + 7 * 2 << endl; cout << 4 * ( 5 + 7 * 2 ) << endl; cout << 4 * ( ( 5 + 7 ) * 2 ) << endl; 34 76 96
C++ Instrukcje • Instrukcje – są najmniejszymi wykonywalnymi jednostkami programu w języku C++ ; każda instrukcja jest zakończona średnikiem. int i ; //instrukcja deklaracji – jedyna, która może być // określona na zewnątrz funkcji i = 10 ; //instrukcja wyrażenia ; //instrukcja pusta float f ;; // dwie instrukcje • Instrukcja złożona – ciąg instrukcji ujęty w parę nawiasów klamrowych. { b+=i; x = x % b; } jest traktowana jak instrukcja pojedyncza. Instrukcja złożona zawierająca instrukcje deklaracji jest blokiem.
C++ Instrukcje • Instrukcje iteracyjne ( while , do-while, for ) – pozwalają na cykliczne wykonywanie pewnej części kodu programu (sterują pętlami). Pętla kończy się z chwilą gdy warunek sterowania pętlą okaże się fałszywy ( wyrażenie kontrolne zwróci wartość false ). • Instrukcje warunkowe ( if , swith ) – pozwalają na sterowanie wykonywaniem programu, poprzez sprawdzanie określonego warunku. Gdy warunek ten jest spełniony wykonywana jest pewna czynność lub ciąg czynności. W przeciwnym wypadku czynności te są omijane.
C++ Instrukcje • Instrukcja iteracyjna while . while ( wyrażenie ) instrukcja ; – dopóki wyrażenie warunku sterowania pętlą ma wartość różną od zera wykonywana jest odpowiednia instrukcja . #include <iostream> using namespace std; int main() { char znak; cout << " wprowadź znak : " ; while(cin >> znak && znak!='@' ) cout << "( " << znak << " )\n wprowadź znak : " ; cout << "( " << znak << " ) \n bye bye\n" ; return 0; }
C++ Instrukcje • Instrukcja iteracyjna do-while . do instrukcja ; while ( wyrażenie ) – wartość wyrażenia warunku sterowania pętlą jest sprawdzana po wykonaniu instrukcji . #include <iostream> using namespace std; int main() { char znak; do { cout << " wprowadź znak : " ; cin >> znak ; cout << "( " << znak << " )\n"; } while (znak!='@'); cout << " bye bye\n" ; return 0; }
C++ Instrukcje • Instrukcja iteracyjna for . for (instrukcja_ini ; wyrażenie_s ; wyrażenie_z ) instrukcja_w ; •instrukcja_ini – służy do inicjowania lub przypisywania wartości jednej lub wielu zmiennym, – może być instrukcją pustą. – jest wykonywana tylko jeden raz przed rozpoczęciem pętli. •wyrażenie_s – steruje wykonywaniem pętli; instrukcja_w oraz wyrażenie_z będą wykonywane tyle razy, ile prawdziwym będzie wynik obliczenia wyrażenia_s. •wyrażenie_z – służy głównie do zmieniania wartości zmiennych, którym instrukcja_ini nadała wartości początkowe – może być ( podobnie jak instrukcja_ini ) instrukcją złożoną . jeden cykl pętli to : wyrażenie_s - instrukcja_w - wyrażenie_z
C++. Instrukcje . Instrukcja for #include <iostream> using namespace std; int main() { for (int i=0; i < 128 ; ++i ) cout << i<< " : " << char(i) << endl; return 0; } #include <iostream> using namespace std; int main() { int i=0; for ( ; i < 128 ; ++i ) cout << i<< " : " << char(i) << endl; return 0; }
C++ Instrukcje • Instrukcja warunkowa if. if ( wyrażenie ) instrukcja ; – wynik wyrażenia różny od zera oznacza, że warunek jest spełniony , a instrukcja będzie wykonywana. if ( wyrażenie ) instrukcja1 ; else instrukcja2 ; – jeżeli wyrażenie ma wartość różną od zera, to wykonywana będzie instrukcja 1,w przeciwnym zaś wypadku instrukcja 2.
C++. Instrukcje . Instrukcja warunkowa if //... int main() { int wrt; unsigned char a; cout << "Podaj liczbę dodatnią mniejszą od 256:\n a = " ; cin >> wrt; if( wrt>0 && wrt<256 ) { // treść instrukcji złożonej } else { cout << "Liczba spoza przedziału"; if(wrt<0) cout << " i do tego jeszcze ujemna !!" << endl; else cout << ", o " << wrt - 255 << " za duża !" << endl; } return 0; }
C++. Instrukcje . Instrukcja warunkowa if { // treść instrukcji złożonej a=wrt; cout << "a binarnie to :"; for(int i = 7; i >= 0; i--) if(a & (1 << i)) cout << '1' ; else cout << '0'; cout << endl; } //...
C++ Instrukcje • Instrukcja switch wybiera jeden z fragmentów kodu na podstawie wartości wyrażenia całkowitego. switch(selector) { case całkowita1 : instrukcja; break; case całkowita2 : instrukcja; break; case całkowita3 : instrukcja; break; case całkowita4 : instrukcja; break; (...) default : instrukcja; }
C++. Instrukcje . Instrukcja switch switch(selector) { case całk_1 : instr1; break; case całk_2 : instr2; break; case całk_3 : instr3; break; (...) default : instrukcja; } • Selektor musi być wyrażeniem dającym wartość całkowitą . • Wartość selektora jest porównywana z każdą z wartości całkowitych za słowem case. • Jeżeli znaleziona zostanie odpowie dnia wartość, to wykonywana jest właściwa instrukcja . • Jeżeli żadna wartość całkowita nie odpowiada war- tości selektora, to wykonywana jest instrukcja po słowie kluczowym default. Słowo to, oraz odpowiadająca mu instrukcja ( alternatywna do pozostałych ) nie jest konstrukcją obowiązkową dla instrukcji switch. • Instrukcja break, wykonywana w następstwie wybranej instrukcji kończy wykonywanie instrukcji switch. Użycie instrukcji break jest jednak opcjonalne. Jeśli nie występuje, to po wykonaniu właściwej instrukcji kolejne instrukcje też będą wykonane .
C++. Instrukcje . Instrukcja switch #include <iostream> using namespace std; int main() { char znak; bool koniec = false; while(koniec == false) { cout << "t - tak , n - nie, k - koniec: "; cin >> znak; switch(znak) { case 't' : cout << " wybrano TAK " << endl; break; case 'n' : cout << " wybrano NIE " << endl; break; case 'k' : cout << " koniec " << endl; koniec = true; break; default : cout << "Użyj proszę t, n, lub k !„ << endl; } } return 0; }
C++. Instrukcje . Instrukcja switch //... switch(znak) { case 'T' : case 't' : cout << " wybrano TAK " << endl; break; case 'N' : case 'n' : cout << " wybrano NIE " << endl; break; case 'K' : case 'k' : cout << " koniec " << endl; koniec = true; break; default : cout << "Uzyj prosze t, n, lub k !" << endl; } //...
C++ Instrukcje • Instrukcja break powoduje zakończenie wykonywania zawierającej ją pętli while, do-while, lub for. Wykonywanie programu rozpoczyna się od instrukcji znajdującej się bezpośrednio po zakończonej instrukcji. • Instrukcja continue powoduje zakończenie bieżącej iteracji pętli while, do-while, lub for , nie przerywa jednak wykonywania pętli jak ma to miejsce w przypadku instrukcji break.
C++. Instrukcje . Instrukcje break , continue #include <iostream> using namespace std; int main() { char znak; do { cout << " wprowadź znak : " ; cin >> znak ; if (znak =='Q') break; if (znak =='q') continue; cout << "( " << znak << " )\n"; } while (znak!='@'); cout << " bye bye\n" ; return 0; }