INFORMATYKA I MATEMATYKA
ZADANIA ZALEŻNE OD PARAMETRÓW
[słowa kluczowe. TeX, algorytm permutowania, algorytm losowania infor- matyzacja procesu dydaktycznego]
Streszczenie
W pracy omawiany jest automatyczny sposób tworzenia wielu wersji za- dań o podobnej treści różniących się parametrami liczbowymi. Rozważane pewne aspekty tego zagadnienia. Podane są zadania przykładowe z różnych przedmiotów.
1. Wstęp
W pracy [14] przedstawiony jest program służący do przygotowywania różnych wersji zadań egzaminacyjnych bądź zaliczeniowych. Program zawiera dwa podstawowe narzędzia (które można łączyć). Pierwsze to utworzenie testu z możliwością losowania pytań i odpowiedzi oraz ich permutowania. Drugie to losowanie danych liczbowych do każdego pytania i utworzenia różnych wersji zadań różniących się tymi parametrami, ale to już uniemożliwia bezmyślne przepisywanie. Jednocześnie taka sama treść zadania powoduje, że zadania są jednakowej trudności, co ułatwia sprawiedliwa ocenę. W dalszej części poka- żemy, że wybór parametrów umożliwia również zmianę treści zadania.
Program był i jest używany przez wykładowców różnych uczelni. Autor
otrzymał uwagi i prośby o wprowadzenie dodatkowych opcji, za które bardzo
dziękuje. Przyczyniają się one do doskonalenia programu. Niektóre z tych su-
gestii miały bardzo specyficzny „lokalny” charakter i zostały (jeśli się dało!)
uwzględnione tylko dla konkretnego użytkownika. Wprowadzanie ich do wersji
ogólnodostępnej jest niepotrzebne.
Było jednak kilka sugestii, które warto było uwzględnić „globalnie”. Za- nim omówimy co to za sugestie i pokażemy w jaki sposób udało się je zreali- zować omówimy krótko główne dotychczasowe mechanizmy działania omawia- nego programu.
2. Działanie programu testy.tex
Program testy.tex jest plikiem źródłowym LaTeX-a i wykorzystuje do- stępne w LaTeX-u (z użyciem kilku dodatkowych „algorytmicznych”) biblio- teki.
Mogą z niego korzystać (i korzystają) nie tylko specjaliści nauk ścisłych posługujący się biegle LaTeX-em, ale również pozostali nauczyciele. Program jest powszechnie dostępny na stronie internetowej Wyższej Szkoły Menedżer- skiej w Warszawie pod adresem http://www.rusinek.wsm.warszawa.pl/TESTY/.
Wystarczy przygotować plik z pytaniami w sposób następujący:
\question
Tu wpisujemy treść pierwszego pytania
\answers {pierwsza odpowiedź\trueX}
{druga odpowiedź\trueX}
{trzecia odpowiedź\trueX}
.... \endquestion
%
\question
Tu wpisujemy treść drugiego pytania
\answers {pierwsza odpowiedź\trueX}
{druga odpowiedź\trueX}
{trzecia odpowiedź\trueX}
.... \endquestion ....
Za X trzeba wstawić 1, jeśli odpowiedź jest prawdziwa oraz 0, jeśli jest fałszywa.
Pytań może być dowolnie dużo, a odpowiedzi nie więcej niż 12 na dane pytanie. Program losuje zarówno pytania jak i odpowiedzi na nie, a następnie wszystko permutuje przygotowując jednocześnie plik z wzorcem prawidłowych odpowiedzi gotowym do przetworzenia przez skaner. Dzięki temu sprawdzanie egzaminu nawet przy dużej liczbie studentów jest automatyczne.
Program współpracuje z innym programem, który opracowuje wyniki eg-
zaminu uwzględniając różne aspekty oceny (omawiany on jest w pracy [15]).
Jeśli zadania dotyczą przedmiotów „ilościowych”, to dodatkowo można używać losowo wybranych całkowitych zmiennych liczbowych losowanych z góry wybranego przedziału. Tych zmiennych może być 9.
Kompilacja tekstu z zadaniami jest przeprowadzana kilkakrotnie (użyt- kownik nie musi tego wiedzieć, program sam wybiera odpowiednią liczbę kom- pilacji). Za pierwszym razem program losuje pytania i odpowiedzi oraz loso- wo je permutuje i losuje zmienne liczbowe z wybranego przez użytkownika przedziału. Jednocześnie zapisuje wyniki losowania i permutacji w pewnym zewnętrznym pliku.
Przy kolejnych kompilacjach program wykorzystuje odpowiednią ilość ra- zy ten plik zewnętrzny. Dzięki temu, za cenę pewnego spowolnienia procesu, TeX nie musi przechowywać w pamięci (co przy dużej liczbie zestawów i zmien- nych liczbowych byłoby niemożliwe) ani wyników permutacji, ani parametrów liczbowych.
Przy następnym przygotowywaniu tego samego tekstu z zadaniami czy testu można wybrać opcję nowego losowania lub użycia poprzednich parame- trów. Druga opcja jest przydatna z praktycznych powodów.
Pierwszy pojawia się na przykład wtedy, gdy chcemy trochę zmienić treści (np. dołożyć jakieś dodatkowe pytanie) zadań już wcześniej omawianych, a zatem chcielibyśmy aby wylosowane parametry liczbowe były takie same.
Okazało się, że możliwość wyboru drugiej opcji okazała się bardzo po- trzebna, kiedy osoba przeprowadzająca egzamin zrobiła jakiś błąd w odpo- wiedziach (na przykład zaznaczyła w pewnym pytaniu odpowiedź prawdziwą nie tam gdzie trzeba) i zauważyła ten błąd już po przeprowadzeniu testowego egzaminu.
Egzamin składał się z 99 zestawów, w każdym była inna kolejność pytań i odpowiedzi. Dzięki drugiej opcji wystarczyło zmienić 0 na 1 w pliku źródło- wym, a następnie utworzyć testy ponownie z takimi samymi parametrami.
3. Parametry liczbowe w zmodyfikowanej wersji programu Dwie sugestie użytkowników okazały się na tyle ważne i ciekawe, że warto było je uwzględnić i odpowiednie modyfikacje umieścić w powszechnie dostęp- nym programie.
Pierwsza polegała na tym, aby w pytaniach testowych wartość logiczna
odpowiedzi mogła zależeć od wylosowanych parametrów liczbowych, czyli też,
aby była zmienną.
Zademonstrujemy to na prostym przykładzie.
Treść zadania:
Niech x 0 będzie rozwiązaniem równania 5x − 10 = 0. Wtedy A) x 0 < 4;
B) x 0 > 3;
C) x 0 > 6.
Parametry 5, 10, 4, 3, 6 są losowane i w każdym zestawie mogą być in- ne, zatem wartość logiczna odpowiedzi zależy od tego jak te liczby zostały wylosowane.
Wystarczyło w programie zmienić miejsce, gdzie TeX czytał liczby 0 lub 1 po poleceniu \true tak aby mogła to być zmienna. Wówczas praktyczna realizacja powyższego zadania może wyglądać tak:
\question
%rozwiązanie wynosi \xa (x_0=\xa).
\xc=\xb\multiply\xc\xb
Niech $x_0$ będzie rozwiązaniem równania $\the\xb x - \the\xc=0$.
Wtedy \ifnum\xe=\xf\advance\xf1\else\fi
\answers
{$x_0<\the\xd$\ifnum\xa<\xd{}\xj=1\else\xj=0\fi\true\xj}
{$x_0>\the\xe$\ifnum\xa>\xe{}\xj=1\else\xj=0\fi\true\xj}
{$x_0>\the\xf$\ifnum\xa>\xf{}\xj=1\else\xj=0\fi\true\xj}
\endquestion
Dzięki linijce \ifnum\xe=\xf\advance\xf1\else\fi druga i trzecia od- powiedź będą zawsze różne. Opisy poleceń \ifnum, \advance, \multiply i innych poleceń TeX-a można znaleźć w [7].
Inną sugestia polegała na tym, aby różne parametry można było losować z różnych przedziałów. Wyobraźmy sobie zadanie ze statystyki lub statystyki matematycznej, w którym losowanym parametrami będą średnia i odchylenie standardowe. Jeśli zadanie ma mieć sens, to średnia musi być dużo większa niż odchylenie standardowe, a zatem parametry te muszą być losowane z zupełnie innych przedziałów.
Problem ten został rozwiązany następująco.
Przy pierwszej kompilacji TeX losuje zmienne z przedziału [0; 9999]. Na- stępnie zapisuje wynik losowania jako tekstowa linia pliku np.
\zmienne{2345}{7890}{13}{2345}{6789}{8974}{1112}{3905}{4567}
Żeby nie przeciążać pamięci TeXa (TeX pozwala na deklarację około 250 zmiennych liczbowych i około 25000 poleceń) w czasie pobierania tej linii z pliku w nowszej wersji programu TeX traktuje odpowiednie parametry pole- cenia \zmienne, czyli liczby w nawiasach klamrowych, już nie jako zmienne liczbowe, ale jako tekst. Przetwarza ten tekst na liczby tylko wtedy, gdy jest to konieczne.
Polecenie \zmienne wygląda więc następująco:
\def\zmienne#1#2#3#4#5#6#7#8#9{%
\def\uuaxa{#1}\def\uuaxb{#2}\def\uuaxc{#3}%
\def\uuaxd{#4}\def\uuaxe{#5}\def\uuaxf{#6}%
\def\uuaxg{#7}\def\uuaxh{#8}\def\uuaxi{#9}}
Następnie, kiedy jest to potrzebne w konkretnym zadaniu, deklaruje- my zmienną pod wybraną nazwą przy pomocy trzyargumentowego polecenia
\nowazm o poniższym algorytmie 1
\def\nowazm#1#2#3{%
\advance\uuazm by1
\ifnum\uuazm>9
\immediate\write16{Zmiennych w zadaniu nie moze byc wiecej niz 9!}
\immediate\write16{ZAMKNIJ PROGRAM - DOWOLNY KLAWISZ}
\read-1 to \cowybierasz
\endgroup\end{document}
\else\fi
\ifthenelse{\isundefined{#1}}{\newcount#1}{}
\za=#3\advance\za by-#2
\advance\za by1
\ifnum\uuazm=1{}\zi=\uuaxa{}\else
\ifnum\uuazm=2{}\zi=\uuaxb{}\else
\ifnum\uuazm=3{}\zi=\uuaxc{}\else
\ifnum\uuazm=4{}\zi=\uuaxd{}\else
\ifnum\uuazm=5{}\zi=\uuaxe{}\else
\ifnum\uuazm=6{}\zi=\uuaxf{}\else
\ifnum\uuazm=7{}\zi=\uuaxg{}\else
\ifnum\uuazm=8{}\zi=\uuaxh{}\else
\zi=\uuaxi{}\fi\fi\fi\fi\fi\fi\fi\fi
1
Polecenie \question zeruje zmienną \uuazm i numeracja potrzebnych zmiennych zaczyna
się od początku
\multiply\za by\zi
\divide\za by10000\advance\za by#2
#1=\za}
Na przykład chcąc mieć pierwszą zmienną w danym zadaniu pod nazwą
\xxa losowaną z przedziału [3; 8] piszemy
\nowazm{\xxa}{3}{8}
Jej wartość jest odpowiednią liniową funkcją zależną od wartości liczby przechowywanej jako tekst w poleceniu \uuaxa.
Chcąc mieć drugą zmienną w danym zadaniu pod nazwą \xxb losowaną z przedziału [3000; 8000] piszemy
\nowazm{\xxb}{3000}{8000}
Jej wartość jest z kolei liniową funkcją zależną od wartości liczby prze- chowywanej jako tekst w poleceniu \uuaxb.
W ten sposób możemy w danym zadaniu zadeklarować i używać do 9 zmiennych. 2
Linia rozpoczynająca się poleceniem \ifthenelse powoduje, że nowa zmienna jest deklarowana tylko w pierwszym zestawie i w pierwszym zadaniu.
W przeciwnym wypadku przeciązylibyśmy pamięć TeX-a. Jest to polecenie z pakietu ifthen ([4]).
Czasami będa nam potrzebne zmienne tylko do obliczeń i nie muszą być losowane - wystarczy je zadeklarować. Robimy to poleceniem \zmpom{nazwa}, której definicja jest następująca
\def\zmpom#1{\ifthenelse{\isundefined{#1}}{\newcount#1}}
Zmienne liczbowe można też wykorzystać do zadań egzaminacyjnych z przedmiotów „nieilościowych”, aby uzyskać różne wersje pytania. Oto prosty przykład
\question
\nowazm{\xa}{1}{3}
Powieść
\ifnum\xa=1 ,,Lalka’’\else
2