[QB64] Saisie d'une fonction mathématique, le retour ! :)

Je recherche. Tout et Rien, mais pas de petites annonces ici (pour les PA, c'est dans "Je donne, j'échange, j'achète et je vends")

Modérateur : Politburo

Répondre
Avatar du membre
wilou
Fonctionne à 75 bauds
Fonctionne à 75 bauds
Messages : 52
Enregistré le : 20 juin 2012 18:26
Localisation : Lyon
Contact :

[QB64] Saisie d'une fonction mathématique, le retour ! :)

Message par wilou »

Salut,

Je me dis que c'est probablement sur Sili que je vais trouver la réponse à ma question, j'ai posté sur d'autres forums, mais personne à ce jour n'a répondu... :( faut dire que le BASIC n'attire visiblement plus les foules. Et impossible de s'inscrire sur le forum de QB64.net...

J'ai réussi à faire ce que je voulais sur ma Casio grâce à l'aide de la communauté de Sili, et notamment Tyann, tout est dans ce fil de discussion : viewtopic.php?f=46&t=40022

Je n'ai pas posté à la suite, car cela ne concerne plus la fx-850p, mais le QB64 que j'utilise sur le PC.
J'aimerais trouver un équivalent à la fonction VALF qui est utilisée sur la 850p. Et tant qu'à faire, une solution qui ne m'oblige pas à passer par le langage machine. :)

Ci-dessous, le code sur lequel je travaille aujourd'hui, en QB64, et qui me permet de tracer des fonctions :

Code : Tout sélectionner

'Draw Function
1
SCREEN 12
COLOR 11
CLEAR
CLS

DEFDBL A-Z

PRINT
PRINT TAB(20); " Tracé d'une fonction"
PRINT

PRINT " Echelle :"
PRINT
INPUT " Valeur minimale de x "; xmin
INPUT " Valeur maximale de x "; xmax
INPUT " Valeur minimale de y "; ymin
INPUT " Valeur maximale de y "; ymax

CLS

WINDOW (xmin + xmin / 10, ymin + ymin / 10)-(xmax + xmax / 10, ymax + ymax / 10)
LINE (xmin, 0)-(xmax, 0)
LINE (0, ymin)-(0, ymax)

FOR i = xmin TO xmax STEP 1
    PSET (i, xmax / 320)
NEXT i

FOR j = ymin TO ymax STEP 1
    PSET (ymin / 320, j)
NEXT j

FOR x = xmin TO xmax STEP 1 / 128
    IF x = xmin THEN PSET (x, f(x)), 14
    LINE -(x, f(x)), 14
NEXT x

LOCATE 28, 1
INPUT " Encore (o/n) "; z$
IF z$ = "o" THEN 1 ELSE END

FUNCTION f (x)
f = x ^ 3 - 3 * x ^ 2 + 2
END FUNCTION
Cet équivalent à VALF me permettrait de m'affranchir de FUNCTION... END FUNCTION, pour ne pas avoir à éditer le programme à chaque fois que je veux remplacer une fonction.
Est-ce possible ?

Merci. :)

W.
••• Inventeur du "CCMOS mystique" © ••• Amateur de BM et d'IBM •••
••• La petite famille SASFEPU s'agrandit : TI-57II v.3, Casio fx-7500G, Casio fx-8800G, Sharp PC-1403H, Casio FX-850P (+RP-33), Atari Porfolio, HP 200LX 2 Mo •••
Avatar du membre
jvernet
Fonctionne à 14400 bauds
Fonctionne à 14400 bauds
Messages : 7958
Enregistré le : 24 mai 2002 09:57
Localisation : France 69
Contact :

Re: [QB64] Saisie d'une fonction mathématique, le retour ! :

Message par jvernet »

Au millénaire precedent, j'avais écris un programme GWBASIC qui faisait exactement ce que tu veux, en POKANT directement dans la mèmoire du listing BASIC.

J'imagine que là, ça le fait pas ;). C'est quoi QB64 ?

Sinon, il te faudra developper un analyseur de fonction (à mon avis, ça existe déja...).
"l'ordinateur et l'homme sont les deux opposés les plus intégraux qui existent. L'homme est lent, peu rigoureux et très intuitif. L'ordinateur est super rapide, très rigoureux et complètement con."
Avatar du membre
wilou
Fonctionne à 75 bauds
Fonctionne à 75 bauds
Messages : 52
Enregistré le : 20 juin 2012 18:26
Localisation : Lyon
Contact :

Re: [QB64] Saisie d'une fonction mathématique, le retour ! :

Message par wilou »

Salut,

Merci pour les pistes. :)

Qu'entends-tu par analyseur de fonctions ?
Sinon, QB64 est un BASIC qu'on peut utiliser sur une machine en 64 bits (j'arrivais pas à faire fonctionner le QBasic habituel sous 7-64 bits) : http://www.qb64.net/

Pour ce qui est de POKEr la mémoire du listing, c'est pour retrouver la fonction qu'on aura rentrée quand le programme est en cours d'exécution, j'imagine ?
Aurais-tu encore le code de ce que tu as fait à l'époque ?

Sinon, n'y a-t-il pas un moyen plus simple (grâce aux commandes dont on dispose, notamment pour le travail sur les nombres et les chaînes), de faire quelque chose ?

Entretemps j'ai eu une réponse sur un forum dédié au BASIC, mais le gars a raconté n'importe quoi, et n'a rien vérifié de ce qu'il avançait. Lui ai démontré par A+B que ça tenait pas debout, et au final il me répond qu'il a pas le temps de s'occuper de ma demande... Bref, super l'entraide (et le mec est modo, ça craint...). M'enfin, peut-être aurai-je affaire à une autre personne plus sympa ? En tous cas, les pistes que tu évoques, pour ce que j'en comprends, me semblent plus réalistes.

Bonne journée,

W.
••• Inventeur du "CCMOS mystique" © ••• Amateur de BM et d'IBM •••
••• La petite famille SASFEPU s'agrandit : TI-57II v.3, Casio fx-7500G, Casio fx-8800G, Sharp PC-1403H, Casio FX-850P (+RP-33), Atari Porfolio, HP 200LX 2 Mo •••
Avatar du membre
jvernet
Fonctionne à 14400 bauds
Fonctionne à 14400 bauds
Messages : 7958
Enregistré le : 24 mai 2002 09:57
Localisation : France 69
Contact :

Re: [QB64] Saisie d'une fonction mathématique, le retour ! :

Message par jvernet »

En fait, ma solution ne marchait que pour du GWBASIC (interpreté). Il ne marcherait pas du tout avec QB64 (compilé !).

Un analyseur syntaxique de fonction permettrait d'évaluer une expression mathématique f(x) donnée sous forme de chaine, en gérant les erreurs.
C'est un truc hyper classique, et j'imagine bien qu'il existe des librairies C ou BASIC faisant ce genre de choses.

Je n'ai hélas plus ce programme, développé en 1985/86 sur un Apricot F1, qui gérait 8 fonctions, un zoom à la souris, une recherche des racines et d'autres trucs. GWBASIC et assembleur.
La disquette sur laquelle je travaillais est morte.... pas de sauvegarde....
"l'ordinateur et l'homme sont les deux opposés les plus intégraux qui existent. L'homme est lent, peu rigoureux et très intuitif. L'ordinateur est super rapide, très rigoureux et complètement con."
Avatar du membre
jvernet
Fonctionne à 14400 bauds
Fonctionne à 14400 bauds
Messages : 7958
Enregistré le : 24 mai 2002 09:57
Localisation : France 69
Contact :

Re: [QB64] Saisie d'une fonction mathématique, le retour ! :

Message par jvernet »

Modifié en dernier par jvernet le 21 avr. 2016 18:49, modifié 1 fois.
"l'ordinateur et l'homme sont les deux opposés les plus intégraux qui existent. L'homme est lent, peu rigoureux et très intuitif. L'ordinateur est super rapide, très rigoureux et complètement con."
Avatar du membre
jvernet
Fonctionne à 14400 bauds
Fonctionne à 14400 bauds
Messages : 7958
Enregistré le : 24 mai 2002 09:57
Localisation : France 69
Contact :

Re: [QB64] Saisie d'une fonction mathématique, le retour ! :

Message par jvernet »

"l'ordinateur et l'homme sont les deux opposés les plus intégraux qui existent. L'homme est lent, peu rigoureux et très intuitif. L'ordinateur est super rapide, très rigoureux et complètement con."
Avatar du membre
jvernet
Fonctionne à 14400 bauds
Fonctionne à 14400 bauds
Messages : 7958
Enregistré le : 24 mai 2002 09:57
Localisation : France 69
Contact :

Re: [QB64] Saisie d'une fonction mathématique, le retour ! :

Message par jvernet »

Et
http://www.garybeene.com/reviews/rev-parsers.htm

Avec plein de liens vers des parser.

Allez, au boulot ;)
"l'ordinateur et l'homme sont les deux opposés les plus intégraux qui existent. L'homme est lent, peu rigoureux et très intuitif. L'ordinateur est super rapide, très rigoureux et complètement con."
Avatar du membre
wilou
Fonctionne à 75 bauds
Fonctionne à 75 bauds
Messages : 52
Enregistré le : 20 juin 2012 18:26
Localisation : Lyon
Contact :

Re: [QB64] Saisie d'une fonction mathématique, le retour ! :

Message par wilou »

Oulaaaaah, n'en jetez plus ! :D

C'est excellent, toutes ces ressources que tu mets à ma disposition. Merci beaucoup !
Il ne s'agirait pas de croire que je n'ai pas fait de recherches. Cela fait un sacré bout de temps que cette chose me taraude. Mais voilà... La recherche est tout de suite moins fructueuse dès lors qu'on ne sait pas exactement ce que l'on cherche. Les pistes que tu évoques m'ouvrent de nouveaux horizons. J'avais l'intime conviction qu'il était possible de faire quelque chose (en prenant à première vue des chemins détournés), et je ne m'étais pas trompé.

Je vais me pencher sur tout cela, cela me prendra certainement un peu de temps que de tout comprendre. Je ne manquerai pas de te tenir informé de mes progrès. :)

Bonne soirée,

W.
••• Inventeur du "CCMOS mystique" © ••• Amateur de BM et d'IBM •••
••• La petite famille SASFEPU s'agrandit : TI-57II v.3, Casio fx-7500G, Casio fx-8800G, Sharp PC-1403H, Casio FX-850P (+RP-33), Atari Porfolio, HP 200LX 2 Mo •••
Avatar du membre
Pocket
Administrateur
Administrateur
Messages : 5941
Enregistré le : 24 mai 2002 16:55
Localisation : Toulouse
Contact :

Re: [QB64] Saisie d'une fonction mathématique, le retour ! :

Message par Pocket »

Salut,

Si t'as pas fait du LEX & YACC dans ta vie, t'es pas un vrai barbu :ugeek: ;)

A+
Pocket, voit tout, sait tout, lit l'avenir dans les entrailles d'une base phpBB ...
Image
Avatar du membre
jvernet
Fonctionne à 14400 bauds
Fonctionne à 14400 bauds
Messages : 7958
Enregistré le : 24 mai 2002 09:57
Localisation : France 69
Contact :

Re: [QB64] Saisie d'une fonction mathématique, le retour ! :

Message par jvernet »

Pocket a écrit :Salut,

Si t'as pas fait du LEX & YACC dans ta vie, t'es pas un vrai barbu :ugeek: ;)

A+
JAMAIS fait ça. C'est mon partenaire de TP en licence & maîtrise qui s'est tartiné ça, y compris le TP de parser (c'est pour ça que je savais quoi chercher sur gogole).

Moi petit salarié pauvre (mais barbu), lui patron très riche, maintenant.
"l'ordinateur et l'homme sont les deux opposés les plus intégraux qui existent. L'homme est lent, peu rigoureux et très intuitif. L'ordinateur est super rapide, très rigoureux et complètement con."
Avatar du membre
wilou
Fonctionne à 75 bauds
Fonctionne à 75 bauds
Messages : 52
Enregistré le : 20 juin 2012 18:26
Localisation : Lyon
Contact :

Re: [QB64] Saisie d'une fonction mathématique, le retour ! :

Message par wilou »

Hello,

J'essaie d'appréhender le fonctionnement d'un analyseur de fonction. Je crois que je commence à comprendre. :)

Si je peux résumer ainsi :

L'analyseur de fonctions est conçu pour analyser une chaîne de caractères. L'analyse permet d'identifier chaque élément de ladite chaîne, et de lui faire exécuter sa fonction première (exemple, l'analyseur rencontre un "+" et comprend qu'il y a une addition à faire). L'analyseur est également conçu pour gérer les priorités dans les calculs (s'il trouve un +, mais qu'il y a une multiplication à faire, cette dernière sera faite avant).

Le programme de eoredson sur le forum QB64 répond à première vue à mes attentes, mais je ne vois pas trop comment l'intégrer à mon système.
On est jamais mieux servis que par soi-même, mais je ne me sens pas encore capable de programmer un tel outil... Donc je pense que dans un premier temps, je vais devoir utiliser une solution déjà existante.

J'ai bon jusque là ?

Merci ! :)

W.
••• Inventeur du "CCMOS mystique" © ••• Amateur de BM et d'IBM •••
••• La petite famille SASFEPU s'agrandit : TI-57II v.3, Casio fx-7500G, Casio fx-8800G, Sharp PC-1403H, Casio FX-850P (+RP-33), Atari Porfolio, HP 200LX 2 Mo •••
Avatar du membre
jvernet
Fonctionne à 14400 bauds
Fonctionne à 14400 bauds
Messages : 7958
Enregistré le : 24 mai 2002 09:57
Localisation : France 69
Contact :

Re: [QB64] Saisie d'une fonction mathématique, le retour ! :

Message par jvernet »

Oui, tu as bon. Deux techniques possible:
- une analyse (parse) de la chaine à chaque "execution": c'est un interpreteur.
- une analyse de la chaine, on conserve l'analyse sous la forme d'un "programme executable" et on fait tourner avec les variables: c'est une sorte de compilateur.

La première solution est plus simple (mais quand même complexe, surtout en BASIC, langage non récursif) mais lente, la deuxième très complexe mais bien plus rapide.

WHAT64 a l'air très puissant, il faut voir ensuite comment l'utiliser. Apparement, on peut passer au parser quelque chose du genre
DEFFN(1)=f(x)

puis lui passer x=ce que tu veux et enfin lui demander FN(x)

JV
"l'ordinateur et l'homme sont les deux opposés les plus intégraux qui existent. L'homme est lent, peu rigoureux et très intuitif. L'ordinateur est super rapide, très rigoureux et complètement con."
Avatar du membre
wilou
Fonctionne à 75 bauds
Fonctionne à 75 bauds
Messages : 52
Enregistré le : 20 juin 2012 18:26
Localisation : Lyon
Contact :

Re: [QB64] Saisie d'une fonction mathématique, le retour ! :

Message par wilou »

Hello,

Merci pour ces infos. Ca me rassure, je suis pas trop rouillé. :)
En fait DEF FN n'est pas géré par QB64, c'est ce que j'utilisais avant avec QBASIC, mais j'ai dû remplacer par FUNCTION... END FUNCTION (que je trouve au passage plus naturel).

Quand tu parles de "programme exécutable", est-ce que tu te réfères à la programmation de la fonction VALF sur le PB1000 et qui était abordée dans le topic de la fx-850p ? J'imagine qu'il est aussi possible de créer un exécutable sur le PC, mais alors là, je n'ai aucune idée de la façon de faire.

W.
••• Inventeur du "CCMOS mystique" © ••• Amateur de BM et d'IBM •••
••• La petite famille SASFEPU s'agrandit : TI-57II v.3, Casio fx-7500G, Casio fx-8800G, Sharp PC-1403H, Casio FX-850P (+RP-33), Atari Porfolio, HP 200LX 2 Mo •••
Avatar du membre
jvernet
Fonctionne à 14400 bauds
Fonctionne à 14400 bauds
Messages : 7958
Enregistré le : 24 mai 2002 09:57
Localisation : France 69
Contact :

Re: [QB64] Saisie d'une fonction mathématique, le retour ! :

Message par jvernet »

wilou a écrit :Hello,

Merci pour ces infos. Ca me rassure, je suis pas trop rouillé. :)
En fait DEF FN n'est pas géré par QB64, c'est ce que j'utilisais avant avec QBASIC, mais j'ai dû remplacer par FUNCTION... END FUNCTION (que je trouve au passage plus naturel).

Quand tu parles de "programme exécutable", est-ce que tu te réfères à la programmation de la fonction VALF sur le PB1000 et qui était abordée dans le topic de la fx-850p ? J'imagine qu'il est aussi possible de créer un exécutable sur le PC, mais alors là, je n'ai aucune idée de la façon de faire.

W.
Ben.. C'est exactement ce que ces programmes se proposent de faire.....
Il faut lire la doc de WHAT64. Le DEFFN dont je parle, c'est dans WHAT64. Il faut regarder comment le programme est fait, garder la partie parser et utiliser les fonctions du parser.
"l'ordinateur et l'homme sont les deux opposés les plus intégraux qui existent. L'homme est lent, peu rigoureux et très intuitif. L'ordinateur est super rapide, très rigoureux et complètement con."
Répondre

Retourner vers « Recherche informations / technique / etc ... [pas de petites annonces ici] »