![]() |
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