Pobieranie prezentacji. Proszę czekać

Pobieranie prezentacji. Proszę czekać

Język ANSI C Funkcje Wykład: Programowanie komputerów

Podobne prezentacje


Prezentacja na temat: "Język ANSI C Funkcje Wykład: Programowanie komputerów"— Zapis prezentacji:

1 Język ANSI C Funkcje Wykład: Programowanie komputerów
Prowadzący: dr inż. Sławomir Nowak

2 Takie zadanie spełniają w języku C FUNKCJE
Wprowadzenie Często istnieje potrzeba wielokrotnego wykonywania tych samych operacji. Łatwiej było by zastąpić wielokrotnie wykonywany fragment przez uniwersalny podprogram, np.: wyznaczający określoną wartość dla zadanych parametrów. Takie zadanie spełniają w języku C FUNKCJE

3 Przykład: rozwiązywanie układu równań liniowych metodą wyznaczników
Algorytm jest następujący: Pobierz współczynniki równań; Oblicz wyznacznik główny W; Jeśli wyznacznik główny jest różny od 0 skocz do 6 Oblicz wyznacznik Wx; Jeśli Wx <> 0 – poinformuj o braku rozwiązań, Wx=0 oznacza nieskończenie wiele rozwiązań. W obu przypadkach zakończ wykonywanie programu. Oblicz Wx i Wy, x=W/Wx, y=W/Wy, wypisz rezultaty wyjściowe i zakończ program.

