Podstawy programowania w języku C++



Podobne dokumenty
Podstawy programowania w języku C++

Podstawy programowania w języku C++

Języki programowania. Tablice struktur, pliki struktur. Część ósma. Autorzy Tomasz Xięski Roman Simiński

Podstawy programowania w języku C++

Podstawy programowania

Języki programowania. Przetwarzanie tablic znaków. Część druga. Autorzy Tomasz Xięski Roman Simiński

Podstawy programowania w języku C++

Podstawy programowania w języku C++

Języki programowania. Przetwarzanie plików amorficznych Konwencja języka C. Część siódma. Autorzy Tomasz Xięski Roman Simiński

Podstawy programowania w języku C++

Podstawy programowania w języku C i C++

Programowanie w języku C++

Języki programowania obiektowego Nieobiektowe elementy języka C++

Wprowadzenie do programowania w języku C

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

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

Wprowadzenie do programowania w języku C

Wprowadzenie do programowanie obiektowego w języku C++

Algorytmy i złożoności. Wykład 3. Listy jednokierunkowe

Wprowadzenie do programowania w języku C

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

Programowanie w języku C++

wykład III uzupełnienie notatek: dr Jerzy Białkowski Programowanie C/C++ Język C - zarządzanie pamięcią, struktury,

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

Języki i metodyka programowania. Wskaźniki i tablice.

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

Tablice deklaracja, reprezentacja wewnętrzna

Struktury - wprowadzenie

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

KURS C/C++ WYKŁAD 8. Deklaracja funkcji informuje komplilator jaką wartość funkcja będzie zwracała i jakiego typu są jej argumenty.

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

C-struktury wykład. Dorota Pylak

Podstawy programowania w języku C++

Deklaracja struktury w C++

Podstawy programowania w języku C++

Lab 9 Podstawy Programowania

Podstawy programowania. Wykład: 8. Wskaźniki. dr Artur Bartoszewski -Podstawy programowania, sem 1 - WYKŁAD

Struktury. Przykład W8_1

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

tablica: dane_liczbowe

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

Podstawy programowania w języku C++

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

C-struktury wykład. Dorota Pylak

Język ludzki kod maszynowy

Podstawy Programowania Obiektowego

Wprowadzenie do programowania w języku C

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

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

KURS C/C++ WYKŁAD 7. struct Punkt { int x, y; int kolor; };

Podstawy programowania. Wykład 6 Wskaźniki. Krzysztof Banaś Podstawy programowania 1

Podstawy programowania. Wykład 7 Tablice wielowymiarowe, SOA, AOS, itp. Krzysztof Banaś Podstawy programowania 1

ZASADY PROGRAMOWANIA KOMPUTERÓW

Referencje do zmiennych i obiektów

Podstawy programowania

Wykład 4: Klasy i Metody

Języki programowania obiektowego Nieobiektowe elementy języka C++

// Liczy srednie w wierszach i kolumnach tablicy "dwuwymiarowej" // Elementy tablicy są generowane losowo #include <stdio.h> #include <stdlib.

ALGORYTMY I STRUKTURY DANYCH

TEMAT : KLASY DZIEDZICZENIE

Programowanie w C++ Wykład 5. Katarzyna Grzelak. 26 marca kwietnia K.Grzelak (Wykład 1) Programowanie w C++ 1 / 40

Programowanie obiektowe Wykład 3. Dariusz Wardowski. dr Dariusz Wardowski, Katedra Analizy Nieliniowej, WMiI UŁ 1/21

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

Wskaźniki. nie są konieczne, ale dają językowi siłę i elastyczność są języki w których nie używa się wskaźników typ wskaźnikowy typ pochodny:

Języki i techniki programowania Ćwiczenia 2

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

część 8 wskaźniki - podstawy Jarosław Gramacki Instytut Informatyki i Elektroniki Podstawowe pojęcia

Wskaźniki. Przemysław Gawroński D-10, p marca Wykład 2. (Wykład 2) Wskaźniki 8 marca / 17

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

Wstęp do programowania INP001213Wcl rok akademicki 2018/19 semestr zimowy. Wykład 4. Karol Tarnowski A-1 p.

external Data Representation

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

Wskaznik. Przekazywanie wyniku funkcji przez return. Typy i zmienne wskaznikowe. Zmienna wskazywana. typ * nazwa_wkaznika

Prof. Danuta Makowiec Instytut Fizyki Teoretycznej i Astrofizyki pok. 353, tel danuta.makowiec at gmail.com

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

Struktury czyli rekordy w C/C++

TABLICE W JĘZYKU C/C++ typ_elementu nazwa_tablicy [wymiar_1][wymiar_2]... [wymiar_n] ;

