Strona 1 z 2

losowanie pytań testowych

: 06 sty 2019 21:51
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.

Re: losowanie pytań testowych

: 06 sty 2019 22:53
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.

Re: losowanie pytań testowych

: 09 sty 2019 20:15
autor: pawhan11
1.png

Re: losowanie pytań testowych

: 10 sty 2019 08:46
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.

Re: losowanie pytań testowych

: 10 sty 2019 23:53
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?

Re: losowanie pytań testowych

: 11 sty 2019 00:40
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 )

Re: losowanie pytań testowych

: 11 sty 2019 12:48
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 ;)

Re: losowanie pytań testowych

: 12 sty 2019 01:49
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ść. ;)

Re: losowanie pytań testowych

: 12 sty 2019 20:11
autor: pawhan11
b.png

Re: losowanie pytań testowych

: 12 sty 2019 23:42
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ę :)

Re: losowanie pytań testowych

: 12 sty 2019 23:49
autor: smiga
Dla usystematyzowania wspólnych osiągnięć:

Re: losowanie pytań testowych

: 14 sty 2019 11:09
autor: micard
I jakie wyniki czaseowe?

Re: losowanie pytań testowych

: 14 sty 2019 18:15
autor: smiga
Wyniki poniżej:

Re: losowanie pytań testowych

: 14 sty 2019 18:18
autor: smiga
Jak widać z wersją 3 jest coś nie tak ... czyli źle działa. Wersja 4 czasami losuje jedno 0.

Re: losowanie pytań testowych

: 14 sty 2019 19:40
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: