Programowanie strukturalne. dr inż. Tadeusz Jeleniewski

Podobne dokumenty
Proste typy zmiennych języka C++ *) Zapis 3.4 e-38 jest równoważny zapisowi 3,

2 Przygotował: mgr inż. Maciej Lasota

C++ wprowadzanie zmiennych

Programowanie C++ Wykład 2 - podstawy języka C++ dr inż. Jakub Możaryn. Warszawa, Instytut Automatyki i Robotyki

Operacje wykonywane są na operandach (argumentach operatorów). Przy operacji dodawania: argumentami operatora dodawania + są dwa operandy 2 i 5.

Część 4 życie programu

Podstawy Programowania Podstawowa składnia języka C++

Odczyt danych z klawiatury Operatory w Javie

Operatory w C++ Operatory arytmetyczne. Operatory relacyjne (porównania) Operatory logiczne. + dodawanie - odejmowanie * mnożenie / dzielenie % modulo

Wstęp do informatyki- wykład 5 Instrukcja selekcji if-else Operatory arytmetyczne i logiczne

OPERACJE WEJŚCIA / WYJŚCIA. wysyła sformatowane dane do standardowego strumienia wyjściowego (stdout)

#include <stdio.h> int main( ) { int x = 10; long y = 20; double s; s = x + y; printf ( %s obliczen %d + %ld = %f, Wynik, x, y, s ); }

Temat 1: Podstawowe pojęcia: program, kompilacja, kod

1 Podstawy c++ w pigułce.

I - Microsoft Visual Studio C++

Języki i metodyka programowania. Typy, operatory, wyrażenia. Wejście i wyjście.

#include <stdio.h> void main(void) { int x = 10; long y = 20; double s; s = x + y; printf ( %s obliczen %d + %ld = %f, Wynik, x, y, s ); }

Języki i metodyka programowania. Wprowadzenie do języka C

3. Instrukcje warunkowe

Podstawy programowania w języku C i C++

Programowanie w C++ Wykład 2. Katarzyna Grzelak. 4 marca K.Grzelak (Wykład 1) Programowanie w C++ 1 / 44

Podstawy programowania. 1. Operacje arytmetyczne Operacja arytmetyczna jest opisywana za pomocą znaku operacji i jednego lub dwóch wyrażeń.

Języki i paradygmaty programowania

Laboratorium 1: Podstawy języka c. dr inż. Arkadiusz Chrobot dr inż. Grzegorz Łukawski

Stałe, znaki, łańcuchy znaków, wejście i wyjście sformatowane

Struktura pliku projektu Console Application

1 P roste e t ypy p d a d n a ych c - c ąg ą g d a d l a szy 2 T y T py p z ł z o ł żo ż ne e d a d n a ych c : T BLICE

Podstawy programowania skrót z wykładów:

Operatory. Operatory bitowe i uzupełnienie informacji o pozostałych operatorach. Programowanie Proceduralne 1

Instrukcje warunkowe i skoku. Spotkanie 2. Wyrażenia i operatory logiczne. Instrukcje warunkowe: if else, switch.

1 Podstawy c++ w pigułce.

Dr inż. Grażyna KRUPIŃSKA. D-10 pokój 227 WYKŁAD 7 WSTĘP DO INFORMATYKI

Programowanie w C++ Wykład 2. Katarzyna Grzelak. 5 marca K.Grzelak (Wykład 1) Programowanie w C++ 1 / 41

Podstawy Informatyki. Inżynieria Ciepła, I rok. Wykład 10 Kurs C++

Zmienne, stałe i operatory

Podstawy programowania C. dr. Krystyna Łapin

Informatyka I. Typy danych. Operacje arytmetyczne. Konwersje typów. Zmienne. Wczytywanie danych z klawiatury. dr hab. inż. Andrzej Czerepicki

Języki programowania C i C++ Wykład: Typy zmiennych c.d. Operatory Funkcje. dr Artur Bartoszewski - Języki C i C++, sem.

ARCHITEKTURA SYSTEMÓW KOMPUTEROWYCH

dr inż. Jarosław Forenc

Programowanie proceduralne INP001210WL rok akademicki 2018/19 semestr letni. Wykład 6. Karol Tarnowski A-1 p.

Podstawy Informatyki sem. I 2014/2015 studia zaoczne Elektronika i Telekomunikacja!

Podstawy programowania w języku C

Proces tworzenia programu:

Wstęp do programowania

Język C zajęcia nr 11. Funkcje

Informatyka, Ćwiczenie Uruchomienie Microsoft Visual C++ Politechnika Rzeszowska, Wojciech Szydełko. I. ZałoŜenie nowego projektu

Pracownia Komputerowa wykład VI

Powtórka algorytmów. Wprowadzenie do języka Java.

Strona główna. Strona tytułowa. Programowanie. Spis treści. Sobera Jolanta Strona 1 z 26. Powrót. Full Screen. Zamknij.

MATERIAŁY DO ZAJĘĆ II

Programowanie w C++ Wykład 5. Katarzyna Grzelak. 16 kwietnia K.Grzelak (Wykład 1) Programowanie w C++ 1 / 27

( wykł. dr Marek Piasecki )

Metodyki i Techniki Programowania MECHANIZM POWSTAWANIA PROGRAMU W JĘZYKU C PODSTAWOWE POJĘCIA

Wstęp do programowania obiektowego. Przekazywanie parametrów do funkcji w C++ Metody i funkcje operatorowe Strumienie: standardowe, plikowe, napisowe

Wstęp do informatyki- wykład 5 Instrukcja selekcji if-else Operatory arytmetyczne i logiczne Wyrażenie warunkowe operator selekcji Instrukcja switch

Programowanie komputerowe. Zajęcia 1

Język C część 1. Sformułuj problem Zanalizuj go znajdź metodę rozwiązania (pomocny może byd algorytm) Napisz program Uruchom i przetestuj czy działa

Wprowadzania liczb. Aby uniknąć wprowadzania ułamka jako daty, należy poprzedzać ułamki cyfrą 0 (zero); np.: wpisać 0 1/2

Wstęp do informatyki- wykład 4 Deklaracja zmiennych Typy

/* dołączenie pliku nagłówkowego zawierającego deklaracje symboli dla wykorzystywanego mikrokontrolera */ #include <aduc834.h>

Laboratorium Podstaw Informatyki. Kierunek Elektrotechnika. Ćwiczenie 1. Podstawy. Wprowadzenie do programowania w języku C. Katedra Metrologii AGH

1. Wprowadzanie danych z klawiatury funkcja scanf

Wstęp do programowania INP003203L rok akademicki 2018/19 semestr zimowy. Laboratorium 2. Karol Tarnowski A-1 p.

Przedrostkowa i przyrostkowa inkrementacja i dekrementacja

Wstęp do Programowania, laboratorium 02

1. Wypisywanie danych

Język ludzki kod maszynowy

Słowa kluczowe i nazwy

Wstęp do informatyki- wykład 7

INFORMATYKA Studia Niestacjonarne Elektrotechnika

Wyrażenia arytmetyczne

Podstawy Informatyki. Kompilacja. Historia. Metalurgia, I rok. Kompilatory C++ Pierwszy program. Dyrektywy preprocesora. Darmowe:

Systemy zapisu liczb.

Programowanie strukturalne i obiektowe

Wstęp do programowania INP001213Wcl rok akademicki 2017/18 semestr zimowy. Wykład 12. Karol Tarnowski A-1 p.

Podstawy języka C++ Maciej Trzebiński. Instytut Fizyki Jądrowej Polskiej Akademii Nauk. Praktyki studenckie na LHC IVedycja,2016r.

Podstawy Informatyki. Metalurgia, I rok. Wykład 6 Krótki kurs C++

Informacje wstępne #include <nazwa> - derektywa procesora umożliwiająca włączenie do programu pliku o podanej nazwie. Typy danych: char, signed char

