Klasyfikacja typów w C++

Podobne dokumenty
C++ wprowadzanie zmiennych

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

1 Podstawy c++ w pigułce.

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

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

Część 4 życie programu

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

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

dr inż. Jarosław Forenc

4. Funkcje. Przykłady

3. Instrukcje warunkowe

I - Microsoft Visual Studio C++

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

a[1] a[2] a[3] a[4] a[5] a[6] a[7] a[8] a[9] a[10]

ZASADY PROGRAMOWANIA KOMPUTERÓW ZAP zima 2015

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

Podstawy programowania w języku C

Podstawy programowania w języku C i C++

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

1 Podstawy c++ w pigułce.

METODY I JĘZYKI PROGRAMOWANIA PROGRAMOWANIE STRUKTURALNE. Wykład 02

Wstęp do programowania

Język ludzki kod maszynowy

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

Podstawy i języki programowania

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

2 Przygotował: mgr inż. Maciej Lasota

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

ZASADY PROGRAMOWANIA STRUKTURALNEGO (ZAP - zima 2016) Liczby, znaki, napisy, operatory logiczne, stałe. Pętle typu while.

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

Struktura pliku projektu Console Application

Funkcje matematyczne w C. Programowanie w C Marek Pudełko

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

Programowanie komputerowe. Zajęcia 1

Wstęp do programowania

Podstawy programowania. Wykład: 4. Instrukcje sterujące, operatory. dr Artur Bartoszewski -Podstawy programowania, sem 1 - WYKŁAD

Wiadomości wstępne Środowisko programistyczne Najważniejsze różnice C/C++ vs Java

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

Programowanie strukturalne. Opis ogólny programu w Turbo Pascalu

Wstęp do programowania

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

#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 ); }

Zmienne, stałe i operatory

Podstawy programowania. Wykład: 5. Instrukcje sterujące c.d. Stałe, Typy zmiennych c.d. dr Artur Bartoszewski -Podstawy programowania, sem 1 - WYKŁAD

Podstawy i języki programowania

MATERIAŁY DO ZAJĘĆ II

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

Wstęp do programowania

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

Wykład I. Programowanie II - semestr II Kierunek Informatyka. dr inż. Janusz Słupik. Wydział Matematyki Stosowanej Politechniki Śląskiej

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

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

Wstęp do programowania

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

Wstęp do Programowania, laboratorium 02

JĘZYKI PROGRAMOWANIA Z PROGRAMOWANIEM OBIEKTOWYM. Laboratorium 3. Instrukcje wyboru

Podstawy Programowania C++

Programowanie w C++ Wykład 3. Katarzyna Grzelak. 12 marca K.Grzelak (Wykład 1) Programowanie w C++ 1 / 35

Podstawy programowania C. dr. Krystyna Łapin

operator zmiany znaku operatory mnożenia, dzielenia, dzielenia modulo operatory dodawania, odejmowania

Programowanie strukturalne. dr inż. Tadeusz Jeleniewski

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

Cw.12 JAVAScript w dokumentach HTML

Podstawowe operacje arytmetyczne i logiczne dla liczb binarnych

Zajęcia nr 2 Programowanie strukturalne. dr inż. Łukasz Graczykowski mgr inż. Leszek Kosarzewski Wydział Fizyki Politechniki Warszawskiej

Algorytmika i programowanie. dr inż. Barbara Fryc Wyższa Szkoła Informatyki i Zarządzania w Rzeszowie

wykład IV uzupełnienie notatek: dr Jerzy Białkowski Programowanie C/C++ Język C, a C++. wykład IV dr Jarosław Mederski Spis Język C++ - wstęp

Operatory cd. Relacyjne: ==!= < > <= >= bool b; int i =10, j =20; dzielenie całkowitych wynik jest całkowity! Łączenie tekstu: + string s = "Ala ma ";

JĘZYKI PROGRAMOWANIA Z PROGRAMOWANIEM OBIEKTOWYM. Wykład 6

Podstawowe elementy proceduralne w C++ Program i wyjście. Zmienne i arytmetyka. Wskaźniki i tablice. Testy i pętle. Funkcje.

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

Laboratorium 03: Podstawowe konstrukcje w języku Java [2h]

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

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

1. Wypisywanie danych

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

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

Typ użyty w deklaracji zmiennej decyduje o rodzaju informacji, a nazwa zmiennej symbolicznie opisuje wartość.

