Funkcje i procedury w C/C++
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>
- Obliczy <math>f3(a,b)=\gcd(a,b)</math> za pomocą algorytmu Euklidesa
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)
- Obliczy
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
}