Samodzielnie wykonaj następujące operacje: 13 / 2 = 30 / 5 = 73 / 15 = 15 / 23 = 13 % 2 = 30 % 5 = 73 % 15 = 15 % 23 =

Wstęp do programowania INP001213Wcl rok akademicki 2017/18 semestr zimowy. Wykład 2. Karol Tarnowski A-1 p.

Program w C. wer. 12 z drobnymi modyfikacjami! Wojciech Myszka :59:

Wstęp do programowania INP001213Wcl rok akademicki 2018/19 semestr zimowy. Wykład 2. Karol Tarnowski A-1 p.

Arytmetyka liczb binarnych

Systemy liczbowe. 1. Przedstawić w postaci sumy wag poszczególnych cyfr liczbę rzeczywistą R = (10).

Jak napisać program obliczający pola powierzchni różnych figur płaskich?

Stan wysoki (H) i stan niski (L)

Programowanie komputerowe. Zajęcia 4

Podstawy programowania w C++

1. Pierwszy program. Kompilator ignoruje komentarze; zadaniem komentarza jest bowiem wyjaśnienie programu człowiekowi.

Podstawy i języki programowania

Instrukcja do ćwiczeń nr 4 typy i rodzaje zmiennych w języku C dla AVR, oraz ich deklarowanie, oraz podstawowe operatory

Program w C. wer. 10 z drobnymi modyfikacjami! Wojciech Myszka :28:

Funkcje. Deklaracja funkcji. Definicja funkcji. Wykorzystanie funkcji w programie.

Zadanie 2: Arytmetyka symboli

Wstęp do informatyki- wykład 4 Deklaracja zmiennych Typy Instrukcja selekcji if-else

Arytmetyka binarna - wykład 6

Podstawy Informatyki

Wstęp do informatyki- wykład 8 Pętla while, do while,for -pętla w pętli- przykłady Operator rzutowania Manipulatory

Transkrypt:

Wykład 2 Wejście i wyjście - funkcje scanf i printf Operator przypisania prostego Operatory arytmetyczne Kolejność wykonywania operacji Operatory przypisania arytmetycznego Operatory inkrementacji/dekrementacji Operatory relacji Operatory logiczne Operatory bitowe Podstawowe pojęcia związane z operatorami Operator warunkowy Priorytet operatorów 2017-02-03 W2 1

Funkcja standardowa printf - jej parametrami są: - łańcuch znaków zawierający między innymi kody formatujące, - wyrażenia, których wartości maja być wyprowadzone w sposób określony odpowiednimi kodami formatującymi. Zestawienie kodów formatujących funkcji printf: %c Pojedynczy znak %s Łańcuch znaków %d Dziesiętna liczba całkowita ze znakiem %f Liczba rzeczywista (notacja dziesiętna, tzw. stałoprzecinkowa)) %e Liczba rzeczywista (notacja wykładnicza) %g Liczba rzeczywista (krótszy z formatów %f lub %e) %u Liczba dziesiętna całkowita bez znaku %x Liczba całkowita szesnastkowa bez znaku %o Liczba całkowita ósemkowa bez znaku %p Wartość adresu (zmiennej wskaźnikowej) l (litera małe el) Przedrostek stosowany w kodach %d, %u, %x i %o dla oznaczenia długiej liczby całkowitej (n.p. %ld) 2017-02-03 W2 2

Następujący prosty program wyświetla wartości kilku stałych rzeczywistych: /* Przykład 2.1 */ #include <cstdio> #include <cstdlib> using namespace std; // int main(void) { system("cls"); printf("\n"); printf("%f %f %f\n", 19.1, -2.501, 231.3); printf("%f %f %f\n", 1357.0, 712.565, -2285.3); system("pause"); system("cls"); return 0; } A to wyniki: 2017-02-03 W2 3

