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

Post on 01-Apr-2020

7 views 0 download

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

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

Wykład 4:

Języki programowania C i C++

2

Przeciążanie nazw funkcji

Podstawy programowania w C++

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

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);

4

Przeciążanie nazw funkcji Podstawy

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

5

Przeciążanie nazw funkcji Podstawy

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

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

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() {}

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.

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ść.

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.

11

Obiekty lokalne statyczne Podstawy

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

12

Tablice

Podstawy programowania w C++

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

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 ];

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.

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++)……;

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.

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;

18

Inicjalizacja tablic Podstawy

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

Przykład: Lotto

19

Inicjalizacja tablic Podstawy

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

Przykład: Lotto c.d.

20

Inicjalizacja tablic Podstawy

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

Przykład: Lotto c.d.

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.

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);

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.

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]

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;

26

Tablice wielowymiarowe Podstawy

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

Obsługa tablicy dwuwymiarowej:

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);

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.

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.

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;

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.

32

Czas Podstawy

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

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