Tout est dans le titre, ou presque.
La première question que je me pose, et cela concerne un bon nombre des programmes que j'avais réalisés quand j'étais ado :
Je souhaite travailler, par exemple, sur une fonction f(x), et j'aimerais pouvoir la saisir comme n'importe quel nombre que l'on va renseigner à coup de INPUT. A ce jour, je n'ai pas réussi, mais j'ai toujours pu éditer mes programmes et renseigner la fonction directement dedans. Ça marche très bien, mais ce n'est pas très élégant.
En parcourant les ressources au sujet de la 850p, j'ai vu qu'il avait été possible d'extraire le code des librairies, et le code montre a priori comment faire.
Si je prends l'exemple de la librairie 5200 - Intégration numérique (Méthode de Romberg) - Le code est le suivant :
Code : Tout sélectionner
5 ONERRORGOTO1000
10 DEFCHR$(255)="0000FE0000":MODE8:DIM:PRINTCHR$(15);
30 f$="":c$=CHR$(5):a=0:b=0:e=1e-7:m=8:ANGLE1:ERASEa:DIMa(m)
50 CLS:PRINT"Romberg's method ʃf(x)dx [a,b] 1:f(x),[a,b] 2:ɛ,loop";
60 k=ASC(INPUT$(1,@)):IFk=13ORk=49THEN90:ELSEIFk=50THEN170
80 GOTO60
90 CLS:PRINT"Define function";
100 LOCATE0,1:PRINTc$;"f(x) ?";f$;:LOCATE0,0:LOCATE6,1:INPUT@100;f$:LOCATE0,0:z=VALF(f$)
110 IFLEN(f$)<21THENg$=f$ :ELSEg$=LEFT$(f$,17)+"..."
120 m$="ʃ "+g$+" dx [a,b]":s$="a":z=a:GOSUB800:a=z
130 s$="b":z=b:GOSUB800:b=z:GOTO250
170 m$="Err |An+1-An|<ɛ (ɛ>0)":s$="ɛ":z=e:GOSUB800:e=z:IFe<1e-90 THEN170
200 m$="Max loop 2n
(n>0)":s$="n":z=m:GOSUB800:m=z:IFm=<0ORFRACm<>0THEN200:ELSEERASEa:DIMa(m):GOTO50
250 CLS:PRINTm$;TAB(0);"ʃf(x)dx = .....";
260 h=b-a:x=a:g=VALF(f$):x=b:f=VALF(f$):a(0)=(g+f)*h/2
300 FORi=1 TOm:h=h/2
310 s=0:FORj=1TO2^i-1STEP2:x=a+j*h:s=s+VALF(f$):NEXT
320 a(i)=a(i-1)/2+h*s
330 n=1:FORk=i-1TO0STEP-1
340 a(k)=a(k+1)+(a(k+1)-a(k))/(4^n-1)
350 IFABS(a(k+1)-a(k)) <e AND(i>3ORi=m)THENx=a(k):GOTO500
360 n=n+1:NEXT:NEXT:GOSUB450
390 PRINTc$;"n =";m;TAB(11);":An =";STR$(a(m-1));:LOCATE0,0:LOCATE1,1:z$=INPUT$(1,@):GOTO50
450 LOCATE0,1:PRINTc$;"not found";:z$=INPUT$(1,@):RETURN
500 x=ROUND(x,INTLOG(ABSe)-1):PRINTc$;"ʃf(x)dx =";x;:z$=INPUT$(1,@):GOTO50
800 CLS:PRINTm$;
810 LOCATE0,1:PRINTc$;s$"=";z;"?";:INPUT@10;z:LOCATE0,0:RETURN
1000 IFERR=1 THENCLS:ONERRORGOTO0
1010 IFERL=100 THENIFERR=2 THENRESUME100 :ELSERESUMENEXT
1015 IFERL=810 THENRESUME810
1020 GOSUB450:RESUME50
Je ne suis pas sûr de tout comprendre dans ce code. L'entrée de la fonction se fait-elle uniquement par :
Code : Tout sélectionner
100 LOCATE0,1:PRINTc$;"f(x) ?";f$;:LOCATE0,0:LOCATE6,1:INPUT@100;f$:LOCATE0,0:z=VALF(f$)
Code : Tout sélectionner
'Intégrales - Romberg
1
CLS
CLEAR
SCREEN 12
COLOR 11
DEFDBL A-Z
PRINT
PRINT TAB(20); "Intégrales - Méthode de Romberg"
PRINT
INPUT " a "; a
INPUT " b "; b
n = 500
h = (b - a) / 4 / n
x = a
t = 7 * f(x)
i = 1
10
x = x + h
t = t + 32 * f(x)
x = x + h
t = t + 12 * f(x)
x = x + h
t = t + 32 * f(x)
x = x + h
t = t + 14 * f(x)
IF i = n THEN 20
i = i + 1
GOTO 10
20
t = t - 7 * f(x)
t = 2 * h * t / 45
PRINT " ⌠ "; b
PRINT " │ f(x) dx ="; t
PRINT " ⌡"; a
WINDOW (-30, -12)-(12, 12)
LINE (-10, 0)-(10, 0)
LINE (0, -10)-(0, 10)
FOR i = -10 TO 10 STEP 1
PSET (i, .125)
PSET (.125, i)
NEXT i
FOR x = -10 TO 10 STEP 1 / 256
IF x <= -10 OR f(x) >= 10 OR f(x) <= 10 OR x >= 10 THEN PSET (x, f(x)), 14
LINE -(x, f(x)), 14
NEXT x
FOR x = a TO b STEP 1 / 256
LINE (x, f(x))-(x, 0), 14
NEXT x
LOCATE 28, 1
INPUT " Encore (o/n) "; z$
IF z$ = "o" THEN 1 ELSE CHAIN "menu.bas"
END
FUNCTION f (x)
f = SIN(x)
END FUNCTION
Code : Tout sélectionner
FUNCTION f (x)
f = SIN(x)
END FUNCTION
Pouvez-vous m'aiguiller ?
Merci !
W.