C-struktury wykład. Dorota Pylak

Podobne dokumenty
C-struktury wykład. Dorota Pylak

Podstawy algorytmiki i programowania - wykład 4 C-struktury

Struktury Struktura polami struct struct struct struct

Podstawy algorytmiki i programowania - wykład 5 C-struktury cd.

Wstęp do informatyki- wykład 11 Funkcje

Wstęp do informatyki- wykład 9 Funkcje

Podstawy programowania skrót z wykładów:

Wstęp do programowania

Podstawy języka C++ Maciej Trzebiński. Instytut Fizyki Jądrowej Polskiej Akademii Nauk. Praktyki studenckie na LHC IVedycja,2016r.

Do czego służą klasy?

METODY I JĘZYKI PROGRAMOWANIA PROGRAMOWANIE STRUKTURALNE. Wykład 02

Programowanie - wykład 4

Język C zajęcia nr 12. Struktury i unie

Podstawy programowania. Wykład 6 Złożone typy danych: struktury, unie. Krzysztof Banaś Podstawy programowania 1

KLASY cz.1. Dorota Pylak

Podstawy Programowania Podstawowa składnia języka C++

typ y y p y z łoż o on o e n - tab a lice c e w iel e owym m ar a o r we, e stru r kt k ury

Podstawowe elementy proceduralne w C++ Program i wyjście. Zmienne i arytmetyka. Wskaźniki i tablice. Testy i pętle. Funkcje.

Wstęp do programowania

JĘZYKI PROGRAMOWANIA Z PROGRAMOWANIEM OBIEKTOWYM. Wykład 5

Do czego służą klasy?

tablica: dane_liczbowe

Programowanie C++ Wykład 2 - podstawy języka C++ dr inż. Jakub Możaryn. Warszawa, Instytut Automatyki i Robotyki

TEMAT : KLASY DZIEDZICZENIE

Zajęcia nr 2 Programowanie strukturalne. dr inż. Łukasz Graczykowski mgr inż. Leszek Kosarzewski Wydział Fizyki Politechniki Warszawskiej

Operacje wejścia/wyjścia odsłona pierwsza

main( ) main( void ) main( int argc, char argv[ ] ) int MAX ( int liczba_1, liczba_2, liczba_3 ) źle!

Podstawy programowania. Wykład: 12. Struktury, unie, pola bitowe. dr Artur Bartoszewski -Podstawy programowania, sem 1 - WYKŁAD

Wstęp do informatyki- wykład 9 Pętla while, do while,for -pętla w pętli- przykłady Funkcje

JĘZYKI PROGRAMOWANIA Z PROGRAMOWANIEM OBIEKTOWYM. Wykład 6

Podstawy języka C++ Maciej Trzebiński. Praktyki studenckie na LHC IFJ PAN. Instytut Fizyki Jądrowej Polskiej Akademii Nauk. M. Trzebiński C++ 1/16

Informatyka I. Klasy i obiekty. Podstawy programowania obiektowego. dr inż. Andrzej Czerepicki. Politechnika Warszawska Wydział Transportu 2018

ISO/ANSI C - funkcje. Funkcje. ISO/ANSI C - funkcje. ISO/ANSI C - funkcje. ISO/ANSI C - funkcje. ISO/ANSI C - funkcje

Program 6. Program wykorzystujący strukturę osoba o polach: imię, nazwisko, wiek. W programie wykorzystane są dwie funkcje:

IMIĘ i NAZWISKO: Pytania i (przykładowe) Odpowiedzi

1 Podstawy c++ w pigułce.

Strona główna. Strona tytułowa. Programowanie. Spis treści. Sobera Jolanta Strona 1 z 26. Powrót. Full Screen. Zamknij.

Tablice i struktury. czyli złożone typy danych. Programowanie Proceduralne 1

Wykład 4: Klasy i Metody

Podstawy algorytmiki i programowania - wykład 2 Tablice dwuwymiarowe cd Funkcje rekurencyjne

Informacje wstępne #include <nazwa> - derektywa procesora umożliwiająca włączenie do programu pliku o podanej nazwie. Typy danych: char, signed char

1. Wartość, jaką odczytuje się z obszaru przydzielonego obiektowi to: a) I - wartość b) definicja obiektu c) typ oboektu d) p - wartość

Programowanie komputerowe. Zajęcia 7

Część 4 życie programu

Język C, tablice i funkcje (laboratorium, EE1-DI)

