Pobieranie prezentacji. Proszę czekać

Pobieranie prezentacji. Proszę czekać

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

Podobne prezentacje


Prezentacja na temat: "Język ANSI C Funkcje Wykład: Programowanie komputerów Prowadzący: dr inż. Sławomir Nowak."— Zapis prezentacji:

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

2 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: 1.Pobierz współczynniki równań; 2.Oblicz wyznacznik główny W; 3.Jeśli wyznacznik główny jest różny od 0 skocz do 6 4.Oblicz wyznacznik Wx; 5.Jeśli Wx <> 0 – poinformuj o braku rozwiązań, Wx=0 oznacza nieskończenie wiele rozwiązań. W obu przypadkach zakończ wykonywanie programu. 6.Oblicz Wx i Wy, x=W/Wx, y=W/Wy, wypisz rezultaty wyjściowe i zakończ program.

4 #include 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); } else { 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; } else { * 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: 1.Opcjonalne słowa kluczowe extern, static, inline ; 2.typ wartości funkcji; 3.identyfikatora (nazwy) funkcji; 4.listy parametrów; 5.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

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 Wywołanie funkcji ma postać: nazwa funkcji(lista_parametrów_wywołania);

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

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){ int temp; 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

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 Prowadzący: dr inż. Sławomir Nowak."

Podobne prezentacje


Reklamy Google