510 likes | 955 Views
Programowanie C++. Funkcje. Funkcja. Funkcja jest to fragment programu, któremu przypisano nazwę. Funkcji możemy dodać argumenty, z jakimi ma być ona wykonana (jeżeli takie są potrzebne, bądź konieczne).
E N D
Programowanie C++ Funkcje.
Funkcja • Funkcja jest to fragment programu, któremu przypisano nazwę. • Funkcji możemy dodać argumenty, z jakimi ma być ona wykonana (jeżeli takie są potrzebne, bądź konieczne). • Funkcja może również zwracać wartość, gdy nie będzie zwracała wartości to będzie pełniła rolę procedury.
Budowa funkcji • typ nazwa(arg1 nazwa ,…, arg_n nazwa){returnwartosc;}
Przykłady funkcji • voidmoja_pierwsza_funkcja(){ //miejsce na kod funkcji} • intSumaDwochLiczb(intx,inty) { returnx+y; }
Funkcje przeciążone • W języku C++ możliwe jest utworzenie kilku różnych funkcji, które posiadają tę samą nazwę. • WAŻNE. Takie funkcje muszą różnić się od siebie ilością lub typem argumentów. Dzięki temu kompilator będzie wiedział dokładnie, którą funkcję należy wywołać. • Takie funkcje nazywamy przeciążonymi lub przeładowanymi.
Przykład funkcji przeciążonych • int iloraz(intx,int y) { return int(x/y); //uwaga rzutowanie } • float iloraz(floatx,float y) { return x/y; }
Programowanie C++ Funkcje rekurencyjne.
Rekurencja • Rekurencja polega na wywołaniu przez funkcję samej siebie. Algorytmy rekurencyjne wykonujemy bez użycia iteracji. • Zazwyczaj zadania rozwiązywane tą techniką są wolniejsze od iteracyjnego odpowiednika.
Silnia rekurencyjnie • double silnia(int n){ if (n==1) return 1; else return n*silnia(n-1); }
Programowanie C++ Tablice i wskaźniki.
Tablice • Tablica jest zbiorem określonych zmiennych w określonej ilości ułożonych (w większości implementacjach) obok siebie. • Takie zmienne określa jedna wspólna nazwa po której zapisujemy indeks elementu. • Tablica może być : • statyczna - której rozmiar jest stały i wiadomy już podczas kompilacji, • dynamiczna – której rozmiar determinuje ile pamięci jest alokowane podczas pracy programu.
Tablice statyczne • Tablice jednowymiarowe: • int tablica[5]; • tablica[0] = 1; //pierwszy element • tablica[4] = 4; //ostatni element • Tablice wielowymiarowe: • int tab[5][10]; • tab[1][2]=7;
Przykład - tworzenie i deklaracja tablicy • int tablica[]= {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}; • char tablica1[3][10]= { {'C','z','e','c','h','y'}, {'P','o','l','s','k','a'}, {'R','o','s','j','a'} };
Wskaźnik • Wskaźnik w C++ umożliwia nam pobieranie adresu pamięci wybranych zmiennych. • Wskaźnik zajmuje (zazwyczaj) 4 bajty bez względu na jaki typ danych wskazuje. Rozmiar wskaźnika może być jednak różny w zależności od użytego kompilatora . • Wskaźnik zwraca adres pierwszego bajta danych wybranej zmiennej. Aby pobrać adres dowolnej zmiennej wystarczy napisać: &nazwa_zmiennej.
Przykład • int liczba = 123; • int tablica[]={1,2,3,4,5,6,7,8,9,10}; • cout<<"Adresliczby="<<&liczba<<endl; • cout<<"Adrestablicy="<<&tablica<<endl;
Deklaracja zmiennej wskaźnikowej • Aby utworzyć zmienną wskaźnikową, to po typie zmiennej dopisujemy *(gwiazdkę). • Jeśli chcemy utworzyć wskaźnik, który ma wskazywać na liczbę typu int, zapis ten będzie wyglądał tak: int * liczba; • UWAGA! int * liczba, liczba1; //liczba1 – NIE!
Dygresja – liczby losowe • #include <cstdlib> • cout<<rand(); • cout<<rand()%10; //liczby z przedziału 0..9
Rodzaje sortowania • sortowanie przez wybór • sortowanie bąbelkowe • sortowanie szybkie
Programowanie C++ Zarządzanie pamięcią.
Ograniczony rozmiar danych • Klasyczna deklaracja tablicy nie daje możliwości zmiany jej rozmiaru. • Program posiadał określoną górną granicę pojemności danych. • Język C++ posiada dwa operatory służące do przydzielania i zwalniania pamięci: • new, • delete.
Dynamiczny przydział pamięci • Do przydzielania nowego bloku pamięci służy operator new. • Jego składnia wygląda następująco: wskaznik1=new typ_zmiennej;wskaznik2=new typ_zm[ilosc_elementów];
Zwalnianie pamięci • Aby zwolnić pamięć przydzieloną dynamicznie musimy użyć operatora delete. • Jeśli pamięć dla danych, na które wskazuje zmienna została przydzielona bez parametru określającego ilość elementów w tablicy, to piszemy: delete wskaznik1; • Jeśli natomiast przydzieliliśmy pamięć z użyciem parametru określającego ilość elementów tablicy to musimy poinformować operator delete o tym, że wskaźnik wskazywał na tablicę rekordów. Aby to zrobić dopisujemy zaraz za operatorem nawiasy kwadratowe []: delete[] wskaznik2;
Kopiowanie bloków pamięci • Aby skopiować blok pamięci posłużymy się pętlą lub gotową funkcją. for (int i=0; i<ilosc; i++) NoweMiejsce[i] = StareMiejsce[i]; • lub memcpy (NowyWskaźnik, StaryWskaźnik, ilość_elementów-liczba_bajtów);
Programowanie C++ Struktury, unie i pola bitowe.
Struktura • Strukturypozwalają na zorganizowanie danych w wygodny sposób.Wewnątrz struktury możesz zebrać kilka informacji o interesującym cię przedmiocie. • Przykłąd. W danych katalogowych biblioteki (kartotece) przechowuje się informacje o: autorze, tytule, wydawnictwie, roku wydania itp. • Struktury potrafią przechowywać różne typy danych. • Struktura jest najprostrzą postacią klasy.
Deklaracja struktury • structBiblioteka { • //opis struktury • string Autor; • stringTytul; • string Wydawnictwo; • intRokWydania; • };
Tworzenie obiektu struktury • Biblioteka Ksiazka1 = {"Prus","Lalka","PWN",1997}; • Biblioteka Ksiazka2 = {"Sienkiewicz","Krzyżacy","EXLEY",2001}; • Biblioteka Ksiazka3; • Ksiazka3.Autor="Sienkiewicz"; • Ksiazka3.Tytul="W pustyni i w puszczy"; • …
Tablice struktur i wskaźnik na strukturę • Biblioteka Podreczniki[10]; • Podrecznik[2].Tytul="Fizyka"; • Podrecznik[4].Wydawnictwo="WSiP"; • … • Biblioteka *Wskaznik=new Biblioteka; • …
Unia • Unia jest to rodzaj struktury odnoszący się do jednego miejsca w pamięci, które przeznaczone jest dla większej liczby obiektów różnego typu.
Deklaracja unii i zastosowanie unii • union nazwa_unii{ • float liczba1; • int liczba2; • }; • … • nazwa_uniamoja_unia; • moja_unia.liczba1=3.14; • …
Unia anonimowa • Unia anonimowa jest to unia bez nazwy. • Zatem nazwa zmiennej użytej w unii anonimowej musi być unikalna. • union { • char znak; • int liczba; • };
Pola bitowe • Pole bitowe deklaruje zmienną składową struktury jako zmienną typu całkowitego zajmującą określoną ilość bitów. • Pola bitowe można zastosować w celu optymalizacji (zmniejszenia) ilości zużycia pamięci. Jednak należy pamiętać, że czas dostępu do pola bitowego jest dłuższy od czasu dostępu do zmiennej całkowitej.
Przykaład pola bitowego • structData { • unsignedshortdzienTyg:3; • unsignedshortdzienMies:5; • unsignedshortmiesiac:4; • }; • Pole bitowedzienTyg pozwala zapamiętaććliczby od 0 do 7, ponieważ tyle można zapisać na trzech bitach. Pole bitowe dzienMiespozwala zapamiętać liczby od 0 do 31, natomiast pole miesiacliczby od 0 do 15.