→ Slide 1

Funkcje i metody

→ Slide 2
modyfikator_dostępu typ_zwracany nazwa_metody ( lista_parametrów )
{
    instrukcje
    return wartość;
}
  • modyfikator_dostępu - np. public, private, dostęp z innych klas, ważny w programowaniu obiektowym
  • typ_zwracany - dowolny typ, klasa, lub void
  • nazwa_metody - identycznie jak nazwa zmiennej
  • lista_parametrów - definiuje typy i nazwy argumentów metody
  • instrukcja return przerywa działanie metody i zwraca podaną wartość
→ Slide 3
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 - to „funkcja” związana z klasą
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);
   }
}   
  • modyfikator dostępu w tym przypadku pomijamy, bo nie używamy innych klas
  • modyfikator static - metoda statyczna, nie wymaga utworzenia obiektu klasy, działa jak globalna funkcja
  • uruchomienie metody klasa.metoda(argumenty) lub z zakresu klasy Metoda(argumenty)
→ Slide 5

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

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

Argumenty metody:

  • liczba całkowita $n$ większa od zera

Wartość zwracana:

  • liczba całkowita równa $1 \cdot 2 \cdot \ldots \cdot n$

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

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
  • wartośc argumentu jest kopiowana do zmiennej zdefiniowanej na liście parametrów
  • metoda nie ma możliwości modyfikacji wartości zmiennej z argumnetu (działamy na kopii)
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
  • argument możemy przekazać w postaci referencji, wówczas metoda może modyfikować jej wartość
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
  • do zmiennej lokalnej kopiowana jest referencja wskazująca na ten sam obszar pamięci
  • modyfikator ref musi pojawić się w definicji parametrów metody oraz przy wywołaniu
→ Slide 10

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
  • modyfikator out pozwala określić parametr wyjściowy, dzięki temu można zwrócić dodatkowe wartości z metody
static void WczytajLiczbę(out int x)
{
    x = Convert.ToInt32(Console.ReadLine());
}
 
public static void Main()
{
    int x;    
    WczytajLiczbę(out x);
    Console.WriteLine($"x={x}");
}   
  • metoda musi przypisać wartość do zmiennej typu wyjściowego
  • modyfikator out musi pojawić się w definicji parametrów metody oraz przy jej wywołaniu
→ Slide 12

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

Parametry metody:

  • tablica jednowymiarowa liczb

Wartość zwracana:

  • tablica z posortowanymi liczbami

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

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