!set titb=Cacher la solution dans un exemple
!set keyw=
!set datm=20110211
!set prev=formulaire
!set next=conseils
!set upbl=main
!set dat1=19000101
!set dat2=24000101

!if $wims_read_parm!=$empty
 !goto $wims_read_parm
!endif

!exit

:content
Quand on crée un pli avec <tt class="c">\fold</tt>, on crée automatiquement un lien vers une deuxième version 
de la page qui contient le texte du pli ; alors les paramètres aléatoires de la page sont rechargés 
et donc différents. Aussi, la solution contenue dans le pli ne correspond donc pas à la 
question posée.
<p>
Pour éviter cela, on utilise la commande <tt class="c">\link</tt> 
qui permet de recharger la même page dans une version différente
et de transmettre les paramètres nécessaires au calcul de la solution. 
Voici comment faire &#58;
<ul>
<li>On met un point dans la première paire d'accolades de la commande <tt class="c">\link</tt> pour 
signifier qu'on envoie sur la même page.</li>
<li>Le paramètre <tt class="c">N</tt> repère les versions de la page &#58; 
<ul><li>La version <tt class="c">\N=1</tt> de la page ne contient que la question ; 
le lien vers l'autre version est <tt class="fl">Solution</tt>.</li>
 <li>La version <tt class="c">\N=2</tt> de la page  contient  la question et la solution ; 
le lien vers l'autre version est 
 <tt class="fl">Nouvelle question</tt>.</li>
</ul></li>
<li>Le mot <tt class="c">\lien</tt> dans la deuxième accolade de la commande 
<tt class="c">&#92;link{.}{&#92;lien}{exemple}{parm1=&#92;N&parm2=&#92;p&parm3=&#92;q}
</tt> est le lien qui permet de changer de version ; sa définition dépend donc de <tt class="c">N</tt> &#58;
<pre class="ccc">&#92;def{text lien=&#92;N=1 ? Solution&#58;Nouvelle question}</pre>
</li>
<li>La troisième accolade de la commande contient l'ancre de l'exemple car la page est longue. Sinon au rechargement, 
la page revient en haut.</li>
<li>La quatrième accolade de la commande contient les paramètres transmis lors du rechargement.
<ul><li>
Le paramètre <tt class="c">N</tt> est transmis et conditionne la version affichée &#58; une nouvelle question est affichée 
(N = 1) ou  la solution est calculée avec les paramètres conservées puis affichée (N = 2).
La commande <tt class="c">&#92;def{integer N = &#92;parm1 = 1 ? 2 &#58; 1}</tt> donne la valeur 2 à N si <tt class="c">parm1=1</tt>
 et la valeur 1 sinon. On change de version à chaque rechargement.</li>
<li>Les paramètres aléatoires de l'exemple, ici <tt class="c">p, q</tt>, sont transmis par les paramètres ajoutés 
(<tt class="c">parm2=&#92;p&parm3=&#92;q</tt>) dans cette commande (voir l'aide).</li>
</ul>
<li>Dans la version <tt class="c">\N=1</tt> de la page, on pose une nouvelle question, donc les paramètres, 
ici 
!insmath p
 et 
!insmath q
, sont pris au hasard (<tt class="c">random</tt>). Dans la version <tt class="c">\N=2</tt> de la page,
la solution est calculée (puis affichée) avec les valeurs de 
!insmath p
 et 
!insmath q
 
transmises par la commande 
<pre class="ccc">&#92;link{.}{&#92;lien}{exemple}{parm1=&#92;N&parm2=&#92;p&parm3=&#92;q}</pre>. 
On définit donc 
!insmath p
 et 
!insmath q
 selon la valeur de <tt class="c">N</tt> par les lignes suivantes &#58;
<pre class="ccc">
&#92;def{integer p=&#92;N=1 ? random(2..10)&#58;&#92;parm2}
&#92;def{integer q=&#92;N=1 ? random(1..5)&#58;&#92;parm3}</pre></li>
<li>La variable <tt class="c">reponse</tt> dépend  de <tt class="c">N</tt>
dans sa définition &#58; <tt class="c">&#92;def{text reponse=&#92;N=2 ? La solution est &#92;liste&#58;&nbsp;}</tt>. 
Quand <tt class="c">N=1</tt>, elle est vide sinon elle donne la solution.</li>
</ul>
<p>
<h2><a name="exemple"></a>Voici l'exemple aléatoire en action</h2>

!ifval $m_parm1= 1  
!set m_N=$[rint( 2 )]
!else
!set m_N=$[rint( 1)]
!endif


!ifval $m_N=1  
!set m_lien= Solution

!else
!set m_lien=Nouvelle question

!endif

<p>

!ifval $m_N=1  
!set tmp0=!randint 2, 10

!set m_p=$[rint( $(tmp0))]
!else
!set m_p=$[rint($m_parm2)]
!endif


!ifval $m_N=1  
!set tmp0=!randint 1, 5

!set m_q=$[rint( $(tmp0))]
!else
!set m_q=$[rint($m_parm3)]
!endif


!set m_liste=$m_q


 
!for m_i=2 to $m_p 


!set m_r=$[rint($m_i*$m_q)]


!set m_liste=$m_liste, $m_r


!next

<p>

!ifval $m_N=2  
!set m_reponse= La solution est $m_liste

!else
!set m_reponse=&nbsp;

!endif

<p>
<div class="ccc">
Compte de $m_q en $m_q de $m_q à $m_r. $m_reponse
<br>

!read primitives.phtml 1, link, ., \lien, exemple, parm1=\N&parm2=\p&parm3=\q 

</div>
<p>
<h2>Voici le code complet &#58;</h2>
<pre class="ccc"> 
&#92;def{integer N = &#92;parm1 = 1 ? 2 &#58; 1}
&#92;def{text lien=&#92;N=1 ? Solution&#58;Nouvelle question}
<p>
&#92;def{integer p=&#92;N=1 ? random(2..10)&#58;&#92;parm2}
&#92;def{integer q=&#92;N=1 ? random(1..5)&#58;&#92;parm3}
&#92;def{text liste=&#92;q}
&#92;for{i=2 to &#92;p}{
&#92;def{integer r=&#92;i*&#92;q}
&#92;def{text liste=&#92;liste, &#92;r}}
&#92;def{text reponse=&#92;N=2 ? La solution est &#92;liste&#58;&nbsp;}
<p>
Compte de &#92;q en &#92;q de &#92;q à &#92;r. &#92;reponse
&#92;link{.}{&#92;lien}{exemple}{parm1=&#92;N&parm2=&#92;p&parm3=&#92;q}
<p>
</pre>
