1 / 23

Podstawy programowania

Zachodniopomorska Szkoła Biznesu. Podstawy programowania. Wykład 6: Struktury. Złożone projekty. Struktura (rekord). Często w programie buduje się zestaw danych opisujących pewien obiekt za pomocą zbioru zmiennych o zróżnicowanych typach.

shira
Download Presentation

Podstawy programowania

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Zachodniopomorska Szkoła Biznesu Podstawy programowania Wykład 6: Struktury. Złożone projekty

  2. Struktura (rekord) • Często w programie buduje się zestaw danych opisujących pewien obiekt za pomocą zbioru zmiennych o zróżnicowanych typach. • Przydatne jest utworzenie złożonego typu danych grupującego wszystkie informacje o takim obiekcie • Typ taki nazywa się zwykle rekordem, choć w C++ mówi się raczej o strukturze ze względu na stosowane do jej definicji słowo kluczowe struct. Każdą z danych wchodzących w skład rekordu nazywa się polem • Rekord jest jednym z podstawowych elementów, z jakich złożona jest większość współczesnych baz danych Rekord pole 1 pole 2 pole 3 Podstawy programowania - Struktury. Złożone projekty

  3. Deklaracja zmiennej - rekordu • Składnia: struct{ deklaracje zmiennych - pól ...} nazwa_zmiennej_rekordowej; • Przykład: struct {char nazwisko[20]; long telefon; } kontakt; • Inicjalizacja: struct {char nazwisko[20];long telefon;} kontakt = {"Kowalski", 601111111}; zmienna: kontakt pole: nazwisko pole: telefon Podstawy programowania - Struktury. Złożone projekty

  4. Deklaracja typu - rekordu • Składnia: struct nazwa_struktury{ deklaracje zmiennych - pól ...}; • Przykład: struct Kontakt{ char nazwisko[20]; long telefon;}; struct Kontakt kolega; // Zmienne - rekordyKontakt kolezanka; // można pominąć 'struct'Kontakt policja = { "Numer alarmowy", 112 }; Podstawy programowania - Struktury. Złożone projekty

  5. Deklaracja typu i zmiennej naraz • Składnia: struct nazwa_struktury{ deklaracje zmiennych - pól ...} nazwy_zmiennych; • Przykład: struct Kontakt{ char nazwisko[20]; long telefon; } kolega1, kolega2; Kontakt k; // Użycie nowego typu Podstawy programowania - Struktury. Złożone projekty

  6. Korzystanie z rekordu • Każde pole rekordu jest osobną zmienną, do której dostęp uzyskuje się poprzez: nazwę zmiennej rekordowej, operator .oraz nazwę pola • Do zmiennej rekordowej jako całości można użyć operatora przypisania (=) oraz porównania (==,!=) wobec wartości, która ma typ rekordowy o tej samej strukturze • Przypisanie powoduje skopiowanie wszystkich pól z rekordu po prawej stronie znaku = • Rekordy uznaje się za równe (==) jeżeli wszystkie ich pola są równe. • Rekordy są różne (!=) jeżeli różnią się co najmniej jednym polem Podstawy programowania - Struktury. Złożone projekty

  7. Przykład użycia rekordu struct Zespolona // liczba zespolona{ float Re, Im; }; // dwa pola naraz Zespolona z1,z2 = {1,2}; // z2= 1 + 2i z1.Re=5;z1.Im=-1' // z1= 5-i Zespolona suma;suma.Re = z1.Re + z2.Re;suma.Im = z1.Im + z2.Im; z2=z1; // przypisanie if (z1==z2) // porównanie cout << "Liczby jednakowe" << endl Podstawy programowania - Struktury. Złożone projekty

  8. Dostęp do rekordu przez wskaźnik • Dla typu rekordowego można utworzyć odpowiedni wskaźnik służący do pokazywania na takie rekordy • Dostęp do pól w zmiennej pokazywanej przez wskaźnik odbywa się z użyciem operatora -> • Przykład:struct Zesp { float Re, Im; }; Zesp z1,z2; Zesp *wsk; // deklaracja wskaźnika wsk=&z1; // 'wsk' pokazuje na 'z1' wsk -> Re= 0; // dostęp do pólwsk -> Im= 1;(*wsk).Re=0; // można też tak ale po co?(*wsk).Im=1; z2= *wsk; // pobranie wartości spod wskaźnikawsk=&z2 // teraz 'wsk' pokazuje na 'z2' Podstawy programowania - Struktury. Złożone projekty

  9. Wskaźnik do rekordu jako parametr • Często podczas przekazywania do i z funkcji danych w postaci rekordu stosuje się wskaźnik • Znacznie przyspiesza to działanie programu, ponieważ do funkcji przesyłany jest tylko adres zamiast całego rekordu • Przykład:void wstawzero(Zesp *wsk){ wsk->Re=0; // funkcja wypełnia rekord wsk->Im=0; // wskazany przez 'wsk'}void main(){ Zesp z; wstawzero(&z);} Podstawy programowania - Struktury. Złożone projekty

  10. Tablica rekordów • Dla typu rekordowego można utworzyć tablicę • Dostęp do konkretnego pola wymaga wtedy podania: nazwy tablicy, indeksu oraz nazwy pola. • Przykład:struct Grupa // deklaracja struktury{ int numer; float srednia }; Grupa grupy[3];// tablica rekordów grupy[0].numer=11;grupy[1].numer=21;grupy[2].numer=41;for (i=0; i<3; i++)grupy[i].srednia=5.0;Przykład: STUDENT.CPP Podstawy programowania - Struktury. Złożone projekty

  11. Pola bitowe • Pola bitowe pomagają oszczędzać pamięć • Są również przydatne w komunikacji ze sprzętem • Jest to rodzaj pola w strukturze, który pozwala zapisać informację na małej grupie bitów • Każde pole bitowe musi być zmienną całkowitoliczbową • Przykład:struct pogoda{ int deszcz:1; int wiatr :1; int slonce:1; int temp :2; // załóżmy, że są 4 przedziały}; // razem 5 bitów zamiast 16 Podstawy programowania - Struktury. Złożone projekty

  12. Unie • Unie tworzy się dla oszczędności miejsca w pamięci. Jest to kontener, w którym można zapisać zmienne o różnych typach, przy każda z nich zapisywana jest w tym samym miejscu niszcząc poprzednią wartość • Unia ma rozmiar równy rozmiarowi największego z typów składowych • Na programiście spoczywa obowiązek pamiętania jakiego typu wartość zapisana była ostatnio • Przykład:union intfloat{ int calkowita; float rzeczywista; }; intfloat unia;unia.calkowita=5;unia.rzeczywista=4.5; // calkowita jest zniszczona!cout << unia.calkowita << endl; // to nie będzie 5! Podstawy programowania - Struktury. Złożone projekty

  13. Parametry funkcji main • Wiele programów pozwala użytkownikowi podać parametry wywołania, np. w linii komend lub we właściwościach skrótu • W programie w C++ można te parametry odczytać definiując parametry wywołania dla funkcji main • Zakłada się, że cały tekst wywołania programu podzielony jest na części oddzielone spacjami • Pierwszy parametr (int argc) podaje liczbę takich części łącznie z samą nazwą programu • Drugi z parametrów (char *argv[]) jest tablicą stringów zawierającą poszczególne części • Przykład:void main(int argc, char *argv[]) { for (int i=0; i<argc; i++) cout << argv[i] << endl; // wypisanie param.} Podstawy programowania - Struktury. Złożone projekty

  14. Projekty (1) • Język C++ umożliwia budowę programu złożonego z wielu osobnych plików CPP • Pozwala to bardziej efektywnie zarządzać kodem źródłowym oraz skrócić czas kompilacji • Zazwyczaj podział kodu na części, tzw. moduły, odbywa się na zasadzie funkcjonalnej: fragmenty dotyczące określonej dziedziny umieszczane są w osobnym pliku • Integrację plików zapewnia system SDK dzięki tzw. projektowi, do którego należy dodać wszystkie moduły, z których złożony jest program • System SDK sam dba o to by skompilować te moduły, które uległy zmianom od ostatniej kompilacji, a następnie dokonuje ich konsolidacji • W przypadku kompilacji z linii komend - budowy programu dokonuje program make w oparciu o plik makefile Podstawy programowania - Struktury. Złożone projekty

  15. Projekty (2) • Kompilacja każdego z modułów odbywa się niezależnie • W przypadku, gdy moduł korzysta ze zmiennych lub funkcji zdefiniowanych w innym module, należy zamieścić w nim odpowiednią deklarację • Zazwyczaj dokonuje się tego poprzez napisanie i włączenie odpowiedniego pliku nagłówkowego .H • Użycie funkcji z drugiego modułu wymaga włączenia jej prototypu (nagłówka) • Użycie zmiennej zdefiniowanej w innym module wymaga umieszczenia jej deklaracji z użyciem słowa extern • Przykład:void funkcja (int param); // prototypextern int zmienna; // zmienna zewnętrzna Podstawy programowania - Struktury. Złożone projekty

  16. Przykład projektu - 2 moduły MAIN.CPP: #include <iostream.h> void funkcja(); extern int zmienna; int globalna; void main() { cout << "Main.cpp, ";cout << "main().\n";funkcja();cout << zmienna; // 10 } MODUL.CPP: #include <iostream.h> extern int globalna; void funkcja() { cout << "Modul.cpp, ";cout << "funkcja().\n"; zmienna=10; } Podstawy programowania - Struktury. Złożone projekty

  17. Przykład - 2 moduły i zbiór .H MAIN.CPP: #include <iostream.h> #include "modul.h" void main() { cout << "Main.cpp, ";cout << "main().\n";funkcja();cout << zmienna; // 10 } MODUL.H: void funkcja(); extern int zmienna; MODUL.CPP: #include <iostream.h> void funkcja() { cout << "Modul.cpp, ";cout << "funkcja().\n"; zmienna=10; } Podstawy programowania - Struktury. Złożone projekty

  18. Wielokrotna inkluzja • Czasem zdarza się, że plik nagłówkowy jest włączany do pewnego modułu kilkakrotnie: raz bezpośrednio oraz dodatkowo pośrednio przez inne pliki nagłówkowe • Niepotrzebnie wydłuża to kompilację i może spowodować błąd powielenia tej samej deklaracji, np. zmiennej globalnej. • Zwykle stosuje się w tym celu zabezpieczenie w postaci kompilacji warunkowej: #ifndef NAZWA_H // kompilacja warunkowa #define NAZWA_H // definicja stałej ... (treść zbioru nagłówkowego) ...#endif // koniec kompilacji warunkowej Podstawy programowania - Struktury. Złożone projekty

  19. Wielokrotna inkluzja - przykład MAIN.CPP: #include "punkt.h" #include "wektor.h" #include "trojkat.h" MAIN.CPP po inkluzjach: (deklaracje - punkt) (deklaracje - punkt) (deklaracje - wektor) (deklaracje - punkt) (deklaracje - trójkąt) PUNKT.H: (deklaracje - punkt) TROJKAT.H: #include "punkt.h" (deklaracje - trójkąt) WEKTOR.H: #include "punkt.h" (deklaracje - wektor) Podstawy programowania - Struktury. Złożone projekty

  20. Wielokrotna inkluzja - rozwiązanie MAIN.CPP: #include "punkt.h" #include "wektor.h" #include "trojkat.h" MAIN.CPP po inkluzjach: #ifndef PUNKT_H // prawda #define PUNKT_H (deklaracje - punkt) #endif #ifndef PUNKT_H // fałsz #define PUNKT_H // pominięte (deklaracje - punkt) #endif (deklaracje - wektor) #ifndef PUNKT_H #define PUNKT_H // pominięte (deklaracje - punkt) #endif (deklaracje - trójkąt) PUNKT.H: #ifndef PUNKT_H #define PUNKT_H (deklaracje - punkt) #endif WEKTOR.H: #include "punkt.h" (deklaracje - wektor) TROJKAT.H: #include "punkt.h" (deklaracje - trójkąt) Podstawy programowania - Struktury. Złożone projekty

  21. Modyfikatory typów (1) • Przed deklaracją zmiennej lub funkcji może stać kilka możliwych modyfikatorów, mogących wpływać na znaczenie deklaracji. Są to: • extern oznacza deklarację symbolu zdefiniowanego na zewnątrz, domyślne dla prototypu funkcji • auto oznacza utworzenie zmiennej nietrwałej na stosie, domyślne dla zmiennych wewnątrz funkcji. Dla globalnych - niedostępne. • static oznacza utworzenie zmiennej w pamięci, czas życia równy czasowi działania programu, domyślne dla zmiennych globalnych. Użyte wewnątrz funkcji skutkuje tym, że przy kolejnych wywołaniach zmienna pamięta poprzednią wartość. • const oznacza zmienną, której wartości nie można zmieniać, można nadać ją wyłącznie przy inicjalizacji. Użyte w odniesieniu do parametru funkcji - informuje, że funkcja nie może zmieniać wartości tej zmiennej Podstawy programowania - Struktury. Złożone projekty

  22. Modyfikatory typów (2) • typedef oznacza, że nie deklarujemy zmiennej ale nazwę nowego typu danych. Typu tego można potem użyć do tworzenia zmiennych. • volatile oznacza zmienną, której wartość może być zmieniana z zewnątrz programu, kompilator nie umieści jej w rejestrze procesora • register oznacza, że zmienna będzie tak często wykorzystywana, że chcemy aby kompilator przechowywał ją w rejestrze procesora • inline używa się dla deklaracji funkcji, oznacza sugestię aby przy każdym wywołaniu tej funkcji kompilator wklejał jej kod maszynowy w całości zamiast organizować skok do podprogramu. Ma to sens dla bardzo krótkich funkcji, działają wtedy szybciej Podstawy programowania - Struktury. Złożone projekty

  23. To już jest koniec++ Dziękuję za uwagę

More Related