Programowanie w C++ Wykład 5 Katarzyna Grzelak 16 kwietnia 2018 K.Grzelak (Wykład 1) Programowanie w C++ 1 / 27
Pojęcia z poprzednich wykładów Tablica to ciag obiektów tego samego typu, zajmujacy ciagły obszar pamięci. Wskaźnik to adres w pamięci gdzie znajduje się dany obiekt. K.Grzelak (Wykład 1) Programowanie w C++ 2 / 27
Pojęcia z poprzednich wykładów Klasyczne tablice: klasyczne tablice (lokalne) tworzone sa na stosie (stack); standard: na etapie kompilacji musi być znana długość tablicy; zakres ważnośći blok. Tablice dynamiczne: dynamiczne tablice tworzone za pomoca operatora new; tworzone sa na stogu (heap); na etapie kompilacji długość tablicy nie musi być znana; nie maja nazwy - dostęp za pomoca wskaźników; zakres ważności - od new do delete. K.Grzelak (Wykład 1) Programowanie w C++ 3 / 27
Pojęcia z poprzednich wykładów Przechowywanie ciagów znaków: sposób z języka C C-string tablica wypełniona znakami ze znakiem NULL na końcu; sposób z języka C++ obiekt z klasy string użycie analogiczne jak w przypadku podstawowych typów (int, double,... ). Argumenty funkcji main: albo brak argumentów albo dwa: int main(int argc,char* argv[]) => argumenty z linii wywołania zawsze przekazywane jako ciagi znaków (C-stringi). K.Grzelak (Wykład 1) Programowanie w C++ 4 / 27
Jeszcze o operatorach 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++ 5 / 27
Operatory przypisania = podstawienie(przypisanie) ++i oznacza i=i+1 i++ oznacza i=i+1 i oznacza i=i-1 i oznacza i=i-1 i+=5 oznacza i=i+5 i-=5 oznacza i=i-5 i*=5 oznacza i=i*5 i/=5 oznacza i=i/5 K.Grzelak (Wykład 1) Programowanie w C++ 6 / 27
++i vs i++ ++i vs i++ ++i najpierw zmienna jest zwiększana o 1, a potem wynik tej operacji staje się wartościa wyrażenia i++ stara wartość zmiennej staje się wartościa wyrażenia, a potem obiekt zwiększany jest o 1 K.Grzelak (Wykład 1) Programowanie w C++ 7 / 27
++i vs i++ Przykład 1 int a=15; if((a++)==15){ cout «OK «endl; } Czy OK wypisze się na ekranie? K.Grzelak (Wykład 1) Programowanie w C++ 8 / 27
++i vs i++ Przykład 2 int a=10,b=10; cout «++a= «++a «endl; cout «b++= «b++ «endl; cout «a= «a «endl; cout «b= «b «endl; Jakie liczby zostana wypisane na ekran? K.Grzelak (Wykład 1) Programowanie w C++ 9 / 27
Operator sizeof Ile miejsca w pamięci zajmuje dany obiekt? sizeof(nazwa_typu) lub sizeof(nazwa_obiektu) Wynikiem jest rozmiar obiektu w bajtach K.Grzelak (Wykład 1) Programowanie w C++ 10 / 27
Operator sizeof Przykłady cout «sizeof(int) «endl; cout «sizeof(double) «endl; int tab[8]; cout «sizeof(tab) «endl; K.Grzelak (Wykład 1) Programowanie w C++ 11 / 27
Operator sizeof Przykłady int tab[8]; cout «sizeof(tab)/sizeof(tab[0]) «endl; Jaka liczba zostanie wypisana na ekran? K.Grzelak (Wykład 1) Programowanie w C++ 12 / 27
Wyrażenie warunkowe warunek? wartość1 : wartość2 Przykład (n>5)? 100 : 200 Jeżeli n>5 to wyrażenie przyjmuje wartość 100. W przeciwnym wypadku przyjmuje wartość 200. K.Grzelak (Wykład 1) Programowanie w C++ 13 / 27
Przecinek Jeśli kilka wyrażeń jest oddzielonych przecinkiem, to całość to wyrażenie najbardziej z prawej. Przykład int a,b,c,d,e; (a=4,b=5,c=2*a,d=5+b,e=a+b+c+d); cout «e= «e «endl; Ile wynosi e? K.Grzelak (Wykład 1) Programowanie w C++ 14 / 27
Operatory rzutowania tradycyjna wersja Rzutowanie to jawna zmiana typu obiektu na inny. Np. double na int, int na float... Przykłady (double)liczba (int)znak K.Grzelak (Wykład 1) Programowanie w C++ 15 / 27
Operatory rzutowania tradycyjna wersja Przykład int n=100,np=0; for(int i=0; i<n; i++){ if(i%3==0){ np++; } } float r=(float)np/n; K.Grzelak (Wykład 1) Programowanie w C++ 16 / 27
Szukamy błędów K.Grzelak (Wykład 1) Programowanie w C++ 17 / 27
Zasada podstawowa Błędy poprawia się od pierwszego pokazywanego przez kompilator. K.Grzelak (Wykład 1) Programowanie w C++ 18 / 27
Przykład 1 Przerywanie pętli po wpisaniu N char warunek= T ; while(warunek= T ){ // Tutaj seria poleceń cout «Kontynuować?(T/N) «endl; cin» warunek; } Dlaczego nie można zakończyć pętli? K.Grzelak (Wykład 1) Programowanie w C++ 19 / 27
Przykład 2 - dlaczego program się nie kompiluje? K.Grzelak (Wykład 1) Programowanie w C++ 20 / 27
Przykład 2 - rozwiazanie 1 K.Grzelak (Wykład 1) Programowanie w C++ 21 / 27
Przykład 2 - rozwiazanie 2 K.Grzelak (Wykład 1) Programowanie w C++ 22 / 27
Przykład 3 #include<iostream> using namespace std; int main(){ int suma=0,i=0; for(i=0;i<=5;++i); { suma=suma+i; } cout «suma= «suma «endl; return 0; } Dlaczego suma nie jest równa 15? K.Grzelak (Wykład 1) Programowanie w C++ 23 / 27
Przykład 3 - rozwiazanie #include<iostream> using namespace std; int main(){ int suma=0; for(int i=0;i<=5;++i){ suma=suma+i; } cout «suma= «suma «endl; return 0; } Dodatkowo: najlepiej deklarować licznik pętli for we wnętrzu bloku pętli. K.Grzelak (Wykład 1) Programowanie w C++ 24 / 27
Przykład 4 #include<iostream> using namespace std; int main(){ const int n=5; double t[n]={1.5,5.6,7.1,15.4,12.1}; for(int i=1;i<=5;++i){ cout «t[i] «endl; } return 0; } Dlaczego nie wypisuje się prawdziwa zawartość tablicy? K.Grzelak (Wykład 1) Programowanie w C++ 25 / 27
Przykład 5 Dlaczego nie wypisuje się prawdziwa zawartość tablicy? K.Grzelak (Wykład 1) Programowanie w C++ 26 / 27
Zagadka int wynik=0,i=1; while(wynik+=(i++),i<6){} cout «wynik= «wynik «endl; K.Grzelak (Wykład 1) Programowanie w C++ 27 / 27