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

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 39 razy
projekt_losowanie_pytan_egzaminacyjnych.vi
(9.07 KiB) Pobrany 41 razy

Awatar użytkownika
Pitol
Moderator
Posty: 937
Rejestracja: 19 lip 2007 00:00
Wersja środowiska: LabVIEW 2015
Lokalizacja: Kraków
Has thanked: 2 times
Been thanked: 9 times

Re: losowanie pytań testowych

Post autor: Pitol » 06 sty 2019 22:53

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: 63
Rejestracja: 21 wrz 2011 16:25
Wersja środowiska: LabVIEW 2012

Re: losowanie pytań testowych

Post autor: pawhan11 » 09 sty 2019 20:15

1.png
CLS - Certified LabVIEW Student

Awatar użytkownika
Pitol
Moderator
Posty: 937
Rejestracja: 19 lip 2007 00:00
Wersja środowiska: LabVIEW 2015
Lokalizacja: Kraków
Has thanked: 2 times
Been thanked: 9 times

Re: losowanie pytań testowych

Post autor: Pitol » 10 sty 2019 08:46

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
Posty: 712
Rejestracja: 04 paź 2009 12:41
Wersja środowiska: LabVIEW 2016
Lokalizacja: Słupsk
Has thanked: 4 times
Been thanked: 3 times
Kontakt:

Re: losowanie pytań testowych

Post autor: smiga » 10 sty 2019 23:53

:)
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: 632
Rejestracja: 31 gru 2010 01:36
Wersja środowiska: LabVIEW 2017
Lokalizacja: Katowice
Has thanked: 3 times
Been thanked: 3 times

Re: losowanie pytań testowych

Post autor: PiDi » 11 sty 2019 00:40

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
Posty: 712
Rejestracja: 04 paź 2009 12:41
Wersja środowiska: LabVIEW 2016
Lokalizacja: Słupsk
Has thanked: 4 times
Been thanked: 3 times
Kontakt:

Re: losowanie pytań testowych

Post autor: smiga » 11 sty 2019 12:48

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 » 12 sty 2019 01:49

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: 63
Rejestracja: 21 wrz 2011 16:25
Wersja środowiska: LabVIEW 2012

Re: losowanie pytań testowych

Post autor: pawhan11 » 12 sty 2019 20:11

b.png
CLS - Certified LabVIEW Student

Awatar użytkownika
smiga
Posty: 712
Rejestracja: 04 paź 2009 12:41
Wersja środowiska: LabVIEW 2016
Lokalizacja: Słupsk
Has thanked: 4 times
Been thanked: 3 times
Kontakt:

Re: losowanie pytań testowych

Post autor: smiga » 12 sty 2019 23:42

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
Posty: 712
Rejestracja: 04 paź 2009 12:41
Wersja środowiska: LabVIEW 2016
Lokalizacja: Słupsk
Has thanked: 4 times
Been thanked: 3 times
Kontakt:

Re: losowanie pytań testowych

Post autor: smiga » 12 sty 2019 23:49

Dla usystematyzowania wspólnych osiągnięć:
Załączniki
losowanie zadan5.png
__ Arkadiusz Śmigielski, tel. 662 01 01 74___
ObrazekObrazekObrazek

Awatar użytkownika
micard
Posty: 191
Rejestracja: 30 wrz 2011 11:28
Wersja środowiska: LabVIEW 2017
Has thanked: 6 times
Been thanked: 6 times
Kontakt:

Re: losowanie pytań testowych

Post autor: micard » 14 sty 2019 11:09

I jakie wyniki czaseowe?

Awatar użytkownika
smiga
Posty: 712
Rejestracja: 04 paź 2009 12:41
Wersja środowiska: LabVIEW 2016
Lokalizacja: Słupsk
Has thanked: 4 times
Been thanked: 3 times
Kontakt:

Re: losowanie pytań testowych

Post autor: smiga » 14 sty 2019 18:15

Wyniki poniżej:
Załączniki
w1.jpg
w2.jpg
__ Arkadiusz Śmigielski, tel. 662 01 01 74___
ObrazekObrazekObrazek

Awatar użytkownika
smiga
Posty: 712
Rejestracja: 04 paź 2009 12:41
Wersja środowiska: LabVIEW 2016
Lokalizacja: Słupsk
Has thanked: 4 times
Been thanked: 3 times
Kontakt:

Re: losowanie pytań testowych

Post autor: smiga » 14 sty 2019 18:18

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

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