LEKCJA 7 - WúASNE FUNKCJE

iesz 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: