Stocker des valeurs

Tout ce qui concerne le langage TeX/LaTeX et ses variantes. Ce langage est utilisable sur le forum via les balises tex.
[participation réservée aux utilisateurs inscrits]
Règles du forum
Merci de soigner la rédaction de vos messages et de consulter ce sujet avant de poster. Pensez également à utiliser la fonction recherche du forum.
evariste_G
Utilisateur chevronné
Utilisateur chevronné
Messages : 1481
Inscription : vendredi 19 décembre 2008, 19:13
Statut actuel : Enseignant
Localisation : Bordeaux
Contact :

Stocker des valeurs

Message non lu par evariste_G »

Bonjour.

J'aimerais créer une commande de la forme :

Code : Tout sélectionner

\valeurs{valX1/valY1,valX2/valY2,...,valXn/valYn}
où valXi est une valeur associé à la valeur valYi, pour i allant de 1 à n, et où la commande aurait pour objectif de garder toutes les valeurs en stock.
Le but final serait de pouvoir les utiliser ultérieurement dans d'autres commandes (par exemple, pour construire un tableau de valeur, construire un nuage de point, trouver les coordonnées du point moyen, etc.).

Existe-t-il un moyen de faire ça sans faire appel à un fichier externe ?
Merci d'avance.
Mathématiques, LaTeX et Python : https://www.mathweb.fr
Cours particuliers de maths par webcam: https://courspasquet.fr
Trouver un vrai prof pour des cours particuliers: https://lesvraisprofs.mathweb.fr/
un bon petit
Utilisateur éprouvé
Utilisateur éprouvé
Messages : 995
Inscription : vendredi 12 juin 2009, 22:35
Statut actuel : Enseignant
Localisation : Chambéry
Contact :

Re: Stocker des valeurs

Message non lu par un bon petit »

evariste_G a écrit :Existe-t-il un moyen de faire ça sans faire appel à un fichier externe ?
Évidemment :

Code : Tout sélectionner

