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