Stałe, znaki, łańcuchy znaków, wejście i wyjście sformatowane

Dynamiczne struktury danych

Język C++ zajęcia nr 2

Projektowanie klas c.d. Projektowanie klas przykład

Wykład II Tablice (wstęp) Przykłady algorytmów Wstęp do języka C/C++

1. Nagłówek funkcji: int funkcja(void); wskazuje na to, że ta funkcja. 2. Schemat blokowy przedstawia algorytm obliczania

KURS C/C++ WYKŁAD 6. Wskaźniki

Konstruktor kopiujacy

Wstęp do programowania obiektowego. Wykład 1 Algorytmy i paradygmaty Podstawowe pojęcia PO

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

Podstawy Programowania

Szablony funkcji i szablony klas

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

Informacje ogólne. Karol Trybulec p-programowanie.pl 1. 2 // cialo klasy. class osoba { string imie; string nazwisko; int wiek; int wzrost;

C++ - przeciążanie operatorów. C++ - przeciążanie operatorów. C++ - przeciążanie operatorów. C++ - przeciążanie operatorów

Struktury Struktura polami struct struct struct struct

Programowanie w C++ Wykład 5. Katarzyna Grzelak. 16 kwietnia K.Grzelak (Wykład 1) Programowanie w C++ 1 / 27

Tablice, funkcje - wprowadzenie

Systemy ekspertowe Część siódma Realizacja dziedzinowego systemu ekspertowego Roman Simiński

Konwersje napis <-> liczba Struktury, unie Scanf / printf Wskaźniki

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

Wprowadzenie do szablonów szablony funkcji

Wstęp do programowania obiektowego. Przekazywanie parametrów do funkcji w C++ Metody i funkcje operatorowe Strumienie: standardowe, plikowe, napisowe

Transkrypt:

Podstawy programowania w języku C++ Część dziesiąta Rekordy w C/C++ struktury Autor Roman Simiński Kontakt roman.siminski@us.edu.pl www.programowanie.siminskionline.pl Niniejsze opracowanie zawiera skrót treści wykładu, lektura tych materiałów nie zastąpi uważnego w nim uczestnictwa. Opracowanie to jest chronione prawem autorskim. Wykorzystywanie jakiegokolwiek fragmentu w celach innych niż nauka własna jest nielegalne. Dystrybuowanie tego opracowania lub jakiejkolwiek jego części oraz wykorzystywanie zarobkowe bez zgody autora jest zabronione.

Programowanie jako tworzenie komputerowego modelu rzeczywistości Obiekty rzeczywiste Abstrakcyjny model analityczny Analityk i/lub projektant systemu informatycznego Obiekty, elementy, pojęcia ze świata zewnętrznego muszą zostać odwzorowane danymi w programie. Dane występujące w programie stanowią uproszczony, komputerowy model rzeczywistości. 2

Obliczanie średniego spalania raz jeszcze ;-) Zmienna Dystans Zmienna Paliwo Dane opisujące komputerowy model problemu Dane rzeczywistego obiektu Algorytm Wylicz średnie spalanie: (Paliwo*100)/Dystans Wyświetl wynik Analityk i/lub projektant systemu informatycznego Przejechany dystans: 500km Zużyte paliwo: 37l 3

Obliczanie średniego spalania raz jeszcze ;-) Zmienna Dystans Zmienna Paliwo Dane modelu są dwiema, osobnymi zmiennymi liczbowymi Analityk i/lub projektant systemu informatycznego 4

Nowe zadanie system ewidencji pojazdów dla autokomisu Jakich danych potrzebujemy? Obiekty rzeczywiste Analityk i/lub projektant systemu informatycznego 5

Jakie informacje będziemy przetwarzać i przechowywać? Obiekty rzeczywiste Dane Marka Model Rok produkcji Cena Przebieg Nr rejestracyjny Analityk i/lub projektant systemu informatycznego 6

Dane opisują jeden pojazd Dane Marka Model Rok produkcji Cena Przebieg Nr rejestracyjny Dane opisujące jeden pojazd to porcja różnych informacji Analityk i/lub projektant systemu informatycznego 7

Pojazdów jest wiele... Dane Marka Model Rok produkcji Cena Przebieg Nr rejestracyjny Dane Marka Model Rok produkcji Cena Przebieg Nr rejestracyjny Dane Marka Model Rok produkcji Cena Przebieg Nr rejestracyjny Potrzeba wiele porcji danych. Każda z porcji jest złożona i zawiera różne dane opisujące pojazd. Dane Marka Model Rok produkcji Cena Przebieg Nr rejestracyjny Dane Marka Model Rok produkcji Cena Przebieg Nr rejestracyjny Dane Marka Model Rok produkcji Cena Przebieg Nr rejestracyjny 8

