4 - Procedury i funkcje

Ikona obiektów Cele lekcji
Nabycie umiejętności korzystania z procedur i funkcji w języku C/C++.

Ikona obiektów Co powinieneś już wiedzieć?
  • Jakie są podstawowe typy zmiennych w C/C++. W jaki sposób obsługuje się polecenia wejścia/wyjścia w C/C++.
  • Jak wyglądają podstawowe operacje w języku C/C++, np. jak zadeklarować zmienną, przypisać wartość do zmiennej, wykonać podstawowe operacje arytmetyczne, wykonać operacje warunkową
  • Jak wyglądają pętle w języku C/C++

Ikona obiektów Procedury
Procedura (zwana także podprogramem) to wydzielony fragment kodu, który wykonuje pewne operacje. Procedury stosuje się, aby uprościć kod programu, zwiększyć jego czytelność, lub aby mieć możliwość wielokrotnego (z różnych miejsc w programie) wywoływania tych samych poleceń.

Ikona obiektów Funkcje

Funkcje (zwane również podprogramami z wynikiem) to procedury, które oprócz wykonywania pewnych operacji zwracają także wynik swojego działania. Stosuje się je, aby uprościć kod programu, zwiększyć jego czytelność, lub aby mieć możliwość wielokrotnego (z różnych miejsc w programie) wykonywania tych samych obliczeń. Funkcje charakteryzują się tym, że zawsze muszą zwrócić pewien wynik, czyli wartość zmiennej określonego typu.

Zwracaną wartość funkcji można wykorzystywać jak normalną zmienną, za wyjątkiem przypisywania jej wartości.


Ikona obiektów Procedury i funkcje w języku C/C++

W języku C/C++ w rzeczywistości nie występują procedury. Podprogram jest zawsze funkcją, a żeby uzyskać procedurę, trzeba stworzyć funkcję zwracającą typ pusty (nic).

Definicja funkcji wygląda następująco:

zwracany_typ nazwa(parametry)
{

operacje;
return wartość;
}

zwracany_typ to nazwa typu, który będzie miała zwracana wartość.

nazwa to nazwa funkcji. Funkcja może mieć dowolną nazwę, która nie jest słowem kluczowym języka C/C++, składa się z liter, cyfr i znaku podkreślenia oraz nie zaczyna się od cyfry.

Po nazwie w nawiasie występują parametry funkcji. Lista parametrów może być pusta, wówczas należy umieścić nawias zamykający zaraz po otwierającym. Parametry to umieszczone po przecinku typy oraz nazwy zmiennych, określane tak samo jak podczas definicji zmiennych. Podczas wywoływania funkcji parametry muszą zgadzać się z tymi zadeklarowanymi.

Każda funkcja powinna zawierać polecenie return. Zwraca ono wartość podaną po spacji oraz kończy działanie funkcji (przerywa ją, nawet jeśli później występują jakieś dodatkowe polecenia).

Każda funkcja (i procedura) musi zostać zadeklarowana zanim zostanie użyta. Oznacza to, że deklaracja funkcji w kodzie musi znaleźć się wcześniej (wyżej) niż miejsce, w którym jest ona używana.


Ikona obiektów Przykład

Poniżej przykład prostej funkcji wyznaczającej mniejszą z dwóch liczb całkowitych:

int minimum(int a, int b)
{

if (a < b) return a;
else return b;
}


Ikona obiektów Typ void

Jak już zostało wspomniane, w języku C/C++ występuje tzw. typ pusty, czyli void. Zmienna tego typu nie może przyjmować żadnych wartości. Jest ona stosowana do deklaracji procedur, czyli funkcji, które nie zwracają żadnej wartości.

UWAGA! W przypadku procedur, czyli funkcji zwracających zmienną typu void, w kodzie procedury nie powinno występować słowo return z wartością, lecz bez niej. W takim przypadku kończy ono jedynie działanie procedury, nie zwracając żadnego wyniku.

Słowa void można również użyć do oznaczenia pustej listy parametrów funkcji, np. int funkcja(void);


Ikona obiektów Zmienne globalne i lokalne

Wszystkie zmienne, które zostały zadeklarowane wewnątrz ciała funkcji lub wewnątrz innego bloku, nazywane są zmiennymi lokalnymi. Czas życia takich zmiennych jest tak długi, jak wykonywanie poleceń z tego bloku lub funkcji.

Zmienne globalne to takie zmienne, które są zadeklarowane poza wszystkimi blokami kodu w programie. Takie zmienne dostępne są zawsze z każdego miejsca w programie, a zmiana ich wartości wprowadzona w jednym miejscu może mieć wpływ na działanie programu w zupełnie innym miejcu, gdzie wartość ta również jest wykorzystywana.


Jaki Twoim zdaniem będzie efekt działania programu?

int x; //zmienna globalna

void pomnoz_x_przez(int a)
{

x *= a; // a jest zmienną lokalną
}

int main()
{
x = 2;
pomnoz_x_przez(3);
printf("%d",x);
return 0;
}



Ikona obiektu Zastanów się
Jak powinien wyglądać program, który wczyta cztery liczby naturalne, a następnie wyliczy sumę największego wspólnego dzielnika pierwszych dwóch i ostatnich dwóch?
Ikona obiektu Pytanie Zadania

Jak można zauważyć, wszystkie programy, które rozważaliśmy do tej pory, są również pewnymi funkcjami. W języku C/C++ występuje specjalna funkcja o nazwie main, która jest zawsze wywoływana jako pierwsza, automatycznie przy uruchomieniu programu. Przyjrzyjmy się więc pierwszemu programowi, który został zaprezentowany podczas tego kursu:


int main()
{
int a,b;
scanf("%d%d",&a,&b);
printf("%d",a+b);
return 0;
}

 

Jakiego typu wartość zwraca funkcja main w tym przypadku?

  
typ zmiennoprzecinkowy
typ całkowitoliczbowy
typ pusty

W przypadku chęci zmiany funkcji main na procedurę należy zmienić zwracany typ na void, czyli w pierwszej linijce zamiast int main, należy mieć void main. Co jeszcze należy zmienić?
  
int a,b;
printf("%d",a+b);
return 0;

Ile parametrów ma funkcja main?
  
0
1
2