4. Funkcje. Przykłady

Typy złożone. Struktury, pola bitowe i unie. Programowanie Proceduralne 1

JĘZYKI PROGRAMOWANIA Z PROGRAMOWANIEM OBIEKTOWYM. Laboratorium 1. Wprowadzenie, środowisko programistyczne, pierwsze programy

KLASA UCZEN Uczen imię, nazwisko, średnia konstruktor konstruktor Ustaw Wyswietl Lepszy Promowany

1 Podstawy c++ w pigułce.

KLASA UCZEN Uczen imię, nazwisko, średnia konstruktor konstruktor Ustaw Wyswietl Lepszy Promowany

Podstawy informatyki. Elektrotechnika I rok. Język C++ Operacje na danych - wskaźniki Instrukcja do ćwiczenia

Język C++ Różnice między C a C++

Język C zajęcia nr 11. Funkcje

Rozwiązanie. #include <cstdlib> #include <iostream> using namespace std;

Pola i metody statyczne. Klasy zawierające pola i metody statyczne

1 Wskaźniki i zmienne dynamiczne, instrukcja przed zajęciami

Podstawy Programowania

Podstawy algorytmiki i programowania - wykład 1 Tablice powtórzenie Tablice znaków Tablice dwuwymiarowe

Wzorce funkcji (szablony)

Funkcje. Deklaracja funkcji. Definicja funkcji. Wykorzystanie funkcji w programie.

Podstawy Programowania C++

Wykład 8: klasy cz. 4

Kurs programowania. Wykład 1. Wojciech Macyna. 3 marca 2016

Lab 9 Podstawy Programowania

C++ - klasy. C++ - klasy. C++ - klasy. C++ - klasy. C++ - klasy INNE SPOSOBY INICJALIZACJI SKŁADOWYCH OBIEKTU

Wstęp do programowania

Wykład 5: Klasy cz. 3

Struktury typ definiowany przez uŝytkownika.

Wstęp do programowania obiektowego. WYKŁAD 3 Dziedziczenie Pola i funkcje statyczne Funkcje zaprzyjaźnione, this

Programowanie komputerowe. Zajęcia 1

Język C, tablice i funkcje (laboratorium)

Algorytmy i język C++

TEMAT : KLASY POLIMORFIZM

Język ludzki kod maszynowy

JĘZYKI PROGRAMOWANIA Z PROGRAMOWANIEM OBIEKTOWYM. Laboratorium 3. Instrukcje wyboru

Temat: Dynamiczne przydzielanie i zwalnianie pamięci. Struktura listy operacje wstawiania, wyszukiwania oraz usuwania danych.

public: // interfejs private: // implementacja // składowe klasy protected: // póki nie będziemy dziedziczyć, // to pole nas nie interesuje

Wstęp do Programowania 2

Wstęp do programowania

Wykład 15. Literatura. Kompilatory. Elementarne różnice. Preprocesor. Słowa kluczowe

Programowanie i struktury danych

1 P roste e t ypy p d a d n a ych c - c ąg ą g d a d l a szy 2 T y T py p z ł z o ł żo ż ne e d a d n a ych c : T BLICE

1. Pierwszy program. Kompilator ignoruje komentarze; zadaniem komentarza jest bowiem wyjaśnienie programu człowiekowi.

Programowanie obiektowe W3

Wykład I. Programowanie II - semestr II Kierunek Informatyka. dr inż. Janusz Słupik. Wydział Matematyki Stosowanej Politechniki Śląskiej

Programowanie w C++ Wykład 2. Katarzyna Grzelak. 4 marca K.Grzelak (Wykład 1) Programowanie w C++ 1 / 44

Tablice mgr Tomasz Xięski, Instytut Informatyki, Uniwersytet Śląski Katowice, 2011

Ok. Rozbijmy to na czynniki pierwsze, pomijając fragmenty, które już znamy:

Podstawy programowania w języku C++

W2 Wprowadzenie do klas C++ Klasa najważniejsze pojęcie C++. To jest mechanizm do tworzenia obiektów. Deklaracje klasy :

Wstęp do programowania INP001213Wcl rok akademicki 2017/18 semestr zimowy. Wykład 8. Karol Tarnowski A-1 p.

Pytania sprawdzające wiedzę z programowania C++

1. Które składowe klasa posiada zawsze, niezależnie od tego czy je zdefiniujemy, czy nie?

Język C++ zajęcia nr 2

Inicjacja tablicy jednowymiarowej

Techniki programowania INP001002Wl rok akademicki 2018/19 semestr letni. Wykład 3. Karol Tarnowski A-1 p.

Podstawy programowania. Wykład Funkcje. Krzysztof Banaś Podstawy programowania 1

IX. Wskaźniki.(3 godz.)

Transkrypt:

C-struktury wykład Dorota Pylak

C-struktury W języku C++, jak w każdym języku obiektowym, mamy możliwość definiowania własnych typów danych, wraz z określeniem operacji, jakie na tych danych można wykonywać. Służą do tego klasy, występujące w C++, z powodów głównie historycznych, pod dwoma nazwami: klas i struktur. Jednak typy złożone istnieją również w czystym C. Mają one postać unii i struktur. W C++ implementacja struktur została rozszerzona (i jest w zasadzie taka jak dla klas), ale warto zdawać sobie sprawę, jak wyglądają struktury zgodne z implementacją w C. Tego typu struktury, które będziemy nazywać C-strukturami, są bardzo często używane nawet w programach napisanych w C++, głównie ze względu na to, że C-strukturami są często typy zdefiniowane w standardowych bibliotekach.

3 Struktura jest zbiorem zmiennych występujących pod wspólna nazwą. Zmienne wchodzące w skład struktury nazywane są polami lub elementami, a czasem członkami struktury. Struktury używamy, jeśli chcemy zgrupować zmienne jako jeden rekord. C-struktura jest kolekcją nazwanych składowych, które mogą być różnych typów, również innych typów strukturalnych.

DEKLARACJA STRUKTURY 4 Strukturę definiujemy korzystając ze słowa kluczowego struct. Ogólna postać deklaracji struktury jest następująca: struct nazwa_typu //staje się nazwa nowego typu [ typ nazwa_pola[,nazwa_pola[,...]];] [ typ nazwa_pola[,nazwa_pola[,...]];]... } lista_zmiennych_strukturalnych;

5 DEKLARACJA STRUKTURY UWAGI: można albo pominąć nazwę typu (struktura anonimowa) albo listę zmiennych, ale nie można opuścić obu jednocześnie; ponieważ każda deklaracja struktury jest instrukcją, to deklarację struktury zawsze kończymy średnikiem; elementy lista_zmiennych_strukturalnych są oddzielane przecinkami i mogą być identyfikatorami zmiennych strukturalnych lub mogą identyfikatorami zmiennych z nadawanymi im wartościami początkowymi. Wtedy identyfikator_zmiennej = wartość_początkowa_struktury

DEKLARACJA STRUKTURY- przykład Przykład. Zdefiniujmy strukturę do przechowywania danych samochodu takich jak: marka, model, rok produkcji, pojemność silnika: struct Auto string marka; string model; int rok_produkcji; double pojemnosc; }; W tym przypadku nie mamy żadnej zmiennej. Określony jest typ Auto będący strukturą o czterech polach. 6

Deklarowanie zmiennych typu strukturalnego 7 Aby zadeklarować inne zmienne strukturalne niż w definicji typu korzystamy z następującej instrukcji: struct nazwatypu listazmiennych;//c i C++ lub bez słowa kluczowego struct nazwatypu listazmiennych; //tylko w C++ Np. int main() Auto opel;//auto jest typem, a opel nazwą zmiennej return 0; } W C++ można opuścić słowo struct. Dopiero po napotkaniu deklaracji zmiennej kompilator przydziela odpowiedni obszar pamięci.

8 Deklaracja ze strukturą zagnieżdżoną Struktury można zagnieżdżać tzn. polem struktury może być inna struktura nie anonimowa (nie może być ta, którą aktualnie definiujemy) tzn. musi być nazwa pola. Np.: struct Punkt //definicja tylko typu }; float x,y; struct Okrag } ; float promien; Punkt srodek;

Inicjalizacja zmiennych strukturalnych 9 Inicjalizacja struktury polega na umieszczeniu w nawiasach klamrowych inicjalizacji poszczególnych pól zgodnie z kolejnością ich występowania w definicji typu struktury. Ilość inicjalizacji nie może przekraczać ilości pól. W przypadku mniejszej ilości inicjalizacji niż pól, pozostałe pola liczbowe będą zainicjowane zerami, a pola typu wskaźnikowego adresami pustymi. Przykłady: //samochód renault /*ten przykład nie zadziała w Builder 6.0 ze względu na string w strukturze (wtedy string zastąpić tablicą char) */ Auto renault = "renault","megane",2013,2.0}; //punkt (1,3) Punkt A = 1.0, 3.0}; //okrąg o środku w punkcie (1,1)i promieniu 5.5 Okrag K = 5.5, 1.0, 1.0}}, //okrąg o środku w punkcie (0,0) i promieniu 1 K0 = 1.0}; //w C++ 11 można ominąć znak = //np. Okrag K01.0};

