LEKCJA 7 - WŁASNE FUNKCJE

Wiesz już bardzo dużo na temat programowania. Za pomocą tych prostych funkcji i instrukcji, które poznałeś w poprzednich lekcjach, możesz już tworzyć bardzo skomplikowane programy. Nieraz będą miały one bardzo długi kod, w którym łatwo sie będzie pogubić (a tym bardziej, jeśli nie zastosujesz komentarzy do opisywania różnych części kodu, odpowiedzialnych za wykonanie określonej czynności). Zwykle do wykonania jakiejś bardziej złożonej czynności służy kilka lub kilkanaście instrukcji. Jeżeli taką czynność będzie trzeba wykonać kilka razy w różnych miejscach programu, należy zdefiniować funkcję, która będzie grupowała i określała wszystkie te instrukcje.

Główną funkcją programu będzie jednak zawsze funkcja main(). To od niej zacznie się wykonywanie programu. Może się ona jednak odwoływać do innych funkcji, które sam zdefiniujesz. Definicja takiej funkcji, czyli przypisanie do jakiejś nazwy fragmentu kodu, musi odbyć się poza ciałem funkcji głównej main. Struktura programu wygląda więc następująco:

definicje plików nagłówkowych (dyrektywa #include)
definicje funkcji napisanych przez programistę i ich kod
funkcja główna main() i jej kod

Funkcja zdefiniowana przez programistę nie różni się dużo od funkcji głównej. Programista może jej nadać dowolną (no, prawie dowolną) nazwę. Deklaracja takiej funkcji odbywa się na zasadach analogicznych jak przy main(). Np.:

int mojafunkcja(int parametr)
{
   deklaracja zmiennych tylko w obrebie funkcji;
   instrukcje;
   instrukcje;
   return costam_typu_int;
}

Pora na przykład:

#include <stdio.h> 
#include <conio.h> 

int moja_funkcja(int a, int b, int c)
{
int suma;
suma=a*a+b*b+c*c;
return suma;
}

main (void) 
{ 
int a;
a=moja_funkcja(1,2,3);
printf("%d",a);
} 

getch(); 
return 0 ; 
} 

Zdefiniowalismy sobie własną funkcję o nazwie moja_funkcja(). Pobiera ona do działania 3 parametry - trzy liczby całkowite, a następnie oblicza sumę ich kwadratów. Wewnątrz funkcji zadeklarowaliśmy zmienną suma. Jest to tak zwana zmienna lokalna, to znaczy taka, która działa tylko w obrębie danej funkcji. Gdybyśmy spróbowali operować na zmiennej suma w ciele funkcji main(), kompilator zwróciłby błąd, że zmienna nie została zadeklarowana. Analogicznie sytuacja się ma ze zmienną a. W naszej funkcji została ona zadeklarowana jako parametr do wczytania. W ciele funkcji main znowu zadeklarowaliśmy zmienną a. Sęk w tym, że to nie jest już ta sama zmienna. Na tym właśnie polega istota zmiennych lokalnych- działają tylko w obrębie "swoich" funkcji.

Oprócz zmiennych lokalnych mamy jeszcze zmienne globalne. Jak nazwa wskazuje, mają one szersze znaczenie niż zmienne lokalne. Zmienna taka działa we wszystkich funkcjach jako ta sama zmienna (w powyższym przykładzie zmienna a jest czymś innym w funkcji main i czymś innym w funkcji moja_funkcja). Deklaruje się ją na samym początku programu, tuż po deklaracji plików nagłówkowych dyrektywą include. Spróbujmy zastosować teraz w ostatnim przykładzie zmienną globalną:

#include <stdio.h> 
#include <conio.h> 
int suma;

int moja_funkcja(int a, int b, int c)
{
suma=a*a+b*b+c*c;
return suma;
}

main (void) 
{ 
moja_funkcja(1,2,3);
printf("%d",suma);
} 

getch(); 
return 0 ; 
}  

Zmienną globalną w tym przykładzie jest suma. Jak widać, nie trzeba było deklarować jej ani w funkcji main ani w moja_funkcja. W obu tych funkcjach zmienna ta oznaczała tę samą zmienną. Dlatego po przepisaniu na nią pewnej wartości w funkcji w funkcji moja_funkcja zmiana jest też widoczna w funkcji main(). Zmienne lokalne i globalne różnią się w momencie przydzielania pamięci. Musisz sam zdecydować, które zmienne mają byc lokalne, a które globalne. Na razie będzie to zapewne wybór losowy, ale im więcej napiszesz programów, tym łatwiej będzie Ci o tym zdecydować.


Podsumowując:

  1. Grupę instrukcji, które mają się gdzieś powtórzyć, możesz zgrupować w jedną funkcję, która będzie je wykonywać.
  2. Funkcja może (ale nie musi) pobierać parametry.
  3. Własne funkcje należy deklarować poza ciałem funkcji main().
  4. Zmienna lokalna działa tylko wewnątrz określonej funkcji.
  5. Zmienna globalna obowiązuje we wszystkich funkcjach jako ta sama zmienna.


Autorem Kursu C++ jest Anna Miedzianowska (http://annamiedzianowska.republika.pl/).


Baner reklamowy: