Conversion: string to real.
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 :
On va gagner du temps dans les réponses !
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 !
Conversion: string to real.
Bonjour,
Est-ce que Asymptote propose une fonction du genre: real f(string real, ... ) ?..
Je contourne la difficulté en utilisant la fonction eval(..),ce qui est peut-être totalement inutile!.. Pas très pratique avec la nécessité de variables externes..Sinon, une idée pour la construire?..
Merci.
Est-ce que Asymptote propose une fonction du genre: real f(string real, ... ) ?..
Je contourne la difficulté en utilisant la fonction eval(..),ce qui est peut-être totalement inutile!.. Pas très pratique avec la nécessité de variables externes..Sinon, une idée pour la construire?..
Merci.
Re: Conversion: string to real.
Bonsoir,
est-ce que cet exemple est suffisant pour montrer le principe du transtypage d'un type à un autre ?
![Image](http://marris.free.fr/img/2016-05-24_203408.jpg)
est-ce que cet exemple est suffisant pour montrer le principe du transtypage d'un type à un autre ?
![Image](http://marris.free.fr/img/2016-05-24_203408.jpg)
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 !
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 !
Re: Conversion: string to real.
Oui mais : chaine="5+5" provoque une erreur.
Ce que j'utilise pour l'éviter:
La fonction semble bien marcher mais l'inconvénient est la nécessité de variables externes .
En fait, comment créer une telle fonction sans utiliser eval?..
En interne, Asymptote a peut-être l'équivalent?..
Ce que j'utilise pour l'éviter:
Code : Tout sélectionner
//GLOBALES en début de programme.
string SS0;real XX0;
//FONCTION
//********
real s_toreal(string sinit)
{
int k;
//string s=blanc_out(sinit);
string s=sinit;
SS0=s ;
s= "XX0=" + SS0;
//on effectue en fait "XX0=sqrt(3);" par ex. XX0 contiendra: 1.732..
eval(s,true);
return XX0;
};
real x=s_toreal("sqrt(3)");write(x);
//on obtient : 1.73205080756888
En fait, comment créer une telle fonction sans utiliser eval?..
En interne, Asymptote a peut-être l'équivalent?..
Re: Conversion: string to real.
Code : Tout sélectionner
string calculafaire = "sqrt(3)+5";
// Tu voudrais :
// real x=eval(calculafaire,true);
// mais tu as eu comme erreur : cannot cast 'void' to 'real'
// Pourquoi ne fais-tu pas :
eval("real x="+calculafaire+";",true);
write(x);
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 !
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 !
Re: Conversion: string to real.
Oui, mais à condition que la ligne soit dans la partie principale du programme.
Je cherchais à faire des saisies "rapides" à partir de tableaux ou de données sur fichiers .txt
A priori il me semblait plus simple de construire une fonction effectuant les calculs.
La fonction s_toreal(s) permettant d'étendre facilement à des tableaux de type real[], real[][]
Avec eval() dans une fonction il faut obligatoirement des variables globales.
Ce serait plus esthétique que tout soit intégré dans une même entité...
Si on ne peut se passer de la fonction eval(), l'idéal serait donc qu'Asymptote le propose!..Mais est-ce vraiment utile!!...
Je cherchais à faire des saisies "rapides" à partir de tableaux ou de données sur fichiers .txt
A priori il me semblait plus simple de construire une fonction effectuant les calculs.
La fonction s_toreal(s) permettant d'étendre facilement à des tableaux de type real[], real[][]
Code : Tout sélectionner
//par ex. à la suite de la fonction s_toreal 5..°.qui sera utilisée:
real[] s_toreal(
string[] tabinit)
{ real[] tabder;
string[]tabinit0=copy(tabinit);
for(int i=0;i<tabinit.length;++i){tabder[i]=s_toreal(tabinit0[i]);};
return tabder; };
//application courte!.
string s="tan(pi/4),sqrt(2)/2 , 3+1/2"; string[]Ts=split(s,",");
real[]tab0=s_toreal(Ts);write(tab0);
//Ensuite on peut construire:
real[][] s_toreal( string[][] ttabinit){...};
Ce serait plus esthétique que tout soit intégré dans une même entité...
Si on ne peut se passer de la fonction eval(), l'idéal serait donc qu'Asymptote le propose!..Mais est-ce vraiment utile!!...
Re: Conversion: string to real.
Le titre de ta demande aurait dû être en lien avec cela : "eval - problème de portée de variable"jmz a écrit :Avec eval() dans une fonction il faut obligatoirement des variables globales.
avec un exemple comme celui-là, qui montre ce qui fonctionne (TEST1, TEST2) et ce qui ne fonctionne pas (TEST3).
Code : Tout sélectionner
/////////////////////////////////
/////////////////////////// TEST1
string calculafaire = "sqrt(3)";
eval("real test1="+calculafaire+";",true);
write("TEST1 = ",test1);
/////////////////////////////////
/////////////////////////// TEST2
real tempo2;
real s_toreal2(string calcul)
{
eval("tempo2="+calcul+";",true);
return tempo2;
};
real test2=s_toreal2(calculafaire);
write("TEST2 = ",test2);
/////////////////////////////////
/////////////////////////// TEST3
real s_toreal3(string calcul)
{
eval("real tempo3="+calcul+";",true);
return tempo3;
};
real test3=s_toreal3(calculafaire);
write("TEST3",test3);
- pour une chaine qui contient un simple nombre... on sait transtyper en nombre : tu peux parler de conversion en "real" !
- pour une chaine qui contient autre chose qu'un nombre, cela peut être tellement n'importe quoi dans la chaine, qu'il n'y a aucune surprise à ce qu'il n'y ait pas une fonction qui propose une conversion en "real" !
Dans ce cas là :- on comprend que les langages informatiques aient une fonction de type eval() pour évaluer si la chaine n'est justement pas une ligne de code du langage concerné...
- ... mais pour tout le reste, il faut créer un parseur adapté au contenu de ta chaine.
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 !
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 !
Re: Conversion: string to real.
(Réponse tardive suite problèmes réseaux..)
Effectivement le titre ne convenait pas.Juste quelques remarques...
Sur le même modèle que s_toreal(string s); on peut construire les fonctions : int s_toint(string s); pen s_topen(string s); bool s_tobool(string s); s_toXXX.. XXX représentant tous les types crées par les auteurs..
Une application simple:
On peut ainsi récupérer facilement les données d'un tableur par "copié/collé" dans une variable de type string, qui à l'aide de fonctions du genre s_toXXX deviendront immédiatement opérationnelles. (Idem en parcourant le contenu d'un fichier .txt)
Les fonctions s_toXXX me semblent une extension naturelle de la conversion de type, sans l'utiliser! Pour le parser, ici eval() fait le tri.
L'inconvénient : à chacun ses variables externes associées à chaque fonction!..
En laissant donc de côté la conversion de type,il me semble qu'il ne devrait pas être bien compliqué pour les auteurs de proposer ce genre de fonctions.. En attendant, on peut toujours les rassembler dans un module dédié..
Effectivement le titre ne convenait pas.Juste quelques remarques...
Sur le même modèle que s_toreal(string s); on peut construire les fonctions : int s_toint(string s); pen s_topen(string s); bool s_tobool(string s); s_toXXX.. XXX représentant tous les types crées par les auteurs..
Une application simple:
Code : Tout sélectionner
string s="1/x,0+ 0.0001, sqrt(10), blue, fontsize(10)+blue,false";//données initiales
string[] Ts=split(s,",");//données initiales en tableau
string fct=Ts[0];//la fonction
real x1=s_toreal(Ts[1]);//xmin
real x2=s_toreal(Ts[2]);//xmax
pen pencourbe=s_topen(Ts[3]);//pen de la courbe
pen penlegende=s_topen(Ts[4]);//pen de la légende
bool b=s_tobool(Ts[5]);//pour mettre ou pas un cadre autour du graphique par ex...
//A l'aide du type tfunction, on trace aussitôt en bleu la courbe 1/x entre 0.0001 et sqrt(10)
Les fonctions s_toXXX me semblent une extension naturelle de la conversion de type, sans l'utiliser! Pour le parser, ici eval() fait le tri.
L'inconvénient : à chacun ses variables externes associées à chaque fonction!..
En laissant donc de côté la conversion de type,il me semble qu'il ne devrait pas être bien compliqué pour les auteurs de proposer ce genre de fonctions.. En attendant, on peut toujours les rassembler dans un module dédié..
Re: Conversion: string to real.
Erratum.. Laisser de côté " extension naturelle.." et lire à la place:
"La fonction eval permettra d'initialiser une variable de type XX avec une valeur contenue dans une variable de type string.."
Exemple avec le type pen:
L'intérêt?.. Effectuer rapidement des initialisations.. sinon??..
Juste une remarque:
"redd" au lieu de "red" provoquera une erreur mais sans indication de ligne en console et l'erreur ne bloquera pas forcément la compilation.
Si l'on a beaucoup d'appels de ce genre on peut taper: "CTRL F eval" dans la console en bas de l'écran puis cliquer sur "return" pour retrouver rapidement tous les eval..
"La fonction eval permettra d'initialiser une variable de type XX avec une valeur contenue dans une variable de type string.."
Exemple avec le type pen:
Code : Tout sélectionner
string spen="red"; //variable de type string
pen penrouge=s_topen(spen); initialisation de la variable penrouge
label("texte",position, penrouge);//utilisation de penrouge, affichage
Juste une remarque:
"redd" au lieu de "red" provoquera une erreur mais sans indication de ligne en console et l'erreur ne bloquera pas forcément la compilation.
Si l'on a beaucoup d'appels de ce genre on peut taper: "CTRL F eval" dans la console en bas de l'écran puis cliquer sur "return" pour retrouver rapidement tous les eval..