Dostęp do pól struktury 10 Dostęp do pól struktury uzyskujemy operatorem kropka. int main() Auto auto1; //pobranie danych o marce i pojemnosci auta cout<<"podaj marke samochodu: "; cin>>auto1.marka; //odwołanie się do pola marka cout<<"podaj pojemnosc samochodu: "; cin>>auto1.pojemnosc; //i pojemność cout<<"marka: "<<auto1.marka } <<", pojemnosc: "<<auto1.pojemnosc<<endl; return 0;

Dostęp do pól struktury - przykład 11 Przykład. Program wczyta środek i promień koła i wyświetli informację o tym czy początek układu współrzędnych leży w kole czy na zewnątrz. Następnie sprawdzi, to również dla koła o promieniu o 1 większym. #include <iostream> using namespace std; struct Punkt double x,y; }; struct Kolo double r; Punkt s; };

12 int main() Kolo k, kw; Program przykładowy cout<<"położenie punktu względem koła\n"; cout<<"podaj środek koła\nx = "; cin>>k.s.x; cout <<"y = "; cin>>k.s.y; cout<<"promień: "; cin>>k.r; cout<<"początek układu leży "; cout<< (k.s.x*k.s.x + k.s.y*k.s.y <= k.r*k.r? "w kole":"poza kołem");

Program przykładowy cd.- przypisywanie struktur /*wartość jednej zmiennej typu struktura można przypisać innej zmiennej tego samego typu za pomocą pojedynczej instrukcji przypisania "=", powoduje to, że każde pole struktury do której robimy przypisanie, otrzymuje wartość odpowiedniego pola struktury przypisywanej */ kw=k;//przypisanie całej struktury (kw.r)++; //zwiększenie o 1 promienia koła kw cout<<"\npoczątek układu leży "; cout<< (kw.s.x*kw.s.x + kw.s.y*kw.s.y <= kw.r*kw.r? "w kole":"poza kołem")<<endl; return 0; }//main 13

Struktury jako parametry i wyniki funkcji. 14 Struktury zachowują się podobnie jak typy wbudowane, można na przykład przekazywać je jako parametry funkcji, można definiować też funkcje zwracające strukturę jako swój wynik. Użycie struktury jako parametru funkcji jest przekazaniem przez wartość (parametr aktualny musi być tego samego typu). Uwaga: Oczywiście jeśli chcemy korzystać ze struktur w funkcjach musimy strukturę zdefiniować globalnie (przed main()) Przykład. Zadanie obliczania godziny i minuty po upływie zadanego okresu czasu w godzinach i minutach.

#include <iostream> #include <iomanip> using namespace std; PROGRAM- struktury i funkcje struct Czas int g,m;//godziny i minuty odpowiednio } ; //Napisz funkcję, która zwraca jako wynik czas jaki mamy po //upływie czasu przekazanego przez drugi parametr od czasu //startowego danego pierwszym parametrem funkcji. Czas NowyCzas(Czas teraz, Czas iledodac) Czas nowy; int r = teraz.m + iledodac.m; nowy.m = r%60; nowy.g = (teraz.g + iledodac.g + r/60)%24; return nowy; } 15

16 PROGRAM- struktury i funkcje /* Napisz funkcję, która zwiększa czas będący pierwszym parametrem funkcji o czas dany przez drugi parametr. Otrzymany czas funkcja przekazuje w pierwszym parametrze. Funkcja nie zwraca żadnego wyniku. */ void NowyCzas1(Czas &teraz, Czas iledodac) int r = teraz.m + iledodac.m; teraz.m = r % 60; } teraz.g = (teraz.g + iledodac.g + r/60)%24;

PROGRAM- struktury i funkcje cd. 17 int main() Czas cz=8,45}, w, d=4,20}; cout<<cz.g<<":"<<setw(2)<<setfill('0')<<cz.m<<endl; w = NowyCzas(cz,d); cout<<w.g<<":"<<setw(2)<<w.m<<endl; NowyCzas1(cz,d); cout<<cz.g<<":"<<setw(2)<<cz.m<<endl<<setfill(' '); } return 0;