ZASADY PROGRAMOWANIA STRUKTURALNEGO (ZAP - zima 2014) Wyrażenia c.d. Pętle typu while.

Wykład II Tablice (wstęp) Przykłady algorytmów Wstęp do języka C/C++

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

Stałe. Funkcje standardowe. Niektóre stałe i funkcje z pliku nagłówkowego math.h. M_E M_LOG2E M_LOG10E M_LN2 M_LN10 M_PI M_PI_2

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

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

Algorytmika i Programowanie VBA 1 - podstawy

3 Przygotował: mgr inż. Maciej Lasota

Język C zajęcia nr 11. Funkcje

ROZDZIAŁ 2. Operatory

Wstęp do Informatyki

JĘZYKI PROGRAMOWANIA Z PROGRAMOWANIEM OBIEKTOWYM. Wykład 4

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

Struktury Struktura polami struct struct struct struct

Odczyt danych z klawiatury Operatory w Javie

Podstawy programowania. Wykład Funkcje. Krzysztof Banaś Podstawy programowania 1

ARCHITEKTURA SYSTEMÓW KOMPUTEROWYCH

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

Instrukcje sterujące

Programowanie. programowania. Klasa 3 Lekcja 9 PASCAL & C++

Wyrażenia arytmetyczne

Transkrypt:

Klasyfikacja typów w C++ Typy języka C++ można na przykład podzielić na: typy fundamentalne (podstawowe, proste), typy złożone (pochodne). Te same typy ze względu na autora ich definicji dzielimy na: typy wbudowane (standardowe, predefiniowane), typy definiowane przez programistę. 44 Klasyfikacja typów w C++ Typy fundamentalne: typy całkowite, typy zmiennoprzecinkowe (rzeczywiste), typ logiczny (boolowski), typy znakowe, typy wyliczeniowe, typ pusty. Typy złożone będą omawiane w dalszej części wykładu. 45 dr inż. P. Borowiecki (KAMS, WETI, PG) 1

Klasyfikacja typów w C++ Definicja typu określa między innymi: nazwę typu, zbiór wartości, które mogą przyjmować zmienne tego typu, sposób zapisu wartości, operacje, które można wykonywać na wartościach oraz zmiennych tego typu i odpowiadające im operatory. Typy predefiniowane o tych samych nazwach mogą mieć różne realizacje, tzn. zakresy, reprezentację wewnętrzną oraz dokładność zależną od platformy (procesor, kompilator). 46 Typy 1 47 dr inż. P. Borowiecki (KAMS, WETI, PG) 2

Typy całkowite Zmienne tych typów służą do reprezentacji liczb całowitych. short int int long int w skrócie short w skrócie long Każdy z wymienionych typów ma dwa warianty: ze znakiem (wariant domyślny), bez znaku. Wariant ustalamy przez specyfikator signed albo unsigned. signed short int signed int signed long int unsigned short int unsigned int unsigned long int W definicji zmiennej x: unsigned long int x; 48 Typy całkowite ( zakresy wartości ) Najczęściej spotykane wartości dla aplikacji 32-bitowych. nazwa typu bajty zakres wartości short int signed short int 2-32 768... 32 767 unsigned short int 2 0... 65535 int signed int 4-2 147 483 648... 2 147 483 647 unsigned int 4 0... 4 294 967 295 long int signed long int 4-2 147 483 648... 2 147 483 647 unsigned long int 4 0... 4 294 967 295 49 dr inż. P. Borowiecki (KAMS, WETI, PG) 3

Typy całkowite ( wewnętrzne reprezentacje danych ) aplikacje 16-bitowe int 2 bajty 15 0 long int 4 bajty 31 aplikacje 32-bitowe 0 short int 2 bajty int long int 15 31 0 0 4 bajty 50 Typy zmiennoprzecinkowe Zmienne tych typów służą do reprezentacji liczb rzeczywistych. float ( ang. floating point zmienny przecinek ) double ( ang. double precision - podwójna precyzja ) long double ( rozszerzona dokładność ) W definicji zmiennej x: long double x; Typy zmiennoprzecinkowe różnią się nie tylko zakresem dopuszczalnych wartości ale również dokładnością ich reprezentacji. float 3.4 e-38... 3.4 e+38 double 1.7 e-308... 1.7 e+308 long double 3.4 e-4932... 1.1 e+4932 Wartości dla aplikacji 32-bitowych 51 dr inż. P. Borowiecki (KAMS, WETI, PG) 4