Struktury zmienne do przechowywania różnych danych Definicja typu strukturalnego Dane Marka Model Rok produkcji Cena Przebieg Nr rejestracyjny struct pojazd char marka[ 20 ]; char model[ 20 ]; int rok_prod; float cena; float przebieg; char nr_rej[ 10 ]; }; Pola struktury o nazwie pojazd pojazd a; Deklaracja zmiennej strukturalnej o nazwie a 9

Struktury parametryzacja rozmiarów tablic const int MAKS_M = 20; const int MAKS_R = 10; struct pojazd char marka[ MAKS_M ]; char model[ MAKS_M ]; int rok_prod; float cena; float przebieg; char nr_rej[ MAKS_R ]; }; Struktura a jako rekord marka model rok_prod cena przebieg nr_rej pojazd a; 10

Struktury reprezentacja w pamięci Pamięć operacyjna marka model rok_prod cena przebieg nr_rej a struct pojazd char marka[ MAKS_M ]; char model[ MAKS_M ]; int rok_prod; float cena; float przebieg; char nr_rej[ MAKS_R ]; }; pojazd a; 11

Struktury odwoływanie się do pól struct pojazd char marka[ MAKS_M ]; char model[ MAKS_M ]; int rok_prod; float cena; float przebieg; char nr_rej[ MAKS_R ]; }; pojazd a; a.rok_prod = 2006; a.przebieg = 32850.5; a.cena = 45000; Wstawianie wartości do pól zmiennej strukturalnej a Pamięć operacyjna marka model rok_prod cena przebieg nr_rej 2006 45000 32850.5 a 12

Struktury odwoływanie się do pól, format zapisu a. rok_prod = 20 ; Nazwa zamiennej strukturalnej lub wyrażenie lokalizujące taką zmienną w pamięci operacyjnej. Operator selekcji pola struktury Dowolne wyrażenie typu zgodnego z typem pola struktury. Nazwa pola struktury 13

Struktury odwoływanie się do pól tablicowych struct pojazd char marka[ MAKS_M ]; char model[ MAKS_M ]; int rok_prod; float cena; float przebieg; char nr_rej[ MAKS_R ]; }; pojazd a; strcpy( a.marka, Honda ); strcpy( a.marka, Accord ); strcpy( a.nr_rej, S1 XXXX ); Wstawianie wartości do pól zmiennej strukturalnej a będących tablicami znaków Pamięć operacyjna marka model rok_prod cena przebieg nr_rej Honda Accord 2006 45000 32850.5 S1 XXXX a 14

Wyprowadzanie zawartości pól struktury do strumienia wyjściowego struct pojazd char marka[ MAKS_M ]; char model[ MAKS_M ]; int rok_prod; float cena; float przebieg; char nr_rej[ MAKS_R ]; }; pojazd a; cout << \nmarka: << a.marka; cout << \nmodel: << a.model; cout << \nrok produkcji: << a.rok_prod; cout << \ncena: << a.cena; cout << \nprzebieg: << a.przebieg; cout << \nnr rejestracyjny: << a.nr_rej; 15

Wprowadzanie danych do struktury ze strumienia wejściowego pojazd a; cout << "\npodaj dane pojazdu"; cout << "\nmarka: "; cin >> a.marka; cout << "Model: "; cin >> a.model; cout << "Rok produkcji: "; cin >> a.rok_prod; cout << "Cena: "; cin >> a.cena; cout << "Przebieg: "; cin >> a.przebieg; cout << "Numer rejestracyjny: "; cin >> a.nr_rej; Uwaga! Ta wersja wprowadzania danych do rekordu jest podatna na błędy przepełnienia bufora 16

Nazwa struktury różnice w C89 i C++ W języku C++ nazwa oznacznikowa struktury występująca po słowie struct jest pełnoprawną nazwą typu strukturalnego. struct pojazd char marka[ MAKS_M ]; char model[ MAKS_M ]; int rok_prod; float cena; float przebieg; char nr_rej[ MAKS_R ]; }; pojazd a; 17

Nazwa struktury różnice w C89 i C++ W języku C nazwa występująca po słowie kluczowym struct nie jest samodzielną nazwą typu strukturalnego. W deklaracja zmiennych należy użyć słowa kluczowego struct. struct pojazd char marka[ MAKS_M ]; char model[ MAKS_M ]; int rok_prod; float cena; float przebieg; char nr_rej[ MAKS_R ]; }; struct pojazd a; 18