Tablice struktur 18 Tablice struktur definiujemy analogicznie jak inne tablice. Przykłady definiowania tablic struktur: struct Punktdouble x,y; } ; Punkt tab[100];//tablica 100 punktów Punkt tab2[2]=1,1},-3,4}}; oraz korzystania z elementów tablic: tab[1] = tab2[1];// struktura przypisana strukturze tab[1].x = tab2[0].x + 11;

19 Tablice struktur przykład Dla danej struktury struct Auto string marka; string model; int rok_produkcji; double pojemnosc; }; napisz funkcję wczytajauto typu void, która pobierze z klawiatury informacje o samochodzie i zwróci je jako parametr typu Auto. void wczytajauto(auto &sam) cout<<"marka: "; cin>>sam.marka; } cout<<"model: "; cin>>sam.model; cout<<"rok produkcji: "; cin>>sam.rok_produkcji; cout<<"pojemnosc: "; cin>>sam.pojemnosc;

20 Tablice struktur przykład Wykorzystując strukturę Auto z poprzedniego zadania oraz strukturę struct Komis int ilsam; //liczba samochodow Auto tabsam[100]; }; A) napisz funkcję która wyświetla dane komisu void wyswietlkomis(komis &k)//& by nie kopiować dużej struktury if(k.ilsam>0) for (int i=0;i<k.ilsam;i++) cout<<k.tabsam[i].marka<<", " <<k.tabsam[i].model<<", " <<k.tabsam[i].rok_produkcji<<", " <<k.tabsam[i].pojemnosc<<endl; else cout<<"brak aut w komisie"<<endl; } Uwaga: Gdy funkcja nie modyfikuje wartości struktury lepiej strukturę przekazać do funkcji przez stałą referencję: void wyswietlkomis(const Komis &k)

21 Tablice struktur przykład c.d. B) napisz dwuparametrową funkcję int ileaut(komis &k, int granica) zwracającą liczbę całkowitą równą liczbie samochodów w komisie k o roku produkcji większym od wartości drugiego parametru granica. int ileaut(komis &k, int granica) int ile=0; //zerujemy licznik //przeglądamy wszystkie auta w komisie for (int i=0;i<k.ilsam;i++) if (k.tabsam[i].rok_produkcji > granica) ile++; return ile; } W tym przypadku również mogliśmy deklarację funkcji uzupełnić słowem const: int ileaut(const Komis &k, int granica)

22 Tablice struktur przykład c.d. C) napisz funkcję o nagłówku int najstarszeauto(komis & k); która dla przekazanego jako parametr komisu k wyznaczy indeks najstarszego samochodu w komisie (czyli o najmniejszym roku produkcji) lub -1 w przypadku braku samochodów w komisie. Jeśli w komisie jest kilka aut o tym samym najmniejszym roku produkcji, funkcja ma zwracać indeks pierwszego z nich. int najstarszeauto(komis & k) if (k.ilsam <= 0) return -1; //na początku przyjmujemy, ze 0-we auto ma min rok prod int indmin=0; int wiekmin=k.tabsam[0].rok_produkcji; //przeglądamy pozostałe auta w komisie for (int i=1;i<k.ilsam;i++) //jeśli spotkamy starsze if(k.tabsam[i].rok_produkcji < wiekmin) //zapamiętujemy jego indeks i rok produkcji indmin=i; wiekmin=k.tabsam[i].rok_produkcji; } return indmin; }

Tablice struktur przykład c.d. int main() Komis autokomis = 3,"opel","zafira",2015,2.0}, "citroen","c3",2012,1.7}, "kia","sportage",2005,1.9}} }; //ta inicjalizacja nie zadziała w C++ Builder 6.0 wyswietlkomis(autokomis); int ind = najstarszeauto(autokomis); if(ind >= 0) else cout<<"indeks najstarszego auta "<<ind<<endl; cout<<"nie ma aut w komisie"<<endl; cout<<"w komisie mamy "<<ileaut(autokomis,2010) <<" aut wyprodukowanych po 2010 roku"; } return 0; 23

Tablice struktur przykład c.d. 24 Wyniki działania powyższego programu: opel, zafira, 2015, 2 citroen, c3, 2012, 1.7 kia, sportage, 2005, 1.9 indeks najstarszego auta 2 w komisie mamy 2 aut wyprodukowanych po 2010 roku