Wyniki maja postać "nieuporządkowaną", są mało czytelne. Wszystkie liczby zostały wyświetlone z 6 cyframi części ułamkowej, podczas gdy wyprowadzane wartości mają tylko co najwyżej 3 cyfry znaczące po kropce dziesiętnej. Dzieje się tak, ponieważ domyślnym formatem dziesiętnej liczby rzeczywistej wyprowadzanej wg kodów konwersji %f, %e, %g jest 6 cyfr po kropce dziesiętnej (w postaci wykładniczej 6 cyfr po kropce dziesiętnej mantysy). Zmianę tej domyślnej, nie zawsze pożądanej dokładności uzyskano w następującym programie: /* Przykład 2.2*/ #include <cstdio> #include <cstdlib> using namespace std; // int main(void) { system("cls"); printf("\n"); printf("%.1f %.1f %.1f\n", 19.1, -2.501, 231.3); printf("%.1f %.1f %.1f\n", 1357.0, 712.565, -2285.3); system("pause"); system("cls"); return 0; } 2017-02-03 W2 4

Wyniki mają teraz postać: Wszystkie liczby zostały wyprowadzone z 1 cyfrą w części ułamkowej. Liczby -2.501 oraz 712.565 zostały zaokrąglone. Taki sposób wyświetlenia wyników określa sekwencja.1 pomiędzy znakiem % a literą f w kodzie konwersji. Ogólnie, kombinacja %.nf w kodzie formatującym oznacza wypisanie liczby rzeczywistej z n cyframi po kropce dziesiętnej. 2017-02-03 W2 5

Jeszcze inny sposób wyprowadzenia wyników zastosowano w następującym programie: /* Przykład 2.3 */ #include <cstdio> #include <cstdlib> using namespace std; // int main(void) { system("cls"); printf("\n"); printf("%8.1f %8.1f %8.1f\n", 19.1, -2.501, 231.3); printf("%8.1f %8.1f %8.1f\n", 1357.0, 712.565, -2285.3); system("pause"); system("cls"); return 0; } 2017-02-03 W2 6

I wyniki jakie wyświetla na ekranie: Kod formatujący: %m.nf oznacza polecenie wyświetlenia wartości odpowiedniego wyrażenia w postaci liczby rzeczywistej, w zapisie stałoprzecinkowym w polu o całkowitej szerokości m znaków, z n cyframi części ułamkowej. Do szerokości pola liczony jest znak minus oraz kropka dziesiętna. Jeżeli chcemy uzyskać na wyjściu wartości wyrażeń wyrównane do lewej krawędzi pola to powinniśmy w kodzie formatującym użyć znaku minus bezpośrednio po symbolu %. 2017-02-03 W2 7

/* Przykład 2.4 */ #include <cstdio> #include <ctdlib> using namespace std; // int main(void) { system("cls"); printf("\n"); printf("%-8.1f %-8.1f %-8.1f\n", 19.1, -2.501, 231.3); printf("%-8.1f %-8.1f %-8.1f\n", 1357.0, 712.565, -2285.3); system("pause"); system("cls"); return 0; } 2017-02-03 W2 8

W celu wprowadzenia do programu danych z zewnątrz (najczęściej z klawiatury) można użyć funkcji standardowej scanf. Podobnie jak funkcja printf obsługuje ona różne typy danych. Przykładem użycia funkcji scanf jest pokazany dalej program, który pyta o użytkownika o wiek w latach. Po wpisaniu tej wartości na klawiaturze, czyta ją (dokładniej odczytuje z bufora klawiatury kody kolejno naciskanych klawiszy), oblicza odpowiadającą wprowadzonym latom liczbę dni (dla uproszczenia nie uwzględnia lat przestępnych) i wyświetla wynik. 2017-02-03 W2 9

#include <cstdio> #include <cstdlib> using namespace std; // int main(void) { float lata, dni; system("cls"); printf("\npodaj swoj wiek w latach: "); scanf("%f", &lata); dni = 365 * lata; printf("masz %.1f dni.\n", dni); system("pause"); system("cls"); return 0; } 2017-02-03 W2 10