Typy zmiennoprzecinkowe ( wewnętrzne reprezentacje danych ) float aplikacje 32-bitowe 4 bajty 31 22 double 0 8 bajtów 63 51 long double 0 10 bajtów 79 64 0 - znak wykładnika - wykładnik - znak liczby - mantysa 52 Przykład Stałe dosłowne W treści programów często posługujemy się literałami (ciągami znaków), które reprezentują stałe wartości określonego typu. float x = 12.34; k = k + 14; znak = * ; ciag_znakow = język C++ ; koniec = true; 12.34 stała rzeczywista 14 stała całkowita * stała znakowa język C++ stała napisowa true stała logiczna... itp. 53 dr inż. P. Borowiecki (KAMS, WETI, PG) 5

Stałe dosłowne reprezentujące liczby całkowite 17 39-54 Zapis liczb całkowitych ósemkowych zaczynamy od 0 (zero): 010-8 w systemie dziesiętnym (1*8 + 0*1 = 8) 014-12 w systemie dziesiętnym (1*8 + 4*1 = 12) 091 - błąd, bo w systemie ósemkowym nie ma cyfry 9 Zapis liczby całkowitych szesnastkowych zaczynamy od 0x: 0x10-16 w systemie dziesiętnym (1*16 + 0*1 = 16) 0xa1-161 w systemie dziesiętnym (10*16 + 1*1 = 161) 0xff - 255 w systemie dziesiętnym (15*16 + 15*1 = 255) 0,...,9,a,...,f cyfry szesnastkowe (małe i duże litery zamiennie) 54 Stałe dosłowne reprezentujące liczby całkowite Stałe całkowite traktuje się domyślnie jako typu int, chyba że reprezentują duże liczby, które wykraczają poza zakres int. Wówczas stałe takie są typu long. Można wymusić zmianę typu stałej z typu int na typ long nawet dla niewielkiej liczby. Robi się to przez dopisanie na końcu literału litery L lub l. Przykład 0L 123L Jeśli chcemy by liczba miała typ unsigned, należy dodatkowo dopisać na końcu literę u. Przykład 213u 34uL 55 dr inż. P. Borowiecki (KAMS, WETI, PG) 6

Stałe dosłowne reprezentujące liczby całkowite #include <iostream> using namespace std; int main () int i; int k; i = 5; k = i + 010; cout << "k = " << k << endl; cout << "wypisujemy: " << 0x22 << " " << 022 << " " << 22 << endl; system("pause"); return 0; k = 13 wypisujemy: 34 18 22 Aby kontynuować, naciśnij dowolny klawisz... 56 Stałe dosłowne zmiennoprzecinkowe 0.976.976 12.3 3.1416-123.45-17. 5.0e2 12.3e+23 3.141e 3.2e4 5e2 oznacza 5 * 10 2 czyli 500 32.5e4 oznacza 32.5 * 10 4 czyli 325000 7.3e-3 oznacza 7.3 * 10-3 czyli 0.0073 Domyślnie stałe zmiennoprzecinkowe są typu double. Aby stała była typu float dopisujemy f lub F. 0.345f 7.3e-3f 57 dr inż. P. Borowiecki (KAMS, WETI, PG) 7

Operatory arytmetyczne Operator Działanie Przykład * mnożenie a = b * c; / dzielenie a = b / c; % reszta z dzielenia (modulo) a = b % c; + dodawanie a = b + c; - odejmowanie a = b - c; Operator % można stosować wyłącznie do operandów całkowitych. 25 / 7 3 1 / 4 0 25 / 7. 3.571428 35./ 5 7.0 19 % 6 1 0 % 5 0 18 % 2 0 tzn. 18 jest liczbą parzystą Typ rezultatu może zależeć od typu operandów. W zależności od typu operandów kompilator może dokonać niejawnej konwersji ich typów, np. dla 25 / 7. konwersja 25 do typu double. 58 Wybrane funkcje matematyczne sin sinus x (w radianach) double sin ( double ); cos cosinus x (w radianach) double cos ( double ); tan tangens x (w radianach) double tan ( double ); Przyjęto następującą konwencję opisu prototyp funkcji double fun ( double, double ); nazwa funkcji typ rezultatu funkcji typy parametrów funkcji 59 dr inż. P. Borowiecki (KAMS, WETI, PG) 8

