Liste sans doublons

Added by Benoit PIERRET over 8 years ago

Bonjour,

Je cherche à créer une liste sans doublons.
Je suis parti de cet exemple:
http://tex.stackexchange.com/questions/109619/generating-random-numbers-without-repetitions

Le code attaché fonctionne parfaitement si j'enlève "\exemplaire{2}{" et que je remplace ## par #, sinon, il y a des erreurs.

Est-il possible de corriger ce code ou existe-il une autre méthode?

Les erreurs:

! Missing number, treated as zero.
<to be read again>
@
l.28 }
A number should have been here; I inserted `0'.
(If you can't figure out why I needed to see a number,
look up `weird error' in the index to The TeXbook.)
! Missing number, treated as zero.
<to be read again>
@
l.28 }
A number should have been here; I inserted `0'.
(If you can't figure out why I needed to see a number,
look up `weird error' in the index to The TeXbook.)
! Undefined control sequence.
\prunelist ...dcsname -1\relax } \count @\pgfmath
@randomtemp
l.28 }

test.tex (733 Bytes)


Replies (4)

RE: Liste sans doublons - Added by Alexis Bienvenüe over 8 years ago

Le plus simple est sans doute de définir \prunelist en-dehors de \exemplaire (avant), avec des simples #, sans oublier de revenir à l'état normal avec un \makeatother. Il me semble qu'il ne sert à rien de le re-définir à chaque copie.

existe-il une autre méthode?

Je ne sais pas exactement ce que vous voulez faire mais vous pouvez peut-être également utiliser les groupes et leur mélange de automultiplechoice.

RE: Liste sans doublons - Added by Benoit PIERRET over 8 years ago

L'idée est de mettre une liste de texte variable dans un schema (le nom de connections dans un schéma électrique) et de récupérer ces noms dans les question.

Mon ancienne méthode tirait des nombres au hasard mais ne permettait pas beaucoup de permutations:
\FPeval\accxPin{trunc(random*2,0)}

Avec la méthode de la liste(ci-dessus), je n'arrive pas à mettre les valeur de manière fixe dans une variable.
J'ai tenté:
\FPeval\bobineG{\getValue}
\setcounter{test}{\getValue}
Sans succés.

On entre plus ici dans le domaine du latex que amc qcm mais mes connaissances en macro sont limitées.

test2.tex (1.1 kB)

image.PNG (5.9 kB)

Resolu: tirer des nombres dans une liste et stocker dans des variables sans doublon - Added by Benoit PIERRET over 8 years ago

J'ai trouvé la réponse à ma dernière question.

Voici comment tirer les nombres au hasard de la liste sans doublon, les stocker dans des variables, les afficher dans une image, puis hors de l'image.
Voir le fichier tex joint pour l'exemple complet avec en particulier la macro \prunelist
Si vous n'avez pas besoin de plusieurs variable ou acceptez les doublons, c'est beaucoup plus simple car plus besoin de la macro prunelist. La macro prunelist sert à sortir la valeur sélectionnée de la liste.

\pgfmathdeclarerandomlist{mylist}{ {10} {27} {32} {43} {51} {65} {78}}
\exemplaire{2}{
blabla\\
\pgfmathrandomitem\z{mylist}\prunelist{mylist}
\FPeval\varA{\z}
\pgfmathrandomitem\z{mylist}\prunelist{mylist}
\FPeval\varB{\z}
\pgfmathrandomitem\z{mylist}\prunelist{mylist}
\FPeval\varC{\z}

\begin{overpic}[width=0.45\textwidth]{image.PNG}
\put (1,64) {\varA}
\put (57,28.5) {\varB}
\put (57,24) {\varC}
\end{overpic}

\varA

\varB

\varC

}

test2.tex (1 kB)

RE: Liste sans doublons - Added by Benoit PIERRET over 8 years ago

Dans le code précédent, je retirais de la liste avant d'utiliser la variable.
Voici le code corrigé.

\exemplaire{10}{
\pgfmathdeclarerandomlist{mylist}{ {10} {27} {32} {43} {51} {65} {78} }
blabla\\
\pgfmathrandomitem\z{mylist}\FPeval\varA{\z}\prunelist{mylist}

\pgfmathrandomitem\z{mylist}\FPeval\varB{\z}\prunelist{mylist}

\pgfmathrandomitem\z{mylist}\FPeval\varC{\z}\prunelist{mylist}

\begin{overpic}[width=0.45\textwidth]{image.PNG}
\put (1,64) {\varA}
\put (57,28.5) {\varB}
\put (57,24) {\varC}
\end{overpic}

\varA

\varB

\varC

}

(1-4/4)