4 #include <stdio.h>
double Wyzn (double a1, double a2, double b1, double b2) { return a1*b1-a2*b2; } int main(void){ double a1=1, a2=1, a3=2, b1=-1, b2=1, b3=4, W, x, y; W = Wyzn(a1, a3, b1, b3); if(!W) if (!Wyzn(a1, a3, b1, b3)) puts (”\n Uklad rownan zależnych”); else puts(”\n Układ równań sprzecznych”); x = Wyzn(a3, b3, a2, b2)/W; y = Wyzn(a1, a3, b1, b3)/W; printf(”\n x=%lf \n y=%lf”, x, y); return 0;

5 Można także, aby program uczynić bardziej uniwersalnym, zamknąć część programu obliczającą wynik równań w osobnej funkcji: unsigned RozwUklad( double a1, double a2, double a3 double b1, double b2, double b3, double * x, double * y) { double W; W = Wyzn(a1, a3, b1, b3); if (W != 0) if(!Wyzn(a1, a3, b1, b3)) return 0xffff; else return 0; } * x = Wyzn(a3, b3, a2, , b2) / W; * y = Wyzn(a1, a3, b1, b3) / W; return 1;

6 Przykład: rozwiązywanie układu równań liniowych metodą wyznaczników
Wywołanie programu przybierze wtedy postać: int main (void) { double a1=1, a2=1, a3=2, b1=-1, b2=1, b3=4, W, x, y; unsigned lrozw = RozwUklad(a1, a2, a3, b1, b2, b3, &x, &y); ... wypisywanie wyników w zależności od liczby rozwiązań ... }

7 Czemu stosujemy funkcje?
Przejrzystość struktury programu; Oszczędność czasu – raz napisana funkcja może być wielokrotnie wykorzystywana; Oszczędność pamięci – funkcja umieszczana jest w jednym miejscu pamięci;

8 Definicja funkcji Aby korzystać z funkcji, musi być ona zdefiniowana.
Definicja obejmuje: Opcjonalne słowa kluczowe extern, static, inline; typ wartości funkcji; identyfikatora (nazwy) funkcji; listy parametrów; Ciała funkcji w nawiasach klamrowych.

9 Słowa kluczowe extern, static, inline
extern - informuje, że funkcja może być odstępna poza modułem programu (domyślnie) static – funkcja dostępna tylko w module, w którym ją zdefiniowano inline – dostępne w C++, oznacza, że skompilowane ciało funkcji umieszczane jest w miejscu jej wywołania, co powinno przyspieszyć wykonywanie programu

10 Typ wartości Typ wartości funkcji.
Jeśli typ został pominięty, domyślnie przyjmuje się int Dozwolone są wszelkie typy z wyjątkiem tablic i funkcji

11 Typ wartości Typ wartości funkcji.
Jeśli typ został pominięty, domyślnie przyjmuje się int Dozwolone są wszelkie typy z wyjątkiem tablic i funkcji

12 Nazwa funkcji W przypadku nazwy funkcji obowiązują te same zasady, co w przypadku identyfikatorów zmiennych. W języku C w obrębie jednego modułu nazwy funkcji nie mogą się powtarzać.

13 Lista deklaracji parametrów
Lista parametrów składa się z deklaracji parametrów rozdzielonych przecinkami. Deklaracja parametru wygląda identycznie jak deklaracja zmiennej określonego typu. Dopuszczalne jest użycie specyfikatora const

14 Ciało funkcji Ciało funkcji zbudowane jest z instrukcji ujętych w nawiasy klamrowe. W ciele funkcji następuje przekazanie wyniku funkcji przez użycie słowa kluczowego return wyrażenie. Instrukcja ta kończy działanie funkcji. Jeśli typ funkcji został określony jako void działanie funkcji może być zakończone bezparametrowym wyrażeniem return. W tym przypadku słowo return można też pominąć.

15 Definicje funkcji - przykłady
Funkcja oblicza minimum dwóch elementów double min (double x, double y) { return x < y ? x : y; }

16 Definicje funkcji - przykłady
Funkcja oblicza sumę elementów w tablicy double suma (double *tab, unsigned numel) { int i; double suma = 0; for (i=0; i<numel; i++) suma +=tab[i]; return suma; }

17 Deklaracja funkcji Funkcja w momencie wywołania musi być znana kompilatorowi. Jeśli jej wywołanie poprzedza definicję funkcji, musi być ona przynajmniej wcześniej zadeklarowana. Taką deklarację nazywa się prototypem funkcji. Prototyp zawiera nazwę i typ funkcji oraz opis jej parametrów. Opis parametrów może być uproszczony (ograniczać się tylko do typów zmiennych).

18 Deklaracja funkcji - przykłady
void funkcja (void); fun1 (int a); double max (double aa, double bb); int wyzn (int, int, int, int); int dlugosc (char *);

19 Wywołanie funkcji ma postać:
nazwa funkcji(lista_parametrów_wywołania);

20 Przekazywanie parametrów i zwracanie wartości
Zmienne globalne Funkcja Parametry Wartości Modyfikacja zmiennych globalnych

21 Przekazywanie parametrów i zwracanie wartości
Jeśli chodzi o formalne przekazywanie parametrów do funkcji w języku C mamy dwie możliwości: przekazywanie parametrów przez wartość przekazywanie parametrów przez wskaźnik W języku C++ pojawiła się możliwość przekazywanie parametrów przez referencje

22 Kolejny przykład – funkcja silnia
double silnia (unsigned n) { double wynik=1; for (; n ; --n) wynik *=n; return wynik;

23 Różnica pomiędzy przekazywaniem przez wartość a przez wskaźnik:
Chcemy napisać funkcję swap, zamieniającą miejscami wartości dwóch zmiennych a i b. void swap(int x, int y){ int temp; temp = x; x = y; y = temp; } void swap(int *px, int *py){ temp = *px; *px = *py; *py = temp; Niepoprawnie

24 Kolejny przykład – funkcja sortuj – przekazywanie przez wskaźnik
void sortuj (int *tab, int numel){ int nieuporz = 1, i; --numel; while (nieuporz) { nieuporz = 0; for (i=0; i<numel; ++i) if (!(tab[i]<tab[i+1])) int hh=tab[i]; tab[i] = tab[i+1]; tab[i+1] = hh; nieuporz = 1; } }}

25 Kolejny przykład – funkcja sortuj – przekazywanie przez wskaźnik
wywołanie: ... int tab[10] = {9,8,4,3,5,4,2,7,8,10}; sortuj(tab, 10);

26 Funkcja main i jej parametry
Dotychczas wykorzystywaliśmy main jako funkcję bezparametrową. Kod wynikowy programu, zapisany w postaci np. pliku *.exe może być wykorzystany z poziomu systemu operacyjnego. Jeśli chcemy z wiersza poleceń przekazać jakieś parametry, to możemy to zrobić w sposób prosty i naturalny, definiując main jako: int main(int argc, char * argv[]) argc – liczba parametrów argv[0] – ścieżka dostępu argv[1]..argv[argc-1] – kolejne parametry w formie tekstowej (łańcuchy znaków)

27 Funkcja rekurencyjne Niektóre pojęcia możemy zdefiniować jako odwołania do „siebie samego”. Takie odwołania nazywamy odwołaniami rekurencyjnymi. Np.. funkcję silnia możemy zdefiniować jako: n! = (n-1)! * n, co w języku C możemy zapisać jako: double silnia (unsigned n) { return n ? n*silnia(n-1) : 1.0; } Uwaga: musi istnieć „warunek stopu”!

28 Podsumowanie


Pobierz ppt "Język ANSI C Funkcje Wykład: Programowanie komputerów"

Podobne prezentacje


Reklamy Google