Pour toute demande d'aide sur des exemples non finalisés, c'est ici.
Les exemples aboutis et intéressants seront ajoutés aux sous-forums qui suivent.
Règles du forum
Pour toute demande d'aide pour la conception (ou la confirmation d'un code) d'une figure Asymptote, c'est ici.
J'invite ceux qui ont régulièrement des questions à poser à aller dans leur panneau de l'utilisateur pour indiquer dans la signature de leurs messages :
- Nom du système d'exploitation (W7 ou Ubuntu 12.04 ou ...)
- Version d'Asymptote et éditeur utilisé pour les figures Asymptote
- Distribution LaTeX et éditeur utilisé pour les tex.
On va gagner du temps dans les réponses !
-
zariski
- Messages : 141
- Enregistré le : dim. 30 sept. 2012, 18:50
Message non lu
par zariski » ven. 28 déc. 2012, 22:48
Bonsoir !
Pourquoi ce code ne me rend pas le truc attendu, à savoir : a=b ? true .
*** Pour masquer/découvrir le code Asymptote qui a permis de créer la figure, il faut cliquer dessus. ;-) ***
- CODE ASYMPTOTE de la figure ci-dessus :
Tout sélectionner
unitsize(1cm);
real [] a={-4.7,1.2,4.5,6.3,8},
b={-4.7,1.2,4.5,6.3,8},
c={1,0,2,4};
bool p=alias(a,b), q=alias(b,c);
label(scale(0.8)*("Tableau a :"),(-1,4));
label(scale(0.8)*("Tableau b :"),(-1,3));
label(scale(0.8)*("Tableau c :"),(-1,2));
for (int i=0; i<a.length; ++i){
label(scale(0.8)*(format("$a_{%i} = $",i) + string(a[i])),(1.5*i-1.5,3.5));
label(scale(0.8)*(format("$b_{%i} = $",i) + string(b[i])),(1.5*i-1.5,2.5));
}
for (int i=0; i<c.length; ++i)
label(scale(0.8)*(format("$c_{%i} = $",i) + string(c[i])),(1.5*i-1.5,1.5));
label(scale(0.8)*("a=b ? " + (p ? "true" : "false")),(-1,0.8));
label(scale(0.8)*("a=c ? " + (q ? "true" : "false")),(-1,0));
shipout(bbox(.2cm,Fill(rgb(0.97,0.54,0.54))));
Windows 11- Ubuntu 20.10 - WinEdit - TexStudio - TeXMaker - TeXLive2022
-
GM
- Administrateur du site
- Messages : 1512
- Enregistré le : dim. 7 mars 2010, 14:50
Message non lu
par GM » ven. 28 déc. 2012, 23:50
Bonsoir,
l'explication en anglais de la doc :
The function bool alias(T,T) checks to see if two structure references refer to the same instance of the structure (or both to null).
et un exemple commenté en français :
Code : Tout sélectionner
real[] a={2};
real[] b={2};
real[] c=a;
write(alias(a,b)); // renvoie false
write(alias(a,c)); // renvoie true car a et c sont la même instance de la structure real[]
a.push(3); // on ajoute 3 à a
write(c); // et l'affichage de c renvoie donc {2,3}.......... alors que b reste évidemment inchangé.
Index des fonctions - Exemple de lien donnant le résultat d'une recherche sur les mots 'arc' et 'triple' :
http://asy.marris.fr/indexasy/?filtre=arc triple
Mes configurations (le 24/02/21) :
PC n°1 :
Windows 10 - Asymptote(2.82)+MikTeX2.9 - Editeurs : Notepad++, TeXworks, Visual Studio Code.
PC n°2 :
Ubuntu 20.04LTS - Asymptote(2.67-?? git) + TexLive2020
Mon serveur :
Debian Stretch- Asymptote(2.68-16 git) + TexLive2018
Merci de préciser la votre !
-
zariski
- Messages : 141
- Enregistré le : dim. 30 sept. 2012, 18:50
Message non lu
par zariski » sam. 29 déc. 2012, 09:42
Mouais ... ben suis pas convaincu.
Je ne vois pas non plus l'utilité du truc mais j'imagine bien qu'il y en a une !!!
Merci tout de même !
Windows 11- Ubuntu 20.10 - WinEdit - TexStudio - TeXMaker - TeXLive2022
-
GM
- Administrateur du site
- Messages : 1512
- Enregistré le : dim. 7 mars 2010, 14:50
Message non lu
par GM » sam. 29 déc. 2012, 11:34
zariski a écrit :Je ne vois pas non plus l'utilité du truc mais j'imagine bien qu'il y en a une !!!
Merci tout de même !
Si tu t'intéresses au sujet... fais des recherches sur "passage par valeur et passage par référence".
La doc d'Asymptote dit :
Functions arguments are passed by value.
To pass an argument by reference, simply enclose it in a structure
Illustration du comportement particulier dans le cas d'une structure :
Code : Tout sélectionner
int a=2, b=1;
write("a="+string(a)+" ------- b="+string(b));
int tempo=a; write(alias(tempo,a));
a = b; write(alias(a,b));
b = tempo; write(alias(b,tempo));
write("a="+string(a)+" ------- b="+string(b));
////////////////////////////////////
write('\n');
////////////////////////////////////
struct intGM{ int x; }
intGM a,b;
a.x=2;
b.x=1;
write("a.x="+string(a.x)+" ------- b.x="+string(b.x));
intGM tempo=a; write(alias(tempo,a));
a = b; write(alias(a,b));
b = tempo; write(alias(b,tempo));
write("a.x="+string(a.x)+" ------- b.x="+string(b.x));
Si j'ai compris... dans le second cas, on a évité de devoir allouer de la mémoire pour tempo... puisque l'on a permuté des références et qu'il n'a pas fallu faire de la place en mémoire pour stocker une valeur temporaire.
Index des fonctions - Exemple de lien donnant le résultat d'une recherche sur les mots 'arc' et 'triple' :
http://asy.marris.fr/indexasy/?filtre=arc triple
Mes configurations (le 24/02/21) :
PC n°1 :
Windows 10 - Asymptote(2.82)+MikTeX2.9 - Editeurs : Notepad++, TeXworks, Visual Studio Code.
PC n°2 :
Ubuntu 20.04LTS - Asymptote(2.67-?? git) + TexLive2020
Mon serveur :
Debian Stretch- Asymptote(2.68-16 git) + TexLive2018
Merci de préciser la votre !
-
GM
- Administrateur du site
- Messages : 1512
- Enregistré le : dim. 7 mars 2010, 14:50
Message non lu
par GM » sam. 29 déc. 2012, 11:59
... et donc pour le cas particulier de tes tableaux, on fait cette distinction entre passage par référence et passage par valeur (utilisation de copy) :
Code : Tout sélectionner
int[] a={2}, b={1};
write("a="+string(a[0])+" ------- b="+string(b[0]));
int[] tempo=a; write(alias(tempo,a));
a = b; write(alias(a,b));
b = tempo; write(alias(b,tempo));
write("a="+string(a[0])+" ------- b="+string(b[0]));
////////////////////////////////////
write('\n');
////////////////////////////////////
int[] a={2}, b={1};
write("a="+string(a[0])+" ------- b="+string(b[0]));
int[] tempo=copy(a); write(alias(tempo,a));
a = copy(b); write(alias(a,b));
b = copy(tempo); write(alias(b,tempo));
write("a="+string(a[0])+" ------- b="+string(b[0]));
Index des fonctions - Exemple de lien donnant le résultat d'une recherche sur les mots 'arc' et 'triple' :
http://asy.marris.fr/indexasy/?filtre=arc triple
Mes configurations (le 24/02/21) :
PC n°1 :
Windows 10 - Asymptote(2.82)+MikTeX2.9 - Editeurs : Notepad++, TeXworks, Visual Studio Code.
PC n°2 :
Ubuntu 20.04LTS - Asymptote(2.67-?? git) + TexLive2020
Mon serveur :
Debian Stretch- Asymptote(2.68-16 git) + TexLive2018
Merci de préciser la votre !
-
zariski
- Messages : 141
- Enregistré le : dim. 30 sept. 2012, 18:50
Message non lu
par zariski » sam. 29 déc. 2012, 13:00
houlaaaaa
va falloir que je cogite le truc !!!!
Merciiiiii
Windows 11- Ubuntu 20.10 - WinEdit - TexStudio - TeXMaker - TeXLive2022