Języki programowania C i C++bartoszewski.pr.radom.pl/cpp/cpp_2017_w04.pdf · dr Artur Bartoszewski...

33
1 dr Artur Bartoszewski - Języki C i C++ , sem. 1I- WYKŁAD Wykład 4: Języki programowania C i C++

Transcript of Języki programowania C i C++bartoszewski.pr.radom.pl/cpp/cpp_2017_w04.pdf · dr Artur Bartoszewski...

Page 1: Języki programowania C i C++bartoszewski.pr.radom.pl/cpp/cpp_2017_w04.pdf · dr Artur Bartoszewski - Języki C i C++ , sem. 1I - WYKŁAD Zmienne lokalne statyczne – pozwalają,

1 dr Artur Bartoszewski - Języki C i C++ , sem. 1I- WYKŁAD

Wykład 4:

Języki programowania C i C++

Page 2: Języki programowania C i C++bartoszewski.pr.radom.pl/cpp/cpp_2017_w04.pdf · dr Artur Bartoszewski - Języki C i C++ , sem. 1I - WYKŁAD Zmienne lokalne statyczne – pozwalają,

2

Przeciążanie nazw funkcji

Podstawy programowania w C++

dr Artur Bartoszewski - Języki C i C++ , sem. 1I - WYKŁAD

Page 3: Języki programowania C i C++bartoszewski.pr.radom.pl/cpp/cpp_2017_w04.pdf · dr Artur Bartoszewski - Języki C i C++ , sem. 1I - WYKŁAD Zmienne lokalne statyczne – pozwalają,

3

Przeciążanie nazw funkcji Podstawy

dr Artur Bartoszewski - Języki C i C++ , sem. 1I - WYKŁAD

Przeciążanie nazw funkcji umożliwia zdefiniowanie kilku funkcji o tej samej nazwie różniących się listą parametrów. Np.:

int funkcja (); int funkcja (int a); int funkcja (int a, int b); int funkcja (int a, int b, inc c);

Page 4: Języki programowania C i C++bartoszewski.pr.radom.pl/cpp/cpp_2017_w04.pdf · dr Artur Bartoszewski - Języki C i C++ , sem. 1I - WYKŁAD Zmienne lokalne statyczne – pozwalają,

4

Przeciążanie nazw funkcji Podstawy

dr Artur Bartoszewski - Języki C i C++ , sem. 1I - WYKŁAD

Page 5: Języki programowania C i C++bartoszewski.pr.radom.pl/cpp/cpp_2017_w04.pdf · dr Artur Bartoszewski - Języki C i C++ , sem. 1I - WYKŁAD Zmienne lokalne statyczne – pozwalają,

5

Przeciążanie nazw funkcji Podstawy

dr Artur Bartoszewski - Języki C i C++ , sem. 1I - WYKŁAD

Page 6: Języki programowania C i C++bartoszewski.pr.radom.pl/cpp/cpp_2017_w04.pdf · dr Artur Bartoszewski - Języki C i C++ , sem. 1I - WYKŁAD Zmienne lokalne statyczne – pozwalają,

6

Zakres ważności nazwy i czasu życia obiektu

Podstawy programowania w C++

dr Artur Bartoszewski - Języki C i C++ , sem. 1I - WYKŁAD

Page 7: Języki programowania C i C++bartoszewski.pr.radom.pl/cpp/cpp_2017_w04.pdf · dr Artur Bartoszewski - Języki C i C++ , sem. 1I - WYKŁAD Zmienne lokalne statyczne – pozwalają,

7

Obiekty globalne Podstawy

dr Artur Bartoszewski - Języki C i C++ , sem. 1I - WYKŁAD

Obiekt zdeklarowany na zewnątrz wszystkich funkcji ma zasięg globalny. •  Obiekt jest dostępny wewnątrz wszystkich funkcji

znajdujących się w tym pliku. •  Jest znany dopiero od linijki, w której nastąpiła jego

deklaracja, w dół, do końca programu.

#include <iostream.h>int liczba; // zmienna globalnavoid jaksa_funkcja();

Int main() {}

void jaksa_funkcja() {}

Page 8: Języki programowania C i C++bartoszewski.pr.radom.pl/cpp/cpp_2017_w04.pdf · dr Artur Bartoszewski - Języki C i C++ , sem. 1I - WYKŁAD Zmienne lokalne statyczne – pozwalają,

8

