Acronis
Fórum pro uživatele kancelářského balíku OpenOffice | LibreOffice
 

#1 11. 2. 2019 19:11:43

Monikao
Člen
Registrace: 11. 2. 2019
Příspěvků: 1

Funkce pro testování znalostí

Dobrý den,

do OpenOffice Calc jsem si do několika listů, dle lekce vepsala do sloupce A aj slovíčka a do sloupce B cz překlad. Je nějaká funkce, která by náhodně vybrala české slovo a po mém vyplnění překladu zhodnotila, zda je správně?
Děkuji za odpověď.

Editoval Monikao (11. 2. 2019 19:12:21)

Offline

#2 14. 2. 2019 18:02:44

neutr
Člen
Registrace: 8. 3. 2007
Příspěvků: 3,133

Re: Funkce pro testování znalostí

Toto se musí řešit pomocí makra, nebo spíš psané funkce. Stačí když uvedete kolik výrazů (tedy řádků) je využito.


     Mimochodem mám vytvořený generátor, který vytváří testy HTML právě z podobné databáze. Je to původní práce pro UJEP a vzor jsem forknul z CodePen, ale princip je použitelný velmi snadno jen pro Calc - bez html, CSS a JavaScriptu.
     Princip testů je v základní podobě nabídky 3 odpovědí, z nichž je samozřejmě správně jenom jedna. Ale protože je strojně generována "Berger's Table" tak sady otázek (volitelný počet) jsou celkem někdy přiblblé a musí se manuálně zadávat bodové vyhodnocení, nebo ty zcela snadné smazat což vytvoří dodatečnou složitost a manuální pracnost. Tak jsem přidělal 4. otázku - matoucí ale tu musí volit autor zase manuálně.


     Samozřejmě když to bude pouze otázka > odpověď tak se nemusí dělat nic jiného nežli ANO/NE a započítat po jednom bodu. Na konci spočítat správné odpovědi/celkovým počtem otázek = výsledek v % a podobně. Jde tedy spíš o to, zda to máte pouze pro sebe, nebo pro žáky. To souvisí také s rizikem autorských práv ke slovníku, ale vetšinou to jde pokud to nemá komerční šíření.


     Upřesněte svou představu o testu, počtu otázek, vyhodnocení a podobně.


Moje e-mailová adresa
Pokud je Váš problém vyřešen, označte prosím svůj příspěvek za "VYŘEŠENÝ"
Zlepšíte orientaci při vyhledávání řešení JAK OZNAČIT TÉMA ZA VYŘEŠENÉ

Offline

#3 16. 2. 2019 19:44:16

ludviktrnka
Člen
Registrace: 9. 7. 2009
Příspěvků: 588

Re: Funkce pro testování znalostí