Wybrane funkcje matematyczne acos arkus cosinus x double acos ( double ); asin arkus sinus x double asin ( double ); atan arkus tangens x double atan ( double ); sqrt pierwiastek kwadratowy z x double sqrt ( double ); exp funkcja wykładnicza e x double exp ( double ); abs wartość bezwzględna z całkowitego x int abs ( int ); <cstdlib> 60 Wybrane funkcje matematyczne fabs wartość bezwzględna z rzeczywistego x double fabs ( double ); ceil najmniejsza liczba całkowita nie mniejsza niż x double ceil ( double ); floor największa liczba całkowita nie większa niż x double floor ( double ); log logarytm naturalny double log ( double ); log10 logarytm o podstawie 10 double log10 ( double ); 61 dr inż. P. Borowiecki (KAMS, WETI, PG) 9

Wybrane funkcje matematyczne fmod reszta z dzielenia x/y w postaci liczby zmiennoprzecinkowej double fmod ( double, double ); pow potęga x y double pow ( double, double ); pow10 potęga 10 p double pow10 ( int ); rand liczba losowa z zakresu <0,RAND_MAX>, <cstdlib> gdzie RAND_MAX jest stałą z biblioteki cstdlib o wartości co najmniej największej liczby dwubajtowej tzn. RAND_MAX > 32766 int rand (); srand - inicjalizacja generatora liczb losowych void srand (unsigned int ); <cstdlib> 62 x 1.5 Przykłady wyrażeń arytmetycznych 1.5ln x = e exp( 1.5*log(x) ) pow( x, 1.5 ) a b b a c = e a cln b b a = e c( bln a alnb) exp( c * ( b*log(a) a*log(b) ) ) a x+ y n = e ( x+ y n )ln a = e ( x+ e n ln y )ln a exp( log(a) * ( x + exp( n * log(y) ) ) ) pow( a, x + pow( y, n ) ) Uwaga: standard C++ nie określa kolejności wartościowania wyr. arytm. Nie wszystkie języki programowania mają odpowiednik funkcji pow. 63 dr inż. P. Borowiecki (KAMS, WETI, PG) 10

Różne operatory przypisania zmienna opr wyrażenie; opr zapis skrócony równoważny zapis rozwinięty += a += b a = a + b -= a -= b a = a b /= a /= b a = a / b %= a %= b a = a % b... oraz inne operatory konstruowane zgodnie z tym samym schematem, w tym operatory bitowe. 64 Wybrane funkcje matematyczne (generowanie liczb losowych) Wartości zwracane przez funkcję rand należą do przedziału <0,RAND_MAX> Aby otrzymać liczbę losową x z przedziału <0,b> x = rand() % (b + 1) Liczbę losową x z <a,b> dla nieujemnego a generujemy x = a + rand() % (b a + 1) Generator liczb pseudolosowych można zainicjować np. srand(time(0)) gdzie time(0) z biblioteki ctime zwraca bieżący czas w sek. 65 dr inż. P. Borowiecki (KAMS, WETI, PG) 11

Instrukcje sterujące 1 66 Instrukcje sterujące Wykonanie programu jest wykonaniem pewnego ciągu instrukcji. W zależności od przetwarzanych danych wykonaniu tego samego programu mogą odpowiadać różne ciągi instrukcji. O tym, która instrukcja zostanie wykonana jako następna decydują tzw. instrukcje sterujące. Podstawowe rodzaje instrukcji sterujących: sekwencja, wybór, iteracja: iteracja ograniczona, iteracja warunkowa. 67 dr inż. P. Borowiecki (KAMS, WETI, PG) 12

Sekwencja Najpierw wykonaj P, potem wykonaj Q. P Q P i Q mogą reprezentować zarówno proste instrukcje jak i całe bloki algorytmu. 68 Problem [zamiana zawartości] Sekwencja Dane: trzy jednakowe pojemniki A, B, C. A - pełny, B - pełny, C - pusty. Cel: zamienić ze sobą zawartość pojemików A i B, dysponując urządzeniem, przekładającym zawartość pojemnika pełnego do pustego. A (2) B (1) C (3) 69 dr inż. P. Borowiecki (KAMS, WETI, PG) 13

Program [zamiana zawartości] (1) C A (2) A B (3) B C Sekwencja Czy można problem zamiany rozwiązać dysponując mniejszą ilością zasobów, tzn. dwoma pojemnikami? A (2) B (1) C (3) 70 Sekwencja Problem [zamiana liczbowej zawartości] Dane: dwa jednakowe pojemniki A i B. Każdy zawiera liczbę. Cel: zamienić ze sobą zawartość pojemików A i B, dysponując urządzeniem, pobierającym liczby z obu pojemników i obliczającym ich sumę albo różnicę oraz zapisującym wynik do wskazanego pojemnika. A A+B A-B B-A B Uwaga na błędy zaokrągleń i przybliżoną reprezentację wartości! 71 dr inż. P. Borowiecki (KAMS, WETI, PG) 14

