250 likes | 383 Views
Zachodniopomorska Szkoła Biznesu. Podstawy programowania. Wykład 4: Funkcje. Co to jest funkcja?. Funkcja to fragment programu zawierający deklaracje lokalne oraz instrukcje , któremu nadano nazwę . Od tego miejsca w programie, fragment ten można uruchamiać podając tylko tę nazwę.
E N D
Zachodniopomorska Szkoła Biznesu Podstawy programowania Wykład 4: Funkcje
Co to jest funkcja? • Funkcja to fragment programu zawierający deklaracje lokalne oraz instrukcje, któremu nadano nazwę.Od tego miejsca w programie, fragment ten można uruchamiać podając tylko tę nazwę. • Funkcji używa się w sytuacji, gdy: • Pewien fragment programu powtarzałby się inaczej kilkakrotnie w jednakowej lub zbliżonej formie(zmniejszenie długości kodu i ilości pracy programisty) • Program jest długi i skomplikowany, dobrze jest wtedy podzielić go na mniejsze zadania, budować całość z mniejszych „klocków”(wzrost czytelności programu oraz ułatwienie jego pisania) • W języku C++ działanie każdej funkcji wiąże się z wygenerowaniem (zwracaniem) pewnej wartości, której typ musi zostać określony w jej nagłówku. Podstawy programowania - Funkcje
Składnia definicji funkcji • typ nazwa() // nagłówek (nawiasy konieczne) { deklaracje lokalne instrukcje } • Jeżeli funkcja ma nie zwracać żadnej wartości, nadajemy jej typ void. Można ją wtedy nazwać procedurą. • Jeżeli zwracany jest typ inny niż void, przed zakończeniem działania funkcji musi pojawić się instrukcja return wyrażenie; // typ zgodny z definicją! • Jeżeli funkcja jest typu void, można (ale nie trzeba) w dowolnym miejscu użyć instrukcji return; która powoduje natychmiastowe zakończenie działania funkcji. Podstawy programowania - Funkcje
Przykłady definicji funkcji (1) • void pusta() // funkcja minimum { } • float pi() // funkcja minimum z typem { return 3.1415; } • int signum() // sprawdzenie znaku { // globalnej zmiennej ‘a’ if (a<0) // (musi być zadeklarowana) return -1; else return (a>0); } Podstawy programowania - Funkcje
Przykłady definicji funkcji (2) • void odliczanie() // wypisanie na ekranie { // liczb od 10 do 1 int i; // zmienna lokalna for (i=10; i>0; i--) cout << i << endl; // wypisanie elementu } // tu nie musi być ‘return’ • int błędna() // nie ma ‘return’ dla { // wszystkich możliwych if (i==5) // przypadków return 1; } Podstawy programowania - Funkcje
Wywołanie funkcji • W celu uruchomienia funkcji należy umieścić jej wywołanie wewnątrz innej funkcji (np. w funkcji main) • Składnia: nazwa_funkcji(); // nawiasy konieczne!W tym przypadku wartość zwracana przez funkcję jest ignorowana. • Jeżeli funkcja jest innego typu niż void, można jej wywołanie umieścić w wyrażeniu w celu wykorzystania wartości zwracanej przez tę funkcję, np. x=2*nazwa_funkcji()+1; Oznacza to wykonanie funkcji i użycie zwróconej przez nią wartości do obliczeń. Podstawy programowania - Funkcje
Przykłady wywołania funkcji (1) int a1, a2, b1, b2; // zmienne globalne void Ustaw() { a1=b1=1; a2=b2=2; } void Zeruj() { a1=b1=a2=b2=0; } void main() { Ustaw(); // wywołanie funkcji ‘Ustaw’ Zeruj(); // wywołanie funkcji ‘Zeruj’ Ustaw(); Zeruj(); } Podstawy programowania - Funkcje
Przykłady wywołania funkcji (2) float pi() // ta funkcja musi być pierwsza { return 3.1415;} float dwapi(){ return 2* pi(); // wywołanie ‘pi’ } void main() { float Pole, Obwod, r=5; Pole = pi() * r*r; // wywołanie ‘pi’ Obwod= dwapi() * r; // wywołanie ‘dwapi’ } Podstawy programowania - Funkcje
Przekazywanie wartościprzez zmienne globalne float a,b,c,delta, x1,x2; float Obliczdelta() // funkcja wymaga danych { return delta=b*b-4*a*c;} void ObliczDwa(); { x1=(-b-sqrt(delta)) / (2*a); x2=(-b+sqrt(delta)) / (2*a); } void main() { a=2, b=3, c=-1; if (Obliczdelta()>0) ObliczDwa(); } Podstawy programowania - Funkcje
Zmienne globalne i lokalne • Nie wolno w tym samym zakresie zdefiniować dwóch symboli o tej samej nazwie, bez względu na ich typ • Symbole definiowane wewnątrz funkcji lub w instrukcji blokowej nazywane są lokalnymi • Symbole lokalne tworzone są podczas rozpoczęcia wykonania bloku i niszczone przy opuszczeniu bloku, w którym zostały zadeklarowane • Zmienne lokalne powstają na tzw. stosie i po utworzeniu mogą zawierać wartości przypadkowe, podczas gdy zmienne lokalne zawsze inicjalizowane są zerami. • Symbol lokalny o mniejszym zakresie może mieć tę samą nazwę co symbol o szerszym zakresie (np. globalny), ale utrudnia jego wykorzystanie, przesłania go • Do zmiennej globalnej można uzyskać dostęp dzięki operatorowi zakresu :: umieszczonemu przed nazwą, np. ::zmienna Podstawy programowania - Funkcje
Przykłady deklaracji int a=1,b=2; // deklaracje symboli globalnych float a; // błąd: powtórzona nazwa ‘a’ int b() // błąd: powtórzona nazwa ‘b’ {} void fun() {int a=3; // zmienne lokalnefloat b=5; // (przesłaniające globalne) { int a; // zmienna „jeszcze bardziej lokalna”} int x= a; // użycie zmiennej lokalnej x= ::a; // dostęp do zmiennej globalnej } Podstawy programowania - Funkcje
Parametry funkcji • Większość funkcji potrzebuje do swego działania danych wejściowych, które można przekazać podczas wywołania dzięki użyciu parametrów, np. • Składnia definicji funkcji z parametrami: typ NazwaFunkcji(typ1 par1, typ2 par2, ...){ ... } • Wywołanie funkcji z parametrami: NazwaFunkcji(wartość_typu1, wartość_typu2, ...) • Liczba wartości i ich typy muszą być zgodne z nagłówkiem funkcji • Parametry funkcji można rozumieć jako deklaracje zmiennych lokalnych, które „wypełniane” są przy uruchomieniu funkcji kopiami przekazanych wartości Podstawy programowania - Funkcje
Przykłady funkcji z parametrami float PoleKola(float r) // funkcja z 1 parametrem { return 3.1415*r*r; // użycie parametru } float Delta(float a, float b, float c) // 3 parametry {return b*b-4*a*c; // użycie parametrów } void main() {float aa=1,bb=3,cc=-2, r=2; // inne r! float P, D, x; P=PoleKola(1);P=PoleKola(r+2);if (Delta(aa,bb,cc)==0) x=-b/(2*a); } Podstawy programowania - Funkcje
Przesłanianie zmiennych globalnych przez parametry funkcji int x,y,a=1; void funkcja(int a) // ta sama nazwa ‘a’ (a=2) { x=a; // użycie zmiennej lokalnej ‘a’, x=2a=a+5; // zmienna lokalna a=2+5=7 } void main() { x=a; // użycie zmiennej globalnej ‘a’, x=1 funkcja(2); x=a; // zmienna globalna ‘a’ bez zmian, x=1 } Podstawy programowania - Funkcje
Deklaracja funkcji (prototyp) • Do użycia danej funkcji kompilatorowi (a także programiście) potrzebna jest tylko wiedza o jej nazwie, zwracanym typie oraz parametrach wywołaniaTzw. ciało funkcji niezbędne jest dopiero na etapie linkowania, a więc może znajdować się w dalszej części programu lub nawet w oddzielnym pliku (np. w bibliotece). • Niezbędnego opisu funkcji dostarcza jej deklaracja, zwana też prototypem lub headerem. Składnia: typ NazwaFunkcji(typ1 par1, typ2 par2, ...); • Jeżeli taka deklaracja znajdzie się w programie, to w dalszym ciągu pliku można wywoływać tę funkcję normalnie, tak jakby była w pełni zdefiniowana. • Kompletna definicja tej funkcji musi jednak gdzieś się znajdować: albo pod spodem albo w innym pliku Podstawy programowania - Funkcje
Przykład użycia prototypu float potega(float a, int wyk); // prototyp void main() {float x=potega(2,5); // wywołanie funkcji } float potega(float a, int wyk) // definicja funkcji { int i;float p=1; for (i=0; i<wyk; i++) p*=a;return p; } Podstawy programowania - Funkcje
Biblioteki • W wielu programach, jakie są tworzone powtarza się znaczna liczba różnych elementarnych zadań. W celu ułatwienia pracy programisty wiele z nich zostało już wcześniej zaprogramowane i zebrane w różnego rodzaju bibliotekach, zwykle dołączonych do kompilatora. • Biblioteki zawierają przede wszystkim gotowe funkcje • Zwykle domyślnie ustawiona jest opcja kompilatora nakazująca poszukiwanie we wskazanych bibliotekach tych funkcji, które w programie znalazły się jedynie w formie deklaracji (prototypu) • Próba wywołania w programie funkcji bibliotecznej bez podania wcześniej prototypu spowoduje błąd kompilacji (nieznany symbol) • W celu skorzystania z funkcji bibliotecznej należy wcześniejalbo samodzielnie wpisać jej prototyp (np. na podstawie dokumentacji) albo dokonać importu pliku nagłówkowego (ang. header file) za pomocą dyrektywy #include Podstawy programowania - Funkcje
Preprocesor • Integralną częścią koncepcji języka C/C++ jest preprocesor czyli moduł dokonujący pewnych operacji na tekście programu jeszcze przed jego kompilacją • Działa on w oparciu o tzw. dyrektywy, które są poleceniami rozpoczynającymi się od znaku # (hash), który musi być pierwszym znakiem w danej linii programu(nie licząc spacji, tabulacji lub ewentualnie komentarza ograniczonego parą znaków /* i */ ) • Standardowe dyrektywy to:#include#define #undef#if #ifdef #ifndef#else #elif #endif#line #error#pragma Podstawy programowania - Funkcje
Dyrektywa #include • Składnia:#include <nazwa_pliku>lub#include ”nazwa_pliku” • Dyrektywa ta powoduje, że preprocesor w jej miejsce wkleja podany plik w całości • Zazwyczaj wklejanymi plikami są pliki nagłówkowe z rozszerzeniem .h . Zawierają one m.in. prototypy funkcji • Podany plik poszukiwany jest w katalogach wyszczególnionych w opcjach kompilatora jako „include directories”. Znajdują się tam pliki nagłówkowe m.in. z prototypami funkcji bibliotecznych • Jeżeli nazwę pliku podano w cudzysłowach (” ”), plik poszukiwany jest najpierw w katalogu, w którym znajduje się plik programu (następnie w katalogach standardowych)Wkleja się w ten sposób własne pliki nagłówkowe zawierające m.in. prototypy funkcji zdefiniowanych w różnych plikach Podstawy programowania - Funkcje
Dyrektywa #define • Składnia:#define NAZWA ciąg znaków lub#define NAZWA // ciąg pusty • Każde wystąpienie w tekście programu symbolu NAZWA zostanie przed kompilacją zamienione na podany ciąg znaków • Jeżeli chcemy aby ciąg znaków zawierał więcej niż jedną linię, można go kontynuować w linii następnej pod warunkiem, że na końcu poprzedniej pojawi się znak \ (backslash), który nie będzie wklejany jako część ciągu: #define NAZWA ciąg znaków \ kontynuacja ciągu znaków\ kontynuacja ciągu znaków • Dyrektywę tę wykorzystuje się również do tworzenia tzw. makr z użyciem parametrów wywołania Podstawy programowania - Funkcje
Przykłady użycia dyrektywy #define • Tworzenie stałych #define PI 3.1415float x=PI/2;#define N 10 ...for (i=1; i<N; i++)... • Zamiana wybranych słów na inne #define float double W programie poniżej tej dyrektywy wszystkie napisy float zmienią się na double • Usuwanie wybranych słów#define unsigned...unsigned int x; // unsigned zniknie Podstawy programowania - Funkcje
Biblioteka iostream • Każdy algorytm czy program wymaga wprowadzania danych wejściowych i wyprowadzania wyniku • Podstawowym sposobem wprowadzania danych jest ich wpisywanie z klawiatury, a wyprowadzania danych - wyświetlanie na ekranie • Tzw. operacje wejścia-wyjścia realizowane są za pomocą funkcji (lub obiektów) z bibliotek. W języku C++ zwykle korzysta się w tym celu ze zbioru nagłówkowego iostream.h(W języku C stosowano raczej zbiór nagłówkowy stdio.h) • Biblioteki te umożliwiają przede wszystkim możliwość korzystania z klawiatury, wyświetlania na ekranie oraz dostępu do plików • Biblioteka iostream.h jest skonstruowana w sposób obiektowy, udostępnia więc nie tylko funkcje ale także obiekty Podstawy programowania - Funkcje
Wyświetlanie tekstu: obiekt cout • cout jest obiektem odpowiadającym standardowemu strumieniowi wyjściowemu, który domyślnie połączony jest z wyświetlaniem tekstu na ekranie. • Wyświetlenie tekstu uzyskuje się dzięki specjalnie zdefiniowanemu operatorowi << • Składnia:cout << wyświetlany_element;cout << element1 << element2 << element3; • W celu przechodzenia na początek następnej linii zdefiniowano symbol endlcout << 100.99 << endl; • Wyświetlenie tekstu podanego wprost w programie wymaga umieszczenia go w cudzysłowiu cout << ”Liczba PI= ”<< 3.14 << endl; Podstawy programowania - Funkcje
Wprowadzanie danych: obiekt cin • cin jest obiektem odpowiadającym standardowemu strumieniowi wejściowemu, który domyślnie połączony jest z wprowadzanie danych z klawiatury • Wprowadzanie danych uzyskuje się dzięki specjalnie zdefiniowanemu operatorowi >> • Wprowadzanie danych odbywa się zawsze do pamięci, a więc musimy podać nazwę zmiennej, która ma zapamiętać dane • Składnia: int a,b,c; cin >> a; // po znaku << musi być zmiennacin >> a >> b >> c; • Zwykle najpierw wyświetla się żądanie podania danych, np. cout << „Podaj swoją cenę: ”;cin >> cena; Podstawy programowania - Funkcje
To już jest koniec++ Dziękuję za uwagę