Podstawy informatyki 2013/2014

Slides:



Advertisements
Podobne prezentacje
Podstawy informatyki Informatyka Stosowana
Advertisements

Podstawy informatyki Informatyka Stosowana Zajęcia nr 2
Programowanie obiektowe
Algorytmy – zapis struktur programowania
Filip Andrzejewski Remigiusz Chiluta
Języki programowania C++
Sprawdzian Zadanie 1: Napisz program obliczający pole i obwód prostokąta. Wymiary pobierz z klawiatury od użytkownika. Zadanie 2: Napisz program sprawdzający,
Podstawy informatyki Informatyka stosowana Prowadzący: Grzegorz Smyk
Instrukcja skoku GO TO etykieta Np. GO TO 100 ….. 100WRITE (*,*) Przeskok do instrukcji 100 Uwaga! NIE WOLNO skakać do wnętrzna złożonych instrukcji warunkowych.
#include #include main () { cout
Dr Anna Kwiatkowska Instytut Informatyki
PASCAL (2) dr Anna Kwiatkowska.
Algorytmy Marek Pudełko
Programowanie obiektowe W2
Polsko – Japońska Wyższa Szkoła Technik Komputerowych
Podstawy informatyki 2013/2014
Podstawy informatyki (4)
Podstawy informatyki 2013/2014
Jerzy F. Kotowski1 Informatyka I Wykład 7 STEROWANIE c.d. n switch n Pętle.
Podstawy informatyki 2013/2014 Łukasz Sztangret Katedra Informatyki Stosowanej i Modelowania Prezentacja przygotowana w oparciu o materiały Danuty Szeligi.
Podstawy informatyki 2013/2014
Podstawy informatyki 2013/2014 Łukasz Sztangret Katedra Informatyki Stosowanej i Modelowania Prezentacja przygotowana w oparciu o materiały Danuty Szeligi.
Podstawy informatyki 2012/2013
Instrukcje sterujące część 2
Zadanie Dev C++.
Przekazywanie argumentów
Pętla do ... While C++ Źródło:
Programowanie strukturalne i obiektowe
Programowanie strukturalne i obiektowe
JAVA c.d.. Instrukcji wyboru SWITCH używamy, jeśli chcemy w zależności od wartości pewnego wyrażenia wykonać jeden z kilku fragmentów kodu. Jest to w.
Instrukcja for. Instrukcja warunkowa mgr inż. Agata Pacek.
Podstawy informatyki 2013/2014
Podstawy informatyki 2013/2014 Łukasz Sztangret Katedra Informatyki Stosowanej i Modelowania Prezentacja przygotowana w oparciu o materiały Danuty Szeligi.
INSTRUKCJE Umożliwiają zapis algorytmu, służą do sterowania przebiegiem programu. warunkowe (podejmowanie decyzji) 1. if-else „jeżeli”, 2. switch-case.
Podstawy informatyki 2013/2014
Programowanie obiektowe 2013/2014 Łukasz Sztangret Katedra Informatyki Stosowanej i Modelowania Prezentacja przygotowana w oparciu o materiały Danuty Szeligi.
Programowanie obiektowe 2013/2014
Programowanie obiektowe 2013/2014
Składnia instrukcji warunkowej if…
Składnia pętli do … while do instrukcja while (wyrażenie); gdzie: instrukcja – instrukcja pojedyncza lub blok instrukcji wyrażenie – wyrażenie przyjmujące.
Programowanie strukturalne i obiektowe C++
Programowanie strukturalne i obiektowe C++
Treści multimedialne - kodowanie, przetwarzanie, prezentacja Odtwarzanie treści multimedialnych Andrzej Majkowski informatyka +
Programowanie strukturalne i obiektowe C++
Treści multimedialne - kodowanie, przetwarzanie, prezentacja Odtwarzanie treści multimedialnych Andrzej Majkowski 1 informatyka +
Programowanie strukturalne i obiektowe C++
Programowanie strukturalne i obiektowe C++ Przeładowanie operatorów Robert Nowak.
K URS JĘZYKA C++ – WYKŁAD 1 ( ) Łagodne wprowadzenie do języka C++
Programowanie strukturalne i obiektowe C++ Powtórzenie wiadomości z C++ Robert Nowak.
Język C/C++ Instrukcje
Podstawy informatyki Tablice Łukasz Sztangret Katedra Informatyki Stosowanej i Modelowania Prezentacja przygotowana w oparciu o materiały Danuty Szeligi.
Podstawy informatyki Zmienne, stałe Instrukcje sterujące Łukasz Sztangret Katedra Informatyki Stosowanej i Modelowania Prezentacja przygotowana w oparciu.
Pakiety numeryczne Wielomiany Łukasz Sztangret Katedra Informatyki Stosowanej i Modelowania.
Wstęp do programowania Wykład 2 Dane, instrukcje, program.
Podstawy informatyki Preprocesor Łukasz Sztangret Katedra Informatyki Stosowanej i Modelowania Prezentacja przygotowana w oparciu o materiały Danuty Szeligi.
Podstawy informatyki Funkcje Łukasz Sztangret Katedra Informatyki Stosowanej i Modelowania Prezentacja przygotowana w oparciu o materiały Danuty Szeligi.
Łukasz Sztangret Katedra Informatyki Stosowanej i Modelowania Prezentacja przygotowana w oparciu o materiały Danuty Szeligi i Pawła Jerzego Matuszyka Podstawy.
Switch. Instrukcja switch Składnia instrukcji: switch (wyrażenie){ case wyrażenie_stałe1: ciąg instrukcji dla wariantu 1; break; case wyrażenie_stałe2:
Podstawy informatyki Struktury Łukasz Sztangret Katedra Informatyki Stosowanej i Modelowania Prezentacja przygotowana w oparciu o materiały Danuty Szeligi.
Podstawy informatyki Szablony funkcji Łukasz Sztangret Katedra Informatyki Stosowanej i Modelowania Prezentacja przygotowana w oparciu o materiały Danuty.
Podstawy informatyki Operatory rzutowania Łukasz Sztangret Katedra Informatyki Stosowanej i Modelowania Prezentacja przygotowana w oparciu o materiały.
Podstawy informatyki Mechanizm obsługi sytuacji wyjątkowych Łukasz Sztangret Katedra Informatyki Stosowanej i Modelowania Prezentacja przygotowana w oparciu.
Programowanie I Rekurencja.
Pakiety numeryczne Operatory, instrukcje sterujące, operacje bitowe Łukasz Sztangret Katedra Informatyki Stosowanej i Modelowania.
C++ mgr inż. Tomasz Turba Politechnika Opolska 2016.
C++ mgr inż. Tomasz Turba Politechnika Opolska 2016.
Język C++ Typy Łukasz Sztangret Katedra Informatyki Stosowanej i Modelowania Prezentacja przygotowana w oparciu o materiały Danuty Szeligi i Pawła Jerzego.
Język C++ Preprocesor Łukasz Sztangret Katedra Informatyki Stosowanej i Modelowania Prezentacja przygotowana w oparciu o materiały Danuty Szeligi i Pawła.
Język C++ Operatory Łukasz Sztangret Katedra Informatyki Stosowanej i Modelowania Prezentacja przygotowana w oparciu o materiały Danuty Szeligi i Pawła.
Język C++ Tablice Łukasz Sztangret Katedra Informatyki Stosowanej i Modelowania Prezentacja przygotowana w oparciu o materiały Danuty Szeligi i Pawła Jerzego.
Zapis prezentacji:

Podstawy informatyki 2013/2014 Łukasz Sztangret Katedra Informatyki Stosowanej i Modelowania Prezentacja przygotowana w oparciu o materiały Danuty Szeligi i Pawła Jerzego Matuszyka

Instrukcja wyboru switch switch(wyr) { case w1: instr1; break; case w2: instr2; ... case w_n: instr_n; default: instr_d; } Instrukcja wyboru służy do podejmowania wielowarian-towych decyzji. Najpierw obliczane jest wy-rażenie wyr. Jeśli jego wartość odpowiada którejś z wartości podanej w jednej z etykiet case, to wykonywane są instrukcje po tej etykiecie, aż do napotkania instrukcji break. Jeśli wartość wyrażenia nie zgadza się z żadną z wartości przy etykietach case, wówczas wykonywane są instrukcje po etykiecie default. wyr w1 == wyr instr1 Tak Nie ... instr2 w2 == wyr instr_d instr_n w_n == wyr

Instrukcja wyboru switch Instrukcja break: powoduje wyjście z instrukcji switch. Etykieta default: może znajdować się w dowolnym miejscu, może w ogóle nie występować w instrukcji switch – wtedy, jeśli wartość wyrażenia nie zgadza się z żadną z wartości przy etykietach case, instrukcja switch nie wykonuje niczego. Instrukcji występujących po etykiecie case nie musi kończyć instrukcja break. Jeśli jej nie umieścimy, to zaczną wykonywać się instrukcje umieszczone pod następną etykietą case.

Instrukcja wyboru switch #include<iostream> using namespace std; int main() { int a; cout << "Podaj liczbe" << endl; cin >> a; switch (a) case 1: cout << "Podales liczbe jeden" << endl; break; case 2: cout << "Podales liczbe dwa" << endl; default: cout << "Nie podales ani liczby jeden ani dwa" << endl; } Wyrażenie Wartość Polecenia nie są w nawiasie {}

Instrukcja wyboru switch #include<iostream> using namespace std; int main() { int a; cout << "Podaj liczbe" << endl; cin >> a; switch (a) case 1: cout << "Podales liczbe jeden" << endl; case 2: cout << "Podales liczbe dwa" << endl; default: cout << "Nie podales ani liczby jeden ani dwa" << endl; }

switch vs if…else W przypadku instrukcji switch obiekt powinien być typu całkowitego W przypadku instrukcji if…else typ obiektu nie ma znaczenia W przypadku instrukcji switch obiekt porównywany jest ze stałą (znaną na etapie kompilacji) W przypadku instrukcji if…else obiekt może być porównywany z wyrażeniem zmiennym

switch vs if…else W przypadku instrukcji switch zwasze sprawdzana jest równość W przypadku instrukcji if…else porównanie może być dowolnym operatorem logicznym

Instrukcja sterująca break Instrukcja sterująca break przerywa natychmiast dzia-łanie innych instrukcji steru-jących: switch, for, while, do...while. Jeśli instrukcja break wys-tępuje wewnątrz kilku zag-nieżdżonych pętli, to przery-wa działanie tylko tej pętli, w której bezpośrednio tkwi (jest to tak jakby wyjście „o jeden poziom wyżej”). while(wyr) { instr1; if(wyr_b) break; instr2; } wyr instr1 Tak Nie wyr_b instr2

Instrukcja sterująca break 1 2 3 4 5 6 7 8 9 10 #include<iostream> using namespace std; int main() { for (int i=1; ;i=i+1) cout << i << endl; if (i==10) break; } Pętla nieskończona Wyjście z pętli

Instrukcja sterująca continue for(i_init; wyr; i_krok){ instr1; if(wyr_c) continue; instr2; } Instrukcja sterująca continue stosowana jest w pętlach. Powoduje ona zaniechanie reali-zacji instrukcji będących treścią pętli, jednak (w przeciwieństwie do instrukcji break) sama pętla nie zostaje przerwana. Instrukcja continue przerywa tylko aktualny obieg pętli i zaczyna następny, kontynuując pracę pętli. Po wykonaniu instrukcji continue w pętli for wykony-wana jest i_krok. wyr instr1 Tak Nie wyr_c instr2 i_init i_krok

Instrukcja sterująca continue #include<iostream> using namespace std; int main() { int n=5; for (int i=1; i<=10; i=i+1) if (i==n) continue; cout << i << endl; } 1 2 3 4 6 7 8 9 10 Przeskok na koniec pętli

Instrukcja skoku goto Po napotkaniu instrukcji skoku goto wykonywanie programu przenosi się do miejsca oznaczonego etykietą. Z instrukcją goto wiąże się zawsze etykieta, do której należy przeskoczyć. Etykieta musi znajdować się w aktualnym zakresie ważności. Etykieta to nazwa, po której następuje dwukropek. ... if(war) goto et1; instr1; instr2; et1: instr3; Używanie instrukcji goto zdradza (zazwyczaj), że jest się złym programistą. Instrukcji goto zawsze da się uniknąć (choć nie zawsze jest to efektywne).

Instrukcja goto Przeskok do koniec 0 0 0 0 0 1 0 0 2 0 1 1 0 1 2 0 2 0 0 2 1 0 2 2 1 0 0 1 0 1 1 0 2 1 1 0 1 1 1 #include<iostream> using namespace std; int main() { for (int i=0; i<3; i=i+1) for (int j=0; j<3; j=j+1) for (int k=0; k<3; k=k+1) cout<<i<<" "<<j<<" "<<k<<endl; if (i==1 && j==1 && k==1) goto koniec; } koniec: cout<<"KONIEC\n"; Przeskok do koniec

Typy Każda nazwa zanim zostanie użyta musi zostać zdefiniowana (w dowolnym momencie, ale przed jej użyciem). Obiekty różnych typów zajmują w pamięci komputera w różną objętość, różnie też można z nimi postępować. Stąd konieczność podania typu obiektu. Składnia definicji: typ nazwa_zmiennej; typ nazwa1, nazwa2, nazwa3;

fundamentalne (jakby najbardziej podstawowe) Typy w C++ TYPY: fundamentalne (jakby najbardziej podstawowe) złożone (wykorzystujące typ fundamentalny) TYPY: wbudowane (standardowe wyposażenie języka C++) definiowane przez użytkownika (wymyślane przez programistę)

Typy fundamentalne NAZWA BAJTY ZAKRES WARTOŚCI bool 1 {true, false} char -128 do 127 lub 0 do 255 unsigned char 0 do 255 signed char -128 do 127 wchar_t 2 0 do 65 535 short int -32 768 do 32 767 unsinged short int signed short int int 4 -2 147 483 648 do 2 147 483 648 unsigned int 0 do 4 294 967 295 signed int long int unsigned long int signed long int float ±3,4E±38 double 8 ±1,7E±308 long double

Typy złożone Operatory umożliwiające tworzenie typów złożonych to: [] tablica obiektów danego typu * wskaźnik do pokazywania na obiekty danego typu () funkcja zwracająca wartość danego typu & referencja obiektu danego typu

Referencja int a; a

Referencja musi być zainicjalizowana!!! Zapis: int &b; int a; int &b=a; Referencja musi być zainicjalizowana!!! Zapis: int &b; spowoduje błąd kompilacji. a, b

Typ void Typ void jest również typem fundamentalnym. Nie można zdefiniować obiektu typu void. Typ void może występować tylko w deklaracjach typów złożonych: void funkcja(); void *wskaźnik; void tablica[5]; void &referencja=obiekt;

Zakres ważności nazwy obiektu i czas życia obiektu. Czas życia obiektu to okres od momentu, gdy zostaje od zdefiniowany do momentu, gdy przestaje istnieć. Zakres ważności nazwy obiektu to fragment programu, w którym nazwa obiektu jest znana, czyli obiekt jest dostępny. Obiekt może istnieć (żyje) ale nie jest dostępny (jesteśmy poza zakresem ważności jego nazwy)

Zakres ważności nazwy lokalny blok funkcji obszar pliku obszar klasy (struktury) zakres zdefiniowany przez przestrzeń nazw

Zakres lokalny int main() { ... int a; ... //tu obiekt jest dostępny } ... //tu już nie

Zakres bloku funkcji void funkcja() { ... goto etykieta; etykieta: }

Zakres obszaru pliku int a; int main() { ... } void funkcja()

Zakres zdefiniowany przez przestrzeń nazw #include<iostream> using namespace std; namespace moja { int a; } int main() moja::a=1; a=1; cout<<moja::a<<endl; BŁĄD zmienna a nie istnieje 1

Zakres zdefiniowany przez przestrzeń nazw #include<iostream> using namespace std; namespace moja { int a; } using namespace moja; int main() a=1; cout<<a<<endl; 1

Zakres zdefiniowany przez przestrzeń nazw #include<iostream> using namespace std; namespace moja{int a;} using namespace moja; int main() { a=1; cout<<a<<endl; int a; a=2; cout<<moja::a<<endl; } 1 2 1

Zakres zdefiniowany przez przestrzeń nazw #include<iostream> using namespace std; namespace moja1{int a;} namespace moja2{double a;} using namespace moja1; using namespace moja2; int main() { a=1; moja1::a=1; cout<<moja1::a<<endl; } BŁĄD kompilator nie wie do której zmiennej się odwołujemy Tu jest OK 1

Zakres zdefiniowany przez przestrzeń nazw #include<iostream> using namespace std; namespace moja { int a; double b; } using moja::a; int main() a=1; moja::b=1.5; cout<<a<<endl<<moja::b<<endl;

Zakres zdefiniowany przez przestrzeń nazw #include<iostream> using namespace std; int main() { cout<<"Hello\n"; } #include<iostream> int main() { std::cout<<"Hello\n"; }

Zakres zdefiniowany przez przestrzeń nazw #include<iostream> int main() { int cout=2; std::cout<<cout; } #include<iostream> using namespace std; int main() { int cout=2; cout<<cout; }

1 2 1 2 3 1 2 1 Zasłanianie nazw #include<iostream> using namespace std; int i=1; int main() { cout << i << endl; int i=2; cout << ::i << endl;{ int i=3; cout << ::i << endl;} cout << ::i << endl; int i=4; } 1 2 1 2 3 1 2 BŁĄD REDEFINICJA 1

Zasłanianie nazw #include<iostream> using namespace std; int i=1; int main() { cout << i << endl; int i=2; cout << ::i << endl;{ int i=3; cout << ::i << endl;} cout << ::i << endl; int i=4; }

Zmienne lokalne #include<iostream> using namespace std; int main() { for (int i=0; i<5; i=i+1) cout<<i<<endl; } 1 2 3 4 BŁĄD

Zmienne lokalne #include<iostream> using namespace std; int main() { int i; for (i=0; i<5; i=i+1) cout<<i<<endl; } 1 2 3 4 5

BŁĄD Specyfikator const Specyfikator const zmienia zwykłą definicję tak, że jest to teraz definicja obiektu stałego, np.: const double pi = 3.14; Obiekty stałe można tylko inicjalizować, nie można wykonać przypisania! const int a; a=5; BŁĄD

Specyfikator register Specyfikator register używany jest do definiowania obiektów, do których chcemy mieć bardzo szybki dostęp. register jest sugestią dla kompilatora aby zmienną umieścił w rejestrze procesora. register int i; Zmienna umieszczona w rejestrze nie ma adresu! Odwołanie się do adresu takiej zmiennej spowoduje przeniesienie jej do pamięci i zwrócenie jej adresu.

Specyfikator volatile Specyfikator volatile zmienia zwykłą definicję tak, że jest to teraz definicja obiektu, którego wartość może się zmienić bez wiedzy kompilatora, np.: volatile double a;

typedef odleglosc int; Instrukcja typedef Instrukcja typedef pozwala na nadanie dodatkowej nazwy już istniejącemu typowi, np.: typedef odleglosc int; Definicja odleglosc a; odpowiada definicji int a;

enum nazwa_typu {lista wyliczeniowa}; Typ wyliczeniowy enum Jest typem całkowitoliczbowym. Do obiektu takiego typu można podstawić jedynie wartość określoną na liście wyliczeniowej. Definicja enum nazwa_typu {lista wyliczeniowa};

Oba przypisania generują błąd Typ wyliczeniowy enum #include<iostream> using namespace std; int main() { enum miesiace{sty=1,lut,mar,kwi,maj,cze,lip,sie,wrz,paz,lis,gru}; miesiace M; M=lut; //M=3; //M=ala; cout<<M<<endl; } Definicja typu enum Definicja obiektu Przypisanie wartości 2 Oba przypisania generują błąd

Definicja typu enum bez nazwy Typ wyliczeniowy enum #include<iostream> using namespace std; int main() { enum {a=10,b,c,d,e,f,g,h,i,j,pod}; cout<<a*pod+c<<endl; } Definicja typu enum bez nazwy 212

Jednoargumentowe operatory arytmetyczne Operatory znaku: + - a=+3; b=-5; Operatory inkrementacji i dekrementacji:++ -- wersja przedrostowa ++a; --b; wersja przyrostkowa a++; b--;

Priorytety operatorów 18 17 ++ -- POST 16 ++ -- PRE + - 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1

Jednoargumentowe operatory arytmetyczne #include<iostream> using namespace std; int main() { int a=5,b=5,c=5,d=5; cout<<++a<<"\t"<<a<<endl; cout<<b++<<"\t"<<b<<endl; cout<<--c<<"\t"<<c<<endl; cout<<d--<<"\t"<<d<<endl; } 6 6 5 6 4 4 5 4

Dwuargumentowe operatory arytmetyczne Dodawanie + Odejmowanie - Mnożenie * Dzielenie / Reszta z dzielenia %

Priorytety operatorów 18 17 16 15 14 * / % 13 + - 12 11 10 9 8 7 6 5 4 3 2 1

Operatory przypisania Jest ich 11 = *= /= %= += -= <<= >>= &= |= ^= a+=2; oznacza a=a+2; …

Priorytety operatorów 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 = *= /= %= += -= <<= >>= &= |= ^= 2 1

Operatory logiczne Operator równy == Operator różny != Operator mniejszy < Operator większy > Operator mniejszy lub równy <= Operator większy lub równy >= Operator sumy logicznej || Operator iloczynu logicznego && Operator negacji !

Iloczyn logiczny: && Suma logiczna: || Negacja logiczna: ! Operatory logiczne Iloczyn logiczny: && Suma logiczna: || Negacja logiczna: ! p q p && q 1 p q p || q 1 p !p 1

Operatory logiczne int a=5; if (a>=4 && a<10 || a==0) { … } bool koniec = false; while (!koniec)

Priorytety operatorów 18 17 16 ! 15 14 13 12 11 < <= > >= 10 == != 9 8 7 6 && 5 || 4 3 2 1

Operatory bitowe iloczyn bitowy & suma bitowa | bitowa różnica symetryczna ^ negacja bitowa ~ przesunięcie bitowe w lewo << przesunięcie bitowe w prawo >>

Operatory bitowe (& | ^ ~) Iloczyn bitowy Suma bitowa Bitowa różnica symetryczna Negacja bitowa … 1 & … 1 | … 1 ^ ~ … 1 32 bity (dla int)

Operatory bitowe (<< >>) Operator przesunięcia bitowego w lewo zmienna << ile_miejsc bitowego w prawo zmienna >> ile_miejsc 1 … 1 … ? 1 … ? 1 … 32 bity (dla int)

Operatory bitowe ff ff00 ff00 3f 3fc ffff ffff #include<iostream> using namespace std; int main() { short int a=0x00ff,b=0xff00,c,d,e,f,g,h; c=~a; d=a>>2; e=a<<2; f=a&b; g=a^b; h=a|b; cout<<hex<<a<<endl; cout<<hex<<b<<endl; cout<<hex<<c<<endl; cout<<hex<<d<<endl; cout<<hex<<e<<endl; cout<<hex<<f<<endl; cout<<hex<<g<<endl; cout<<hex<<h<<endl; } ff ff00 ff00 3f 3fc ffff ffff

Priorytety operatorów 18 17 16 ~ 15 14 13 12 << >> 11 10 9 & 8 ^ 7 | 6 5 4 3 2 1

Operatory przesunięcia bitowego Operatory << oraz >> zostały przeładowane w ten sposób, że odpowiadają za wstawianie i wyjmowanie ze strumienia. int a; cin>>a; cout<<a; bool a = true, b = false; cout << a && b; cout << (a && b); cout << a && b; jest równoznaczne ((cout << a) && b); cout << (a && b); jest równoznaczne (cout << (a && b); 1

Operatory logiczne a operatory bitowe int main() { int a=5; if (a>3 && a<7) cout<<"TRUE"<<endl; else cout<<"FALSE"<<endl; } int main() { int a=5; if (a>3 & a<7) cout<<"TRUE"<<endl; else cout<<"FALSE"<<endl; } TO SAMO TRUE TRUE

Operatory logiczne a operatory bitowe int main() { int a=1,b=2; if (a && b) cout<<"TRUE"<<endl; else cout<<"FALSE"<<endl; } int main() { int a=1,b=2; if (a & b) cout<<"TRUE"<<endl; else cout<<"FALSE"<<endl; } b=3 TRUE TRUE FALSE

Wyrażenie warunkowe ? : Jest to wyrażenie, którego wartość jest zależna od wartości wyrażenia stojącego przed znakiem ? wart = wyr ? wart1 : wart2; Jeżeli wyr jest prawdziwe to wart=wart1 jeżeli nie to wart=wart2

Równoznaczne instrukcji if Wyrażenie warunkowe #include<iostream> using namespace std; int main() { int a=1, b=2,c,d; if (a>b) c=a; else c=b; d = a > b ? a : b; cout << c << endl << d << endl; } Równoznaczne instrukcji if

Priorytety operatorów 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 ? : 3 2 1

Operator przecinek Wyrażenie składające się z kilku wyrażeń oddzielonych od siebie operatorem , przyjmuje wartość wyrażenia będącego najbardziej z prawej, np.: wart=(wart1,wart2,wart3); jest równoznaczne z: wart=wart3;

Priorytety operatorów 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 ,

Operator przecinek Operator , ma najniższy priorytet (niższy od operatorów przypisania). Dlatego: a = (b , c); odpowiada a = c; ale a = b , c; a = b;

Łączność operatorów Operatory jednoargumentowe są prawostronnie łączne, np.: (!a) Operatory dwuargumentowe są lewostronnie łączne (wyjątek: operatory przypisania), np.: (((a+b)+c)+d) ale (a=(b=(c=d)))

Priorytety operatorów 18 17 ++ -- POST 16 ++ -- PRE + - ! ~ 15 14 * / % 13 + - 12 << >> 11 < <= > >= 10 == != 9 & 8 ^ 7 | 6 && 5 || 4 ? : 3 = *= /= %= += -= <<= >>= &= |= ^= 2 1 ,

Prezentacja udostępniona na licencji Creative Commons: Uznanie autorstwa, Na tych samych warunkach 3.0. Pewne prawa zastrzeżone na rzecz autorów. Zezwala się na dowolne wykorzystywanie treści pod warunkiem wskazania autorów jako właścicieli praw do prezentacji oraz zachowania niniejszej informacji licencyjnej tak długo, jak tylko na utwory zależne będzie udzielana taka sama licencja. Tekst licencji dostępny jest na stronie: http://creativecommons.org/licenses/by-sa/3.0/deed.pl