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