Peut-on mettre un tableau en argument d'une procédure ?

Tout ce qui concerne l'utilisation ou l'installation d'Asymptote.

Modérateur: gdm_asy

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.

Peut-on mettre un tableau en argument d'une procédure ?

Messagepar gilles » Mardi 08 Février 2011, 10:52

Bonjour à tous,
j'écris une procédure (directement inspirée par la procédure "bargraph" de Gaétan), dont l'en-tête ressemble à ça :
Code: Tout sélectionner
void diagrammebatons(
real longueur,
real hauteur,
real ymin,
real ymax,
real ystep,
real tickwidth=0.1,
string yformat="%.0f",
Label LabelX,
Label LabelY,
Label[] LabAbscisses={"1","2","3","4","5","6"},
real[] ValOrdonnees={4,2,4,5,3,2},
pen p=blue)


Pour l'exemple, je spécifie ici les labels des abscisses et des ordonnées par défaut.
Évidemment, je veux pouvoir les passer en paramètres lorsque j'appelle ma procédure.
Si j'appelle :
Code: Tout sélectionner
diagrammebatons(longueur=6, hauteur=5, ymin=1, ymax=6, ystep=1, LabelX="face", LabelY="effectif")

cela compile sans problème.
Mais si je veux changer les labels des abscisses et des ordonnées (ce qui est quand même le but de la procédure...), en appelant :
Code: Tout sélectionner
diagrammebatons(longueur=6, hauteur=5, ymin=1, ymax=6, ystep=1, LabelX="face", LabelY="effectif", LabAbscisses={"Riri", "Fifi", "Loulou"},  ValOrdonnees={4,2,4})

ben j'ai une syntax error.

En fouillant un peu, je n'ai trouvé nulle part d'exemple de procédure où un des arguments était un tableau. Pourtant, je ne vois pas l'obstacle théorique à la chose. Y en a-t-il un, ou fais-je une erreur évidente que je ne vois pas ?

Merci de vos lumières !
gilles
Hecto-utilisateur
 
Messages: 55
Inscription: Dimanche 04 Octobre 2009, 19:36
Localisation: Bordeaux
Statut actuel: Actif et salarié | Enseignant

Publicité

Re: Peut-on mettre un tableau en argument d'une procédure ?

Messagepar maurice » Mardi 08 Février 2011, 11:33

Bonjour, difficile de tester sans toute la procédure, il faut tout réadapter à partir de bargraph...
Quelles erreurs obtiens tu ? Ca pourrait aider.

Maurice
Asymptote :
----> Démarrage rapide : http://cgmaths.fr/Atelier/Asymptote/Asymptote.html
----> Documentation 3D : http://www.mathco.tuxfamily.org et si ça ne marche pas, essayez la version pdf
maurice
Méga-utilisateur
 
Messages: 399
Inscription: Jeudi 25 Mars 2010, 13:49
Statut actuel: Actif et salarié | Enseignant

Re: Peut-on mettre un tableau en argument d'une procédure ?

Messagepar maurice » Mardi 08 Février 2011, 11:44

gilles a écrit:Mais si je veux changer les labels des abscisses et des ordonnées (ce qui est quand même le but de la procédure...), en appelant :
Code: Tout sélectionner
diagrammebatons(longueur=6, hauteur=5, ymin=1, ymax=6, ystep=1, LabelX="face", LabelY="effectif", LabAbscisses={"Riri", "Fifi", "Loulou"},  ValOrdonnees={4,2,4})

ben j'ai une syntax error.



Néanmoins, tu peux essayer en remplaçant ta ligne par :

Code: Tout sélectionner
diagrammebatons(longueur=6, hauteur=5, ymin=1, ymax=6, ystep=1, LabelX="face", LabelY="effectif", new Label[]{"Riri", "Fifi", "Loulou"},  new real[]{4,2,4})


le mélange de bargraph et de ta procédure compile :

aef83d9a34d6e27dccc56fbd2017ea67.png

