Programowanie w C++ Wykład 2 Katarzyna Grzelak 4 marca 2019 K.Grzelak (Wykład 1) Programowanie w C++ 1 / 44
Na poprzednim wykładzie podstawy C++ Każdy program w C++ musi mieć funkcję o nazwie main Wcięcia w kodzie nie sa konieczne, ale bardzo poprawiaja czytelność kodu Polecenia sa grupowane za pomoca nawiasów klamrowych Polecenia sa zakończone średnikami Każda użyta zmienna musi zostać wcześniej zadeklarowana Kompilacja kod źródłowy jest tłumaczony na kod maszynowy. K.Grzelak (Wykład 1) Programowanie w C++ 2 / 44
Na poprzednim wykładzie struktura pierwszego programu w C++ #include<iostream> using namespace std; int main(){ cout << "Witam" << endl; } return 0; K.Grzelak (Wykład 1) Programowanie w C++ 3 / 44
Reprezentacje liczb w komputerze K.Grzelak (Wykład 1) Programowanie w C++ 4 / 44
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++ 5 / 44
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++ 6 / 44
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++ 7 / 44
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++ 8 / 44 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++ 9 / 44
Liczby naturalne Ograniczenia Nie można zapisać dowolnie dużej liczby Nie wszystkie działania wykonalne K.Grzelak (Wykład 1) Programowanie w C++ 10 / 44
Jak reprezentować liczby ujemne? K.Grzelak (Wykład 1) Programowanie w C++ 11 / 44
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++ 12 / 44
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++ 13 / 44
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++ 14 / 44
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++ 15 / 44
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++ 16 / 44
Liczby rzeczywiste Ograniczenia Nie można zapisać dowolnie dużej liczby Nie wszystkie działania wykonalne Zaokraglenia przybliżenia Błędy zaokragleń się kumuluja ma znaczenie czy algorytmy sa szybkie i efektywne, czy nie. K.Grzelak (Wykład 1) Programowanie w C++ 17 / 44
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++ 18 / 44
Typy K.Grzelak (Wykład 1) Programowanie w C++ 19 / 44
W C++ każda użyta zmienna musi zostać wcześniej zadeklarowana. K.Grzelak (Wykład 1) Programowanie w C++ 20 / 44
Przykłady int a; double liczba; char znak; bool flaga; Rezerwacja pamięci W momencie deklaracji j.w. zachodzi rezerwacja pamięci na obiekt danego typu. K.Grzelak (Wykład 1) Programowanie w C++ 21 / 44
Przykłady cd int a; obiekt typu integer (liczba całkowita) double liczba; obiekt typu double float (liczba rzeczywista o zwiększonej precyzji) K.Grzelak (Wykład 1) Programowanie w C++ 22 / 44
Przykłady cd char znak; obiekt typu character (pojedynczy znak) bool flaga; obiekt typu boolean (zmienna logiczna) K.Grzelak (Wykład 1) Programowanie w C++ 23 / 44
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++ 24 / 44
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++ 25 / 44
Przykłady int liczba; liczba=15; (zapis dziesiatkowy) liczba=0xf; (zapis szesnastkowy) liczba=017; (zapis ósemkowy) K.Grzelak (Wykład 1) Programowanie w C++ 26 / 44
char litera= b ; char l= \n ; char tab= \t ; K.Grzelak (Wykład 1) Programowanie w C++ 27 / 44
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++ 28 / 44
Tablica znaków ASCII K.Grzelak (Wykład 1) Programowanie w C++ 29 / 44
Napisy w C++ Typ string - pierwsza wzmianka string napis="witam"; To nie jest jeden z typów wbudowanych w podstawowa strukturę języka 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++ 30 / 44
Operatory K.Grzelak (Wykład 1) Programowanie w C++ 31 / 44
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++ 32 / 44
Instrukcje sterujace K.Grzelak (Wykład 1) Programowanie w C++ 33 / 44
Instrukcje warunkowe if (warunek) { } K.Grzelak (Wykład 1) Programowanie w C++ 34 / 44
Najprostsza instrukcja warunkowa Przykład... if(kilometry>100) { cout «Dojechalismy do celu «endl; } K.Grzelak (Wykład 1) Programowanie w C++ 35 / 44
Instrukcje warunkowe if (warunek1) { } else if (warunek2) { } else { } K.Grzelak (Wykład 1) Programowanie w C++ 36 / 44
Pętla for Pętla for ogólnie for(instrukcja_poczatkowa; warunek_końcowy; instrukcja_kroku){ } K.Grzelak (Wykład 1) Programowanie w C++ 37 / 44
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++ 38 / 44
Pętla while Pętla while dopóki warunek jest spełniony wykonuj while (warunek) { } K.Grzelak (Wykład 1) Programowanie w C++ 39 / 44
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++ 40 / 44
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++ 41 / 44
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++ 42 / 44
Jeszcze o pętlach Natychmiastowe przerwanie pętli: break; Przejście do następnej iteracji: continue; K.Grzelak (Wykład 1) Programowanie w C++ 42 / 44
Jak nie pisać programów K.Grzelak (Wykład 1) Programowanie w C++ 43 / 44
#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++ 44 / 44
Jak pisać programy K.Grzelak (Wykład 1) Programowanie w C++ 44 / 44
// 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++ 44 / 44