→ Slide 1

Funkcje i metody

→ Slide 2

Definicja metody

modyfikator_dostępu typ_zwracany nazwa_metody ( lista_parametrów )
{
    instrukcje
    return wartość;
}
→ Slide 3

Funkcja wewnętrzna

public class Program
{
   public static void Main()
   {
       // definicja funkcji  
       int Suma(int a, int b)
       {
          return a+b;
       }
 
      // uruchomienie funkcji 
       int x = Suma(3, 5);
}   

Dostępna tylko wewnątrz metody Main - nie potrzba modyfikatora dostepu

→ Slide 4

Metoda statyczna klasy

public class Program
{
   static int Suma(int a, int b)
   {
      return a+b;
   }
 
   public static void Main()
   {
       int a = 42;
       int b = 3;
 
       int x = Suma(a, b); 
       x = Program.Suma(a, b);
   }
}   
→ Slide 5

Zmienne lokalne

Zmienne zadeklarowane wewnątrz metody są lokalnie dostępne wyłącznie w jej wnętrzu.

static void X(int a)
{
    int b;     // zmienna lokalna
    a++;
    b = a;
    Console.WriteLine($"W metodzie X: a={a} b={b}");
}
 
public static void Main()
{
    int a = 42;
    int b = 13;
 
    X(a);
    Console.WriteLine($"W metodzie Main: a={a} b={b}");
}  

Wyjście

W metodzie X: a=43 b=43
W metodzie Main: a=42 b=13
→ Slide 6

Ćwiczenie: silnia

Napisz metodę o nazwie Silnia, która wyznaczy wartość silni z podanej liczby całkowitej.

Argumenty metody:

Wartość zwracana:

Napisz program, który korzystając z metody Silnia wyznaczy silnie dowolnej liczby całkowitej podanej przez użytkownika.

Ile wynosi silnia z 13?

→ Slide 7

Rekurencja

Metoda rekurencyjna - wywołuje sama siebie

Przykład - silnia: $$ n! = (n-1)! \cdot n$$

static int Silnia(int n)
{
    if ( n < 2) return 1;
    return Silnia(n-1) * n;
} 
→ Slide 8

Parametry wartościowe

static void Zwiększ(int x)
{
    x++;
}
 
public static void Main()
{
    int x = 42;
 
    Zwiększ(x);
    Console.WriteLine($"x={x}");
}   

Wynik

x=42
→ Slide 9

Parametry typu referencyjnego

static void Zwiększ(ref int x)
{
    x++;
}
 
public static void Main()
{
    int x = 42;
 
    Zwiększ(ref x);
    Console.WriteLine($"x={x}");
}   

Wynik

x=43
→ Slide 10

Tablice w argumentach

Tablice są typem referencyjnym, więc metoda ma dostęp do elementów tablicy z argumentu

static void Zwiększ(int [] tablica)
{
      tablica[0]++;
}
 
public static void Main()
{
    int [] tablica = { 1, 2, 3};
 
    Zwiększ(tablica);
    foreach(var x in tablica)  Console.WriteLine(x);
}   

Wynik

2
2
3
→ Slide 11

Argumenty typu wyjściowego

static void WczytajLiczbę(out int x)
{
    x = Convert.ToInt32(Console.ReadLine());
}
 
public static void Main()
{
    int x;    
    WczytajLiczbę(out x);
    Console.WriteLine($"x={x}");
}   
→ Slide 12

Ćwiczenie: Sortowanie

Zaimplementuj metodę o nazwie Sortuj(), która posortuje liczby w tablicy. Spróbuj samodzielnie wymyslic algorytm sortowania.

Parametry metody:

Wartość zwracana:

Napisz program, który poprosi użytkonika o wprowadzenie $N$ liczb a nastepnie wykorzysta metodę Sortuj() do posortowania tych liczb i wypisze wynik na ekranie.

→ Slide 13

Zadanie 5: Ciag Fibonacciego

Zaimplementuj metodę o nazwie Fibonacci, która dla podanej liczby całkowitej n zwraca wartość n-tego elementu ciągu Fibonacciego, który wyznaczamy ze wzoru: $$ F_{n}:=\left\{\begin{array}{ll} 0 & \text { dla } n=0 \\ 1 & \text { dla } n=1 \\ F_{n-1}+F_{n-2} & \text { dla } n>1 \end{array}\right. $$

Metoda realizuje następującą specyfikację:
Parametry: liczba całkowita n
Wartość zwracana: wartość elementu n ciągu Fibonacciego. W przypadku, gdy argument n<0 to wynikiem jest 0.

Uwaga: metoda powinna realizować wyłącznie obliczenie matematyczne, tzn. uruchomienie metody nie powinno generować żadnych komunikatów na konsoli.

Napisz program, który wykorzysta metodę Fibonacci() do wypełnienia tablicy jednowymiarowej sekwencją pierwszych elementów ciągu Fibonacciego a następnie wyświetli zawartość tej tablicy na ekranie. Wartość (ilość elementów ciągu) podaje użytkownik na początku działania programu.

Przykład

Ile elementów wypisać? 10
0 1 1 2 3 5 8 13 21 34 55