Prototyp funkcji scanf znajduje się w pliku nagłówkowym cstdio (można używać "starej" nazwy stdio.h). Funkcja scanf wymaga podania co najmniej dwóch argumentów. Pierwszym z nich jest zawsze kod formatujący, drugi parametr i następne to adresy zmiennych, których wartości zostaną odczytane z klawiatury, przekształcone do postaci określonej odpowiednimi kodami formatującymi i przypisane zmiennym. Funkcja wymaga podania adresów zmiennych, a nie ich nazw. Symbol & jest tzw. operatorem wyłuskania adresu lub krócej operatorem adresowania. Sekwencja &nazwa-zmiennej reprezentuje wartość adresu (lokalizacji w pamięci komputera) zmiennej o podanej nazwie. Drugi i następne parametry funkcji scanf muszą być adresami, a nie nazwami zmiennych. Po powrocie z funkcji scanf do funkcji wywołującej zmienne, których adresy wystąpiły w wywołaniu scanf mają wartości równe danym wprowadzonym przez użytkownika z klawiatury. W podanym wyżej przykładzie wprowadzamy wartość zmiennej lata. Zadeklarowano ją jako float. W wywołaniu funkcji scanf występuje łańcuch znaków - kod formatujący %f właściwy dla danych typu float oraz, jako drugi parametr - adres zmiennej lata (zapis &lata). 2017-02-03 W2 11

Kody formatujące w funkcji scanf %c pojedynczy znak %s łańcuch znaków %d liczba całkowita dziesiętna ze znakiem (dodatnia lub ujemna) %f lub %e liczba rzeczywista dziesiętna w notacji stało- lub zmiennoprzecinkowej %u liczba całkowita dziesiętna bez znaku %x liczba całkowita szesnastkowa bez znaku %o liczba całkowita ósemkowa bez znaku l L małe el - przedrostek przed d, o, u, x dla określenia formatu liczby całkowitej długiej (long int) Przedrostek przed f lub e dla oznaczenia formatu długiej liczby rzeczywistej o podwójnej precyzji (long double) 2017-02-03 W2 12

Różnicę pomiędzy wartością zmiennej a jej adresem można zobaczyć w następującym przykładzie programu: /* Przykład 2.6 */ #include <cstdio> #include <cstdlib> using namespace std; // int main(void) { int n; float x; double y; n=2; x=-90.9910771; y=1.2345e-11; printf("\nwartosc n = %d, adres n = %p", n, &n); printf("\nwartosc x = %f, adres x = %p", x, &x); printf("\nwartosc y = %e, adres y = %p\n", y, &y); system("pause"); return 0; } 2017-02-03 W2 13

Operatory danych. są słowami kluczowymi lub symbolami, które powodują wykonanie operacji na Operator przypisania prostego (=): zmienna = wyrażenie oblicza wartość wyrażenia i przypisuje zmiennej. W języku C/C++ konstrukcja taka jest sama w sobie wyrażeniem. Ponieważ każde wyrażenie ma wartość to przypisanie proste jest wyrażeniem o określonej wartości. Po wykonaniu instrukcji x = y = z = 15.5; zmienne x, y, z będą mieć identyczną wartość 15.5 Po wykonaniu instrukcji t = (r = 12) -3; zmienna r ma wartość 12, a zmienna t ma wartość 12-3 czyli 9. Operator przypisania wiąże swoje argumenty (operandy) w kolejności od strony prawej do lewej. 2017-02-03 W2 14

Przykład programu ilustrującego działanie operatora przypisania prostego: /* Przykład 2.7 */ #include <cstdio> #include <cstdlib> using namespace std; // int main(void) { float x, y, z; int t, r; x=y=z=15.5; t=(r=12)-3; printf("\nwyniki dzialan: x = %f y = %f z = %f\n", x, y, z); printf(" r = %d t = %d\n", r, t); system("pause"); return 0; } 2017-02-03 W2 15

