www.mistrzostwa-labview.pl Organizator: www.lvfg.pwr.wroc.pl Partnerzy:
Zadanie nr 1. Odwracanie wyrazów Tokenizowanie tekstów to często spotykane zadanie przed jakim stają programiści przy rozwiązywaniu problemów praktycznych (parsing poleceo SCPI). Typowe rozwiązanie tego zadania polegało na zastosowaniu węzła Scan String For Tokens, którego domyślne separatory międzywyrazowe odpowiadały wymaganiom specyfikacji zadania. Zdarzało się jednak zapominanie o inicjalizacji rejestru przesuwnego: Uczestnicy stosowali alternatywnie węzęł Match Pattern z odpowiednio zredagowanym wejściem regular expression (*\s]+). Tutaj z kolei większośd uczestników nie zwróciła uwagi na możliwośd pojawienia się białego znaku na początku tekstu wejściowego, w rezultacie w tablicy wyjściowej otrzymywali dodatkowy element! Dodatkowe wymaganie dotyczące odwracania dłuższych wyrazów realizowano z reguły za pomocą wbudowanego węzła Reverse String, ale zdarzało się, że uczestnicy realizowali to na piechotę co oczywiście niepotrzebnie zabierało tak cenny czas. Niektórzy stosowali zamiennie Rotate String, co było niezgodne z wymaganiami zadania. Oryginalne rozwiązanie zaprezentował jeden z uczestników etapu on-line wykorzystując węzeł Scan From String ze specyfikatorem %s 2
Byli też uczestnicy, którzy preferowali pozytywistyczną prace od podstaw (analiza tekstu znak po znaku): 3
Zadanie nr 2. Szereg harmoniczny To przykład zadania na zastosowanie konstrukcji zdarzeniowej lub prostej odmiany maszyny stanowej. Zdecydowana większośd uczestników poradziła sobie z zasadniczymi wymaganiami (uzyskiwała zarówno oszacowanie liczby Eulera jak i poprawny wykres). Osoby stosujące maszynę stanową zapominały czasami o umieszczeniu zalecanego obiektu Wait ograniczającego obciążenie procesora. Ze spełnieniem wymagania przygotowania aplikacji do wykonywania w środowisku Run Time System zapewne łatwiej poradziły sobie osoby pracujące przy realizacji tego typu zadao. Poniżej diagram jednego z uczestników jakiego oczekiwaliśmy. Zadanie nr 3. MPPLV Banner Sama konwersja parametrów wejściowych na wyjściowe nie była dla uczestników zadaniem szczególnie wymagającym. Podstawowa trudnośd polegała w tym zadaniu na spełnieniu wymagania, aby vi realizował konwersję dla parametrów różnych typów. Tak jak oczekiwaliśmy, realizujący poprawnie to zadanie budowali zwykle polimorficzny vi. Zastanawialiśmy się również jak potraktowad rozwiązania z wejściem typu Variant, które także otrzymaliśmy (chod nieliczne) i postanowiliśmy je uznawad. Poniżej jedno z podejśd do problemu z wykorzystaniem typu Variant: 4
Zadanie nr 4. Catch me To program sprawdzający jak uczestnicy opanowali umiejętnośd posługiwania się konstrukcją zdarzeniową. Jako obiekt łapany stosowane były różne elementy (Button, Color Box, 2D Picture). Maszyna stanowa plus losowe generowanie nowego położenia dawały w rezultacie test zręcznościowy. Zakładaliśmy, że test można powtarzad wielokrotnie (przez ponowne naciśnięcie przycisku Start) i zdecydowana większośd tak interpretowała wymagania do programu. Zdarzały się jednak osoby, których rozwiązanie pozwalało tylko na przeprowadzenie jednego testu. W myśl powiedzonka (nie pamiętam autora): Są rozwiązania bardzo dobre i... znacznie lepsze do gustu przypadły nam te rozwiązania, które przy losowaniu nowego położenia uwzględniały rozmiar kontenera na tle którego obiekt się przemieszczał. Zadanie nr 5. Magazyn Części elektronicznych Globalna zmienna funkcjonalna (Functional Global Variable) to znana i często stosowana konstrukcja (standardowy element modelowych rozwiązao zadao w ramach certyfikatów CLD) wykorzystująca niezainicjalizowany rejestr przesuwny jednokrotnie wykonywanej pętli do przechowywania danych. Wyliczeniowy parametr wejściowy określa operację wykonywaną na danych. Ustawienie trybu not reentrant zapewnia wykonywanie operacji w strefie krytycznej. Duża grupa uczestników wykazała, że mechanizm działania i sposób wykorzystania functional globala jest im dobrze znany. 5
Implementacja poszczególnych operacji wymagała umiejętności związanych z odczytem i zapisem danych w pliku tekstowym oraz podstawowych umiejętności operowania na klastrach. Stan magazynu przechowywany był jako tablica klastrów, a wyszukiwanie odpowiedniego elementu w tablicy przez przeszukiwanie liniowe (fragment diagramu jednego z uczestników poniżej). Pod rozwagę polecam cytat: Many applications require that large datasets be stored such that individual elements can quickly be retrieved using a unique identifier this is commonly known as a lookup table, hash table, or map. A simple array is often used for this purpose, but retrieving a value can be an inefficient process, as it requires a linear search through the array. In LabVIEW, the variants use a highly optimized lookup table under the hood for specifying and retrieving attributes, making it an ideal tool for implementing a lookup table. Simply use the Get Variant Attribute and the Set Variant Attribute to store and retrieve paired values. z dokumentu Tips and Tricks to Increase LabVIEW Performance firmy NI, gdyż nikt z uczestników nie podążył tym tropem. 6
Formułując wymagania dotyczące zwracanych przez poszczególne operację danych celowo zaproponowaliśmy trzy różne typy (klaster, Int32, DBL), gdyż chcieliśmy się zorientowad czy pojawi się propozycja zastosowania wyjścia typu Variant. Tak. Pojawiły się! Uwagi ogólne: Na etapie próbnym formułowaliśmy wymaganie (zadanie Licznik cyfr): Opracuj diagram vi. W etapie on-line użyliśmy (świadomie) sformułowania Opracuj vi, który.... Dlatego solidaryzujemy się ze wszystkimi, którzy zadawali sobie trud zbudowania panelu przyłączeniowego, gdyż uważali, że jest to integralny element projektu vi, zwłaszcza tam gdzie kontekst wskazywał że mamy do czynienia z subvi. Przy ocenie zadao zasadniczą wagę przykładaliśmy jednak do diagramu. Zadania chod może niezbyt trudne były jednak dośd czasochłonne, stąd uczestnikom, którzy uporali się ze wszystkimi zadaniami należą się szczególne wyrazy uznania. Wszystkim uczestnikom bardzo gorąco dziękujemy za udział w tym etapie imprezy. Mamy nadzieję, że nie uznają oni tych dwóch godzin za czas stracony. Wszystkich zachęcamy do przesyłania na adres organizatorów wszelkich uwag i sugestii dotyczących zaproponowanych zadao i sposobów specyfikacji ich wymagao. Za wszelkie uwagi będziemy bardzo wdzięczni gdyż mogą one okazad się pomocne przy przygotowywaniu zadao w przyszłości. Janusz Pękala 7