Sekwencja Problem [zamiana liczbowej zawartości] Dane: dwa jednakowe pojemniki A i B. Każdy zawiera liczbę. Cel: zamienić ze sobą zawartość pojemików A i B, dysponując urządzeniem, pobierającym liczby z obu pojemników i obliczającym ich sumę albo różnicę oraz zapisującym wynik do wskazanego pojemnika. A B A+B A-B B-A 3.5 2.4 A A +B 5.9 2.4 B A - B 5.9 3.5 A A - B 2.4 3.5 72 Sekwencja Uwagi dotyczące dwóch sposobów zamiany Kluczem do zrozumienia działania drugiego sposobu jest spostrzeżenie, że dysponując wartością sumy obu liczb i wartością jednej z nich można obliczyć wartość drugiej liczby (zaniedbując błędy zaokrągleń). Drugi sposób działa tylko na danych liczbowych. Potrafi jednak zamienić zawartość dwóch obiektów nie używając obiektu pomocniczego. Drugi przykład pokazuje, że dokładna specyfikacja dopuszczalności danych wejściowych (dane są liczbami) może pomóc projektantowi w skonstruowaniu lepszego (wymagającego mniej pamięci) rozwiązania. Zastosowanie dodatkowego urządzenia nie ogranicza zastosowań drugiego rozwiązania czynności realizowane przez to urządzenie wykonywane są w naturalny sposób przez procesor, natomiast poszczególne pojemniki można utożsamiać z obszarami pamięci. 73 dr inż. P. Borowiecki (KAMS, WETI, PG) 15

Sekwencja // --------------------------------------------- // Program zamienia wartości dwóch zmiennych // --------------------------------------------- #include <iostream> using namespace std; int main () int A, B; int buf; cout << "Podaj wartość pierwszej zmiennej: "; cin >> A; cout << "Podaj wartość drugiej zmiennej: "; cin >> B; cout << "Przed zamianą: " << " A = " << A << " B = " << B << endl; buf = A; A = B; B = buf; cout << "Po zamianie: " << " A = " << A << " B = " << B << endl; system("pause"); return 0; 74 Sekwencja // -------------------------------------------------------------- // Obliczanie wartości wielomianu stopnia 3 wg schematu Hornera // ax^3 + bx^2 + cx + d = ( ( ax + b ) x + c) x + d // -------------------------------------------------------------- #include <iostream> using namespace std; int main () double x, y, a, b, c, d; cout << "Podaj współczynniki a, b, c, d wielomianu: "; // kaskadowe czytanie z cin w kolejności a,...,d cin >> a >> b >> c >> d; cout << "Podaj wartość argumentu x: "; cin >> x; y = a; y = y * x + b; y = y * x + c; y = y * x + d; cout << "Wartość wielomianu: " << y << endl; system("pause"); return 0; 75 dr inż. P. Borowiecki (KAMS, WETI, PG) 16

Typy 2 76 Typ logiczny (boolowski) Zmienne tego typu służą do reprezentacji dwóch wartości logicznych: prawda (ang. true) i fałsz (ang. false). Nazwa typu: bool W definicji zmiennej flaga: bool flaga; Stałe dosłowne false true Wartości logiczne true i false wyrażeń logicznych mają reprezentację wewnętrzną taką jak liczby całkowite 0 i 1 Język C nie posiada wyróżnionego typu logicznego. Czasami w C++ korzysta się z faktu, że tak jak w języku C liczba całkowita równa 0 interpretowana jest jako false, podczas gdy dowolna liczba całkowita różna od 0 interpretowana jest jako wartość true. 77 dr inż. P. Borowiecki (KAMS, WETI, PG) 17