Operatory arytmetyczne: unarne: +argument (jednoargumentowe) -argument zmiana znaku argumentu binarne: argument1 + argument2 dodawanie (dwuargumentowe) argument1 - argument2 odejmowanie argument1 * argument2 mnożenie argument1 / argument2 dzielenie argument1%argument2 reszta z dzielenia Przykład zastosowania niektórych operatorów arytmetycznych (program konwersji temperatury w stopniach Farenheit'a na temperaturę w stopniach Celsjusza: 2017-02-03 W2 16

/* Przykład 2.8 */ #include <cstdio> #include <cstdlib> using namespace std; // int main(void) { float ftemp, ctemp; printf("\npodaj temperature w stopniach Farenheit\'a: "); scanf("%f", &ftemp); ctemp = (ftemp-32) * 5 / 9; printf("temperatura w stopniach Celsjusza %-6.1f\n", ctemp); system("pause"); return 0; } 2017-02-03 W2 17

Kolejność w jakiej wykonywane są operacje wpływa w istotny sposób na wartość wyrażenia. Dla operatorów arytmetycznych kolejność ta (priorytet) jest następująca: 1. Obliczenie czynników i składników ujętych w nawiasy 2. Wykonanie jednoargumentowych operacji + i 3. Wykonanie operacji mnożenia (*), dzielenia (/) i obliczania reszty z dzielenia (%) 4. Wykonanie dwuargumentowych operacji dodawania (+) i odejmowania (-). Przykład wyrażenia arytmetycznego jak zapisać w języku C/C++ wyrażenie:? a d f c e h g j 2017-02-03 W2 18

Chyba tak: a + c/(d + e/(f + g/(h +j))) /* Przyklad 2.10 - Ilustracja dzialania operatora reszty z dzielenia */ #include <cstdio> #include <cstdlib> using namespace std; // int main(void) { int a=17; int b=-3; int c=-55; int d=6; printf("\nreszta z dzielenia %4d przez %4d jest rowna %4d", a, b, a % b); printf("\nreszta z dzielenia %4d przez %4d jest rowna %4d", c, d, c % d); printf("\nreszta z dzielenia %4d przez %4d jest rowna %4d", a, d, a % d); printf("\nreszta z dzielenia %4d przez %4d jest rowna %4d\n", c, b, c % b); system("pause"); return 0; } 2017-02-03 W2 19

Wyrażenia można użyć prawie wszędzie tam, gdzie dopuszczalne jest użycie zmiennej. /*Przyklad 2.9 Uzycie wyrazenia jako parametru funkcji standardowej printf*/ #include <cstdio> #include <cstdlib> using namespace std; int main(void) { int numer=3; printf("liczba zwiekszona o 9 jest rowna:%4d\n", numer+9); system("pause"); return0; } Liczba zwiekszona o 9 jest rowna: 12 2017-02-03 W2 20

/* Przyklad 2.10 - Ilustracja dzialania operatora reszty z dzielenia */ #include <cstdio> #include <cstdlib> using namespace std; // int main(void) { int a=17; int b=-3; int c=-55; int d=6; printf("\nreszta z dzielenia %4d przez %4d jest rowna %4d", a, b, a % b); printf("\nreszta z dzielenia %4d przez %4d jest rowna %4d", c, d, c % d); printf("\nreszta z dzielenia %4d przez %4d jest rowna %4d", a, d, a % d); printf("\nreszta z dzielenia %4d przez %4d jest rowna %4d\n", c, b, c % b); system("pause"); return 0; } 2017-02-03 W2 21

Bardzo często w programach występują instrukcje, których zadaniem jest np. zwiększenie aktualnej wartości zmiennej o określoną liczbę i przypisanie tak obliczonej wartości tej samej zmiennej. Klasyczny sposób zapisu takiej instrukcji to: x = x + a; W języku C/C++ taką instrukcję można zapisać w zwięzłej postaci jako: x += a; Użyto tutaj symbolu += arytmetycznego operatora przypisania sumy. 2017-02-03 W2 22

W podobny sposób można uprościć zapis innych wyrażeń arytmetycznych obliczanych wg takiego samego schematu. Zestaw arytmetycznych operatorów przypisania to: += przypisanie sumy arg1+=arg2 arg1 = arg1 + arg2 -= przypisanie różnicy arg1-=arg2 arg1 = arg1 - arg2 *= przypisanie iloczynu arg1*=arg2 arg1 = arg1 * arg2 /= przypisanie ilorazu arg1 /=arg2 arg1 = arg1 / arg2 %= przypisanie reszty arg1 %=arg2 arg1 = arg1 % arg2 2017-02-03 W2 23

/* Przyklad 2.11 - arytmetyczny operator przypisania */ #include <cstdio> #include <cstdlib> using namespace std; // int main(void) { int razem = 0; int ilosc = 10; printf("\nrazem=%d\n", razem); razem += ilosc; printf("razem=%d\n", razem); razem += ilosc; printf("razem=%d\n", razem); system("pause"); return 0; } 2017-02-03 W2 24

Innym operatorem upraszczającym zapis tekstu źródłowego jest operator inkrementacji/dekrementacji. W zależności od sposobu wykonania operacji zwiększenia/zmniejszenia wartości zmiennej o 1 mówimy o operatorze przedrostkowym lub o operatorze przyrostkowym inkrementacji/dekrementacji: ++arg arg = arg + 1 operator przedrostkowy inkrementacji --arg arg = arg - 1 operator przedrostkowy dekrementacji arg++ arg = arg + 1 operator przyrostkowy inkrementacji arg-- arg = arg - 1 operator przyrostkowy dekrementacji 2017-02-03 W2 25

/* Przyklad 2.12 dzialanie przyrostkowego operatora inkrementacji */ #include <cstdio> #include <cstdlib> using namespace std; // int main(void) { int num=0; printf("\nliczba num = %d", num); printf("\nliczba num = %d", num++); printf("\nliczba num = %d\n", num); system("pause"); return 0; } 2017-02-03 W2 26

/* Przyklad 2.13 dzialanie przedrostkowego operatora inkrementacji */ #include <cstdio> #include <cstdlib> using namespace std; // int main(void) { int num=0; printf("\nliczba num = %d", num); printf("\nliczba num = %d", ++num); printf("\nliczba num = %d\n", num); system("pause"); return 0; } 2017-02-03 W2 27

Operatory relacji służą do sprawdzania w programach zależności pomiędzy wartościami zmiennych, wyrażeń. Relacja może być prawdziwa lub fałszywa. Mówimy, że relacje mają wartości logiczne prawdy lub fałszu. W języku C/C++ istnieje typ logiczny. Deklaruje się słowem kluczowym bool. Wartości logiczne (true albo false) są reprezentowane za pomocą wartości całkowitych: 1 dla prawdy true i 0 dla fałszu false. Zestaw operatorów relacji to: < mniejsze > większe <= mniejsze lub równe >= większe lub równe == równe!= różne Operator równości reprezentowany jest przez dwa znaki równości, a operator "różny" przez znak wykrzyknika i równości 2017-02-03 W2 28

Relacja to wyrażenie postaci : arg1 op arg2 gdzie: arg1, arg2 - argumenty relacji (wyrażenia typów prostych), op - operator relacji. Relacja może być prawdziwa lub fałszywa. W C/C++ relacja prawdziwa ma wartość true (1), fałszywa wartość false (0). Operatory logiczne: dwuargumentowe: sumy logicznej, && iloczynu logicznego Wyrażenie logiczne (funkcja zdaniowa): arg1 op arg2 gdzie: arg1, arg2 - wyrażenia o wartościach true (prawda) albo false (fałsz), op - operator logiczny 2017-02-03 W2 29

Działanie operatorów logicznych dwuargumentowych suma logiczna arg1 arg2 arg1 arg2 0 (fałsz) 1 (prawda) 0 (fałsz) 0 (fałsz) 1 (prawda) 1 (prawda) 1 (prawda) 1 (prawda) iloczyn logiczny arg1 && arg2 arg1 arg2 0 (fałsz) 1 (prawda) 0 (fałsz) 0 (fałsz) 0 (fałsz) 1 (prawda) 0 (fałsz) 1 (prawda) 2017-02-03 W2 30

Operator logiczny jednoargumentowy!arg - negacja arg!arg 0 (fałsz) 1 (prawda) 1 (prawda) 0 (fałsz) 2017-02-03 W2 31

Operatory bitowe - wykonywanie operacji na bitach argumentów ~op op1&op2 op1 op2 op1^op2 op1«op2 op1»op2 negacja bitowa iloczyn bitowy suma bitowa bitowa różnica symetryczna przesunięcie w lewo przesunięcie w prawo Przykłady: Dwie liczby całkowite dodatnie: 337 1109 337 101010001 ~337 1111111010101110 1109 10001010101 ~1110 1111101110101010 2017-02-03 W2 32

Argumenty 337 101010001 1109 10001010101 bitowy iloczyn logiczny 81 1010001 bitowa suma logiczna 1365 10101010101 bitowa różnica symetryczna 1284 10100000100 Przesunięcie: 337 101010001 337 << 3 = 101010001000 (2696) 337 >> 3 = 101010 (42) 2017-02-03 W2 33

// Przykłady kilku wyrażeń #include <iostream> #include <cstdlib> using namespace std; int main() { } int a = 10, b = 20, c; c = (a++) + b--; cout << "Wyniki 1: a = " << a << ", b = " << b << ", c = " << c << endl; a = 10; b = 20; c = (a, b + a, b*b) % (a >> 4, b << 2); cout << "Wyniki 2: a = " << a << ", b = " << b << ", c = " << c << endl; a = 10; b = 20; ++c *= (a!= 0)?a:b++; cout << "Wyniki 3: a = " << a << ", b = " << b << ", c = " << c << endl; ++c *= (a == 0)?a:b++; cout << "Wyniki 4: a = " << a << ", b = " << b << ", c = " << c << endl; system("pause"); return 0; 2017-02-03 W2 34

2017-02-03 W2 35

Podstawowe pojęcia związane z operatorami: Priorytet operatorów - kolejność wykonywania działań Wiązanie - sposób łączenia operatora z operandem (argumentem) Operator unarny - operator wiązany z jednym argumentem Operator binarny - operator wiązany z dwoma argumentami Opracowanie wyrażenia - obliczenia i operacje wykonywane podczas przetwarzania wyrażenia (obliczania jego wartości) 2017-02-03 W2 36

Operator warunkowy arg1?arg2:arg3 wymaga trzech argumentów: arg1 musi być typu prostego arg2 arg3 obydwa muszą być zgodnego typu Najpierw obliczana jest wartość wyrażenia arg1. Jeżeli jest niezerowa (co odpowiada logicznej wartości true), to następuje obliczanie wartości wyrażenia arg2 i tą wartość otrzymuje całe wyrażenie. W przeciwnym przypadku (arg1 równe 0 czyli false) obliczona zostanie wartość wyrażenia arg3 i taką wartość otrzyma całe wyrażenie. 2017-02-03 W2 37

/* Program wczytuje 3 liczby całkowite i wybiera największą z nich */ #include <iostream> using namespace std; int main(void) { int a, b, c; cout << "Podaj trzy liczby całkowite: "; cin >> a >> b >> c; cout << "Największa: " << ((a>b?a:b)>c?(a>b?a:b):c) << endl; return 0; } 2017-02-03 W2 38

Priorytet operatorów () [] { } -> :: wiązanie: od lewej do prawej! ~ + - ++ -- & * (typ) sizeof new delete od prawej do lewej ->* od lewej do prawej / % od lewej do prawej + - od lewej do prawej << >> od lewej do prawej < <= > >= od lewej do prawej ==!= od lewej do prawej & od lewej do prawej ^ od lewej do prawej od lewej do prawej && od lewej do prawej od lewej do prawej?: od lewej do prawej = *= /= %= += -= &= ^= = <<= >>= od prawej do lewej, (przecinek) od lewej do prawej 2017-02-03 W2 39