60 lines
3.1 KiB
Plaintext
60 lines
3.1 KiB
Plaintext
![]() |
\b;Ćwiczenie
|
||
|
\l;Robot\u object\bottr; musi przejść przez wszystkie \l;niebieskie plusy\u object\waypoint; leżące na ziemi. Droga, którą musi pokonać, składa się z dwóch kwadratów. Pierwszy ma bok równy 15 metrów a drugi, 25 metrów.
|
||
|
|
||
|
\image tproc1a 8 8;
|
||
|
\b;Ogólny algorytm
|
||
|
Najbardziej efektywne rozwiązanie tego problemu polega na napisaniu \l;funkcji\u cbot\function;, która porusza robotem po kwadracie określonego rozmiaru. Główny program staje się wtedy bardzo prosty:\c;
|
||
|
\s;extern void object::Funkcja1( )
|
||
|
\s;{
|
||
|
\s; Kwadrat(15);
|
||
|
\s; Kwadrat(25);
|
||
|
\s;}
|
||
|
\n;
|
||
|
Wciąż jednak należy zdefiniować funkcję nazwaną \c;Kwadrat\n;. Aby to zrobić, konieczne będzie napisanie kilku instrukcji poza \l;blokiem\u cbot\bloc; który dotychczas był ramką dla każdego z Twoich programów. Na samym końcu programu, po ostatniej klamrze zamykającej, należy zdefiniować funkcję \c;Kwadrat\n;. Program będzie wyglądał następująco:
|
||
|
\c;
|
||
|
\s;extern void object::Funkcja1( )
|
||
|
\s;{
|
||
|
\s; \n;główna funkcja...\c;
|
||
|
\s;}
|
||
|
\s;
|
||
|
\s;void object::Kwadrat(float bok)
|
||
|
\s;{
|
||
|
\s; \n;nowa funkcja...\c;
|
||
|
\s;}
|
||
|
\n;
|
||
|
Przyjrzyjmy się uważniej różnym elementom deklaracji funkcji \c;Kwadrat\n;:
|
||
|
|
||
|
\c;\l;void\u cbot\void;\n;
|
||
|
Oznacza, że ta funkcja nie zwraca żadnej wartości.
|
||
|
|
||
|
\c;\l;object\u cbot\object;::\n;
|
||
|
Napisanie tego przed nazwą funkcji oznacza, że będzie ona miała dostęp do wszystkich charakterystyk robota, takich jak \c;position\n;, \c;orientation\n;, itd. W tym ćwiczeniu element ten nie jest wymagany, jako że w funkcji nie będą potrzebne charakterystyki robota.
|
||
|
|
||
|
\c;Kwadrat ( )\n;
|
||
|
To jest nazwa funkcji. Możesz ją nazwać Kwadrat lub dowolnie inaczej.
|
||
|
|
||
|
\c;\l;float\u cbot\float; bok\n;
|
||
|
Tutaj definiujesz parametry, które otrzymuje funkcja podczas wywołania. Przy pierwszym wywołaniu funkcji \c;Kwadrat(15)\n;, zmienna \c;bok\n; będzie miała wartość \c;15\n;. Za drugim razem \c;bok\n; będzie równy \c;25\n;.
|
||
|
|
||
|
Oto szczegóły tego co zdarzy się po wykonaniu programu:
|
||
|
- Najpierw uruchamiana jest główna funkcja \c;Funkcja1\n;.
|
||
|
- W wierszu \c;Kwadrat(15)\n;, program podąży za czerwoną strzałką i przejdzie do funkcji \c;Kwadrat\n; po raz pierwszy, \c;bok\n; równy \c;15\n;.
|
||
|
- Na końcu funkcji \c;Kwadrat\n;, program podąży za pomarańczową strzałką i wróci do funkcji głównej.
|
||
|
- W wierszu \c;Kwadrat(25)\n;, program podąży za niebieską strzałką, przechodząc po raz drugi do funkcji \c;Kwadrat\n;.
|
||
|
- Na końcu funkcji \c;Kwadrat\n;, program podąży za jasno niebieską strzałką i wróci do funkcji głównej.
|
||
|
|
||
|
\image tproc1b 17 12;
|
||
|
W funkcji \c;Kwadrat\n;, użyj instrukcji \c;\l;move\u cbot\move;\n; i \c;\l;turn\u cbot\turn;\n;. Aby skrócić program możesz użyć pętli \c;\l;for\u cbot\for;\n;, która powtórzy 4 razy instrukcje \c;\l;move\u cbot\move;\n; i \c;\l;turn\u cbot\turn;\n;, nie jest to jednak niezbędne.
|
||
|
\c;
|
||
|
\s;void object::Kwadrat(float bok)
|
||
|
\s;{
|
||
|
\s; for ( int i=0 ; i<4 ; i=i+1 )
|
||
|
\s; {
|
||
|
\s; move(bok);
|
||
|
\s; turn(90);
|
||
|
\s; }
|
||
|
\s;}
|
||
|
\n;
|
||
|
\t;Zobacz również
|
||
|
\l;Programowanie\u cbot;, \l;typy\u cbot\type; i \l;kategorie\u cbot\category;.
|