6.5.16 Pour transformer une chaîne en un nombre, une fonction ou en une commande : expr
Voici , selon la chaîne, les transformations que fait expr :
-
expr permet de transformer une chaîne de chiffres ou lettres
en un nombre entier ayant comme écriture en base 8,ou 10 ou 16 cette chaîne
de chiffres. Il faut bien sûr que l’écriture soit valide et représente
un nombre entier dans la base donnée : toutefois expr("019") renvoie
le nombre décimale 19.0 (voir aussi 9.5.5).
Attention
Si la chaîne commence par 0x, expr transforme cette chaîne en
le nombre entier écrit en base 16, sinon,
si la chaîne commence par 0, expr transforme cette chaîne en
le nombre entier écrit en base 8 et sinon
expr transforme cette chaîne en le nombre entier écrit en base 10.
On tape :
expr("123")
On obtient :
123
On tape :
expr("0123")
On obtient :
83
En effet : 1*82+2*8+3=83
On tape :
expr("0x12f")
On obtient :
303
En effet 1*162+2*16+15=303
Remarque
On tape :
expr(char([48,50,56,56]))
On obtient un nombre flottant :
288.0
En effet char([48,50,56,56]) renvoie "0288".
Or un nombre entier commençant par 0 est un nombre écrit en octal, du coup
il ne doit pas contenir de chiffre supérieur ou égal à 8. Ici le nombre
a des chiffres égaux à 8, il est donc réinterprété (après
détection d’erreur de saisie en octal) comme un nombre flottant.
On tape :
expr(char([48,50,55,55]))
On obtient un nombre exact car l’écriture "0277" est valide :
191
En effet char([48,50,55,55]) renvoie "0277" et 0277
est l’écriture en base 8 de 191 (7+8*7+64*2=191).
On tape :
expr(char([48,48,50,51]))
On obtient un nombre exact car l’écriture "0023" est valide :
19
En effet char([48,50,55,55]) renvoie "0023" et 0023
est l’écriture en base 8 de 19 (3+2*8=19).
- expr permet aussi de transformer une chaîne de chiffres
représentant un nombre décimal en ce nombre.
On tape :
expr("123.4567")
On obtient :
123.4567
On tape :
expr("123e-5")
On obtient :
0.00123
- expr permet de transformer une chaîne de chiffres
représentant un nombre rationel en ce nombre.
On tape :
expr("123/6")
On obtient :
41/2
- expr permet de transformer une chaîne
représentant une expression réelle en ce réel.
On tape :
expr("sqrt(2)+pi")
On obtient :
sqrt(2)+pi
- expr permet de transformer une chaîne
représentant un complexe réelle en ce complexe.
On tape :
expr("(1+2i)/(1-i)")
On obtient :
(-1+3*i)/2
- expr permet de transformer une chaîne
représentant la définition d’une fonction en cette fonction.
On tape :
f:=expr("x->x^
2+sqrt(2)");f(2)
On obtient en vert //Succès:
(x)->x^
2+sqrt(2),4+sqrt(2)
- expr permet aussi de transformer une chaîne de caractères
pouvant être interprétée comme une commande.
On tape :
expr("a:=1")
On obtient :
1 et, la variable a contient 1
Remarque2
On peut aussi utiliser la commande convert en utilisant l’une des options
integer, rational, float, real, complex, symbol, identifier pour trandformer une chaîne de caractères en un nombre entier, rationnel, décimal,
réel, complexe ou en une expression ou un nom de variable.