Start	Zajęcia 1	Zajęcia 2	Zajęcia 3	Zajęcia 4	Zajęcia 5	Zajęcia 6	Zajęcia 7	Zajęcia 8	Zajęcia 9	Zajęcia 10	Pliki z zajęć

Zajęcia 3 - Funkcje

Definicja funcji i jej użycie

#include<stdio.h> /* definicja funkcji */ float kwadrat(float x) { float wynik; wynik = x * x; return wynik; } int main() { float liczba; scanf("%f",&liczba); printf("%f\n",kwadrat(liczba)); return 0; }

Ćwiczenia

Napisz funkcję o nazwie jest_pierwsza, która dla danej liczby całkowitej zwraca wartość 1 gdy podana liczba jest liczbą pierwszą a wartość 0 - gdy jest nie jest

Korzystając z funkcji jest_pierwsza napisz program który wyświetli wszystkie liczby pierwsze mniejsze lub równe pewnej podanej przez użytkownika liczbie całkowitej

Napisz funkcję o nazwie trojkat, która dla danej liczby całkowitej wyświetla trójkąt prostokątny złożony z podanej liczby linii, np.:

*****
****
***
**
*

dodaj kolejny argument do funkcji trojkat(), który określa jaki znak będzie użyty zamiast *

Zmianne lokalne vs. globalne

#include<stdio.h> int globalna; void f(void) { int lokalna = 6; globalna++; printf("wewnatrz funkcji: globalna = %d\tlokalna = %d\n",globalna,lokalna); } int main() { int lokalna; printf("globalna = %d\tlokalna = %d\n",globalna,lokalna); f(); printf("globalna = %d\tlokalna = %d\n",globalna,lokalna); return 0; }

Zmiene statyczne vs. automatyczne

#include <stdio.h> void dodaj(int a) { static int x = 0; /* zmienna statyczna */ int y = 0; /* zmienna automatyczna */ x = x + a; y = y + a; printf("x = %d\ty = %d\n",x,y); } int main() { dodaj(1); dodaj(3); dodaj(4); dodaj(1); return 0; }

Ćwiczenia

Napisz funkcję, która liczy i wyświetla ile razy została uruchomiona

Iteracja vs. rekurencja

#include <stdio.h> int silnia(int n) { int i=2, s=1; while( i < n+1 ) { s = s * i; i = i + 1; } return s; } int main() { int liczba,s; printf("Podaj liczbe: "); scanf("%d",&liczba); s = silnia(liczba); printf("Silnia z %d wynosi %d\n",liczba,s); return 0; }

Ćwiczenia

Dla jakiej wartości program przestaje dawać wiarygodne wyniki? Spróbuj zwiększyć zakres dokładnie obliczanych wartości.

Napisz funkcję o nazwie potega, która dla danych argumentów float p i int w wyznacza wartość potęgi pw

#include <stdio.h> /* deklaracja funckji rsilnia() */ int rsilnia(int n); int main() { int liczba,s; printf("Podaj liczbe: "); scanf("%d",&liczba); s = rsilnia(liczba); printf("Silnia z %d wynosi %d\n",liczba,s); return 0; } /* definicja funkcji rsilnia() */ int rsilnia(int n) { if(n <= 1) return 1; return n*rsilnia(n-1); }

Ćwiczenia

Napisz funkcję rpotega(), która dla danych argumentów float p i int w wyznacza rekurencyjnie wartość potęgi pw

Funkcje matematyczne - biblioteka math.h

Biblioteka standardowa
Spis funkcji math.h

Ćwiczenia

zobacz opis funkcji scanf(), printf(), getchar() i putchar() (biblioteka stdio.h)

korzystając z odpowiednich funkcji z biblioteki standardowej napisz funkcję void pierwiastki(float a,float b,float c), która wyświetla miejsca zerowe równania y = ax2 + bx +c lub komunikat o ich braku

Uwaga Kompilując program korzystający z funkcji matematycznych zadeklarowanych w pliku math.h należy dodać opcję -lm, czyli dla programu zawartego w pliku pirwiatek.c kompilacja w Linuksie wygląda tak

cc pierwiastek.c -lm -o pierwiastek

Zadania domowe

Napisz funkcję Fibonacci (w postaci iteracyjnej lub rekurencyjnej), która wyświetla n pierwszych elementów ciągu Fibonacciego.
Elementy ciągu wynoszą: F0=0, F1=1 i Fn=Fn-1+Fn-2 dla n > 1

Napisz funkcję Newton, która dla podanych dwóch liczb całkowitych oblicza wartość symbolu Newtona

Napisz funkcję Gauss, która dla podanej wartości centrum (wartości średniej) i rozmycia (odchylenia standardowego) oblicza wartość funkcji Gaussa

Napisz i przetestuj funkcję, która znajduje największy wspólny dzielnik dwóch liczb naturalnych. Można skorzystać z algorytmu Euklidesa podanego poniżej

Dla danych dwóch liczb X i Y

1. jeśli X jest równe Y to jest to największy dzielnik
2. jeśli X > Y to niech X <- X - Y i wróć do punktu 1
3. jeśli X < Y to niech Y <- Y - X i wróć do punktu 1