losowanie pytań testowych

Jeśli masz coś do powiedzenia w sprawie LabVIEW napisz. Tutaj są tematy, których nie można uściślić do innych działów.
bury666
Posty: 2
Rejestracja: 06 sty 2019 21:46
Wersja środowiska: LabVIEW 2016

losowanie pytań testowych

Post autor: bury666 »

Mam problem z programem. Posiadam plik txt z pytaniami. Chciałbym aby program zaimportował plik z pytaniami, a następnie wylosował 10 losowych pytań i je wyświetlił lub zwrócił do nowego pliku txt lub csv. Chwilowo uploaduje plik i wrzucam w array który wyświetla cały zakres bazy? Proszę o pomoc bo nie mam pomysł co zrobić dalej. W załączniku wrzucam pliki.
Załączniki
baza_pytan.txt
(17.17 KiB) Pobrany 424 razy
projekt_losowanie_pytan_egzaminacyjnych.vi
(9.07 KiB) Pobrany 409 razy
Awatar użytkownika
Pitol
Moderator
Posty: 982
Rejestracja: 19 lip 2007 00:00
Wersja środowiska: LabVIEW 2019
Lokalizacja: Kraków

Re: losowanie pytań testowych

Post autor: Pitol »

Nie mam pod ręką LabVIEW, żeby obejrzeć Twój kod ale dam Ci radę na start.
Skorzystaj z bloczka Random Number. Zwraca on wartość losową w zakresie od 0-1.
Skoro jesteś w stanie załadować plik z pytaniami do tablicy to również jesteś w stanie określić jej rozmiar (ilość pytań).
Mnożysz teraz ten rozmiar tablicy z otrzymaną losową liczbą a następnie zaokrąglasz (sprawdź, w którą stronę zaokrąglać, żeby uwzględnić pełny zakres).
Otrzymasz teraz "losowy" numer pytania.

Teraz pozostaje Ci tylko zrobić to 10 razy w pętli.
Oczywiście nie zapomnij uwzględnić przypadku, że pytanie zostało już wylosowane.
Jeśli będziesz miał z tym problem daj znać, pomożemy.
ObrazekObrazekObrazek
Chcesz taki podpis? Zajrzyj tutaj
pawhan11
Posty: 67
Rejestracja: 21 wrz 2011 16:25
Wersja środowiska: LabVIEW 2012

Re: losowanie pytań testowych

Post autor: pawhan11 »

1.png
CLS - Certified LabVIEW Student
Awatar użytkownika
Pitol
Moderator
Posty: 982
Rejestracja: 19 lip 2007 00:00
Wersja środowiska: LabVIEW 2019
Lokalizacja: Kraków

Re: losowanie pytań testowych

Post autor: Pitol »

Kolego pawhan11, powiedz mi jaki sens ma Twój post z dydaktycznego punktu widzenia?

Autor wątku, wnioskując po załączonym VI, ma nikłe pojęcie o LabVIEW.
Twoje rozwiązanie zawiera Varianty, trochę logiki, sporo pętli... Czy uważasz, że osoba, która nie ma pojęcia o LabVIEW zrozumie ten kod?
Jeśli jeszcze zamieściłbyś jakiś opis tego co zrobiłeś, tak, żeby autor wątku miał chociaż szansę zrozumieć ten kod, to nie miałbym żadnych obiekcji.
ObrazekObrazekObrazek
Chcesz taki podpis? Zajrzyj tutaj
Awatar użytkownika
smiga
Administrator
Posty: 799
Rejestracja: 04 paź 2009 12:41
Wersja środowiska: LabVIEW 2016
Lokalizacja: Słupsk

Re: losowanie pytań testowych

Post autor: smiga »

:)
Przykład jak można skomplikować coś prostego. Kolega nie sprawdził chyba ile razy wykonuje się ta pętla dla małych wartości, np.:
NumbersToGenerate=5, Low=0, High=5 ... nawet 20 razy potrafi się przekręcić! Temat jest prostym losowaniem lotto (np.6z49) czyli kombinacje bez powtórzeń. Dodatkowo mamy w tym kodzie drobny problem, jakim jest losowanie pełnego zakresu, czyli np. NumbersToGenerate=7, Low=2, High=8 ... powinien losować 7 liczb, a losuje 6.
Proponuję Koledze pawhan11 zerknąć na poniższe porównanie dwóch wersji rozwiązań - czy wersja 2 (pod kreską :) ) nie jest prostsza i metodycznie łatwiejsza do wytłumaczenia/zrozumienia dla Kolegi bury666?
Załączniki
losowanie zadan.png
__ Arkadiusz Śmigielski, tel. 662 01 01 74___
ObrazekObrazekObrazek
PiDi
Posty: 641
Rejestracja: 31 gru 2010 01:36
Wersja środowiska: LabVIEW 2017
Lokalizacja: Katowice

Re: losowanie pytań testowych

Post autor: PiDi »

smiga, nadal za skomplikowanie...
losowanie zadan.png
(nie rozumiem jeszcze, jak z treści pierwotnego zadania wynikają w ogóle jakieś kontrolki "High" i "Low", ale nie będę wnikał :P )
ObrazekObrazekObrazekObrazek
Awatar użytkownika
smiga
Administrator
Posty: 799
Rejestracja: 04 paź 2009 12:41
Wersja środowiska: LabVIEW 2016
Lokalizacja: Słupsk

