Podstawy Programowania - Instytut Informatyki Teoretycznej i
Transkrypt
Podstawy Programowania - Instytut Informatyki Teoretycznej i
Podstawy Programowania dr Elżbieta Gawrońska [email protected] Instytut Informatyki Teoretycznej i Stosowanej dr Elżbieta Gawrońska (ICIS) Podstawy Programowania 11 1 / 18 Plan wykładu 1 Typ wyliczeniowy 2 Struktury jako składniki innych struktur 3 Zmienne typu strukturalnego jako argumenty funkcji 4 Przykład wykorzystania struktur i tablicy struktur Funkcja główna Definicje typów strukturalnych Definicja funkcji operujacych ˛ na strukturach dr Elżbieta Gawrońska (ICIS) Podstawy Programowania 11 2 / 18 Typ wyliczeniowy Typ wyliczeniowy enum DniTygodnia {Pn, Wt, Sr, Cz, Pt, Sb, N}; cout << Sb << endl; // 5 lub enum DniTygodnia {Pn = 1, Wt, Sr, Cz, Pt, Sb, N}; cout << Sb << endl; // 6 dr Elżbieta Gawrońska (ICIS) Podstawy Programowania 11 3 / 18 Struktury jako składniki innych struktur Odwołanie do składnika struktury I składnikiem struktury może być także zmienna typu strukturalnego struct SSilnik{ float pojemnosc; int mom_obrotowy; }; struct SAuto{ int l_drzwi, rok_prod; char nazwa[64]; SSilnik silnik; }; dla zmiennej typu SAuto odwołanie do pojemności silnika: dr Elżbieta Gawrońska (ICIS) Podstawy Programowania 11 4 / 18 Struktury jako składniki innych struktur Odwołanie do składnika struktury II SAuto nissan; nissan.silnik.pojemosc = 1.6; wprowadzajac ˛ dodatkowo struktur˛e opisujac ˛ a˛ silnik SSilnik tworzy si˛e możliwość wykorzystania zmiennych tego typu w innych strukturach, nie tylko w SAuto, np.: struct SSamolot{ int l_miejsc, l_silnikow; float ladownosc; SSilnik silnik; }; dr Elżbieta Gawrońska (ICIS) Podstawy Programowania 11 5 / 18 Struktury jako składniki innych struktur Odwołanie do składnika struktury III struct SMotocykl{ int masa, rozm_kol; float osiagi; SSilnik * silnik; }; dr Elżbieta Gawrońska (ICIS) Podstawy Programowania 11 6 / 18 Zmienne typu strukturalnego jako argumenty funkcji Przesyłanie zmiennych typu strukturalnego do funkcji I podobnie jak zwykłe zmienne, zmienne typu strukturalnego można przesłać do funkcji na trzy sposoby: przez wartość (funkcja tworzy kopi˛e parametru aktualnego – UWAGA!): void fun(SAuto auto); przez wskaźnik (funkcja ma dost˛ep do oryginalnego parametru aktualnego): void fun_w(SAuto * auto); przez referencj˛e (funkcja ma dost˛ep do oryginalnego parametru aktualnego): void fun_r(SAuto & auto); tworzenie kopii zmiennych typu strukturalnego o dużym rozmiarze w funkcjach, może powodować znaczny spadek wydajności programu przy wielokrotnym wywoływaniu takich funkcji stosuje si˛e wtedy przesłanie zmiennych typu strukturalnego do funkcji poprzez referencj˛e dr Elżbieta Gawrońska (ICIS) Podstawy Programowania 11 7 / 18 Zmienne typu strukturalnego jako argumenty funkcji Przesyłanie zmiennych typu strukturalnego do funkcji II funkcja odbierajaca ˛ zmienna˛ przez referencj˛e ma dost˛ep do oryginału (parametru aktualnego) i może go modyfikować aby zablokować możliwość modyfikacji parametru aktualnego należy w funkcji odebrać go poprzez referencj˛e do stałej: void fun_r(const SAuto & auto); dr Elżbieta Gawrońska (ICIS) Podstawy Programowania 11 8 / 18 Przykład wykorzystania struktur i tablicy struktur Treść zadania Zaprojektować i zaimplementować funkcje: inicjalizujace ˛ wartościami poczatkowymi ˛ składowe struktury opisujacej ˛ silnik, auto i komis samochodowy wyświetaljace ˛ zawartość struktury SSilnik, SAuto i SKomis W celu rozwiazania ˛ zadania utworzyć struktury opisujace: ˛ SSilnik poprzez jego pojemność, moc i rodzaj, SAuto poprzez nap˛ed, rok produkcji, model, kolor i silnik, SKomis poprzez liczb˛e samochodów, adres i spis samochodów. Zdefiniowane funkcje przetestować podanym poniżej ciagiem ˛ instrukcji (funkcja main) dr Elżbieta Gawrońska (ICIS) Podstawy Programowania 11 9 / 18 Przykład wykorzystania struktur i tablicy struktur Funkcja główna Definicja funkcji main przykładowy kod źródłowy: SSilnik SSilnik SSilnik SSilnik SSilnik sil1 sil2 sil3 sil4 sil5 = = = = = stworz_silnik ( 1 . 6 stworz_silnik ( 1 . 4 stworz_silnik ( 2 . 0 stworz_silnik ( 2 . 5 stworz_silnik ( 3 . 0 , , , , , 114 , 100 , 140 , 125 , 158 , benzyna ) ; benzyna ) ; benzyna ) ; diesel ) ; diesel ) ; SAuto ∗ samtab = new SAuto [ 6 ] ; samtab [ 0 ] = stworz_auto ( dwa_kola , 2 0 0 1 , Almera , " zielony " , sil2 ) ; samtab [ 1 ] = stworz_auto ( dwa_kola , 2 0 0 6 , Qashqai , " czerwony " , sil1 ) ; samtab [ 2 ] = stworz_auto ( dwa_kola , 2 0 0 3 , Primera , " srebrny " , sil3 ) ; samtab [ 3 ] = stworz_auto ( cztery_kola , 2 0 0 0 , Terrano , " czarny " , sil4 ) ; samtab [ 4 ] = stworz_auto ( cztery_kola , 2 0 0 4 , Patrol , " czarny " , sil5 ) ; SKomis kom = stworz_komis ( 5 , " Czestochowa , al . WP 42 " , samtab ) ; pokaz_komis ( kom ) ; delete [ ] samtab ; dr Elżbieta Gawrońska (ICIS) Podstawy Programowania 11 10 / 18 Przykład wykorzystania struktur i tablicy struktur Definicje typów strukturalnych Definicja nowego typu (1) wyliczeniowego przykładowy kod źródłowy: enum r_silnika { diesel , benzyna } ; enum r_modelu { Qashqai , Almera , Primera , Terrano , Patrol } ; enum r_napedu { dwa_kola , cztery_kola } ; strukturalnego opisujacego ˛ silnik przykładowy kod źródłowy: struct SSilnik { float pojemnosc ; int moc ; r_silnika rodzaj ; }; dr Elżbieta Gawrońska (ICIS) Podstawy Programowania 11 11 / 18 Przykład wykorzystania struktur i tablicy struktur Definicje typów strukturalnych Definicja nowego typu strukturalnego (2) opisujacego ˛ auto przykładowy kod źródłowy: struct SAuto { r_napedu naped ; int rok_prod ; r_modelu model ; string kolor ; SSilnik silnik ; }; opisujacego ˛ komis samochodowy przykładowy kod źródłowy: struct SKomis { int l_egz ; string adres ; SAuto ∗ samochod ; }; dr Elżbieta Gawrońska (ICIS) Podstawy Programowania 11 12 / 18 Przykład wykorzystania struktur i tablicy struktur Definicja funkcji operujacych ˛ na strukturach Definicja funkcji tworzacej ˛ silnik inicjalizujacej ˛ wartościami poczatkowymi ˛ składowe struktury SSilnik przykładowy kod źródłowy: SSilnik stworz_silnik ( float poj , int m , r_silnika rodz ) { SSilnik silnik = { poj , m , rodz } ; /∗ lub tak : SSilnik silnik ; s i l n i k . pojemnosc = poj ; s i l n i k . moc = m; s i l n i k . rodzaj = rodz ; ∗/ return silnik ; } dr Elżbieta Gawrońska (ICIS) Podstawy Programowania 11 13 / 18 Przykład wykorzystania struktur i tablicy struktur Definicja funkcji operujacych ˛ na strukturach Definicja funkcji tworzacej ˛ auto inicjalizujacej ˛ wartościami poczatkowymi ˛ składowe struktury SAuto przykładowy kod źródłowy: SAuto stworz_auto ( r_napedu nap , int rok , r_modelu mod , string kol , const SSilnik& silnik ) { SAuto samochod = { nap , rok , mod , kol , silnik } ; /∗ lub tak : SAuto samochod ; samochod . n a p e d = nap ; samochod . r o k _ p r o d = r o k ; samochod . model = mod ; samochod . k o l o r = k o l ; samochod . s i l n i k = s i l n i k ; ∗ / return samochod ; } dr Elżbieta Gawrońska (ICIS) Podstawy Programowania 11 14 / 18 Przykład wykorzystania struktur i tablicy struktur Definicja funkcji operujacych ˛ na strukturach Definicja funkcji tworzacej ˛ komis inicjalizujacej ˛ wartościami poczatkowymi ˛ składowe struktury SKomis przykładowy kod źródłowy: SKomis stworz_komis ( int l_egz , string adr , SAuto ∗ samochod ) { SKomis komis = { l_egz , adr , samochod } ; /∗ lub tak : komis . l _ e g z = l _ e g z ; komis . a d r e s = a d r ; komis . samochod = samochod ; ∗ / return komis ; } dr Elżbieta Gawrońska (ICIS) Podstawy Programowania 11 15 / 18 Przykład wykorzystania struktur i tablicy struktur Definicja funkcji operujacych ˛ na strukturach Definicja funkcji wyświetlajacej ˛ silnik pokazujacej ˛ wartości składowych struktury SSilnik przykładowy kod źródłowy: void pokaz_silnik ( const SSilnik & silnik ) { cout << "\ tpojemnosc : " <<silnik . pojemnosc ; cout << "\ tmoc : " << silnik . moc ; cout << "\ trodzaj : " << silnik . rodzaj << endl ; } dr Elżbieta Gawrońska (ICIS) Podstawy Programowania 11 16 / 18 Przykład wykorzystania struktur i tablicy struktur Definicja funkcji operujacych ˛ na strukturach Definicja funkcji wyświetlajacej ˛ auto pokazujacej ˛ wartości składowych struktury SAuto przykładowy kod źródłowy: void pokaz_auto ( const SAuto & samochod ) { cout << " Naped : " << samochod . naped ; cout << "\ trok prod .: " << samochod . rok_prod ; cout << "\ tmodel : " << samochod . model ; pokaz_silnik ( samochod . silnik ) ; } dr Elżbieta Gawrońska (ICIS) Podstawy Programowania 11 17 / 18 Przykład wykorzystania struktur i tablicy struktur Definicja funkcji operujacych ˛ na strukturach Definicja funkcji wyświetlajacej ˛ komis pokazujacej ˛ wartości składowych struktury SKomis przykładowy kod źródłowy: void pokaz_komis ( const SKomis & komis ) { cout << " Liczba egzemplarzy : " << komis . l_egz ; cout << "\ tadres : " << komis . adres << endl ; for ( int i = 0 ; i < komis . l_egz ; ++i ) // p o k a z _ a u t o ( ∗ ( komis . samochod + i ) ) ; pokaz_auto ( komis . samochod [ i ] ) ; } dr Elżbieta Gawrońska (ICIS) Podstawy Programowania 11 18 / 18