Operatory relacji Operator Działanie Przykład < mniejszy a < b <= mniejszy lub równy a <= b > większy a > b >= większy lub równy a >= b == równy a == b!= różny a!= b Podczas porównywania dwóch elementów, jeden typu rzeczywistego a drugi całkowitego, wykonywana jest automatyczna konwersja reprezentacji wewnętrznej elementu typu całkowitego na reprezentację odpowiednią dla typu rzeczywistego a następnie porównywane są dwie liczby rzeczywiste. Wynik działania operatora relacji czyli wynik porównania jest typu logicznego. 78 Operatory i wyrażenia logiczne Operator Działanie Przykład! negacja! a && koniunkcja (iloczyn logiczny) a && b alternatywa (suma logiczna) a b Operator! jest operatorem jednoargumentowym. bool p = true; bool q = false; int zero = 0; int nzero = 5; cout << ( p q ) << endl; cout << ( p && q ) << endl; cout <<!( p && q ) << endl; cout << (!p && q ) << endl; cout << ( p && zero ) << endl; cout << ( p && nzero ) << endl; cout << (!nzero ) << endl; cout << (!zero ); 1 0 1 0 0 1 0 1_ 79 dr inż. P. Borowiecki (KAMS, WETI, PG) 18

true Operatory i wyrażenia logiczne!p // p jest zmienną typu bool true && ( x <= y ) ( x > y ) && ( x > z ) ( ( x == y) ( x == z)) && ( x!= w ) p = ( x < 18 ); // ważna konstrukcja! czy_grac = (jest_publicznosc && chce_sluchac); Operatory &&,,! mają swoje odpowiedniki and, or i not. Na przykład jest równoważne ( x > y ) && ( x > z ) ( x > y ) and ( x > z ) 80 Wartościowanie wyrażeń logicznych Wyrażenia logiczne wartościowane są od lewej do prawej z uwzględnieniem nawiasów ale tylko do momentu, gdy wartość jest jednoznacznie określona. int x = 0; int y = 10; int z = -1; bool p; p = ( x > y ) and ( x > z ); Po wyznaczeniu wartości wyrażenia ( x > y ), która wynosi false wiadomo już, że wartość całej koniunkcji wynosi false. Dlatego wyrażenie ( x > z ) nie będzie już wartościowane. 81 dr inż. P. Borowiecki (KAMS, WETI, PG) 19

Priorytet operatorów logicznych Priorytet operatorów logicznych && i jest niższy od priorytetu operatorów relacji W szczególności jest równoważne <, <=, >, >=, ==,!= p = ( x > y ) && ( x > z ); p = ( x > y && x > z ); Rozsądne stosowanie dodatkowych nawiasów podnosi jednak czytelność skomplikowanych wyrażeń. 82 Priorytet wybranych operatorów Priorytety, przypisane operatorom oraz nawiasy pozwalają na jednoznaczne ustalenie kolejności w jakiej operatory te będą stosowane. ( ) nawiasy [ ] indeks tablicy * dereferencja ++ postinkrementacja new, new[], delete, delete[] -- postdekrementacja * mnożenie operatory rzutowania / dzielenie ++ preinkrementacja % dzielenie modulo -- predekrementacja + dodawanie + operator zachowania znaku - odejmowanie - operator zmiany znaku operatory relacji <, <=, >,! negacja logiczna && iloczyn logiczny & pobranie adresu suma logiczna Pamiętaj aby sprawdzić priorytet każdego nowopoznanego operatora. 83 dr inż. P. Borowiecki (KAMS, WETI, PG) 20

Instrukcje sterujące 2 84 Wybór Jeżeli W, to wykonaj P, w przeciwnym przypadku wykonaj Q. W Fałsz Prawda P Q W jest wyrażeniem logicznym (warunkiem). P i Q mogą reprezentować zarówno proste instrukcje jak i całe bloki algorytmu. 85 dr inż. P. Borowiecki (KAMS, WETI, PG) 21

Wybór Problem [wyznaczenie największej spośród trzech liczb] Dane: trzy dowolne, różne liczby A, B, C. Cel: wyznaczyć największą spośród danych liczb, czyli maxa,b,c. 86 Wybór B nie jest największa START A B C A nie jest największa Prawda A > B Fałsz Prawda A > C Fałsz Prawda B > C Fałsz A C B C STOP 87 dr inż. P. Borowiecki (KAMS, WETI, PG) 22

Wybór Problem [wyznaczenie największej spośród trzech liczb] Dane: trzy dowolne, różne liczby A, B, C. Cel: wyznaczyć największą spośród danych liczb, czyli maxa,b,c. Program [ max3 ] (1) Jeżeli A > B (1.1) to jeżeli A > C (1.1.1) to A jest największa (1.1.2) w przeciwnym przypadku C jest największa (1.2) w przeciwnym przypadku jeżeli B > C (1.2.1) to B jest największa (1.2.2) w przeciwnym przypadku C jest największa 88 Wybór START A B C (1.1) Prawda A > B Fałsz (1.2) Prawda A > C Fałsz Prawda B > C Fałsz A C B C STOP 89 dr inż. P. Borowiecki (KAMS, WETI, PG) 23