Re: losowanie pytań testowych

Post autor: smiga »

Pobawmy się dalej - czyli sprawdźmy "performance" każdej z wersji.
Wynika z testów, że wersja 2 jest najszybsza, dla losowania kilku zadań (w praktyce tak się to chyba najczęściej dzieje) z puli (mniejszej lub większej). Natomiast wersja 3 zaczyna wygrywać przy kilkudziesięciu zadaniach z puli (czas potrzebny na wywołanie zewnętrznej dll, która jest w środku tej funkcji, już zaczyna się opłacać). Wersja 2 i 3 dają w sumie całkiem podobne czasy ( na poziomie 10-5...10-6 s, oczywiście zależnie od komputera). Wersja 1 zazwyczaj jest kilka razy wolniejsza.
Wersaja 3 jest oczywiście najbardziej elegancka, ale metodycznie niczego nie uczy ... prócz umiejętności wykorzystywania gotowych funkcji z LabVIEW, co właściwie jest bardzo ważne, bo znacznie przyśpiesza proces tworzenia oprogramowania :p ;)
Załączniki
losowanie zadan3.png
__ Arkadiusz Śmigielski, tel. 662 01 01 74___
ObrazekObrazekObrazek
Adrian47
Posty: 3
Rejestracja: 19 paź 2018 15:35
Wersja środowiska: LabVIEW 2017

Re: losowanie pytań testowych

Post autor: Adrian47 »

Jak już mowa o wydajności to chętnie się dołączę :)
Można jeszcze co nieco uzyskać unikając przede wszystkim dynamicznego alokowania tablic, używając prostych typów danych i ograniczając ilość zapisów do pamięci.
W ten sposób uzyskujemy całkiem sporą przewagę nad rozwiązaniem 2. Przy zakresie 0-100000 i losowaniu 100 liczb wersja 2 trwa 13.35ms a rozwiązanie poniżej 0.01ms, czyli jakieś 1300x szybciej B-)
Warunki przed casem są zabezpieczeniem o które trzeba dbać przy algorytmach używających pętli while, by się nam nie zakręciła w nieskończoność. ;)
Załączniki
losowanie_w_zakresie.png
pawhan11
Posty: 67
Rejestracja: 21 wrz 2011 16:25
Wersja środowiska: LabVIEW 2012

Re: losowanie pytań testowych

Post autor: pawhan11 »

b.png
CLS - Certified LabVIEW Student
Awatar użytkownika
smiga
Administrator
Posty: 799
Rejestracja: 04 paź 2009 12:41
Wersja środowiska: LabVIEW 2016
Lokalizacja: Słupsk

Re: losowanie pytań testowych

Post autor: smiga »

Brawo Adrian47, brawo Pawhan11.
Całkiem fajny wątek nam wyszedł, z tego zadania wrzuconego przez bury666 - dziękuję za wspólną zabawę :)
__ Arkadiusz Śmigielski, tel. 662 01 01 74___
ObrazekObrazekObrazek
Awatar użytkownika
smiga
Administrator
Posty: 799
Rejestracja: 04 paź 2009 12:41
Wersja środowiska: LabVIEW 2016
Lokalizacja: Słupsk

Re: losowanie pytań testowych

Post autor: smiga »

Dla usystematyzowania wspólnych osiągnięć:
Załączniki
losowanie zadan5.png
__ Arkadiusz Śmigielski, tel. 662 01 01 74___
ObrazekObrazekObrazek
Awatar użytkownika
micard
Posty: 207
Rejestracja: 30 wrz 2011 11:28
Wersja środowiska: LabVIEW 2017
Kontakt:

Re: losowanie pytań testowych

Post autor: micard »

I jakie wyniki czaseowe?
Awatar użytkownika
smiga
Administrator
Posty: 799
Rejestracja: 04 paź 2009 12:41
Wersja środowiska: LabVIEW 2016
Lokalizacja: Słupsk

Re: losowanie pytań testowych

Post autor: smiga »

Wyniki poniżej:
Załączniki
w1.jpg
w2.jpg
__ Arkadiusz Śmigielski, tel. 662 01 01 74___
ObrazekObrazekObrazek
Awatar użytkownika
smiga
Administrator
Posty: 799
Rejestracja: 04 paź 2009 12:41
Wersja środowiska: LabVIEW 2016
Lokalizacja: Słupsk

Re: losowanie pytań testowych

Post autor: smiga »

Jak widać z wersją 3 jest coś nie tak ... czyli źle działa. Wersja 4 czasami losuje jedno 0.
__ Arkadiusz Śmigielski, tel. 662 01 01 74___
ObrazekObrazekObrazek
Adrian47
Posty: 3
Rejestracja: 19 paź 2018 15:35
Wersja środowiska: LabVIEW 2017

Re: losowanie pytań testowych

Post autor: Adrian47 »

Wersja 3 generuje tablicę przemieszanych liczb o zadanej wielkości w zakresie równym wielkości tej tablicy, dodatkowo dodaje do każdego elementu wartość 'start' (co widać jak się do niej zajrzy), czyli sprawdzi się jak chcemy po prostu przemieszać liczby.
Aby działała zgodnie z resztą algorytmów trzeba generować tablicę w całym zakresie Low-High, i wycinać z niej "NumbersToGenerate" na przykład tak:
Załączniki
Poprawione3.png
ODPOWIEDZ