Stocker des valeurs

Tout ce qui concerne l'utilisation ou l'installation de LaTeX.

Modérateur: gdm_tex

Règles du forum
Merci d'éviter le style SMS dans vos messages et de penser à utiliser la fonction Recherche avant de poster un message. Pour joindre des fichiers à vos messages, consulter ce sujet.
> Penser à utiliser les balises Code pour poster du code.

Stocker des valeurs

Messagepar evariste_G » Lundi 02 Mai 2011, 20:01

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.
Je ne suis pas le plus doué dans tout ce que je fais, mais qui peut se vanter de l'être ?
Y a-t-il une relation d'ordre dans l'ensemble dans lequel nous vivons qui nous permettrait de dire qu'une personne vaut mieux que les autres ?
evariste_G
Téra-utilisateur
 
Messages: 1400
Inscription: Vendredi 19 Décembre 2008, 19:13
Localisation: Bordeaux
Statut actuel: Actif et salarié | Enseignant

Publicité

Re: Stocker des valeurs

Messagepar un bon petit » Lundi 02 Mai 2011, 20:34

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}
un bon petit
Giga-utilisateur
 
Messages: 676
Inscription: Vendredi 12 Juin 2009, 21:35
Localisation: Chambéry
Statut actuel: Actif et salarié | Enseignant

Re: Stocker des valeurs

Messagepar evariste_G » Mardi 03 Mai 2011, 10:59

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 !
Je ne suis pas le plus doué dans tout ce que je fais, mais qui peut se vanter de l'être ?
Y a-t-il une relation d'ordre dans l'ensemble dans lequel nous vivons qui nous permettrait de dire qu'une personne vaut mieux que les autres ?
evariste_G
Téra-utilisateur
 
Messages: 1400
Inscription: Vendredi 19 Décembre 2008, 19:13
Localisation: Bordeaux
Statut actuel: Actif et salarié | Enseignant

Re: Stocker des valeurs

Messagepar evariste_G » Vendredi 06 Mai 2011, 12:26

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.
Je ne suis pas le plus doué dans tout ce que je fais, mais qui peut se vanter de l'être ?
Y a-t-il une relation d'ordre dans l'ensemble dans lequel nous vivons qui nous permettrait de dire qu'une personne vaut mieux que les autres ?
evariste_G
Téra-utilisateur
 
Messages: 1400
Inscription: Vendredi 19 Décembre 2008, 19:13
Localisation: Bordeaux
Statut actuel: Actif et salarié | Enseignant

Re: Stocker des valeurs

Messagepar un bon petit » Vendredi 06 Mai 2011, 15:23

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...
un bon petit
Giga-utilisateur
 
Messages: 676
Inscription: Vendredi 12 Juin 2009, 21:35
Localisation: Chambéry
Statut actuel: Actif et salarié | Enseignant

Re: Stocker des valeurs

Messagepar evariste_G » Vendredi 06 Mai 2011, 17:21

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}
}
Je ne suis pas le plus doué dans tout ce que je fais, mais qui peut se vanter de l'être ?
Y a-t-il une relation d'ordre dans l'ensemble dans lequel nous vivons qui nous permettrait de dire qu'une personne vaut mieux que les autres ?
evariste_G
Téra-utilisateur
 
Messages: 1400
Inscription: Vendredi 19 Décembre 2008, 19:13
Localisation: Bordeaux
Statut actuel: Actif et salarié | Enseignant

Re: Stocker des valeurs

Messagepar un bon petit » Vendredi 06 Mai 2011, 20:28

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...
un bon petit
Giga-utilisateur
 
Messages: 676
Inscription: Vendredi 12 Juin 2009, 21:35
Localisation: Chambéry
Statut actuel: Actif et salarié | Enseignant

Re: Stocker des valeurs

Messagepar evariste_G » Samedi 07 Mai 2011, 08:01

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.
Je ne suis pas le plus doué dans tout ce que je fais, mais qui peut se vanter de l'être ?
Y a-t-il une relation d'ordre dans l'ensemble dans lequel nous vivons qui nous permettrait de dire qu'une personne vaut mieux que les autres ?
evariste_G
Téra-utilisateur
 
Messages: 1400
Inscription: Vendredi 19 Décembre 2008, 19:13
Localisation: Bordeaux
Statut actuel: Actif et salarié | Enseignant


Retourner vers LaTeX

 


  • Articles en relation
    Réponses
    Vus
    Dernier message

Qui est en ligne

Utilisateurs parcourant ce forum: Bing [Bot], Google Adsense [Bot] et 19 invités