Nie obrażaj więc mojej inteligencji poprzez czynione na pokaz zaniżanie własnej.
Funkcje i struktura programu
• Po co stosować funkcje o moŜliwość podziału duŜego przedsięwzięcia obliczeniowego na mniejsze zadania (łatwiejsze do napisania, analizy i testowania) o moŜliwość ukrycia nieistotnych szczegółów (waŜne „co” a nie „jak”) – większa przejrzystość całości, łatwość wprowadzania zmian o funkcje napisane raz moŜemy zastosować do innych celów (powtórne wykorzystanie kodu); funkcje biblioteczne • Dobra funkcja – realizuje jedno, dobrze określone zadanie • Ogólna struktura funkcji typ_zwracany nazwa ( lista_argumentów ) { deklaracje instrukcje } • gdy nie podano typu zwracanego – domyślnie int • nawiasy (...) konieczne • gdy brak argumentów – ( void ) • zwracanie wartości: return wyra Ŝ enie ; • funkcji nie moŜna zagnieŜdŜać – są względem siebie zewnętrzne Przykład: #include <iostream> #include <iomanip> // udistępnia manipulatory using namespace std; // deklaracja i definicji funkcji // wywołanie funkcji int potega(int m, int n); // deklaracja funkcji potega int main() { int i; for (i=0; i<5; i++) cout << setw(3) << i << setw(5) << potega(2,i) << setw(5) << potega(-3,i) << endl; return 0; } // definicja funkcji potega: // podnies baza do potegi wykl; wykl >=0 int potega(int baza, int wykl) { int p=1; for (int i=1; i<=wykl; i++) p*= baza; return p; } 0 1 1 1 2 -3 2 4 9 3 8 -27 4 16 81 Definicje i wywołania funkcji • definicje funkcji mogą być umieszczone w dowolnej kolejności (w jednym lub kilku plikach źródłowych); definicja funkcji nie moŜe być rozdzielona pomiędzy plikami • funkcja nie moŜe być uŜyta przed zdefiniowaniem lub zadeklarowaniem – w przykładzie powyŜej konieczna deklaracja • rozróŜnienie pomiędzy definicją a deklaracją o definicja – dotyczy miejsca, w którym obiekt jest faktycznie tworzony (przypisuje się jej miejsce w pamięci) o deklaracja – dotyczy miejsca, w której określa się naturę obiektu ale nie przydziela mu pamięci o nie musi podawać nazw parametrów – wystarczą typy int potega(int, int); • wywołanie funkcji – napisanie jej nazwy wraz z ujętymi w nawiasy argumentami • jeŜeli typ funkcji róŜny od void to kaŜda ścieŜka wykonania funkcji powinna kończyć się instrukcją return wyra Ŝ enie ; • jeŜeli funkcja typu void – powrót przez return lub osiągnięcie końca bloku funkcji • rozróŜnienie pomiędzy argumentem formalnym (w definicji funkcji) a argumentem aktualnym (w wywołaniu funkcji) Przekazywanie argumentów do funkcji • w C przy wywołaniu funkcji wszystkie argumenty aktualne są przekazywane funkcji „przez wartość” • oznacza to, Ŝe funkcja nie ma dostępu do oryginalnego obiektu argumentu aktualnego, a tylko do jego kopii, przekazywanej poprzez zmienną tymczasową, będącą lokalną zmienną funkcji • funkcja moŜe uŜywać tych lokalnych kopii do obliczeń, moŜe je modyfikować, ale te zmiany nie przenoszą się na oryginalną wartość argumentu aktualnego Przykład: #include <iostream> using namespace std; void zwieksz(int a) { a++; } main() { int b=3; zwieksz(b); cout << "b jest rowne " << b << endl; } • zwiększenie kopii argumentu aktualnego nie przenosi się na oryginał Wa Ŝ ny wniosek : na podstawie tego co wiemy do tej pory funkcja moŜe zmodyfikować i zwrócić (poprzez return) do funkcji wywołującej wartość nie więcej niŜ jednego wyraŜenia. Przykład: include <iostream> using namespace std; #define PI 3.1415926 double kula(double); main() { double r,v,s; r=1.0; s=kula(r); cout.precision(3); cout << "Pole powierzchni = " << s << endl; //cout << "Objetosc = " << v << endl; // obliczone ale nieprzekazane return 0; } double kula(double r) { double s,v; s=4*PI*r*r; v=4*PI*r*r*r/3; return s; } • W funkcji moŜemy obliczyć wiele wielkości, ale zwrócić moŜemy tylko jedną Zmienne lokalne • zakres waŜności: zmienne zdefiniowane w pewnym bloku – dostępne tylko w nim (zmienne lokalne) • czas Ŝycia: zmienna lokalna zaczyna istnieć w momencie rozpoczęcia wykonania bloku, w którym została zdefiniowana i znika w chwili wyjścia z tego bloku (pojawia się i znika automatycznie – stąd nazwa: zmienne automatyczna). • przechowywane na stosie |
Menu
|