Programowanie/Procedury i funkcje/Argumenty procedur i funkcji
Podprogram można rozumieć jak sztukę teatralną. Jest ona zdefiniowana dla aktorów (Klara, Wacław), którzy mają określony algorytm ,ale są postaciami fikcyjnymi. W prawdziwym życiu po Klarę podstawiamy aktorkę Natalię, pod Wacława podstawiamy aktora Michała i dopiero wówczas możemy uruchomić sztukę.
Innymi słowy podprogram ma swój interfejs. Jest on określony w deklaracji podprogramu. Są tam określone zmienne, które będą wykorzystane w owym podprogramie. Są one zwane parametrami formalnymi podprogramu. W czasie działania algorytmu, pod te zmienne podstawia się zmienne z programu głównego. Są one zmiennymi faktycznymi (zwanymi czasem niepoprawnie parametrami aktualnymi).
Parametry ogólnie mogą być wejściowe, wejściowo-wyjściowe lub też wyjściowe. Parametr wejściowy pozwala przekazać do podprogramu wartość, ale zmiana jej wartości nie będzie widoczna w programie głównym. Zmienne wyjściowe zachowują swoją wartość po zakończeniu działania podprogramu.
W języku C podprogramy są zwane funkcjami. Każda funkcja ma nagłówek zawierający jej interfejs oraz ciało, mieszczące algorytm. Definicję funkcji czytamy od lewej do prawej, tzn. po prawej stronie w nawiasie są parametry formalne, na środku jest nazwa funkcji a po stronie lewej jest typ wartości zwracanej.
Jeżeli funcja nie zwraca wartości, wówczas jest typu void. Słowo void jest słowem kluczowym języka C.
przykład:
//deklaracja funcji w języku C
/*
Funkcja oblicza pierwiastki rzeczywiste
równania kwadratowego a*x^2 + b*x +c == 0
Pobiera współczyniki a, b, c i wyświetla na ekranie rezultat obliczeń.
Nie zwraca żadnej wartości.
*/
void rozwiazRowanieKwadratowe(double a, double b, double c)
{
// tu są instrukcje obliczające i wyświetlające
// ta instrukcja powoduje wyjście z funkcji
return;
}//funkcja rozwiazRownanieKwadratowe
Uruchomienie funkcji następuje w programie głównym albo innym podprogramie:
#include <stdio.h>
//deklaracja i definicja funkcji
void rozwiazRownianieKwadratowe(double a, double b, double c)
{
//TU JEST CIAŁO FUNKCJI
}//funkcja rozwaiazRownanieKwadratowe
//----------------------------------
//program główny
int main(void)\
{
//definiujemy współczynniki rówania
double wsp_1 = 1.0;
double wsp_2 = 2.0;
double wsp_3 = 3.0;
//uruchamiamy funkcję
rozwiazRowanieKwadratowe(wsp_1, wsp_2, wsp_3);
// funkcja main też zwraca wartość int dla systemu operacyjnego
return 0;
}//main