86 lines
2.8 KiB
Plaintext
86 lines
2.8 KiB
Plaintext
![]() |
\b;Funkcje
|
|||
|
U<EFBFBD>ywaj<EFBFBD>c funkcji mo<6D>na podzieli<6C> program na kilka cz<63><7A>ci, z kt<6B>rych ka<6B>da b<>dzie wykonywa<77>a okre<72>lone zadanie.
|
|||
|
Wyobra<EFBFBD>my sobie nast<73>puj<75>cy program<61>:
|
|||
|
\c;
|
|||
|
\s;extern void object::Zdalnie( )
|
|||
|
\s;{
|
|||
|
\s; send("order", 1, 100);
|
|||
|
\s; wait(5);
|
|||
|
\s; send("order", 3, 100);
|
|||
|
\s; wait(5);
|
|||
|
\s; send("order", 2, 100);
|
|||
|
\s; wait(5);
|
|||
|
\s; send("order", 4, 100);
|
|||
|
\s; wait(5);
|
|||
|
\s;}
|
|||
|
\n;
|
|||
|
Instrukcje \c;send\n; i \c;wait\n; wykonywane s<> wielokrotnie. By<42>oby dobrze utworzy<7A> funkcj<63> wykonuj<75>c<EFBFBD> te dwie instrukcje:
|
|||
|
\c;
|
|||
|
\s;void object::Wy<57>lijDoStacji( float op )
|
|||
|
\s;{
|
|||
|
\s; send("order", op, 100);
|
|||
|
\s; wait(5);
|
|||
|
\s;}
|
|||
|
\s;extern void object::Zdalnie( )
|
|||
|
\s;{
|
|||
|
\s; Wy<57>lijDoStacji(1);
|
|||
|
\s; Wy<57>lijDoStacji(3);
|
|||
|
\s; Wy<57>lijDoStacji(2);
|
|||
|
\s; Wy<57>lijDoStacji(4);
|
|||
|
\s;}
|
|||
|
\n;
|
|||
|
Funkcja mo<6D>e mie<69> parametry<72>:
|
|||
|
\c;
|
|||
|
\s;void Przyk<79>ad( int a, float x, string s )
|
|||
|
\n;
|
|||
|
Funkcja \c;Przyk<79>ad\n; dostaje jako parametry liczb<7A> ca<63>kowit<69> \c;a\n;, liczb<7A> zmiennoprzecinkow<6F> \c;x\n; oraz <20>a<EFBFBD>cuch \c;s\n;. Parametry s<> "przekazywane przez warto<74><6F>", czyli s<> kopi<70> warto<74>ci okre<72>lonych jako zmienne podczas wywo<77>ania. Przy przekazaniu zmiennej \c;int\n; funkcji, jej parametr jest kopi<70> warto<74>ci przekazanej jako argument, wobec czego funkcja mo<6D>e zmienia<69> warto<74><6F> parametru bez zmiany warto<74>ci w miejscu, z kt<6B>rego by<62>a wywo<77>ana funkcja.
|
|||
|
|
|||
|
Przy przekazaniu instancji \l;klasy\u cbot\class; lub \l;tablicy\u cbot\array; jako parametru, funkcja otrzymuje jedynie \l;wska<6B>nik\u cbot\pointer; do instancji lub tablicy. Oznacza to, <20>e w przypadku modyfikacji instancji lub tablicy wewn<77>trz funkcji, w rzeczywisto<74>ci zostanie zmodyfikowana instancja lub tablica okre<72>lona podczas wywo<77>ania.
|
|||
|
|
|||
|
Funkcja mo<6D>e r<>wnie<69> zwr<77>ci<63> wynik przy u<>yciu instrukcji \c;\l;return\u cbot\return;\n;. Jednak<61>e powinna by<62> w<>wczas zadeklarowana nie jako void, ale powinna mie<69> okre<72>lony typ:
|
|||
|
\c;
|
|||
|
\s;float <20>rednia( float a, float b )
|
|||
|
\s;{
|
|||
|
\s; return (a+b)/2;
|
|||
|
\s;}
|
|||
|
\s;
|
|||
|
\s;extern void object::Test( )
|
|||
|
\s;{
|
|||
|
\s; float warto<74><6F>;
|
|||
|
\s; warto<74><6F> = <20>rednia(2, 6);
|
|||
|
\s; message( warto<74><6F> ); // wy<77>wietli liczb<7A> 4
|
|||
|
\s;}
|
|||
|
\n;
|
|||
|
I jeszcze kilka przyk<79>ad<61>w<EFBFBD>:
|
|||
|
\c;
|
|||
|
\s;float Pi( )
|
|||
|
\s;{
|
|||
|
\s; return 3.1415;
|
|||
|
\s;}
|
|||
|
\s;
|
|||
|
\s;string Znak( float a )
|
|||
|
\s;{
|
|||
|
\s; if ( a > 0 ) return "dodatnia";
|
|||
|
\s; if ( a < 0 ) return "ujemna";
|
|||
|
\s; return "zero";
|
|||
|
\s;}
|
|||
|
\n;
|
|||
|
Mo<EFBFBD>na zadeklarowa<77> kilka funkcji o tej samej nazwie lecz o r<><72>nych parametrach<63>:
|
|||
|
\c;
|
|||
|
\s;float Pitagoras( float a, float b )
|
|||
|
\s;{
|
|||
|
\s; return sqrt((a*a)+(b*b));
|
|||
|
\s;}
|
|||
|
\s;
|
|||
|
\s;float Pitagoras( float a, float b, float c )
|
|||
|
\s;{
|
|||
|
\s; return sqrt((a*a)+(b*b)+(c*c));
|
|||
|
\s;}
|
|||
|
\n;
|
|||
|
CBOT wywo<77>a jedn<64> z nich, w zale<6C>no<6E>ci od przekazanych parametr<74>w.
|
|||
|
|
|||
|
Mo<EFBFBD>na te<74> zadeklarowa<77> funkcj<63> \l;publiczn<7A>\u cbot\public;, kt<6B>ra b<>dzie dost<73>pna dla wszystkich robot<6F>w.
|
|||
|
|
|||
|
\t;Zobacz r<>wnie<69>
|
|||
|
\l;Programowanie\u cbot;, \l;typy\u cbot\type; i \l;kategorie\u cbot\category;.
|