\documentclass{minimal}
\makeatletter
\newcount\val@cnt
\newcommand*\valeurs[1]{\val@cnt\z@\valeurs@#1,\valeurs@/\valeurs@,}
\def\valeurs@#1/#2,{%
	\ifx\valeurs@#1%
	\else
		\advance\val@cnt\@ne
		\@namedef{ValX\number\val@cnt}{#1}%
		\@namedef{ValY\number\val@cnt}{#2}%
		\expandafter\valeurs@
	\fi
}
\newcommand*\ValX[1]{\@nameuse{ValX#1}}
\newcommand*\ValY[1]{\@nameuse{ValY#1}}
\makeatother
\begin{document}
\valeurs{3/4,10/11,-5/-4,6/0,9/7,-1/-1,6/100,15/1,10/11,99/100,-10/-11}
x1 = \ValX{1} et y1 = \ValY{1}

x3 = \ValX{3} et y3 = \ValY{3}

x10=\ValX{10} et y10 = \ValY{10}
\end{document}
Programmer en TeX, TeXpérimental
evariste_G
Utilisateur chevronné
Utilisateur chevronné
Messages : 1481
Inscription : vendredi 19 décembre 2008, 19:13
Statut actuel : Enseignant
Localisation : Bordeaux
Contact :

Re: Stocker des valeurs

Message non lu par evariste_G »

Mais que suis-je bête ! :D C'était en effet évident :wink: Non, sans blague, je n'ai pas ta culture Texienne (malheureusement !). Merci beaucoup !
Mathématiques, LaTeX et Python : https://www.mathweb.fr
Cours particuliers de maths par webcam: https://courspasquet.fr
Trouver un vrai prof pour des cours particuliers: https://lesvraisprofs.mathweb.fr/
evariste_G
Utilisateur chevronné
Utilisateur chevronné
Messages : 1481
Inscription : vendredi 19 décembre 2008, 19:13
Statut actuel : Enseignant
Localisation : Bordeaux
Contact :

Re: Stocker des valeurs

Message non lu par evariste_G »

Bonjour.
Je continue ce fil juste pour poser une question sur le code ... Comment peut-on remettre à zéro le compteur ? J'ai recherché sur le net, mais n'ai rien trouvé ...

Merci d'avance.
Mathématiques, LaTeX et Python : https://www.mathweb.fr
Cours particuliers de maths par webcam: https://courspasquet.fr
Trouver un vrai prof pour des cours particuliers: https://lesvraisprofs.mathweb.fr/
un bon petit
Utilisateur éprouvé
Utilisateur éprouvé
Messages : 995
Inscription : vendredi 12 juin 2009, 22:35
Statut actuel : Enseignant
Localisation : Chambéry
Contact :

Re: Stocker des valeurs

Message non lu par un bon petit »

evariste_G a écrit :Je continue ce fil juste pour poser une question sur le code ... Comment peut-on remettre à zéro le compteur ? J'ai recherché sur le net, mais n'ai rien trouvé ...
Sur le net ??? Mais encore heureux que tu n'aies rien trouvé : cette macro est de moi, je l'ai inventée lorsque tu en as fait la demande, je ne l'ai pompée nulle part ailleurs. Il me semble donc tout à fait normal que tu ne trouves rien.

Quant à ta question, je ne comprends pas ce que tu veux, ce compteur est remis à zéro à chaque appel de la macro valeurs avec "\val@cnt\z@" donc je ne vois pas de quelle remise à zéro tu parles...
Programmer en TeX, TeXpérimental
evariste_G
Utilisateur chevronné
Utilisateur chevronné
Messages : 1481
Inscription : vendredi 19 décembre 2008, 19:13
Statut actuel : Enseignant
Localisation : Bordeaux
Contact :

Re: Stocker des valeurs

Message non lu par evariste_G »

un bon petit a écrit :Sur le net ??? Mais encore heureux que tu n'aies rien trouvé : cette macro est de moi, je l'ai inventée lorsque tu en as fait la demande, je ne l'ai pompée nulle part ailleurs. Il me semble donc tout à fait normal que tu ne trouves rien.
Je n'ai pas voulu supposer que tu avais chercher cette macro ailleurs, je me doute bien que tu es capable de la faire toi-même. Je voulais dire que j'avais chercher à savoir comment remettre à zéro le compteur.
un bon petit a écrit :Quant à ta question, je ne comprends pas ce que tu veux, ce compteur est remis à zéro à chaque appel de la macro valeurs avec "\val@cnt\z@" donc je ne vois pas de quelle remise à zéro tu parles...
Je me doutais que "\val@cnt\z@" remettait à zéro le compteur mais le problème est que lorsque j'appelle deux fois la macro, il y a un soucis. Il faut dire aussi que j'ai ajouté des choses. Le code suivant me dit qu'il y a une erreur concernant le nombre de colonnes des tableaux construits avec la commande "\tabval".

Code : Tout sélectionner

\valeurs{0/102.3,1/105.6}
\tabval{Rangs $x_i$/Valeurs $y_i$}

\valeurs{0/102.3,1/105.6,2/109.5}
\tabval{Rangs $x_i$/Valeurs $y_i$}
Sachant que la commande "\tabval" est définie ainsi :

Code : Tout sélectionner

\newcommand*\eaddto[2]{%
   \edef\tmp{#2}%
   \expandafter\addto
   \expandafter#1%
   \expandafter{\tmp}%
} 

\newcommand*\tabval[2]{%
\begin{tabular}{||l||*{\val@cnt}{c|}|}
		\hline #1
		\multido{\i=1+1}{\val@cnt}
		{%
			\eaddto\ligneX{&\noexpand\ValX{\i}}
		}
		\ligneX \\
		\hline #2
		\multido{\i=1+1}{\val@cnt}
		{%
			\eaddto\ligneY{&\noexpand\ValY{\i}}
		}
		\ligneY \\
		\hline
     \end{tabular}
}
Mathématiques, LaTeX et Python : https://www.mathweb.fr
Cours particuliers de maths par webcam: https://courspasquet.fr
Trouver un vrai prof pour des cours particuliers: https://lesvraisprofs.mathweb.fr/
un bon petit
Utilisateur éprouvé
Utilisateur éprouvé
Messages : 995
Inscription : vendredi 12 juin 2009, 22:35
Statut actuel : Enseignant
Localisation : Chambéry
Contact :

Re: Stocker des valeurs

Message non lu par un bon petit »

evariste_G a écrit :Sachant que la commande "\tabval" est définie ainsi :
Serait-il possible d'avoir un ECM ? Comment faire pour voir une dysfonctionnement et le corriger si on n'a qu'un morceau du code et donc qu'on ne peut pas compiler ?

Sinon, à tout hasard, je dirais de mettre un \global devant l'assignation du compteur à 0 et devant le \advance...
Programmer en TeX, TeXpérimental
evariste_G
Utilisateur chevronné
Utilisateur chevronné
Messages : 1481
Inscription : vendredi 19 décembre 2008, 19:13
Statut actuel : Enseignant
Localisation : Bordeaux
Contact :

Re: Stocker des valeurs

Message non lu par evariste_G »

Pour l'ECM, désolé mais comme tout était dans un package, je pensais qu'en donnant simplement les macro incriminées, cela suffisait (vu que le problème porte sur le nombre de colonnes des tableaux construits).

Donc j'ai tout mis dans un fichier TEX :

Code : Tout sélectionner

\documentclass{article}
\usepackage[latin1]{inputenc}
\usepackage[frenchb]{babel}
\usepackage{fp,multido}
\makeatletter
\global\newcount\val@cnt
\newcommand*\valeurs{\@ifstar{\valter}{\valbis}}
\newcommand*\valbis[1]{\val@cnt\z@\valeurs@#1,\valeurs@/\valeurs@,}
\def\valeurs@#1/#2,{%
   \ifx\valeurs@#1%
   \else
      \global\advance\val@cnt\@ne
      \@namedef{ValX\number\val@cnt}{#1}%
      \@namedef{ValY\number\val@cnt}{#2}%
      \expandafter\valeurs@
   \fi
}
\newcommand*\valter[1]{\val@cnt\z@\valeurst@#1,\valeurst@/\valeurst@/\valeurst@,}
\def\valeurst@#1/#2/#3,{%
   \ifx\valeurst@#1%
   \else
      \global\advance\val@cnt\@ne
	  \@namedef{Val\number\val@cnt}{#1}%
      \@namedef{ValX\number\val@cnt}{#2}%
      \@namedef{ValY\number\val@cnt}{#3}%
      \expandafter\valeurst@
   \fi
}
\newcommand*\ValX[1]{\@nameuse{ValX#1}}
\newcommand*\ValY[1]{\@nameuse{ValY#1}}
\newcommand*\Val[1]{\@nameuse{Val#1}}

% <------------------------------- Construction du tableau des valeurs ----------------------------------->
\newcommand*\eaddto[2]{%
   \edef\tmp{#2}%
   \expandafter\addto
   \expandafter#1%
   \expandafter{\tmp}%
} 

\newcount\tabvalb@cnt
\def\ligne{}
\def\ligneX{}
\def\ligneY{}

\newcommand*\tabval{\@ifstar{\tabvalter}{\tabvalbis}}

\newcommand*\tabvalbis[1]{\tabvalb@cnt\z@\tabvalbis@#1,\tabvalbis@/\tabvalbis@,}
\def\tabvalbis@#1/#2,{%
   \ifx\tabvalbis@#1%
   \else
	  \tabvalb{#1}{#2}
      \expandafter\tabvalbis@
   \fi
}
\newcommand*\tabvalter[1]{\tabvalb@cnt\z@\tabvalter@#1,\tabvalter@/\tabvalter@/\tabvalter@,}
\def\tabvalter@#1/#2/#3,{%
   \ifx\tabvalter@#1%
   \else
	  \tabvalt{#1}{#2}{#3}
      \expandafter\tabvalter@
   \fi
}

\newcommand*\tabvalb[2] 
{%
	\begin{tabular}{||l||*{\val@cnt}{c|}|}
		\hline #1
		\multido{\i=1+1}{\val@cnt}
		{%
			\eaddto\ligneX{&\noexpand\ValX{\i}}
		}
		\ligneX \\
		\hline #2
		\multido{\i=1+1}{\val@cnt}
		{%
			\eaddto\ligneY{&\noexpand\ValY{\i}}
		}
		\ligneY \\
		\hline
     \end{tabular}
}

\newcommand*\tabvalt[3] 
{%
	\begin{tabular}{||l||*{\val@cnt}{c|}|}
		\hline #1
		\multido{\i=1+1}{\val@cnt}
		{%
			\eaddto\ligne{&\noexpand\Val{\i}}
		}
		\ligne \\
		\hline #2
		\multido{\i=1+1}{\val@cnt}
		{%
			\eaddto\ligneX{&\noexpand\ValX{\i}}
		}
		\ligneX \\
		\hline #3
		\multido{\i=1+1}{\val@cnt}
		{%
			\eaddto\ligneY{&\noexpand\ValY{\i}}
		}
		\ligneY \\
		\hline
     \end{tabular}
}

\makeatother
\begin{document}
\valeurs{0/102.3,1/105.6}
\tabval{Rangs $x_i$/Valeurs $y_i$}

\valeurs*{2005/0/102.3,2006/1/105.6,2007/2/109.5}
\tabval*{Années/Rangs $x_i$/Valeurs $y_i$}
\end{document}
Voilà le code. J'y ai mis le "\global", mais cela ne change rien malheureusement.
Mathématiques, LaTeX et Python : https://www.mathweb.fr
Cours particuliers de maths par webcam: https://courspasquet.fr
Trouver un vrai prof pour des cours particuliers: https://lesvraisprofs.mathweb.fr/
Répondre
  • Sujets similaires
    Réponses
    Vues
    Dernier message