Programowanie w C++ Wykład 2 Katarzyna Grzelak 5 marca 2018 K.Grzelak (Wykład 1) Programowanie w C++ 1 / 41
Reprezentacje liczb w komputerze K.Grzelak (Wykład 1) Programowanie w C++ 2 / 41
Reprezentacje liczb w komputerze Wykorzystanie układu dwójkowego (binarnego) Dwa stany: sygnał i jego brak Bit [b] najmniejsza jednostka informacji ( 0 lub 1 ) Bajt [B] 8 bitów K.Grzelak (Wykład 1) Programowanie w C++ 3 / 41
Reprezentacje liczb w komputerze Poniższy układ bitów co to za liczba? 00101110 Odp: Zależy od reprezentacji. K.Grzelak (Wykład 1) Programowanie w C++ 4 / 41
Liczby naturalne Zapis dwójkowy m a j 2 j, a j {0, 1} j=0 Kolejne potęgi 2 7 2 6 2 5 2 4 2 3 2 2 2 1 2 0 128 64 32 16 8 4 2 1 K.Grzelak (Wykład 1) Programowanie w C++ 5 / 41
Kolejne liczby naturalne (m) 10 (m) 2 0 0 1 1 2 10 3 11 4 100 5 101 6 110 7 111. K.Grzelak.. (Wykład. 1).. Programowanie w C++ 6 / 41 System dziesiatkowy vs system dwójkowy
Liczby naturalne Zapis dwójkowy liczby naturalne Do zapisu liczb wybieramy n bitów Na n bitach można zapisać 2 n różnych liczb naturalnych, od 0 do 2 n 1 Dla n=8 (1 bajt) liczby od 0 do 255 Uzupełnianie z lewej strony zerami do n cyfr Przykład: Liczba 20 0 0 0 1 0 1 0 0 K.Grzelak (Wykład 1) Programowanie w C++ 7 / 41
Liczby naturalne Ograniczenia Nie można zapisać dowolnie dużej liczby Nie wszystkie działania wykonalne K.Grzelak (Wykład 1) Programowanie w C++ 8 / 41
Jak reprezentować liczby ujemne? K.Grzelak (Wykład 1) Programowanie w C++ 9 / 41
Liczby całkowite Najprostsza reprezentacja Jeden bit zarezerowany na znak Reszta bitów to moduł j.w. Np. 1 to 00000001; -1 to 10000001 Problem: dwie reprezentacje zera! K.Grzelak (Wykład 1) Programowanie w C++ 10 / 41
Liczby całkowite Najpowszechniej używana reprezentacja Kod uzupełnieniowy Najstarszy bit: 2 n 1, pozostałe bity standardowo Liczby z przedziału ( 2 n 1, 2 n 1 1) Wszystkie liczby - jednoznaczna reprezentacja K.Grzelak (Wykład 1) Programowanie w C++ 11 / 41
Kolejne liczby całkowite Kod uzupełnieniowy liczba bity liczba bity 0 00000000 0 00000000 1 00000001-1 11111111 2 00000010-2 11111110 3 00000011-3 11111101 4 00000100-4 11111100 5 00000101-5 11111011 6 00000110-6 11111010 7 00000111-7 11111001. K.Grzelak.. (Wykład 1)... Programowanie w C++ 12 / 41
Liczby rzeczywiste System zmiennopozycyjny Przykład: masa elektronu m e = 0.000000000000000000000000000000910938 kg = 9.10938 10 31 kg (= 0.510 MeV/c 2 ) K.Grzelak (Wykład 1) Programowanie w C++ 13 / 41
Liczby rzeczywiste System zmiennopozycyjny Cyfry znaczace mantysa (m); potęga cecha (c). Mantysa z określonego przedziału x = m2 c Uwaga nawet proste ułamki moga mieć nieskończone binarne rozwinięcie okresowe (np. 1/10) K.Grzelak (Wykład 1) Programowanie w C++ 14 / 41
Liczby rzeczywiste Ograniczenia Nie można zapisać dowolnie dużej liczby Nie wszystkie działania wykonalne Zaokraglenia przybliżenia Błędy zaokragleń się kumuluja lepsze szybkie i efektywne algorytmy. K.Grzelak (Wykład 1) Programowanie w C++ 15 / 41
Liczby rzeczywiste System zmiennopozycyjny x = m2 c Ile bitów na cechę, a ile na mantysę? Istnieja standardy Więcej bitów na mantysę większa dokładność Więcej bitów na cechę większe liczby K.Grzelak (Wykład 1) Programowanie w C++ 16 / 41
Typy K.Grzelak (Wykład 1) Programowanie w C++ 17 / 41
W C++ każda użyta nazwa zmiennej musi zostać wcześniej zadeklarowana. K.Grzelak (Wykład 1) Programowanie w C++ 18 / 41
Przykłady int a; double liczba; K.Grzelak (Wykład 1) Programowanie w C++ 19 / 41
Przykłady cd int a; obiekt typu integer (liczba całkowita) double liczba; obiekt typu double (liczba rzeczywista) Rezerwacja pamięci W momencie deklaracji j.w. zachodzi rezerwacja pamięci na obiekt danego typu. K.Grzelak (Wykład 1) Programowanie w C++ 20 / 41
Ile pamięci jest rezerwowane? Zależy od implementacji/kompilatora. Główne typy fundamentalne: Na komputerze primus w OKWF Typ bity bajty int 32 4 unsigned int 32 4 long int 64 8 float 32 4 double 64 8 long double 128 16 char 8 1 Funkcja sizeof ile pamięci zajmuje dany typ/obiekt (np. sizeof(int) ) K.Grzelak (Wykład 1) Programowanie w C++ 21 / 41
Przykłady Rezerwacja pamięci i inicjalizacja int a=5; double liczba=5.0; long int a=5l; float liczba2=5.0f; K.Grzelak (Wykład 1) Programowanie w C++ 22 / 41
Przykłady int liczba; liczba=15; (zapis dziesiatkowy) liczba=0xf; (zapis szesnastkowy) liczba=017; (zapis ósemkowy) K.Grzelak (Wykład 1) Programowanie w C++ 23 / 41
char litera= b ; char l= \n ; char tab= \t ; K.Grzelak (Wykład 1) Programowanie w C++ 24 / 41
Znaki Kod ASCII Znakom odpowiadaja liczby całkowite od 0 do 127 Znaki zwykłe i specjalne (np. spacja, nowa linia, tabulator) Rozszerzenia kodu ASCII, np. Utf8 (polskie litery!) K.Grzelak (Wykład 1) Programowanie w C++ 25 / 41
Tablica znaków ASCII K.Grzelak (Wykład 1) Programowanie w C++ 26 / 41
Napisy w C++ Biblioteczna klasa string string napis="witam"; Wymaga dodania pliku nagłówkowego #include<string> Nie występuje w języku C. Bardzo proste użycie, analogiczne do typów podstawowych. K.Grzelak (Wykład 1) Programowanie w C++ 27 / 41
Operatory K.Grzelak (Wykład 1) Programowanie w C++ 28 / 41
Podstawowe operatory +, -, \, * = podstawienie == porównanie!= nie równe <,>,<=, >= suma logiczna && iloczyn logiczny % reszta z dzielenia ++i,i++ zwiększenie o 1, to samo co i=i+1 K.Grzelak (Wykład 1) Programowanie w C++ 29 / 41
Instrukcje sterujace K.Grzelak (Wykład 1) Programowanie w C++ 30 / 41
Instrukcje warunkowe if (warunek) { } K.Grzelak (Wykład 1) Programowanie w C++ 31 / 41
Najprostsza instrukcja warunkowa Przykład... if(kilometry>100) { cout «Dojechalismy do celu «endl; } K.Grzelak (Wykład 1) Programowanie w C++ 32 / 41
Instrukcje warunkowe if (warunek1) { } else if (warunek2) { } else { } K.Grzelak (Wykład 1) Programowanie w C++ 33 / 41
Pętla for Pętla for ogólnie for(instrukcja_poczatkowa; warunek_końcowy; instrukcja_kroku){ } K.Grzelak (Wykład 1) Programowanie w C++ 34 / 41
Pętla for Przykład... for(int i=0; i<10; ++i) { cout «i= «i «endl; } i licznik pętli K.Grzelak (Wykład 1) Programowanie w C++ 35 / 41
Pętla while Pętla while dopóki warunek jest spełniony wykonuj while (warunek) { } K.Grzelak (Wykład 1) Programowanie w C++ 36 / 41
Pętla while Przykład... int suma=0; int j=1; while(j<=100){ suma=suma+j; j++; } K.Grzelak (Wykład 1) Programowanie w C++ 37 / 41
Pętla do while Pętla do while wykonuj dopóki warunek jest spełniony do { } while(warunek) ; Różnica pomiędzy do while a while W przypadku do while instrukcje wewnatrz pętli wykonaja się co najmniej raz. K.Grzelak (Wykład 1) Programowanie w C++ 38 / 41
Przykład pętli do while double wynik=0.; double skladnik=0; int i=1; do { skladnik=1.0/i/i; wynik=wynik+skladnik; i++; }while(skladnik>=1.0e-5); K.Grzelak (Wykład 1) Programowanie w C++ 39 / 41
Jeszcze o pętlach Natychmiastowe przerwanie pętli: break; Przejście do następnej iteracji: continue; K.Grzelak (Wykład 1) Programowanie w C++ 39 / 41
Jak nie pisać programów K.Grzelak (Wykład 1) Programowanie w C++ 40 / 41
#include<iostream> using namespace std; int main(){ int n; cout << "n=" << endl; cin >> n; int a=0; for(int i=1;i<=n;i=i+1) a=a+i; cout << a << endl; return 0; } K.Grzelak (Wykład 1) Programowanie w C++ 41 / 41
Jak pisać programy K.Grzelak (Wykład 1) Programowanie w C++ 41 / 41
// Sumowanie liczb naturalnych od 1 do n, // n podawane z klawiatury #include<iostream> using namespace std; int main(){ cout << "Sumujemy dodatnie liczby naturalne" << "od 1 do n" << endl; int n; cout << "Wpisz liczbe naturalna" << endl; cin >> n; int suma=0; for(int i=1;i<=n;i=i+1){ suma=suma+i; } cout << "Suma= " << suma << endl; return 0; } K.Grzelak (Wykład 1) Programowanie w C++ 41 / 41