Obiekty automatyczne Podstawy

dr Artur Bartoszewski - Języki C i C++ , sem. 1I - WYKŁAD

Zmienne automatyczne - w momencie gdy kończymy blok, w którym je zdefiniowaliśmy automatycznie przestają istnieć. (obiekty automatyczne komputer przechowuje na stosie). Jeśli po raz drugi wejdziemy do danego bloku (np. przy powtórnym wywołaniu funkcji) to zmienne tam zdefiniowane zostaną powołane do życia po raz drugi. Wynikają z tego dwa wnioski: •  nie możemy liczyć na to, że przy ponownym wywołaniu funkcji zastaniemy

zdefiniowany tam z wartością, którą miał na gdy poprzednio korzystaliśmy z tej funkcji.

•  skoro obiekt przestaje istnieć, to nie ma sensu by funkcja zwracała jego adres.

Page 9: Języki programowania C i C++bartoszewski.pr.radom.pl/cpp/cpp_2017_w04.pdf · dr Artur Bartoszewski - Języki C i C++ , sem. 1I - WYKŁAD Zmienne lokalne statyczne – pozwalają,

9

Obiekty automatyczne Podstawy

dr Artur Bartoszewski - Języki C i C++ , sem. 1I - WYKŁAD

•  Zmienne globalne – są wstępnie inicjalizowane wartością zero.

•  Zmienne automatyczne - zawierają na stracie losową wartość.

Page 10: Języki programowania C i C++bartoszewski.pr.radom.pl/cpp/cpp_2017_w04.pdf · dr Artur Bartoszewski - Języki C i C++ , sem. 1I - WYKŁAD Zmienne lokalne statyczne – pozwalają,

10

Obiekty lokalne statyczne Podstawy

dr Artur Bartoszewski - Języki C i C++ , sem. 1I - WYKŁAD

Zmienne lokalne statyczne – pozwalają, by zmienna lokalna dla danej funkcji przy ponownym wejściu do tej funkcji miała taką wartość, jak przy ostatnim opuszczaniu tejże funkcji. W odróżnieniu od zmiennych globalnych są one jednak znane tylko w obrębie funkcji, w której je zdefiniowano.

Page 11: Języki programowania C i C++bartoszewski.pr.radom.pl/cpp/cpp_2017_w04.pdf · dr Artur Bartoszewski - Języki C i C++ , sem. 1I - WYKŁAD Zmienne lokalne statyczne – pozwalają,

11

Obiekty lokalne statyczne Podstawy

dr Artur Bartoszewski - Języki C i C++ , sem. 1I - WYKŁAD

Page 12: Języki programowania C i C++bartoszewski.pr.radom.pl/cpp/cpp_2017_w04.pdf · dr Artur Bartoszewski - Języki C i C++ , sem. 1I - WYKŁAD Zmienne lokalne statyczne – pozwalają,

12

Tablice

Podstawy programowania w C++

dr Artur Bartoszewski - Języki C i C++ , sem. 1I - WYKŁAD

Page 13: Języki programowania C i C++bartoszewski.pr.radom.pl/cpp/cpp_2017_w04.pdf · dr Artur Bartoszewski - Języki C i C++ , sem. 1I - WYKŁAD Zmienne lokalne statyczne – pozwalają,

13

Tablice Podstawy

dr Artur Bartoszewski - Języki C i C++ , sem. 1I - WYKŁAD

Tworzenie jednowymiarowych tablic zmiennych - za deklaracją zmiennej podamy liczbę elementów.

typ_zmiennej nazwa_zmiennej [liczba_elementow];

liczba_elementów - musi być wartością stałą dosłowną, lub stałą const Np.:

int Tablica[ 10 ];Lub:

const STALA = 10;int Tablica[ STALA ];

Page 14: Języki programowania C i C++bartoszewski.pr.radom.pl/cpp/cpp_2017_w04.pdf · dr Artur Bartoszewski - Języki C i C++ , sem. 1I - WYKŁAD Zmienne lokalne statyczne – pozwalają,

14

Tablice Podstawy

dr Artur Bartoszewski - Języki C i C++ , sem. 1I - WYKŁAD

Tablice można tworzyć z: •  typów fundamentalnych (z wyjątkiem void), •  typów wyliczeniowych (enum), •  wskaźników, •  innych tablic; •  obiektów typu zdefiniowanego przez użytkownika (czyli

klasy), •  wskaźników do pokazywania na składniki klasy.

