Prezentowane materiały są przeznaczone dla uczniów szkół ponadgimnazjalnych. Autor artykułu: mgr Jerzy Wałaszek, wersja1.0 |
©2010 mgr
Jerzy Wałaszek |
Pomoce:
Instalacja Code Blocks i
tworzenie projektu aplikacji konsoli.
Struktura programu w języku C++
Zmienne i strumienie w języku C++
Instrukcja warunkowa w języku C++
Funkcja (ang. function) jest fragmentem kodu programu, który możemy wielokrotnie wywoływać z różnych miejsc programu. Każda funkcja przed wykorzystaniem musi być zdefiniowana. Definicja funkcji wygląda następująco:
typ_wyniku nazwa_funkcji(lista_argumentów)
{
treść funkcji
}
typ_wyniku
- określa rodzaj informacji, którą zwraca funkcja jako wynik swojej
pracy. Jeśli funkcja nie zwraca wyniku (np. interesuje nas
tylko wykonanie określonego kodu), to posiada typ void (ang. pusty).
nazwa_funkcji
- zbudowana
podobnie jak nazwa zmiennej - stosujemy identyczne reguły. Nazwa funkcji
umożliwia odwołanie się do jej kodu.
lista_argumentów
- zawiera definicje danych
przekazywanych do funkcji. Lista zbudowana jest z wpisów:
typ_argumentu1 nazwa_argumentu1,
typ_argumentu2 nazwa_argumentu2, ...
typ_argumentu
- jeden z typów danych zdefiniowanych w C++ (np. int, double,
bool) lub typ zdefiniowany przez użytkownika.
nazwa_argumentu
- zbudowana identycznie
jak nazwa zmiennej. Pozwala odwoływać się do danego argumentu wewnątrz funkcji.
// Przykład funkcji // (C)2010 I LO w Tarnowie //------------------------ #include <iostream> using namespace std; int suma(int x,int y) { return x + y; } int main() { cout << suma(2,7) << endl << suma(9,-3) << endl; return 0; } |
Każda funkcja może posiadać swój własny zestaw zmiennych, które nazywamy zmiennymi lokalnymi (ang. local variables). Czas życia zmiennej lokalnej ogranicza się do funkcji, w której zostały zdefiniowany. W różnych funkcjach mogą istnieć zmienne o takich samych nazwach, jednakże są to różne zmienne i nie wpływają na siebie nawzajem.
Poniższy program demonstruje izolację zmiennych lokalnych. W funkcjach main() i f() tworzymy zmienną lokalną o nazwie a. Zmiennej a przypisujemy w main() wartość 29, po czym wyświetlamy zawartość a. Następnie zostaje wywołana funkcja f(), która tworzy swoją zmienną a, przypisuje jej wartość 5 i wyświetla ją. Po powrocie z funkcji f() do main() zostaje ponownie wyświetlona zmienna a należąca do main(). Zwróć uwagę, że wywołanie f() nie zmieniło wartości tej zmiennej - wciąż jest w niej liczba 29. Funkcja f() operowała na swojej lokalnej zmiennej a, a nie na zmiennej a należącej do main().
// Izolacja zmiennych lokalnych // (C)2010 I LO w Tarnowie //------------------------ #include <iostream> using namespace std; void f() { int a; a = 5; cout << a << endl; } int main() { int a; a = 29; cout << a << endl; f(); cout << a << endl; return 0; } |
W języku C++ argumenty możemy przekazywać na dwa sposoby:
W tym przypadku funkcja otrzymuje wartości jako argumenty. Ten typ przekazywania argumentów do funkcji pozwala stosować przy wywołaniu wyrażenia w miejscu argumentów. Komputer oblicza wartość danego wyrażenia i przekazuje ją funkcji w danym argumencie. Funkcja otrzymaną wartość może dowolnie modyfikować.
Poniższy program zawiera prostą funkcję pisz2(), która wymaga argumentu x typu int. Otrzymany argument funkcja zwiększa o 2, a następnie wyświetla w oknie konsoli. W funkcji main() tworzymy jedną zmienną a, której nadajemy wartość 5 i wyświetlamy w oknie konsoli. Następnie wywołujemy funkcję pisz2() z argumentem a. Po powrocie z funkcji pisz2() wyświetlamy ponownie zawartość a. Zwróć uwagę, że funkcja pisz2() zmodyfikowała jedynie wartość otrzymanego argumentu - zmienna a w funkcji main() pozostała nienaruszona.
// Przekazywanie argumentu przez wartość // (C)2010 I LO w Tarnowie //------------------------ #include <iostream> using namespace std; void pisz2(int x) { x += 2; // zwiększamy argument o 2 cout << x << endl; } int main() { int a; a = 5; cout << a << endl; pisz2(a); cout << a << endl; return 0; } |
W tym przypadku przed nazwą argumentu na liście umieszczamy operator &. Funkcja otrzymuje jako argument adres zmiennej, a nie jej wartość. Mając adres może odwołać się do pamięci tej zmiennej i zmienić jej zawartość. Wszelka modyfikacja takiego argumentu wewnątrz funkcji powoduje zmianę skojarzonej z tym argumentem zmiennej.
W poniższym programie zmieniamy w funkcji pisz2() adresowanie przez wartość na adresowanie przez referencję. Teraz zmiana argumentu wewnątrz funkcji pisz2() odbije się automatycznie na zmianie zawartości zmiennej a, którą udostępniliśmy jako argument wywołania pisz2().
// Przekazywanie argumentu przez referencję // (C)2010 I LO w Tarnowie //------------------------ #include <iostream> using namespace std; void pisz2(int & x) { x += 2; // zwiększamy argument o 2 cout << x << endl; } int main() { int a; a = 5; cout << a << endl; pisz2(a); cout << a << endl; return 0; } |
// NWD // (C)2010 I LO w Tarnowie //------------------------ #include <iostream> using namespace std; int NWD(int a,int b) { int x; while(b) { x = b; b = a % b; a = x; } return a; } int main() { int a,b; cin >> a >> b; cout << NWD(a,b) << endl; return 0; } |
// NWW // (C)2010 I LO w Tarnowie //------------------------ #include <iostream> using namespace std; int NWD(int a,int b) { int x; while(b) { x = b; b = a % b; a = x; } return a; } int main() { int a,b,nww; cin >> a >> b; nww = a * b / NWD(a,b); cout << nww << endl; return 0; } |
// Skracanie ułamków // (C)2010 I LO w Tarnowie //------------------------ #include <iostream> using namespace std; int NWD(int a,int b) { int x; while(b) { x = b; b = a % b; a = x; } return a; } int main() { int l,m,nwd; cin >> l >> m; nwd = NWD(l,m); cout << l << "/" << m << " = " << l / nwd << "/" << m / nwd << endl; return 0; } |
Zmodyfikuj program skracający ułamki, tak aby wynik zapisywał z częścią całkowitą (o ile istnieje) i ułamkiem właściwym. Np: 7/3 = 2 1/3.
I Liceum Ogólnokształcące |
Pytania proszę przesyłać na adres email: i-lo@eduinf.waw.pl
W artykułach serwisu są używane cookies. Jeśli nie chcesz ich otrzymywać,
zablokuj je w swojej przeglądarce.
Informacje dodatkowe