Funkcje i procedury w C/C++

Z RNO-Wiki

Funkcje w C/C++

  • Funkcja <math>f(x) = 3x^2+6x-7</math>
int f(int x) // definicja funkcji w C/C++  z jednym argumentem (całkowitoliczbowym) zwracającej liczbę typu int 
{
  int y;     // deklaracja zmiennych lokalnych w tej funkcji
  y = x*x;
  return 3*y+6*x-7;
}
  • Funkcja <math>wieksza(x,y)=\max\{x,y\}</math>
int wieksza(int x, int y)
{
  if (x>y) return x; // return zwraca wynik i kończy działanie funkcji
  return y;
}
  • Napisz funkcję, która
    • Obliczy <math>f1(n)=\sum_{k=0}^n k^3</math>
  int f1(int n)
  {
    int suma = 0;
    for (int k=0; k<=n; k++) suma += k*k*k;
    return suma;
  }
    • Obliczy <math>f2(n)=\sum_{k=0}^n \sum_{j=0}^k j^2+2j</math>
  int f2(int n)
  {
    int suma = 0;
    for (int k=0; k<=n; k++)
      for (int j=0; j<=k; j++)
        suma += j*j+2*j;
    return suma;
  }
    • Obliczy <math>f3(a,b)=\gcd(a,b)</math> za pomocą algorytmu Euklidesa
      Rozwiązanie --- zobaczać uzupełnione notatki dotyczące Algorytm Euklidesa.
    • Obliczy <math>isPrime(n)</math> w czasie <math>O(\sqrt{n})</math>
  bool isPrime(int n)
  {
    if (n==1) return false;
    for (int d=2; d*d<=n; d++)
      if (n%d==0) return false;
    return true;
  }
    • Obliczy isPalindrom(string s)
  bool isPalindrom(string &s) // przekazywanie stringa przez referencję (tylko C++)
  {
    int n = s.length();
    int i=0, j=n-1;
    while (i<j)
    {
       if (s[i] != s[j]) return false;
       i++; j--;
    }
    return true;
  }

Procedury w C/C++

Procedury to funkcje nie zwracające żadnej wartości. Procedurę pisze się tak samo jak funkcję, a typ zwracanej wartości (czyli niczego) to 'void'.

 void wypiszSlowo(string s) // porcedura wypisuje slowo na ekran - nie zwraca zadnej wartosci jako wynik
 {
   cout << s;
 }

Zmienne lokalne i globalne

Jak pewnie zauważyłeś(aś), w funkcjach można deklarować zmienne. Są to tzw. zmienne lokalne i widoczne są tylko w tej funkcji (w trakcie jej działania). Po wykonaniu funkcji zmienne te automatycznie kasują się z pamięci (komórki je zawierające są ustawiane jako wolne do użycia).

Można natomiast deklarować zmienne, które będą wspolne dla wielu funkcji. Są to wówczas zmienne globalne, np.

 #include< iostream >
 using namespace std;

 int M = 1000, S, N; // zmienne globalne powinny miec nazwy z duzych liter, aby je odrozniac w funkcjach od zmiennych lokalnych

 int funkcja(int a, int b)
 {
    int m;  // zmienna lokalna
    ...     // zrob cos
    M = 10; // uzywa zmiennej globalnej
    S = a;
    return M+S+m;
 }

 void f(void) // procedura
 {
   M = 0; S = 10; N = 90;
 }

 int main(void)
 {
    cin >> M;     // wczytywanie do zmiennej M
    f();          // wywołanie procedury f()
    funkcja(5,S); // wywołanie funkcji z argumentami a = 5, b = S
    return 0;     // zauważ, że main to też funkcja; zwraca zawsze zero
 }

Osobiste