Page 15: Języki programowania C i C++bartoszewski.pr.radom.pl/cpp/cpp_2017_w04.pdf · dr Artur Bartoszewski - Języki C i C++ , sem. 1I - WYKŁAD Zmienne lokalne statyczne – pozwalają,

15

Tablice Podstawy

dr Artur Bartoszewski - Języki C i C++ , sem. 1I - WYKŁAD

Numeracja elementów tablicy zaczyna się od zera. Jeśli zdefiniujemy tablicę:

int tab[5];

to jest to tablica pięciu elementów typu int. Poszczególne elementy tej tablicy to:

tab[0] tab[l] tab[2] tab[3] tab[4]

For (i=0; i < rozmiar; i++)……;

Page 16: Języki programowania C i C++bartoszewski.pr.radom.pl/cpp/cpp_2017_w04.pdf · dr Artur Bartoszewski - Języki C i C++ , sem. 1I - WYKŁAD Zmienne lokalne statyczne – pozwalają,

16

Inicjalizacja tablic Podstawy

dr Artur Bartoszewski - Języki C i C++ , sem. 1I - WYKŁAD

Inicjalizacja tablicy - nadanie wartości początkowych w momencie definicji tablicy. Np.:

int tab[6] = {2, 3, 5, 7, 11, 13 } ;

Jest równoznaczne z:

tab[0]=2; tab[l]=3; tab[2]=5;

tab[3]=7; tab[4]=11; tab[5]=13;

Uwaga: zapis: cout << tab[6];odnosi się do nieistniejącego elementu tablicy.

Page 17: Języki programowania C i C++bartoszewski.pr.radom.pl/cpp/cpp_2017_w04.pdf · dr Artur Bartoszewski - Języki C i C++ , sem. 1I - WYKŁAD Zmienne lokalne statyczne – pozwalają,

17

Inicjalizacja tablic Podstawy

dr Artur Bartoszewski - Języki C i C++ , sem. 1I - WYKŁAD

Przy zapisie: int tab[] = {2, 3, 5, 7, 11, 13 };

kompilator „domyśli się”, że chodzi tablicę 6-cio elementową. Przy zapisie:

int tab[6] = {2, 3, 5};

pierwsze trzy elementy zostaną zainicjalizowane podanymi wartościami, pozostałe zerami:

tab[0]=2; tab[l]=3; tab[2]=5;

tab[3]=0; tab[4]=0; tab[5]=0;

Page 18: Języki programowania C i C++bartoszewski.pr.radom.pl/cpp/cpp_2017_w04.pdf · dr Artur Bartoszewski - Języki C i C++ , sem. 1I - WYKŁAD Zmienne lokalne statyczne – pozwalają,

18

Inicjalizacja tablic Podstawy

dr Artur Bartoszewski - Języki C i C++ , sem. 1I - WYKŁAD

Przykład: Lotto

Page 19: Języki programowania C i C++bartoszewski.pr.radom.pl/cpp/cpp_2017_w04.pdf · dr Artur Bartoszewski - Języki C i C++ , sem. 1I - WYKŁAD Zmienne lokalne statyczne – pozwalają,

19

Inicjalizacja tablic Podstawy

dr Artur Bartoszewski - Języki C i C++ , sem. 1I - WYKŁAD

Przykład: Lotto c.d.

Page 20: Języki programowania C i C++bartoszewski.pr.radom.pl/cpp/cpp_2017_w04.pdf · dr Artur Bartoszewski - Języki C i C++ , sem. 1I - WYKŁAD Zmienne lokalne statyczne – pozwalają,

20

Inicjalizacja tablic Podstawy

dr Artur Bartoszewski - Języki C i C++ , sem. 1I - WYKŁAD

Przykład: Lotto c.d.

Page 21: Języki programowania C i C++bartoszewski.pr.radom.pl/cpp/cpp_2017_w04.pdf · dr Artur Bartoszewski - Języki C i C++ , sem. 1I - WYKŁAD Zmienne lokalne statyczne – pozwalają,

21

Przekazywanie tablic do funkcji Podstawy

dr Artur Bartoszewski - Języki C i C++ , sem. 1I - WYKŁAD

NAZWA TABLICY jest równocześnie

ADRESEM JEJ ZEROWEGO ELEMENTU

Dla: int tab[10]; zapis: tab jest równoznaczny z &tab[0]

