Subversion Repositories wimsdev

Rev

Rev 13715 | Blame | Compare with Previous | Last modification | View Log | RSS feed

type=classify
textarea="data pre post"
iEdit="pre post"

:Classificare oggetti in base alle loro proprietà, seleziona&trascina.

L'esercizio presenta una lista di oggetti i cui è necessario selezionare
quelli che hanno una certa proprietà e trascinarli con il mouse nella
casella corrispondente.
<p>
Per costruire un esercizio utilizzando questo modello è sufficiente
inserire la lista di oggetti e le loro proprietà.
</p><p>
Con una piccola modifica, questo modello può essere adattato per accettare
oggetti costituiti da immagini.
</p>
<p class="wims_credits">Autore del modello: <a href="mailto:qualite@wimsedu.info">Gang Xiao</a></p>

:%%%%%%%%%%%%%%%%%      ATTENZIONE      %%%%%%%%%%%%%%%%%%%%

Se si rimuovono le indicazioni del modulo modelli (le righe che
cominciano con ':') è necessario rimuovere tutta questa parte
introduttiva del file. Altrimenti Createxo potrebbe non accettare il
codice dell'esercizio.

:%%%%%%%% Parametri che possono essere ridefiniti %%%%%%%%%%%%%%%%%

:\title{Classifica in base a una proprietà}
:\author{XIAO, Gang}
:\email{qualite@wimsedu.info}
:\credits{}

:Numero di oggetti da classificare. Massimo 20.
\integer{tot=8}

: Massimo numero di oggetti presentati con la stessa proprietà.
Questo numero deve essere maggiore di 1.
\integer{max1=4}

:Il numero di proprietà da presentare (di default il numero di proprietà definite)
Se il numero di proprietà definite è strettamente inferiore a questo parametro,
distrattori saranno scelti tra le proprietà non utilizzate.
\text{prop_cnt=}

:Dimensioni dei riquadri da trascinare con il mouse, in pixel, x per y.
Occorre tener presente che gli utenti possono cambiare le dimensioni delle
fonti nel browser e quindi bisogna evitare di disegnare riquadri troppo
piccoli.
\text{size1=100x40}

:Elenco delle categorie. Fino a 10, separate da virgole.
\text{prop=insetti,uccelli,mammiferi}

:Contenuto effettivo dell'esercizio.
<p>Inserire un oggeto per riga, indicando prima il nome e quindi la categoria,
  separati da una virgola.</p>
<p>È utile inserire dati in abbondanza per ogni categoria.</p>
Attenzione a non commettere errori nello scrivere le proprietà! Questo
potrebbe impedire completamente il funzionamento dell'esercizio.
\matrix{data=
aquila,uccelli
albatross,uccelli
ragno,insetti
anitra,uccelli
gatto,mammiferi
cavallo,mammiferi
cane,mammiferi
maiale,mammiferi
corbel,uccelli
locusta,insetti
elefante,mammiferi
falco,uccelli
gabbiano,uccelli
ape,insetti
leone,mammiferi
sparrow,uccelli
mosca,insetti
zanzara,insetti
pecora,mammiferi
oca,uccelli
farfalla,insetti
piccione,uccelli
volpe,mammiferi
nightingale,uccelli
scorpione,insetti
scimmia,mammiferi
tigre,mammiferi
mucca,mammiferi
}

:Opzioni dell'esercizio.
Utilizzare
<ul><li>l'opzione <span class="wims_code_words">shuffle</span> se si vuole che l'ordine delle categorie elencate sia casuale,
</li><li>
 l'opzione <span class="wims_code_words">vertical</span> se si vuole una disposizione verticale degli elementi.
</li></ul>
\text{option=}

:Testo che precede la tabella. Sono permessi comandi html.
\text{pre=Ordina i seguenti animali a seconda del loro genere.}

:Testo che segue la tabella. Sono permessi comandi html.
\text{post=}

:Verbo e articolo che nelle risposte appaiono prima della categoria.
\text{estun=appartiene ai/agli}

:Il testo che dice che un oggetto non appartiene a nessuna categoria.
\text{noclass=non è in nessuno dei generi elencati}

:%%%%%%%%%%% Parte che precede l'enunciato: da non modificare %%%%%%%%%%%%%

\integer{pcnt=items(\prop)}
\integer{prop_cnt=\prop_cnt=? \pcnt}
\integer{prop_cnt=min(\prop_cnt,\pcnt)}
\integer{datacnt=rows(\data)}
\integer{max2=\max1+1}
\integer{tot=\tot<\pcnt?\pcnt}
\text{prop=\pcnt>1 and shuffle iswordof \option?shuffle(\prop)}

\text{first=}
\text{firsti=}
\text{second=}
\text{secondi=}
\text{dist=}
\text{disti=}
\for{i=1 to \prop_cnt}{
 \text{t=shuffle(column(1,wims(select \data where column 2 issametext \prop[\i])))}
 \integer{s=min(\max1,items(\t))}
 \text{first=wims(append item \t[1] to \first)}
 \text{firsti=wims(append item \i to \firsti)}
 \if{\s > 1}{
  \text{second=wims(append item \t[2..\s] to \second)}
  \text{secondi=wims(append item wims(makelist \i for x=2 to \s) to \secondi)}
 }
}
distracteur
\if{\prop_cnt<\pcnt}{
 \text{t=shuffle(column(1,wims(select \data where column 2 issametext \prop[\prop_cnt+1])))}
 \integer{s=min(\max1,items(\t))}
 \text{dist=wims(append item \t[1] to \dist)}
 \text{disti=wims(append item \i to \disti)}
}

\if{\tot>\prop_cnt}{
 \integer{scnt=items(\second)}
 \integer{secnt=min(\tot-\prop_cnt,\scnt)}
 \integer{tot=\prop_cnt+\secnt}
 \text{sh2=shuffle(\scnt)}
 \text{sh2=\sh2[1..\secnt]}
 \text{second=item(\sh2,\second)}
 \text{secondi=item(\sh2,\secondi)}
 \text{all=\first,\second}
 \text{alli=\firsti,\secondi}
}{
 \text{all=\first}
 \text{alli=\firsti}
}
\text{all=wims(nonempty items \all)}
\text{all=wims(listuniq \all)}
\integer{acnt=items(\all)}
\text{sh=shuffle(\acnt)}
\text{all=item(\sh,\all)}
\text{alli=item(\sh,\alli)}
\text{prop=\prop[1..\prop_cnt]}
\text{props=wims(tolower \prop)}
\text{alls=wims(tolower \all)}
\text{size=\size1 x \max2}
\text{sizev=\size x \max2}
\text{rep=item(1..\prop_cnt,wims(makelist r x for x=1 to 10))}
\steps{\rep}
\integer{distc=\dist!= ? 1 : 0}
\conditions{wims(makelist x for x=1 to \acnt + \distc)}

:%%%%%%%%%%%%% Enunciato (in html). %%%%%%%%%%%%%%%%%%%%

::Il comando per mostrare il campo della risposta 3, per esempio, è 
\embed{reply 3,\size} <p>
E il nomer della proprietà numero 4 è \prop[4] se si vuole la prima lettera
maiuscola oppure \props[4] se si vuole tutto miniscolo.

\statement{<div class="instruction">
\pre
</div>
<table class="wimsnoborder">
\if{vertical iswordof \option}{
  <tr>\for{k=1 to \prop_cnt}{<th>\prop[\k]</th>}</tr>
  <tr>\for{k=1 to \prop_cnt}{
    <td style="text-align:left;vertical-align:top">\embed{reply \k, \sizev}</td>}
  </tr>
}{
  \for{k=1 to \prop_cnt}{
   <tr>
     <th>\prop[\k]</th>
     <td style="text-align:left">\embed{reply \k, \size}</td>
   </tr>
  }
 }
</table>
\post
}

:%%%%%%%%%%%%% Non modificare nulla da qui in poi. %%%%%%%%%%%%%%%%%

\answer{\prop[1]}{\r1;\all,\dist}{type=dragfill}
\answer{\prop[2]}{\r2}{type=dragfill}
\answer{\prop[3]}{\r3}{type=dragfill}
\answer{\prop[4]}{\r4}{type=dragfill}
\answer{\prop[5]}{\r5}{type=dragfill}
\answer{\prop[6]}{\r6}{type=dragfill}
\answer{\prop[7]}{\r7}{type=dragfill}
\answer{\prop[8]}{\r8}{type=dragfill}
\answer{\prop[9]}{\r9}{type=dragfill}
\answer{\prop[10]}{\r10}{type=dragfill}

\text{totans=item(1..\prop_cnt,
        wims(items2words \r1),
        wims(items2words \r2),
        wims(items2words \r3),
        wims(items2words \r4),
        wims(items2words \r5),
        wims(items2words \r6),
        wims(items2words \r7),
        wims(items2words \r8),
        wims(items2words \r9),
        wims(items2words \r10))}
text{totans=wims(replace internal &#39; to ' in \totans)}
\text{clean=}
\text{check=}
\for{t=1 to \acnt}{
 \integer{cat=0}
 \for{r=1 to \prop_cnt}{
  \integer{cat=\all[\t] iswordof \totans[\r]?\r}
 }
 \if{\cat > 0}{
  \text{clean=\clean \estun \props[\cat],}
  \text{check=\alli[\t]=\cat?\check 1,:\check 0,}
 }{
  \text{clean=\clean \noclass,}
  \text{check=\check 0,}
 }
}

\if{\dist!=}{
 \for{t=1 to 1}{
   \integer{cat=0}
   \for{r=1 to \prop_cnt}{
    \integer{cat=\dist[\t] iswordof \totans[\r]?\r}
   }
 \if{\cat = 0}{
   \text{clean=\clean \dist[\t] \noclass,}
   \text{check=\check 1,}
  }{
   \text{clean=\clean \dist[\t] \estun \props[\cat],}
   \text{check=\check 0,}
  }
 }
}

\condition{\all[1] \clean[1]}{\check[1]=1}
\condition{\all[2] \clean[2]}{\check[2]=1}
\condition{\all[3] \clean[3]}{\check[3]=1}
\condition{\all[4] \clean[4]}{\check[4]=1}
\condition{\all[5] \clean[5]}{\check[5]=1}
\condition{\all[6] \clean[6]}{\check[6]=1}
\condition{\all[7] \clean[7]}{\check[7]=1}
\condition{\all[8] \clean[8]}{\check[8]=1}
\condition{\all[9] \clean[9]}{\check[9]=1}
\condition{\all[10] \clean[10]}{\check[10]=1}
\condition{\all[11] \clean[11]}{\check[11]=1}
\condition{\all[12] \clean[12]}{\check[12]=1}
\condition{\all[13] \clean[13]}{\check[13]=1}
\condition{\all[14] \clean[14]}{\check[14]=1}
\condition{\all[15] \clean[15]}{\check[15]=1}
\condition{\all[16] \clean[16]}{\check[16]=1}
\condition{\all[17] \clean[17]}{\check[17]=1}
\condition{\all[18] \clean[18]}{\check[18]=1}
\condition{\all[19] \clean[19]}{\check[19]=1}
\condition{\all[20] \clean[20]}{\check[20]=1}