%%%%%%% Préambule%%%%%%%%
\documentclass[12pt,a4paper]{article}

\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage[french]{babel}

\usepackage{lmodern}%-> ???
%\usepackage{microtype}
\usepackage[babel=true,kerning=true]{microtype}%évite le problème des ":" dans la fonction tikz domain= a: b plot -> peut poser des problème si les phrases sont trop longues, important pour csv simple et AMC
\usepackage{xspace,boxedminipage,needspace}

\usepackage{amsmath,amssymb,amsfonts,mathtools}
\usepackage{array,multirow,tabularx}

\usepackage{graphicx,wrapfig}
\usepackage[table,dvipsnames,svgnames]{xcolor}


\usepackage{xstring}%pour travailler sur les chaînes


\usepackage{fancyhdr}
\pagestyle{fancy}

\usepackage[francais,bloc,ensemble,outsidebox,automarks,chiffres]{automultiplechoice}
\geometry{hmargin=1.5cm,headheight=3cm,headsep=0.3cm,footskip=1cm,top=2.5cm,bottom=2cm,heightrounded}
\usepackage{multicol}
\usepackage{csvsimple}

\usepackage[french]{cleveref}
\usepackage{pst-all,pst-circ,pst-labo,pst-osci}
\usepackage{fp,pgf,tikz}
%\usetikzlibrary{arrows,patterns}
\usepackage{ifthen,multido}



%pour écrire le numéro du sujet en pied de page
\makeatletter
\def\Nsujet{\the\AMCid@etud}
\makeatother
\renewcommand{\AMCsubjectPageTag}{}