Wybór START A jak rozwiązać problem A B C wyboru największej spośród 4 danych liczb? Prawda Fałsz A > B A jak rozwiązać problem wyboru największej spośród 5 danych liczb? Prawda Fałsz Prawda Fałsz A > C B > C A jak rozwiązać problem wyboru największej spośród 6 danych liczb? A C B C... STOP 90 Instrukcja warunkowa if Instrukacja warunkowa może mieć jedną z dwóch postaci: (1) (2) if ( warunek ) instrukcja_1; if ( warunek ) instrukcja_1; else instrukcja_2; Warunek może być dowolnym wyrażeniem logicznym. (1) Jeżeli wyrażenie to ma wartość true, to wykonywana jest instrukcja_1 a jeżeli false, to nie. (2) Jeżeli wyrażenie to ma wartość true, to wykonywana jest instrukcja_1 a jeżeli false, to instrukcja_2. 91 dr inż. P. Borowiecki (KAMS, WETI, PG) 24

Instrukcja warunkowa if Zarówno instrukcja_1 jak i instrukcja_2 mogą być prostymi pojedyńczymi instrukcjami albo blokami. if ( warunek ) instrukcja_1; else instrukcja_2; if ( warunek ) instrukcja_1; else instrukcja_2_1; instrukcja_2_2; //... 92 Instrukcja warunkowa if Instrukcje warunkowe można zagnieżdżać. if ( warunek_a ) if ( warunek_b ) instrukcja_1; else instrukcja_2_1; instrukcja_2_2; //... Słowo kluczowe else odnosi się zawsze do najbliższego poprzedzającego if, chyba że nawiasy klamrowe stanowią inaczej. 93 dr inż. P. Borowiecki (KAMS, WETI, PG) 25

Instrukcja warunkowa if Poprzednią konstrukcję można więc zapisać następująco. if ( warunek_a ) if ( warunek_b ) instrukcja_1; else instrukcja_2_1; instrukcja_2_2; //... Wcięcia ułatwiają interpretację struktury logicznej programu. 94 Instrukcja warunkowa if Przykład użycia nawiasów do zmiany priorytetu wiązania else. if ( warunek_a ) if ( warunek_b ) //... else instrukcja_2_1; instrukcja_2_2; //... 95 dr inż. P. Borowiecki (KAMS, WETI, PG) 26

// Obliczenie wartości funkcji f(x) w punkcie x. // f(x) = 1/(x^2 + 1), dla x <= 0 // f(x) = ln x, dla x > 0 // ---------------------------------------------------------------- #include <iostream> #include <iomanip> using namespace std; int main () double x, f; cout << "Podaj wartość x: "; cin >> x; if (x <= 0) f = 1./(x*x + 1); else f = log(x); cout << "Dla x = "; cout << setw(4); cout << setprecision(1); cout << x << " mamy f(x) = "; cout << setw(5); cout << f; return 0; Instrukcja warunkowa if // funkcje formatowania strumieni we/wy Podaj wartość x: -2 Dla x = -2 mamy f(x) = 0.2 96 Instrukcja warunkowa if // -------------------------------------------------------------- // Wyznaczenie największej spośród trzech danych liczb // Wejście: a, b, c różne liczby. Wyjście: maxa,b,c // -------------------------------------------------------------- #include <iostream> using namespace std; int main () double a, b, c; cout << "Podaj liczby a, b, c: "; cin >> a >> b >> c; if(a>b) if(a>c) cout<<"najwieksza liczba to " << a << endl; else cout<<"najwieksza liczba to " << c << endl; else if(b>c) cout<<"najwieksza liczba to " << b << endl; else cout<<"najwieksza liczba to " << c << endl; system("pause"); return 0; 97 dr inż. P. Borowiecki (KAMS, WETI, PG) 27