Przekazując tablicę do funkcji w rzeczywistości przekazujemy funkcji wskaźnik do tej tablicy.

Page 22: Języki programowania C i C++bartoszewski.pr.radom.pl/cpp/cpp_2017_w04.pdf · dr Artur Bartoszewski - Języki C i C++ , sem. 1I - WYKŁAD Zmienne lokalne statyczne – pozwalają,

22

Przekazywanie tablic do funkcji Podstawy

dr Artur Bartoszewski - Języki C i C++ , sem. 1I - WYKŁAD

Tablicy nie można przesłać przez wartość. Można tak przesłać pojedyncze jej elementy, ale nie całość.

Mamy funkcję o nagłówku:

void funkcja (float tab[]);

która spodziewa się jako argumentu: tablicy liczb typu float, Taką funkcję wywołujemy na przykład tak:

float tablica[4]={ 7, 8.1, 4, 4.12};funkcja (tablica);

Page 23: Języki programowania C i C++bartoszewski.pr.radom.pl/cpp/cpp_2017_w04.pdf · dr Artur Bartoszewski - Języki C i C++ , sem. 1I - WYKŁAD Zmienne lokalne statyczne – pozwalają,

23

Tablice wielowymiarowe Podstawy

dr Artur Bartoszewski - Języki C i C++ , sem. 1I - WYKŁAD

W języku C++ tablice wielowymiarowe to tablice, których elementami są inne tablice.

int tab_2D[n][m];

Definicja ta oznacza: tab_2D jest tablicą n-elementową, z których każdy jest m-elementową tablicą (liczb typu int). Uwaga: zapis int tab_2D[n , m] jest błędny.

Page 24: Języki programowania C i C++bartoszewski.pr.radom.pl/cpp/cpp_2017_w04.pdf · dr Artur Bartoszewski - Języki C i C++ , sem. 1I - WYKŁAD Zmienne lokalne statyczne – pozwalają,

24

Tablice wielowymiarowe Podstawy

dr Artur Bartoszewski - Języki C i C++ , sem. 1I - WYKŁAD

Przykład:

int tab_2D[4][3];

tab_2D jest tablicą 4-ro elementową, z których każdy jest 3-elementową tablicą liczb typu int. [4][3] 0 1 2

0 [0] [0] [0] [1] [0] [2]

1 [1] [0] [1] [1] [1] [2]

2 [2] [0] [2] [1] [2] [2]

3 [3] [0] [3] [1] [3] [2]

Page 25: Języki programowania C i C++bartoszewski.pr.radom.pl/cpp/cpp_2017_w04.pdf · dr Artur Bartoszewski - Języki C i C++ , sem. 1I - WYKŁAD Zmienne lokalne statyczne – pozwalają,

25

Tablice wielowymiarowe Podstawy

dr Artur Bartoszewski - Języki C i C++ , sem. 1I - WYKŁAD

Elementy takie umieszczane są kolejno w pamięci komputera tak, że najszybciej zmienia się najbardziej skrajny prawy indeks. Stąd, inicjalizacja zbiorcza:

int tab[3][2] = {1,2,3,4,5,6};

spowoduje, że elementom tej tablicy zostaną przypisane wartości początkowe tak, jakbyśmy to robili grupą instrukcji:

tab[0][0] = 1;tab[0][1] = 2;tab[l][0] = 3;tab[l][1] = 4;tab[2][0] = 5;tab[2][1] = 6;

Page 26: Języki programowania C i C++bartoszewski.pr.radom.pl/cpp/cpp_2017_w04.pdf · dr Artur Bartoszewski - Języki C i C++ , sem. 1I - WYKŁAD Zmienne lokalne statyczne – pozwalają,

26

Tablice wielowymiarowe Podstawy

dr Artur Bartoszewski - Języki C i C++ , sem. 1I - WYKŁAD

Obsługa tablicy dwuwymiarowej:

Page 27: Języki programowania C i C++bartoszewski.pr.radom.pl/cpp/cpp_2017_w04.pdf · dr Artur Bartoszewski - Języki C i C++ , sem. 1I - WYKŁAD Zmienne lokalne statyczne – pozwalają,

27

Przekazywanie tablic wielowymiarowych do funkcji Podstawy

dr Artur Bartoszewski - Języki C i C++ , sem. 1I - WYKŁAD

Dla tablicy dwuwymiarowej:

float tablica_2D[4][100];

Funkcję skonstruować powinniśmy tak:

void funkcja(float tab[4][100]);lub:

void funkcja(float tab[][100]);

Funkcję tę wywołujemy w sposób:

funkcja(tablica_2D);

Page 28: Języki programowania C i C++bartoszewski.pr.radom.pl/cpp/cpp_2017_w04.pdf · dr Artur Bartoszewski - Języki C i C++ , sem. 1I - WYKŁAD Zmienne lokalne statyczne – pozwalają,

28

Liczby losowe Podstawy

dr Artur Bartoszewski - Języki C i C++ , sem. 1I - WYKŁAD

Funkcja: int rand(); // #include <cstdlib>

zwraca pseudolosową liczbę całkowitą, która zawiera się w zakresie od 0 do stałej RAND_MAX.

Page 29: Języki programowania C i C++bartoszewski.pr.radom.pl/cpp/cpp_2017_w04.pdf · dr Artur Bartoszewski - Języki C i C++ , sem. 1I - WYKŁAD Zmienne lokalne statyczne – pozwalają,

29

Liczby losowe Podstawy

dr Artur Bartoszewski - Języki C i C++ , sem. 1I - WYKŁAD

Funkcja srand( ) ustawia punkt startowy generowania serii pseudo losowych liczb całkowitych. W celu reinicjalizowania generatora, ustaw wartość 1 dla argumentu seed. Każda inna wartość przekazana jako seed ustawia losowy punkt startowy generatora. Funkcja pobiera pseudolosowe wartości, które są generowane.

Page 30: Języki programowania C i C++bartoszewski.pr.radom.pl/cpp/cpp_2017_w04.pdf · dr Artur Bartoszewski - Języki C i C++ , sem. 1I - WYKŁAD Zmienne lokalne statyczne – pozwalają,

30

Losowanie liczb z określonego zakresu Podstawy

dr Artur Bartoszewski - Języki C i C++ , sem. 1I - WYKŁAD

int losowa_liczba = ( rand() % ile_liczb_w_przedziale )

+ startowa_liczba;

Page 31: Języki programowania C i C++bartoszewski.pr.radom.pl/cpp/cpp_2017_w04.pdf · dr Artur Bartoszewski - Języki C i C++ , sem. 1I - WYKŁAD Zmienne lokalne statyczne – pozwalają,

31

Czas Podstawy

dr Artur Bartoszewski - Języki C i C++ , sem. 1I - WYKŁAD

Funkcja time( ) zwraca czas lokalny w postaci time_t lub -1 w przypadku gdy wystąpił błąd. Jeśli argument jest ustawiony (różny od NULL) to czas lokalny jest również zapisywany do argumentu funkcji.

Funkcja ctime( ) konwertuje time_t na łańcuch znaków reprezentujący datę i czas.

Page 32: Języki programowania C i C++bartoszewski.pr.radom.pl/cpp/cpp_2017_w04.pdf · dr Artur Bartoszewski - Języki C i C++ , sem. 1I - WYKŁAD Zmienne lokalne statyczne – pozwalają,

32

Czas Podstawy

dr Artur Bartoszewski - Języki C i C++ , sem. 1I - WYKŁAD

Page 33: Języki programowania C i C++bartoszewski.pr.radom.pl/cpp/cpp_2017_w04.pdf · dr Artur Bartoszewski - Języki C i C++ , sem. 1I - WYKŁAD Zmienne lokalne statyczne – pozwalają,

33

Literatura:

W prezentacji wykorzystano przykłady i fragmenty:

•  Grębosz J. : Symfonia C++, Programowanie w języku C++ orientowane obiektowo, Wydawnictwo Edition 2000.

•  Jakubczyk K.: Turbo Pascal i Borland C++ Przykłady, Helion.

Warto zajrzeć także do:

•  Sokół R. : Microsoft Visual Studio 2012 Programowanie w Ci C++, Helion.

•  Kerninghan B. W., Ritchie D. M.: język ANSI C, Wydawnictwo Naukowo Techniczne.

Dla bardziej zaawansowanych:

•  Grębosz J. : Pasja C++, Wydawnictwo Edition 2000.

•  Meyers S.: język C++ bardziej efektywnie, Wydawnictwo Naukowo Techniczne

dr Artur Bartoszewski - Języki C i C++ , sem. 1I - WYKŁAD