Pour un sujet de BTS SIO 1re année, j'ai pris un exercice dans le manuel Dunod 2015, Mathématiques pour l'informatique et refait les figures avec asymptote. Le trajet d'une bille dans un quadrillage est codé par un nombre binaire où le 0 et le 1 codent chacun une direction. Ci-dessous, le code complet de l'exercice (il me semblait qu'il y avait une rubrique "exercice complet" auparavant mais comme je viens ici ponctuellement, elle a peut-être été renommée ou fusionnée avec une autre).
- Code LaTeX de l'exercice
Code : Tout sélectionner
\documentclass[12pt,french,fleqn]{article}% \usepackage[paper=a4paper, portrait=true, twoside=false, left=1.5cm, top=1.5cm, noheadfoot, includeall, nomarginpar, centering=true]{geometry}% \usepackage{babel}% \usepackage{datenumber}% \usepackage[utf8]{inputenc}% \usepackage[T1]{fontenc}% \usepackage[largesmallcaps,frenchstyle]{kpfonts}%% \usepackage{enumitem}% \usepackage{graphicx}% \begin{document} \setlength{\parindent}{0mm}% \setlength{\mathindent}{1em}% \pagestyle{empty}% \newlength{\vertical}% \settoheight{\vertical}{2ex}% \setdate{2024}{04}{22}% % Manuel BTS SIO, Dunod 2015% % Chapitre 1 Arithmétique% % Exercice 1.26 pp 18-19 % \textbf{Exercice} On crée un jeu simple sur un ordinateur : une bille est installée au \og départ\fg{}, en bas à gauche, d'une grille représentée ci-dessous dans la figure \no 1. On doit la faire rejoindre \og l'arrivée\fg{}, en haut à droite, en utilisant uniquement des déplacements vers la droite et vers le haut. \begin{center} \begin{tabular}{c@{\hspace{1cm}}c} \includegraphics{ExerciceBille_fig1} & \includegraphics{ExerciceBille_fig2} \\ Figure \no 1 : grille à parcourir & Figure \no 2 : exemple de trajet \end{tabular} \end{center} Pour programmer ce jeu, on associe à chaque parcours un nombre entier de la manière suivante : \begin{itemize}[leftmargin=*,nosep] \item Chaque déplacement vers le haut est noté 0 et chaque déplacement vers la droite est noté 1. \item On obtient alors un nombre de 8 chiffres écrit en binaire. \item On convertit ensuite ce nombre en base 10. \end{itemize} Par exemple, pour le parcours représentée sur la figure \no 2 ci-dessus, on obtient le nombre entier 105. En effet, les déplacements sont : haut, droite, droite, haut, droite, haut, haut, droite. Ce qui donne le nombre binaire $(01101001)_2$ qui est égal au nombre décimal $(105)_{10}$. \vspace{\vertical} \begin{enumerate} \item On considère le parcours de la figure \no 3 ci-dessous. \begin{enumerate}[nosep] \item Donner le nombre en base 2 associé à ce parcours. % 10011001 \item Donner l'écriture en base 10 de ce nombre. % 153 \end{enumerate} \item \begin{enumerate}[nosep] \item Écrire en base 2 le nombre entier $(85)_{10}$. % 01010101 \item Représenter le parcours correspondant à ce nombre sur la figure \no 4 ci-dessous. \end{enumerate} \begin{center} \begin{tabular}{c@{\hspace{1cm}}c} \includegraphics{ExerciceBille_fig3} & \includegraphics{ExerciceBille_fig4} \\ Figure \no 3 : parcours à coder. & Figure \no 4 : parcours à tracer. \end{tabular} \end{center} \item On considère un parcours sur cette grille et on note $N$ le nombre associé écrit en base 10. \begin{enumerate}[nosep] \item Est-il possible d'avoir $N=31$ ? % Non, 31=00011111. Cela correspond à 5 déplacement vers la droite. \item Quelle est la plus petite valeur possible pour $N$ ? % 00001111=15 \item Quelle est la plus grande valeur possible pour $N$ ? % 11110000=240 \end{enumerate} \end{enumerate} \end{document}
- Code asymptote des figures respectives ExerciceBille_fig1, ExerciceBille_fig2, ExerciceBille_fig3, ExerciceBille_fig4. Une seule aurait suffit : de l'une à l'autre les changements sont le tracé ou non du trajet, ainsi que son codage à l'aide du tableau d'entiers t.
Code : Tout sélectionner
import fabrice; defaultpen(fontsize(12pt)); usepackage("kpfonts",options="largesmallcaps,frenchstyle"); unitsize(1cm); // Dimensions int n=4; real ecart=0.1, epaisseur=0.2; // Carrés intérieurs for (int i=0; i<n; ++i){ for (int j=0; j<n; ++j){ filldraw(shift((i,j)+(ecart,ecart))*scale(1-2*ecart)*unitsquare,heavygray,black); } } // Bords filldraw(shift((ecart,-ecart-epaisseur))*xscale(n+epaisseur)*yscale(epaisseur)*unitsquare,heavygray,black); // Bas filldraw(shift((n+ecart,-ecart))*xscale(epaisseur)*yscale(n)*unitsquare,heavygray,black); // Droite filldraw(shift((-ecart-epaisseur,ecart))*xscale(epaisseur)*yscale(n+epaisseur)*unitsquare,heavygray,black); // Gauche filldraw(shift((-ecart,n+ecart))*xscale(n)*yscale(epaisseur)*unitsquare,heavygray,black); // Haut // Départ et arrivée label("Départ",(0,0),SW); label("Arrivée",(n,n),NE); // Bille filldraw(scale(ecart/2)*unitcircle,heavygray,black); // defaultpen(linewidth(1pt)); // // Déplacements // int[] t={0,1,1,0,1,0,0,1}; // pair depart=(0,0), haut=(0,1), droite=(1,0); // for (int i; i<t.length; ++i){ // if (t[i]==0){ // draw(depart--(depart+haut),Arrow(1.5mm)); // depart=depart+haut; // } else { // draw(depart--(depart+droite),Arrow(1.5mm)); // depart=depart+droite; // } // }
Code : Tout sélectionner
defaultpen(fontsize(12pt)); usepackage("kpfonts",options="largesmallcaps,frenchstyle"); unitsize(1cm); // Dimensions int n=4; real ecart=0.1, epaisseur=0.2; // Carrés intérieurs for (int i=0; i<n; ++i){ for (int j=0; j<n; ++j){ filldraw(shift((i,j)+(ecart,ecart))*scale(1-2*ecart)*unitsquare,heavygray,black); } } // Bords filldraw(shift((ecart,-ecart-epaisseur))*xscale(n+epaisseur)*yscale(epaisseur)*unitsquare,heavygray,black); // Bas filldraw(shift((n+ecart,-ecart))*xscale(epaisseur)*yscale(n)*unitsquare,heavygray,black); // Droite filldraw(shift((-ecart-epaisseur,ecart))*xscale(epaisseur)*yscale(n+epaisseur)*unitsquare,heavygray,black); // Gauche filldraw(shift((-ecart,n+ecart))*xscale(n)*yscale(epaisseur)*unitsquare,heavygray,black); // Haut // Départ et arrivée label("Départ",(0,0),SW); label("Arrivée",(n,n),NE); // Bille filldraw(scale(ecart/2)*unitcircle,heavygray,black); defaultpen(linewidth(1pt)); // Déplacements int[] t={0,1,1,0,1,0,0,1}; pair depart=(0,0), haut=(0,1), droite=(1,0); for (int i; i<t.length; ++i){ if (t[i]==0){ draw(depart--(depart+haut),Arrow(1.5mm)); depart=depart+haut; } else { draw(depart--(depart+droite),Arrow(1.5mm)); depart=depart+droite; } }
Code : Tout sélectionner
defaultpen(fontsize(12pt)); usepackage("kpfonts",options="largesmallcaps,frenchstyle"); unitsize(1cm); // Dimensions int n=4; real ecart=0.1, epaisseur=0.2; // Carrés intérieurs for (int i=0; i<n; ++i){ for (int j=0; j<n; ++j){ filldraw(shift((i,j)+(ecart,ecart))*scale(1-2*ecart)*unitsquare,heavygray,black); } } // Bords filldraw(shift((ecart,-ecart-epaisseur))*xscale(n+epaisseur)*yscale(epaisseur)*unitsquare,heavygray,black); // Bas filldraw(shift((n+ecart,-ecart))*xscale(epaisseur)*yscale(n)*unitsquare,heavygray,black); // Droite filldraw(shift((-ecart-epaisseur,ecart))*xscale(epaisseur)*yscale(n+epaisseur)*unitsquare,heavygray,black); // Gauche filldraw(shift((-ecart,n+ecart))*xscale(n)*yscale(epaisseur)*unitsquare,heavygray,black); // Haut // Départ et arrivée label("Départ",(0,0),SW); label("Arrivée",(n,n),NE); // Bille filldraw(scale(ecart/2)*unitcircle,heavygray,black); defaultpen(linewidth(1pt)); // Déplacements int[] t={1,0,0,1,1,0,0,1}; pair depart=(0,0), haut=(0,1), droite=(1,0); for (int i; i<t.length; ++i){ if (t[i]==0){ draw(depart--(depart+haut),Arrow(1.5mm)); depart=depart+haut; } else { draw(depart--(depart+droite),Arrow(1.5mm)); depart=depart+droite; } }
Code : Tout sélectionner
defaultpen(fontsize(12pt)); usepackage("kpfonts",options="largesmallcaps,frenchstyle"); unitsize(1cm); // Dimensions int n=4; real ecart=0.1, epaisseur=0.2; // Carrés intérieurs for (int i=0; i<n; ++i){ for (int j=0; j<n; ++j){ filldraw(shift((i,j)+(ecart,ecart))*scale(1-2*ecart)*unitsquare,heavygray,black); } } // Bords filldraw(shift((ecart,-ecart-epaisseur))*xscale(n+epaisseur)*yscale(epaisseur)*unitsquare,heavygray,black); // Bas filldraw(shift((n+ecart,-ecart))*xscale(epaisseur)*yscale(n)*unitsquare,heavygray,black); // Droite filldraw(shift((-ecart-epaisseur,ecart))*xscale(epaisseur)*yscale(n+epaisseur)*unitsquare,heavygray,black); // Gauche filldraw(shift((-ecart,n+ecart))*xscale(n)*yscale(epaisseur)*unitsquare,heavygray,black); // Haut // Départ et arrivée label("Départ",(0,0),SW); label("Arrivée",(n,n),NE); // Bille filldraw(scale(ecart/2)*unitcircle,heavygray,black); // // Déplacements // int[] t={1,1,1,1,0,0,0,0}; // Plus grande valeur // int[] t={0,0,0,0,1,1,1,1}; // Plus petite valeur // pair depart=(0,0), haut=(0,1), droite=(1,0); // for (int i; i<t.length; ++i){ // if (t[i]==0){ // draw(depart--(depart+haut),Arrow(1mm)); // depart=depart+haut; // } else { // draw(depart--(depart+droite),Arrow(1mm)); // depart=depart+droite; // } // }