Instrukcja warunkowa if // ----------------------------------------------------------------- // Program oblicza stopień na podstawie liczby punktów // 0.. 49 pkt. 2 50.. 59 pkt. - 3 // 60.. 69 pkt. - 3.5 70.. 79 pkt. - 4 // 80.. 89 pkt. - 4.5 90..100 pkt. - 5 // ---------------------------------------------------------------- #include <iostream> #include <iomanip> using namespace std; int main () int lp; float stopien; cout << "Podaj liczbę punktów (0 <= lp <= 100): "; cin >> lp; if (lp <= 49) stopien = 2; else if (lp <= 59) stopien = 3; else if (lp <= 69) stopien = 3.5; else if (lp <= 79) stopien = 4; else if (lp <= 89) stopien = 4.5; else stopien = 5; cout << "Twoja ocena: " << stopien << endl; return 0; 98 // ----------------------------------------------------------------- // Program oblicza stopień na podstawie liczby punktów // 0.. 49 pkt. 2 50.. 59 pkt. - 3 // 60.. 69 pkt. - 3.5 70.. 79 pkt. - 4 // 80.. 89 pkt. - 4.5 90..100 pkt. - 5 // ---------------------------------------------------------------- #include <iostream> #include <iomanip> using namespace std; int main () int lp; float stopien; Instrukcja warunkowa if Dla ciągu if-else-if wielu programistów preferuje zapis bez wcięć cout << "Podaj liczbę punktów (0 <= lp <= 100): "; cin >> lp; if (lp <= 49) stopien = 2; else if (lp <= 59) stopien = 3; else if (lp <= 69) stopien = 3.5; else if (lp <= 79) stopien = 4; else if (lp <= 89) stopien = 4.5; else stopien = 5; cout << "Twoja ocena: " << stopien << endl; return 0; 99 dr inż. P. Borowiecki (KAMS, WETI, PG) 28

Instrukcja warunkowa switch switch (wyrażenie) case wart_1 : instr_1; break; case wart_2 : instr_2; break; case wart_n : instr_n; break; default : instr_(n+1); break; 100 Instrukcja switch obliczane jest wyrażenie umieszczone w nawiasach po słowie switch. jeżeli jego wartość odpowiada którejś z wartości podanej w jednej z etykiet case, wówczas wykonywane są instrukcje począwszy od tej etykiety. Wykonywanie ich kończy się po napotkaniu instrukcji break. Działanie instrukcji switch zostaje wówczas zakończone. jeżeli wartość wyrażenia nie zgadza się z żadną z wartości podanych w etykietach case, wówczas wykonywane są instrukcje umieszczone po etykiecie default. etykieta default może być umieszczona w dowolnym miejscu instrukcji switch, nawet na samym jej początku. Co więcej, etykiety default może nie być wcale. Wówczas, jeśli w zbiorze etykiet case nie ma żadnej etykiety równej wartości wyrażenia, efekt jest taki jakby instrukcja switch nie została wykonana. instrukcje występujące po etykiecie case nie muszą kończyć się instrukcją break. Jeśli jej nie umieścimy, to będą wykonywane instrukcje umieszczone pod następną etykietą case. 101 dr inż. P. Borowiecki (KAMS, WETI, PG) 29

Przykład Instrukcja switch // --------------------------------------------------------- // Program oblicza stopień na podstawie liczby otrzymanych // punktów. Kryteria: // 0.. 49 pkt. - 2 // 50.. 59 pkt. - 3 // 60.. 69 pkt. - 3.5 // 70.. 79 pkt. - 4 // 80.. 89 pkt. - 4.5 // 90..109 pkt. - 5 // -------------------------------------------------------- #include <iostream.h> #include <iomanip.h> int main () int lp; float stopien;... 102... cout << "Podaj liczbę punktów (0 <= lp <= 109): "; cin >> lp; lp = lp/10; Instrukcja switch switch (lp) case 5 : stopien = 3; break; case 6 : stopien = 3.5; break; case 7 : stopien = 4; break; case 8 : stopien = 4.5; break; case 9 : case 10 : stopien = 5; break; default : stopien = 2; break; cout << "Twoja ocena: " << setw(3) << setprecision(1) << stopien << endl; return 0; 103 dr inż. P. Borowiecki (KAMS, WETI, PG) 30

Wyrażenie warunkowe ( warunek )? wartość1 : wartość2 Jeżeli warunek jest spełniony, to wartością wyrażenia jest wartość1, w przeciwnym razie wartość2. ( i > 5)? 15 : 20 c = ( x > y )? 17 : 56; Przykład [ wyznaczenie największej spośród trzech liczb ]... cin >> a >> b >> c; int m = (a > b)? a : b; int max = (m > c)? m : c; cout << max;... 104 dr inż. P. Borowiecki (KAMS, WETI, PG) 31