Podstawy Programowania Lab 5

FUNKCJE W JĘZYKU C/C++

Funkcja – wysoce niezależny blok definicji i instrukcji programu (podprogram).

Każdy program napisany w języku C/C++ zawiera przynajmniej jedną funkcję o predefiniowanej nazwie: main(). Najczęściej wykorzystuje się również wiele innych predefiniowanych funkcji, np. printf(...), scanf(...), abs(...), sin(...), itp. Można także definiować nowe - własne funkcje.

Deklaracja funkcji

Ogólna postać deklaracji funkcji:

typ_funkcji nazwa_funkcji (lista typów argumentów); 

Deklaracja funkcji informuje kompilator jaką wartość funkcja będzie zwracała i jakiego typu są jej argumenty:

float fun(int a);

float fun(int);

Nazwy argumentów w deklaracjach nie są istotne dla kompilatora i można je pominąć.

Definicja funkcji

Definicja jest deklaracją, w której jest przedstawiona treść funkcji. Każda funkcja wywoływana w programie musi być zdefiniowana, tylko raz.

PRZYKŁAD 1.

#include <iostream.h>

long dodaj(int, int); //deklaracja funkcji, prototyp funkcji

main() {

long wynik; int i=9; float f=3.45;

wynik = dodaj(2, 5); //wywołanie funkcji

wynik = dodaj(3, i);

wynik = dodaj(i, f); //konwersja float do int

}

long dodaj(int a, int b){ //definicja funkcji

long w;

w=2*a+2*b;

return (w); //return (2*a+2*b) jest instrukcją powrotu

}

Przy przekazywaniu argumentów, sprawdza się typ argumentów i tam gdzie trzeba dokonuje się niejawnej i jawnej konwersji typów argumentów.

main( )

main(void)

main(int argc, char* argv[ ])

Uwaga: nie można grupować sekwencji parametrów tego samego typu:

int MAX (int liczba_1, liczba_2, liczba_3) źle!

return liczba_1;

return(liczba_1);

Przekazywanie argumentów do funkcji

Podczas wywoływania funkcji przydziela się pamięć dla jej argumentów formalnych, a następnie każdemu argumentowi formalnemu przypisuje się odpowiadający mu parametr aktualny. Sprawdza się przy tym zgodności typów i w razie potrzeby dokonuje się konwersji.

void func(int par) {

par += 5; //par = par+5;

}

Zmienna par to tzw. parametr formalny funkcji. W funkcji main() wywołujemy ją w następujący sposób:

 

void main(){

int a1=5;

func(a1); // a1 to jest parametr aktualny funkcji

}

Argumenty przekazujemy:

Przekazywanie parametrów przez wartość

Funkcja pracuje na kopii zmiennej (parametru aktualnego), więc funkcja nie ma możliwości modyfikowania go. Parametr aktualny służy jedynie do modyfikacji parametru formalnego przechowywanego tymczasowo na stosie.

PRZYKŁAD 2.

int func(int par){

par = par + 5;

cout<<"\nfunkcja: par="<<par;

return (par);

}

Zmienna par to argument (parametr) formalny funkcji.

void main(){

int w, a1=5;

cout<<"\nParametr aktualny przed wywolaniem: a1 = "<<a1;

w = func(a1);

cout<<"\nParametr aktualny po wywolaniu: a1 = "<<a1;

cout<<"\nWynik = "<<w;

}

Przesyłanie argumentów przez referencję (czyli przez przezwisko)

Przy przekazywaniu parametru przez referencje do funkcji przesyłany jest adres zmiennej. Operacje przeprowadzane są bezpośrednio na zmiennej, której referencje przesłano do funkcji lub na zmiennej tymczasowej, gdy występuje niezgodność typu referencyjnego i argumentu.

PRZYKŁAD 3.

#include <iostream.h>

void zer(int wart, int &ref);

/******************************************************/

main(){

int a=44, b=77 ;

cout « "Przed wywolaniem funkcji: zer \n";

cout « "a = " « a « ", b = " « b « endl;

zer(a, b) ;

cout « "Po powrocie z funkcji: zer \n"

cout « "a = " « a « ", b = " « b « endl;

/*****************************************************/

void zer( int wart, int &ref){

cout « "\tW funkcji zer przed zerowaniem \n";

cout « "\twart = " « wart « ", ref = " « ref « endl; wart = 0;

ref = 0;

cout « "\tW funkcji zer po zerowaniu \n";

cout « "\twart = " « wart « ", ref = " « ref « endl;

}

}

ZADANIA

  1. Przeanalizuj programy z przykładów 1, 2, 3 i uzasadnij wyniki ich działania.

  2. Napisz program obliczający silnię dla liczby całkowitej podanej z klawiatury (program zawiera funkcję o nazwie silnia).

  3. Przy użyciu funkcji z zadania 2 napisz program obliczający współczynnik Newtona $\left( \frac{n}{k} \right)$.


Wyszukiwarka