%Pour afficher automatiquement le nombre de cases pour AMCnumericChoices et la décimale
\newcommand*{\AffichageMecaniqueCases}[1]{
\IfInteger{#1}{\StrLen{#1}[\CasesM]\FPeval{\Cases}{clip(\CasesM+1)}\FPset{\PartieDecimale}{1}}{%\IfInteger{#1}{\StrLen{#1}[\Cases]\FPset{\PartieDecimale}{0}}%%\IfInteger{#1}{\StrLen{#1}[\CasesM]\FPeval{\Cases}{clip(\CasesM+1)}\FPset{\PartieDecimale}{1}}
\IfDecimal{#1}
{\def\Cases{#1}}
{\edef\Cases{\number\integerpart\ifnum\decimalpart=0 \else\number\decimalpart\fi}}%
\StrLen{\number\integerpart}[\PartieEntiere]
\StrDel\Cases.[\Cases]% supprime les points
\StrDel\Cases,[\Cases]% supprime les virgules
\StrDel\Cases-[\Cases]% supprime l'éventuel signe
\StrLen\Cases[\Cases]% stocke la longueur
\FPeval{\PartieDecimale}{clip(\Cases-\PartieEntiere)}
}%fin du faux de IfInteger
%
}%%fin newcommand



%Pour afficher automatiquement le nombre de cases pour AMCnumericChoices et la décimale
%nouvelle commande 
% il manque le signe à tester
% 

\newcommand*{\AffichageAutomatiqueCases}[1]{
\StrPosition{#1}{.}[\PositionSeparateur]% Recherche du séparateur décimal 0 si absent sinon valeur non nulle
\FPifeq{\PositionSeparateur}{0}%
%si le nombre est entier sans séparteur (exemple 10)
%Le nombre de cases sera la longueur du nombre +1 pour la décimale
{%
\StrLen{#1}[\LongueurNombre]
\FPeval{\Cases}{clip(\LongueurNombre +1)}
\FPeval{\PartieDecimale}{1}
\AMCnumericChoices{#1}{digits=\Cases,decimals=\PartieDecimale}
}%
\else%
{%
%si le nombre est entier avec séparateur décimal (exemple 10.00)
%Le nombre de cases sera la longueur égale à la position du séparateur décimal
%Le nombre de cases pour la partie entière sera la position du séparateur décimal -1
%Le nomre de case pour la partie décimale sera égale à 1
\IfInteger{#1}{\StrPosition{#1}{.}[\Cases]\FPeval{\PartieDecimale}{1}}%
{%sinon du if
% si le nombre est un décimal (exemple 10.01)
%Le nombre de cases sera la longueur égale -1
%Le nomre de case pour la partie décimale sera égale à la longueur - la position de la partie décimale
\StrLen{#1}[\LongueurNombre]
\StrPosition{#1}{.}[\PositionSeparateur]
\FPeval{\Cases}{clip(\LongueurNombre -1)}
\FPeval{\PartieDecimale}{clip(\LongueurNombre-\PositionSeparateur)}
}%%fin du sinon
\AMCnumericChoices{#1}{digits=\Cases,decimals=\PartieDecimale}
}
\fi
}

%le nombre de cases sera égale à la position du séparateur décimal
%le nombre de cases pour la décimale sera de 1
%donc le nombre de cases pour la partie entière sera


%%%%%%Fin préambule%%%%%%%%

%%%%%%%%Tableau%%%%%%%%%%%%%%%
%%Commande qui insère le tableau des cases à cocher %%
%%L'argument #1 est la largeur du tableau par rapport%%
%%à la largeur de la ligne, comprise entre 0 et 1%%
\newcommand{\Tableauconsignecasesacocher}[1]{
\begin{tabularx}{#1\linewidth}{|c|XXXX|}
    \hline
    \multicolumn{5}{|c|}{Les cases doivent \^etre colori\'ees}\\     
	\hline
	correct & \multicolumn{4}{|c|}{incorrect}\\
	\hline
	$\blacksquare$ &\checkmark & $\boxdot$ & $\boxplus$ & $\boxtimes$ \\
	\hline
\end{tabularx}\hfill
}
%%%%%%%%%%Fin tableau


%%%%%%%%%%%Respect Consigne
%%Commande respect Consigne
\newcommand{\insertRespectconsigne}[1]{ %
{\def\AMCbeginQuestion##1##2{}\AMCquestionNumberfalse\AMCnobloc%
 \begin{questionmult}{00respectconsigne}\bareme{default.respect=0,formula=respect*#1/20,p=-#1/10,v=0,MAX=0}
\AMCnoCompleteMulti\AMCdontAnnotate
\def\AMCbeginAnswer{}\def\AMCendAnswer{}
   R\'eserv\'e~~\begin{reponsesperso}[o]
    \mauvaise{-~}\bareme{set.respect=-1}
    \mauvaise{--~}\bareme{set.respect=-2}
        \end{reponsesperso}
 \end{questionmult}}
}%
%%%%%%%Fin respect consigne


\newcommand{\Oscilloscope}{
\exploregroups
\expandarg
%déclaration sensibilité verticale et horizontale
\def\SensibiliteVA{{20}{10}{5}{2}{1}}
\def\SensibiliteVB{{20}{10}{5}{2}{1}}
\def\SensibiliteH{{50}{10}{5}{2}{1}}
%choix du calibre verticale et horizontale
\pgfmathrandominteger{\Choix}{1}{4}\StrFindGroup{\SensibiliteVA}{\Choix}[\CalibreTensionA]%\FPset{\CalibreTensionA}{\Calibre}
\pgfmathrandominteger{\Choix}{1}{4}\StrFindGroup{\SensibiliteVB}{\Choix}[\CalibreTensionB]%\FPset{\CalibreTensionB}{\Calibre}
\pgfmathrandominteger{\Choix}{1}{4}\StrFindGroup{\SensibiliteH}{\Choix}[\CalibreTemps]%\FPset{\CalibreTemps}{\Calibre}
%choix du nombre de carreaux maximal pour affichage de la tension
\def\DeviationV{{1.0}{1.2}{1.4}{1.6}{1.8}{2.0}{2.2}{2.4}{2.6}{2.8}{3.0}{3.2}{3.4}{3.6}{3.8}}
\pgfmathrandominteger{\Choix}{1}{15}\StrFindGroup{\DeviationV}{\Choix}[\DeviationVA]
\pgfmathrandominteger{\Choix}{1}{15}\StrFindGroup{\DeviationV}{\Choix}[\DeviationVB]
%choix de la tension maximale : CalibreTension * deviation
\FPeval{\UmaxA}{trunc(\CalibreTensionA*\DeviationVA,2)}
\FPeval{\UmaxB}{trunc(\CalibreTensionB*\DeviationVB,1)}
%clalcul tension efficace
\FPeval{\UeffA}{round(\UmaxA/root(2,2),1)}
\FPeval{\UeffB}{round(\UmaxB/root(2,2),1)}
%choix du nombre de carreaux maximal pour la période
\def\DeviationH{{2.0}{2.2}{2.6}{2.8}{3.0}{3.2}{3.6}{3.8}{4}}
\pgfmathrandominteger{\Choix}{1}{9}\StrFindGroup{\DeviationH}{\Choix}[\DeviationHA]
\pgfmathrandominteger{\Choix}{1}{9}\StrFindGroup{\DeviationH}{\Choix}[\DeviationHB]
%choix de la période : CalibreTemps * deviation
\FPeval{\TA}{clip(\CalibreTemps*\DeviationHA)}
\FPeval{\TB}{clip(\CalibreTemps*\DeviationHB)}
%choix de la période : CalibreTemps * deviation
\FPeval{\FA}{round(1000/\TA,1)}
\FPeval{\FB}{round(1000/\TB,1)}
%On vérifie si la période est inférieur à 10 ms -> la fréquence aura 3 chiffres donc pas de décimale
%\FPiflt{\TB}{9.999}{\FPeval{\FB}{round(1000/\TB,0)}}\else{\FPeval{\FB}{round(1000/\TB,1)}}\fi
%\ifthenelse{\TB > 10}{\FPeval\FB{round(1000/\TB,0)}}{\FPeval\FB{round(1000/\TB,1)}}

\newpsstyle{Dash}{linestyle=dashed,linecolor=black,linewidth=0.05,plotpoints=100}
\noindent\begin{minipage}[l]{.4\linewidth}
\psscalebox{.9}{\Oscillo[AllColor=false,timediv=\CalibreTemps,period1=\TA,amplitude1=\UmaxA,sensivity1=\CalibreTensionA,period2=\TB,
amplitude2=\UmaxB,sensivity2=\CalibreTensionB,plotstyle2=Dash,phase2=-180]}%
\end{minipage}\hfill
\begin{minipage}{.45\linewidth}
%%%%Courbe A
\begin{questionmultx}{\thecompteurOscilloscope{}-UmaxA}
Quelle est la valeur de la tension de la courbe A ? \CalibreTensionA *\DeviationVA *\UmaxA
\AffichageAutomatiqueCases{\UmaxA}
\end{questionmultx}

\begin{questionmultx}{\thecompteurOscilloscope{}-UeffA}
Quelle est la valeur de la tension efficace de la courbe A ? \UeffA
\AffichageAutomatiqueCases{\UeffA}
\end{questionmultx}

\begin{questionmultx}{\thecompteurOscilloscope{}-PeriodeA}
Quelle est la valeur de la période de la courbe A ?\CalibreTemps * \DeviationHA *\TA
\AffichageAutomatiqueCases{\TA}
\end{questionmultx}

\begin{questionmultx}{\thecompteurOscilloscope{}-FrequenceA}
Quelle est la valeur de la fréquence de la courbe A ? \FA
\AffichageAutomatiqueCases{\FA}
\end{questionmultx}
%%%Fin courbe A
%%%Courbe B
\begin{questionmultx}{\thecompteurOscilloscope{}-UmaxB}
Quelle est la valeur de la tension de la courbe B ? \CalibreTensionB *\DeviationVB *\UmaxB
\AffichageAutomatiqueCases{\UmaxB}
\end{questionmultx}

\begin{questionmultx}{\thecompteurOscilloscope{}-UeffB}
Quelle est la valeur de la tension efficace de la courbe B ? \UeffB
\AffichageAutomatiqueCases{\UeffB}
\end{questionmultx}

\begin{questionmultx}{\thecompteurOscilloscope{}-PeriodeB}
Quelle est la valeur de la période de la courbe B ?\CalibreTemps * \DeviationHB *\TB
\AffichageAutomatiqueCases{\TB}
\end{questionmultx}

\begin{questionmultx}{\thecompteurOscilloscope{}-FrequenceB}
Quelle est la valeur de la fréquence de la courbe B ? \FB
\AffichageAutomatiqueCases{\FB}
\end{questionmultx}
%%%Fin  courbe B 
\end{minipage}
\addtocounter{compteurOscilloscope}{1}

}



\def\DureeExamen{}%%%%Durée examen
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\newcommand{\sujet}{
\onecopy{1}{
\FPseed\Nsujet
\setcounter{compteurOscilloscope}{1}
%%%%%%%%%%%%%%%Explications%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\vfill
\begin{center}
\Large \texttt{Veuillez lire attentivement les explications ci-dessous avant de commencer le devoir.}
\end{center}
\vfill
{\Large Le devoir est à rendre, au plus tard, le \dotfill}
\vfill
\noindent\begin{minipage}[c]{.95\linewidth}
\begin{itemize}
\item Vous devez colorier les cases au crayon à papier ou au stylo noir ou au stylo bleu pour répondre aux questions.\medskip
\begin{center}
\Tableauconsignecasesacocher{0.9}
\end{center}\medskip
\item  En cas d'erreur, effacez à la gomme ou au \og{}blanco\fg{} \emph{mais ne pas redessiner la case}.\medskip
\item Les questions \emph{sans} le symbole \multiSymbole{} signifient qu'il n'y a qu'une seule r\'eponse. %
Bar\`eme : 1 point par bonne r\'eponse; 0 point par mauvaise réponse.\medskip
\item Les questions \emph{avec} le symbole \multiSymbole{} signifient qu'il y a plusieurs bonnes r\'eponses. %
Bar\`eme : 1 point par bonne réponse; -0,5 point par mauvaise réponse.\medskip
\item Certaines questions demande une réponse mathématique chiffrée. Ce résultat devra \^etre donné sous forme d'un code : \emph{1 chiffre par ligne}. \\Dans l'exemple ci-dessous, le nombre 25,32 a été codé.\medskip
\begin{center}
\centering\includegraphics[scale=1]{/home/moi/Projets-QCM/divers/Modeles-AMC/AMC-InstructionRemplissageNumericChoice-Image}
\end{center}
\item  Aucun document n'est autorisé.\medskip
\item Les réponses doivent \^etre reportées uniquement sur  \ifthenelse{\AMCpageref{lastpage} =\AMCpageref{PageDebutReponses}}{la feuille réponse.}{les feuilles réponses.}\medskip
\item  Aucune réponse donnée sur les feuilles suivantes ne sera prise en compte.
\end{itemize}
\end{minipage}
%%%%Calcul des pages

\vfill
\hfill\begin{boxedminipage}{.98\linewidth}
\begin{itemize}
\item[\textbullet]Le devoir comporte \AMCpageref{lastpage} pages, celle-ci incluse.
\item[\textbullet]Les questions débutent à la page \AMCpageref{PageDebutQuestions}\ifthenelse{\AMCpageref{PageFinQuestions}=\AMCpageref{PageDebutQuestions}}{}{ et se terminent à la page \AMCpageref{PageFinQuestions}}.
\item[\textbullet]\ifthenelse{\AMCpageref{lastpage} =\AMCpageref{PageDebutReponses}}{La feuille réponse se trouve à la page \AMCpageref{lastpage}.}{ Les feuilles réponses débutent à la page \AMCpageref{PageDebutReponses} et se terminent à la page \AMCpageref{lastpage}.}
\end{itemize}
\end{boxedminipage}\hfill\null
\vfill


\vfill\null
\newpage

%%%%%%%%%%%%%%%%%%%%%% debut de l'en-tête des énoncées%%%%%%%%%%%%%%%%%%%%%%
\vspace*{-3em}

\AMClabel{PageDebutQuestions}%numéro de la page qui début les questions
\begin{center}
\noindent{}\fbox{\vspace*{3mm}
         \Large\bf\nom{}~\prenom{}\normalsize{} \hfill {\scshape Dur\'ee : \DureeExamen{}~minutes}\hfill\null
          \vspace*{3mm}
      }
\end{center}


%%%%%%%%%%%%%%%%%%%%%% Fin de l'en-tête des énoncées%%%%%%%%%%%%%%%%%%%%%%

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% DEVOIR%%%%%%%%%%%%%%%%%%%%%%%%
% 																			
%  Inscrire la commande \melangegroupe{general} et \restituegroupe{general}        %
%  Mettre les textes ici puis les questions qui ne font pas partie d'un groupe     %
%
%

\vfill\Oscilloscope\vfill

\Oscilloscope\vfill\null

\Oscilloscope

\AMClabel{PageFinQuestions}%Numéro de la page qui termine les questions
%%%%%%%%%%%%%%%%%%%%%%%%%%%%% fin du devoirs%%%%%%%%%%%%%%%%%%%%%%%%%%
\clearpage
%%%%%%%%%%%%%%%%%si sujet nb pages impaires%%%%%%%%%%%%%
%\AMCcleardoublepage

\AMClabel{PageDebutReponses}%Numéro de la page qui débute les réponses

\AMCdebutFormulaire

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%En tête de la copie%%%%%%%%%%%%%%%%

%%%%%%%%%%%%%%%%Consigne de réponse et points retirer en absence de respect%%%%%%%%%
\vspace*{-2em}


\hfill\champnom{\fbox{
         \large\bf\nom{}~\prenom{}\normalsize{} - \uppercase{feuille\ifthenelse{\AMCpageref{lastpage} >\AMCpageref{PageDebutReponses}}{}{S} de r\'eponses} - {\insertRespectconsigne{20}}
          \vspace*{1mm}
      }}\hfill\null



\AMCassociation{\identifiant}

\begin{multicols}{2}
\formulaire
\end{multicols}

\AMClabel{lastpage}%référence à la dernière page
\clearpage
}
}

\begin{document}

\fancyfoot[C]{\large{\hfill{}sujet \no\Nsujet \hfill{}PAGE~\thepage{} sur \AMCpageref{lastpage}\hfill{}}}


%%%%%%OPtions
%Compteur pour la rédaction des questions ouvertes./oscilloscope

\newcounter{compteurOscilloscope}

%barème par défaut des questions multiples - simples -ouvertes
\baremeDefautM{formula=(NBC+NMC==N ? 0 : NBC-0.5*NMC),p=0,e=0,v=0}%
\baremeDefautS{b=1,m=0,e=0,v=0}%
\AMCopenOpts{lines=4,lineheight=0.8cm}%

%texte inscrit pour les questions ouvertes
\def\AMCotextReserved{\emph{NE RIEN COCHER}}%
\def\AMCotextGoto{\par\emph{\large{R\'epondre sur la feuille de r\'eponses s\'epar\'ee.}}}%
% Réservé au correcteur pour question ouverte

%modifie le choix du mélange. !!NE PAS MODIFIER AVANT LA CORRECTION DU SUJET!!
\AMCrandomseed{3239458}%valeur de 1 à 4194303

%%%%Options des questions et réponses%

\def\multiSymbole{$\bigstar$}%%change le symbole des questions multiples

\AMCinterBquest=2ex%modifie l'espace entre deux questions si l'option bloc est choisie
\AMCinterBrep=8ex%modifie l'espace entre les réponses si l'option bloc est  choisie ->mode ensmeble

\AMCinterIquest=0pt%modifie l'espace entre les questions si l'option bloc n'est pas choisie
\AMCinterIrep=0.5em%modifie l'espace entre les réponses si l'option bloc n'est pas choisie

%modifie le titre de la question
%\def\AMCbeginQuestion#1#2{\par\noindent{\textbf{Q.#1}}#2\hspace{0.5ex}}%
%Ajoute un zéro caché
\AMCformVSpace=1.2ex
\AMCformHSpace=0.3em
\def\AMCbeginQuestion#1#2{\par\noindent{\textbf{Q.\ifthenelse{#1<10}{\phantom{0}}{}#1}}#2\hspace{0.5ex}}%
%Ajout \nopagebreak réponse au forum
\def\AMCformQuestion#1{\vspace{\AMCformVSpace}\par{\bf Q. \ifthenelse{#1<10}{\phantom{0}}{}#1 :}\nopagebreak}
\def\AMCformAnswer#1{\hspace{\AMCformHSpace} #1}

%%%Options des cases à cocher
\AMCboxDimensions{size=1.5ex}%modifie la taille par défaut des cases metre 1.8 si pas de 1 sur 2


%%%%suppression du code +1/1/59
\AMCidsPosition{pos=none}

%%%%Choix du mélange des groupes
%fixed -> aucun mélange
%cyclic -> élément pris à la suite et reprise du début
%withreplacement -> équivalent à \melangegroupe
%withoutreplacement > équivalent à \melangegroupe + cyclic reprise au début
\setdefaultgroupmode{withreplacement}

%%%%Change Explication en réponse
\AMCtext{explain}{R\'eponse : }


%%%Option pour amcnumericchoices
\def\AMCdecimalPoint{\textbf{\rotatebox[origin=lb]{45}{$\smile$}}}
\AMCnumericOpts{sign=false,scoreexact=1,scoreapprox=0.5,approx=1}
%%%%%%%%%%fin options
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% Préparation des groupes%%%%%%%%%%%%%%%%%%%


%%%%%%%%%%%%%%%%%%%%%%%%%%%%% fin des groupes%%%%%%%%%%%%%%%%%%%%%%%%%

\csvreader[head to column names,separator=semicolon]{listetestBis.csv}{}{\sujet}
%\csvreader[head to column names,separator=semicolon]{ListeEleves3.csv}{}{\sujet}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%fermeture exemplaire%%%%%%%%%%%%
\end{document}