Code: Tout sélectionner
size(7.5cm);

void bargraph(real X, real Y,
real ymin, real ymax, real ystep,
real tickwidth, string yformat,
Label LX, Label LY, Label[] LLX,
real[] height,
pen p=nullpen){
draw((0,0)--(0,Y),EndArrow);
draw((0,0)--(X,0),EndArrow);
label(LX,(X,0),plain.SE,fontsize(9));
label(LY,(0,Y),plain.NW,fontsize(9));
real yscale=Y/(ymax+ystep);
for(real y=ymin; y<ymax; y+=ystep) {
draw((-tickwidth,yscale*y)--(0,yscale*y));
label(format(yformat,y),(-tickwidth,yscale*y),plain.W,fontsize(9));
}
int n=LLX.length;
real xscale=X/(2*n+2);
for(int i=0;i<n;++i) {
real x=xscale*(2*i+1);
path P=(x,0)--(x,height[i]*yscale)--(x+xscale,height[i]*yscale)--(x+xscale,0)--cycle;
fill(P,p);
draw(P);
label(LLX[i],(x+xscale/2),plain.S,fontsize(10));
}
for(int i=0;i<n;++i)
draw((0,height[i]*yscale)--(X,height[i]*yscale),dashed);
}

string yf="%#.1f";
bargraph(X=60,Y=50, ymin=1, ymax=6, ystep=1, 2, yf, "face", "effectif", new Label[]{"Riri", "Fifi", "Loulou"}, new real[]{4,2,4});



Maurice
Asymptote :
----> Démarrage rapide : http://cgmaths.fr/Atelier/Asymptote/Asymptote.html
----> Documentation 3D : http://www.mathco.tuxfamily.org et si ça ne marche pas, essayez la version pdf
maurice
Méga-utilisateur
 
Messages: 399
Inscription: Jeudi 25 Mars 2010, 13:49
Statut actuel: Actif et salarié | Enseignant

Re: Peut-on mettre un tableau en argument d'une procédure ?

Messagepar gilles » Mardi 08 Février 2011, 12:07

:D Merci beaucoup !
Effectivement, ça compile grâce au
Code: Tout sélectionner
 new Label[] {...}

Si ce n'est pas abuser de ta patience, pourrais-tu me dire pourquoi les paramètres tableau sont à traiter différemment ? Pourquoi ce new, pourquoi ne peut-on pas simplement écrire nomdutableau={nouveautableau} comme avec les autres paramètres ?

Gilles
gilles
Hecto-utilisateur
 
Messages: 55
Inscription: Dimanche 04 Octobre 2009, 19:36
Localisation: Bordeaux
Statut actuel: Actif et salarié | Enseignant

Re: Peut-on mettre un tableau en argument d'une procédure ?

Messagepar maurice » Mardi 08 Février 2011, 12:19

gilles a écrit:Si ce n'est pas abuser de ta patience, pourrais-tu me dire pourquoi les paramètres tableau sont à traiter différemment ? Pourquoi ce new, pourquoi ne peut-on pas simplement écrire nomdutableau={nouveautableau} comme avec les autres paramètres ?


Ça je ne sais pas exactement, j'avais juste remarqué que pour les listes, il y avait souvent des problèmes... Il faudra qu'un spécialiste de programmation passe par ici.
Peut-être une histoire de longueur de liste ...?
Ça m'intéresserait de connaitre le fond du problème.

Maurice
Asymptote :
----> Démarrage rapide : http://cgmaths.fr/Atelier/Asymptote/Asymptote.html
----> Documentation 3D : http://www.mathco.tuxfamily.org et si ça ne marche pas, essayez la version pdf
maurice
Méga-utilisateur
 
Messages: 399
Inscription: Jeudi 25 Mars 2010, 13:49
Statut actuel: Actif et salarié | Enseignant


Retourner vers Asymptote

 


  • Articles en relation
    Réponses
    Vus
    Dernier message

Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 1 invité