Na list2 bych do A1 dal vzorec: =RANDBETWEEN(2;1000) (druhé číslo je počet slovíček, případně lze nahradit za COUNTA(List1.A1:A10000) takže vzorec vypadá =RANDBETWEEN(2;COUNTA(List1.A1:A10000)). Tím se vygeneruje náhodné číslo, které bude představovat číslo řádku.
Do další buňky (třeba A3) přijde otázka tedy české slovíčko: =INDEX(List1.A1:B10000;A1;2)
Vedle (do B3) se bude doplňovat anglické slovo.
Vyhodnocení bude vypadat nějak takto: =IF(B3=INDEX(List1.A1:B10000;A1;1);"Super";"Blbě").
V tomto případě nezáleží na velikosti písmen, což pokládám spíše za výhodu. Pokud by se měl text vyhodnocovat zcela přesně, pak lze použít funkci exact =IF(EXACT(B3,INDEX(List1.A1:B10000;A1;1));"Super";"Blbě").
Nové slovíčko se zadá trojhmatem Ctrl+Shift+F9, což je příkaz k přepočítání vzorců, čímž se vygeneruje nové náhodné číslo řádku.


EDIT: Samozřejmě o pár řádků níže (mimo "první" obrazovku může být správná odpověď: =INDEX(List1.A1:B10000;A1;1) takže tlačítkem PageDown získá člověk rychlou odpověď, pokud se nedaří.


EDIT II.: zkoušel jsem ještě více listů a nějak se to pokazilo. Ta funkce Randombetween se chová trochu jinak pokud se dovnitř přidá ještě INDIRECT - tehdy se začne přepočítávat po každém entru, kdežto jen s funkcí COUNT reagovala jen na CTRL+SHIFT+F9. Z toho plyne že použité téo metody na více listů bude problematické a nezbyde než použítí nějakého aspoň jednoduchého makra.


EDIT III.: ... jde to i pro více listů: do A1, B1 atd. se vloží čísla lekcí 1, 2, atd.. (Listy se nazvou Lekce1, Lekce2 atd.)(čísla mohou být libovolná a nemusí jít nijak po sobě a ani to nemusí být čísla, jen tam nesmí být žádná mezera v názvu listu)
Pod každé číslo lekce (do řádku 2) se vloží počet slovíček =COUNTA(Lekce1.A1:A1000), =COUNTA(Lekce2.A1:A1000) atd.
Do A4 vložím počet lekcí: =COUNT(A1:Z1)
Do A5 vložím generátor čísla sloupce s lekcí: =RANDBETWEEN(1;A4)
Do B4 vložím vybrané číslo lekce: =INDEX(A1:Z1;1;A5)
do B5 vložím generátor čísla řádku ve vybrané lekci: =RANDBETWEEN(2;INDEX(A2:Z2;1;A5))(předpokládám slovíčka od druhého řádku, pokud jsou už na prvním pak bude první číslo 1 ..between(1;Ind...
v A7 bude otázka pomocí funkce INDIRECT: =INDEX(INDIRECT("Lekce"&B4&"!B1:A1000");B5;2)
v A50 (mimo obrazovku) bude odpověď: =INDEX(INDIRECT("Lekce"&B4&"!B1:A1000");B5;1)
V B7 se bude doplňovat odpověď
a C7 bude vyhodnocení: =IF(B7=A50;"Super";"Blbě")


EDIT IV.: ... je to nespolehlivé, po instalaci nejnovějšího LO už to zase nefunguje - randbetween se přepočítává po každém entru, což je pro tuto potřebu nepoužitelné a musí se sáhnout k makru.

Editoval ludviktrnka (17. 2. 2019 12:50:10)


LibreOffice 6.2.

Offline

#4 17. 2. 2019 13:57:08

ludviktrnka
Člen
Registrace: 9. 7. 2009
Příspěvků: 588

Re: Funkce pro testování znalostí

... takže pomocí jednoduchého makra :-). Nutno zkopírovat do modulu - návod viz https://www.openoffice.cz/doplnky/mala- … office-org

Sub RandomWord
	Dim oDoc as object, oList as Object, oTest as Object 
	Dim iList As Integer, iRadek As Integer, PocetListu As Integer, PocetRadku As Integer

	oDoc = ThisComponent
	
	PocetListu = oDoc.Sheets.Count-1 'zjistím počet listů, indexy jsou ovšem od nuly tak je potřeba odečíst jedna

	iList =  Int(PocetListu * Rnd) 'vygeneruji náhodné číslo listu kromě posledního (již sníženo o jedna)
	
	oList = oDoc.Sheets.GetByIndex(iList)
	oTest = oDoc.Sheets.GetByIndex(PocetListu) 'Poslední list je Test, toto uspořádání je pro běh tohoto makra nutné
	
	PocetRadku = PosledniRadek(iList,0) 'zjistím počet vyplněných řádků v daném listu
	
	iRadek = Int(PocetRadku * Rnd) 'vygeneruji číslo řádku v daném rozmezí od nula do konce - tzn. slovíčka již od prvního řádku
	
	Word = oList.GetCellByPosition(0, iRadek).String 'načte slovíčko z listu do proměnné word
	Slovo = oList.GetCellByPosition(1, iRadek).String 'načte slovíčko z listu do proměnné slovo
	
	oTest.GetCellRangeByName("A7").String = Slovo 'proměnnou slovo vložíme do listu Test na zadanou pozici 
	oTest.GetCellRangeByName("A50").String = Word 'proměnnou word vložíme do listu Test na zadanou pozici
	oTest.GetCellRangeByName("B7").String = "" 'do vyplňvacího pole vložíme prázdnou množinu - čili mažu předchozí

'Vyhodnocení se provede pomocí vzorce =IF(B7=A50;"Super";"Blbě")
   
End Sub

Function PosledniRadek (list as integer, sloupec as integer) as integer
  Dim oSh As Object
  Dim oSloupec as Object
  Dim oOblasti as Object
  Dim radek as integer
	
  oSh = ThisComponent.Sheets.GetByIndex(list)
  oSloupec = oSh.columns.GetByIndex(sloupec)
  oOblasti = oSloupec.queryContentCells(1+2+4+16).RangeAddresses

  If Ubound(oOblasti) < 0 Then   ' Nenalezeno, vybereme začátek
     radek = 1
  Else   
     radek = oOblasti(Ubound(oOblasti)).EndRow + 1
  End If
  
  PosledniRadek = radek 
End Function

LibreOffice 6.2.

Offline

#5 17. 2. 2019 14:28:44

ludviktrnka
Člen
Registrace: 9. 7. 2009
Příspěvků: 588

Re: Funkce pro testování znalostí


LibreOffice 6.2.

Offline

Zápatí