Struktury parametryzacja rozmiarów tablic w C #define MAKS_M 20 #define MAKS_R 10 struct pojazd char marka[ MAKS_M ]; char model[ MAKS_M ]; int rok_prod; float cena; float przebieg; char nr_rej[ MAKS_R ]; }; Struktura a jako rekord marka model rok_prod cena przebieg nr_rej struct pojazd a; 19

Nazwa struktury różnice w C89 i C++ Aby nie pisać słowa kluczowego struct, można użyć deklaracji tworzącej synonimiczną nazwę typu: typedef. struct _pojazd char marka[ MAKS_M ]; char model[ MAKS_M ]; int rok_prod; float cena; float przebieg; char nr_rej[ MAKS_R ]; }; typedef struct char marka[ MAKS_M ]; char model[ MAKS_M ]; int rok_prod; float cena; float przebieg; char nr_rej[ MAKS_R ]; } pojazd; typedef struct _pojazd pojazd; pojazd a; pojazd a; 20

Manipulowanie strukturami przy użyciu wskaźników struct pojazd char marka[ MAKS_M ]; char model[ MAKS_M ]; int rok_prod; float cena; float przebieg; char nr_rej[ MAKS_R ]; }; pojazd a; // Deklaracja zmiennej strukturalnej pojazd pojazd * a_wsk; // Deklaracja zmiennej wskaźnikowej do pojazd Pamięć operacyjna? a a_wsk 21

Manipulowanie strukturami przy użyciu wskaźników, cd... struct pojazd char marka[ MAKS_M ]; char model[ MAKS_M ]; int rok_prod; float cena; float przebieg; char nr_rej[ MAKS_R ]; }; pojazd a; // Deklaracja zmiennej strukturalnej pojazd pojazd * a_wsk; // Deklaracja zmiennej wskaźnikowej do pojazd a_wsk = &a; Zmienna a_wsk lokalizuje a pamięci zmienną a Pamięć operacyjna a a_wsk 22

Manipulowanie strukturami przy użyciu wskaźników, cd... struct auto char marka[ MAKS_M ]; char model[ MAKS_M ]; int rok_prod; float cena; float przebieg; char nr_rej[ MAKS_R ]; }; pojazd a; // Deklaracja zmiennej strukturalnej pojazd pojazd * a_wsk; // Deklaracja zmiennej wskaźnikowej do pojazd a_wsk = &a; (*a_wsk).cena = 46000; Wyrażenie *a_wsk reprezentuje strukturę a Pamięć operacyjna a 46000 a_wsk 23

Odwoływanie się do pól struktury via wskaźnik Wskazywana struktura Pole struktury, wskazywanej przez a_wsk. ( * a_wsk ). cena = 46000; Zmienna wskaźnikowa Uwaga! Ze względu na priorytet i łączność operatorów, nawiasy w powyższym wyrażeniu są niezbędne. (*a_wsk).cena To nie to samo! *a_wsk.cena 24

Odwoływanie się do pól struktury via wskaźnik, operator -> Zmienna wskaźnikowa Pole struktury, wskazywanej przez a_wsk. a_wsk -> cena = 46000; Operator dostępu do składowej Operator dostępu do składowej -> stosujemy dla struktur, uni i obiektów. (*a_wsk).cena To to samo a_wsk->cena 25

Funkcja wyprowadzająca zawartość struktury do stdout void pokaz_info( pojazd info ) cout << \nmarka: << info.marka; cout << \nmodel: << info.model; cout << \nrok produkcji: << info.rok_prod; cout << \ncena: << info.cena; cout << \nprzebieg: << info.przebieg; cout << \nnr rejestracyjny: << info.nr_rej; } pojazd a; a.cena = 25000; pokaz_info( a ); 26

Przekazywanie struktur przez wartość void pokaz_info( pojazd info ) cout << \nmarka: << info.marka; cout << \nmodel: << info.model; cout << \nrok produkcji: << info.rok_prod; cout << \ncena: << info.cena; cout << \nprzebieg: << info.przebieg; cout << \nnr rejestracyjny: << info.nr_rej;; } pojazd a; a.cena = 25000; pokaz_info( a ); Pamięć operacyjna Parametr aktualny wywołania Kopiowanie Parametr formalny funkcji to struktura a info Stos 27

Przekazywanie wskaźnika do struktury void pokaz_info( pojazd * info ) cout << \nmarka: << info->marka; cout << \nmodel: << info->model; cout << \nrok produkcji: << info->rok_prod; cout << \ncena: << info->cena; cout << \nprzebieg: << info->przebieg; cout << \nnr rejestracyjny: << info->nr_rej; } pojazd a; a.cena = 25000; pokaz_info( &a ); Pamięć operacyjna Parametr aktualny wywołania Wskazanie na a Parametr formalny funkcji to wskaźnik a info Stos 28

Przekazywanie przez wartość a przekazywanie wskaźnika do struktury Zmienne strukturalne mają często duży rozmiar. Przekazywanie ich przez wartość: zabiera dodatkową pamięć parametr formalny (alokowany na stosie) jest pełnowymiarową kopią parametru formalnego, trwa robienie kopii parametru aktualnego wywołania wymaga przesyłu pamięć-pamięć, potencjalnie dużej liczby bajtów, blokuje modyfikacje modyfikacje wykonane na parametrze formalnym funkcji nie przenoszą się na parametr wywołania funkcji. 29

Przekazywanie przez wartość a przekazywanie wskaźnika do struktury Przekazywanie wskaźników do struktury: oszczędza pamięć parametr formalny (alokowany na stosie) zawiera jedynie adres parametru formalnego, jest szybkie przekazanie wskaźnika to przesył małej liczby bajtów, pozwala na modyfikacje modyfikacje wykonane na parametrze formalnym funkcji przenoszą się na parametr wywołania funkcji. Jeżeli modyfikacje obiektu wskazywanego mają być zabronione, używamy słowa kluczowego const w deklaracji parametru. void pokaz_info( const pojazd * info ) cout << \nmarka: << info->marka; cout << \nmodel: << info->model; cout << \nrok produkcji: << info->rok_prod; cout << \ncena: << info->cena; cout << \nprzebieg: << info->przebieg; cout << \nnr rejestracyjny: << info->nr_rej; } 30

Przekazywanie referencji do struktur W języku C++ można przekazywać parametry referencyjne. Nie trzeba wtedy używać wskaźników, a działanie jest analogiczne. Referencja ustalona (const) nie pozwala na niezamierzoną modyfikację parametru aktualnego wywołania. void pokaz_info( pojazd & info ) cout << \nmarka: << info.marka; cout << \nmodel: << info.model; cout << \nrok produkcji: << info.rok_prod; cout << \ncena: << info.cena; cout << \nprzebieg: << info.przebieg; cout << \nnr rejestracyjny: << info.nr_rej; } void pokaz_info( const pojazd & info ) cout << \nmarka: << info.marka; cout << \nmodel: << info.model; cout << \nrok produkcji: << info.rok_prod; cout << \ncena: << info.cena; cout << \nprzebieg: << info.przebieg; cout << \nnr rejestracyjny: << info.nr_rej; } 31

Funkcja wczytująca zawartość struktury ze strumienia wejściowego void czytaj_info( pojazd * info ) cout << "\nmarka: "; cin >> info->marka; cout << "Model: "; cin >> info->model; cout << "Rok produkcji: "; cin >> info->rok_prod; cout << "Cena: "; cin >> info->cena; cout << "Przebieg: "; cin >> info->przebieg; cout << "Numer rejestracyjny: "; cin >> info->nr_rej; } Wersja wprowadzania danych do rekordu jest podatna na błędy przepełnienia bufora 32

Suplement I operacje wejścia/wyjścia w konwencji języka C void pokaz_info( const pojazd * info ) printf( \nmarka: %s, info->marka ); printf( \nmodel: %s, info->model ); printf( \nrok produkcji: %d, info->rok_prod ); printf( \ncena: %g, info->cena ); printf( \nprzebieg: %g, info->przebieg ); printf( \nnr rejestracyjny: %s, info->nr_rej ); } 33

Suplement I operacje wejścia/wyjścia w konwencji języka C void czytaj_info( pojazd * info ) char bufor[ 128 ]; printf( "\nmarka: " ); gets( bufor ); if( strlen( bufor ) >= MAKS_M ) bufor[ MAKS_M - 1 ] = '\0'; strcpy( info->marka, bufor ); printf( "Model: " ); gets( bufor ); if( strlen( bufor ) >= MAKS_M ) bufor[ MAKS_M - 1 ] = '\0'; strcpy( info->model, bufor ); printf( "Rok produkcji: " ); gets( bufor ); info->rok_prod = atoi( bufor ); printf( "Cena: " ); gets( bufor ); info->cena = atof( bufor ); printf( "Przebieg: " ); gets( bufor ); info->przebieg = atof( bufor ); } printf( "Numer rejestracyjny: " ); gets( bufor ); if( strlen( bufor ) >= MAKS_R ) bufor[ MAKS_R - 1 ] = '\0'; strcpy( info->nr_rej, bufor ); 34