w05, Studia PK, JiPP, Wykłady - Chmaj

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
  • zanotowane.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • alter.htw.pl
  • Powered by WordPress, © Nie obrażaj więc mojej inteligencji poprzez czynione na pokaz zaniżanie własnej.