BETA
Aby się zalogować, najpiew wybierz portal.
Aby się zarejestrować, najpiew wybierz portal.
Podaj słowa kluczowe
Słowa kluczowe muszą mieć co najmniej 3 sąsiadujące znaki alfanumeryczne
Pole zawiera niedozwolone znaki

Baza wiedzy











MRDS - Rekurencja cz.8

13-04-2014 20:32 | Vadym Melnyk
thumb
Niektóre algorytmy są z zasady rekurencyjne, dlatego dość trudno jest opisać je przy pomocy pętli. Jeżeli język programowania nie jest opartym o funkcje, to użycie rekurencji w większości przypadków nie daje żadnego przyrostu szybkości. Ale jak pokazuje praktyka, rekurencja jest często używana w robotyce.

Niektóre algorytmy są z zasady rekurencyjne, dlatego dość trudno jest opisać je przy pomocy pętli. Jeżeli język programowania nie jest opartym o funkcje, to użycie rekurencji w większości przypadków nie daje żadnego przyrostu szybkości. Ale jak pokazuje praktyka, rekurencja jest często używana w robotyce.

Przed wykonaniem zadań powinieneś:

Po wykonaniu zadań nauczysz się:

  • Nauczysz używać rekurencję w VPL
  • Synchronizować operację przy pomocy wyjścia Notification

Napiszemy prosty program, który rekurencyjnie będzie dodawał dwie liczby dodatnie. Dla osób, którzy pierwszy raz spotykają się z tym tematem, polecam wideo wyjaśniające zasady rekurencji po angielsku.

  1. Otwórz Visual Programming Language (VPL) z menu Start Menu ‑> Programs ‑>  Microsoft Robotics Developer Studio 4 w trybie Administratora (Rys. 1 Okno Główne).

    Rys. 1 Okno Główne
     
  2. Stwórz sobie nowy Activity na diagramie. Nazwij go RecursiveSum.
  3. Dodaj dwie liczby wejściowe a, b typy int, i dwie liczby wyjściowe outA, ouB, typu int (Rys. 2 Actions):

    Rys. 2 Actions
     
  4. Dodaj notyfikacje Result w zakładce Notifications.
  5. Activity RecursiveSum będzie wyglądać następująco (Rys. 3 RecursiveSum):

    Rys. 3 RecursiveSum

Aby dodać RecursiveSum do diagramu otwórz menu kontekstowe, i wybierz punkt Insert - > Activities -> RecursiveSum. Program końcowy ma wyglądać jak na rysunku poniżej (Rys. 4 Suma rekurencyjna):

Z diagramu widzimy, że blok RecursiveSum, wywoła sam siebie w procesie wykonywania. Wyjście z rekurencji odbywa się, kiedy b staje równe 0.

Rys. 4 Suma rekurencyjna

Wynikiem ma być liczba 9.

Kolejny program, który napiszemy – pętla przy użyciu własnego bloku, w której każda liczba będzie wywoływana przy użyciu TTS.

  1. Otwórz nowy diagram.
  2. Dodaj sobie nowy Activity i nazwij go SayNumbers.
  3. Dodaj dwie liczby wejściowe startValue i endValue typu int, i liczbę wyjściową typu int (Rys. 5 Actions)

    Rys. 5 Actions
     
  4. Dodaj na diagram Activity kolejne bloki (Rys. 6 SayNumbers):

    Rys. 6 SayNumbers
     
  5. Na diagram główny dodaj bloki Data, Join i SayNumbers (Rys. 7 Diagram Główny):

    Rys. 7 Diagram Główny

Przy uruchomieniu tego programu zauważ, że liczby nie są wywołane po kolei. To nie błąd programu, jak pisałem w drugim odcinku, VPL jest językiem Dataflow, więc wątki pracują równolegle, przetwarzają i wyświetlają informacje, od razu, gdy je dostają na wejścia.
Przerobimy nasz program tak, żeby działał synchronicznie.

 

 

Wynik Initialize – notyfikacja (Notification Message), który zawiera kolejną liczbę.  Initialize jest wywoływane tylko jeden raz i inicjalizuje działanie Count. Count generuje notyfikacje i blok SayNumbersSync wysyła wiadomość do bloku TexttoSpeechTTS. Kiedy metoda SayTextSynchronous jest skończona, blok TexttoSpeechTTS wysyła wiadomość na wejście działanie Count bloku SayNumbersSync, co powoduje generacje notyfikacji Notification. Będzie to działać tak długo, aż Current nie będzie równać się End.

W tym odcinku zapoznałeś się z rekurencją w VPL oraz napisałeś prosty przykład rekurencyjnej sumy dwóch liczb. Oprócz tego zapoznałeś się z usecasem synchronizacji pętli przy użyciu notyfikacji.

W kolejnym odcinku zapoznasz się z nową częścią środowiska MRDS – Visual Simulation Environment, oraz jego podstawowymi elementami. 

Komentarze 0

pkt.

Zaloguj się lub Zarejestruj się aby wykonać tę czynność.