Forum Liberty Basic France
• Index
Pafnouti Lvovitch Tchebychev (16 mai 1821 à Okatovo, près de Borovsk - 8 décembre 1894 à Saint-Pétersbourg)
Ceci est une tentative de transcription en Jb d'un code pour Apple IIc. Qui à l'origine traçait des courbes par aproximations, et qui aprés ma contribution a opté pour l'autodétermination, et la liberté sans entraves.
Un petit mot pour Claude:.. Si tu jette un oeil sur ce sac de noeuds, mets des lunettes en contre-plaqué.
Avec mes excuses à Ferdinand Piette, pour avoir honteusement volé quelques lignes à son "Graphicus" ( y'avait un soucis de division par zéro de la mort ). Mais maintenant, c'est f=sqr(x) qui ne passe plus.
Bref, je n'aurai pas la médaille "Field" cette année.
Code JB :
Edité par Roland Le 21/06/2012 à 18h04
Ceci est une tentative de transcription en Jb d'un code pour Apple IIc. Qui à l'origine traçait des courbes par aproximations, et qui aprés ma contribution a opté pour l'autodétermination, et la liberté sans entraves.

Un petit mot pour Claude:.. Si tu jette un oeil sur ce sac de noeuds, mets des lunettes en contre-plaqué.
Avec mes excuses à Ferdinand Piette, pour avoir honteusement volé quelques lignes à son "Graphicus" ( y'avait un soucis de division par zéro de la mort ). Mais maintenant, c'est f=sqr(x) qui ne passe plus.
Bref, je n'aurai pas la médaille "Field" cette année.

Code JB :
'Entrer Nombre Echantillons, Limite Inférieure et Supérieure-->go 'Si 1°choix 2-->ok: Entrée des points par clavier de gauche-->Enter 'Si 2°choix 1 >-->ok: Entrée de x par textbox de droite-->ok NOMAINWIN WindowWidth = 500 WindowHeight = 610 UpperLeftX = INT(DisplayWidth - WindowWidth) /2 'centrage UpperLeftY = INT(DisplayHeight - WindowHeight) /2 statictext #calc.mess1, "Nombre d'échantillons 3 >..< 50 : - - - - > ", 140, 34, 195, 20 TEXTBOX #calc.rep1, 335, 31, 30, 20 statictext #calc.mess2, "Limite Inférieure de l'Intervalle : - - - - - - > ", 140, 54, 195, 20 TEXTBOX #calc.rep2, 335, 51, 30, 20 statictext #calc.mess3, "Limite supérieure de l'Intervalle : - - go- - > ", 140, 74, 195, 20 TEXTBOX #calc.rep3, 335, 71, 30, 20 button #calc.go, " go ", [go], UL, 375, 73, 30, 20 statictext #calc.st1, "",140,100,220,20 ' "La f(x) d'origine est-elle calculée par prog (1) >" statictext #calc.st2, "",140,120,220,20 '" Entrée Manuellement Point par Point(2) >" TEXTBOX #calc.rep4, 360, 107, 30, 20 button #calc, " ok ", [cont4], UL, 400, 107, 25, 25 TEXTBOX #calc.mess5, 140,140,220,20 'Calcul coeff/Valeur de x pour f(x)/Calcul coeff terminés TEXTBOX #calc.mess6, 140,160,220,20 'Dernier entré/Donnez x TEXTBOX #calc.xx, 370, 160, 50, 20 button #calc, " ok ", [contx], UL, 430, 158 button #calc, " CLS ", [cls], UL, 430, 250 statictext #calc.st3, "",140,190,230,20 ' "Voulez vous f(x) en un point (1)" statictext #calc.st4, "",140,210,230,20 ' "f(x) Approchée (2) Les deux Fonctions (3)" TEXTBOX #calc.repy, 380, 195, 30, 20 button #calc, " ok ", [conty], UL,420, 195 statictext #calc, "Def f(x) origine pour tests avant go ", 320, 5, 180, 20 statictext #calc, "Par déf >", 373, 20, 45, 15 button #calc, " f=x+2*cos(x)", [cosx], UL, 420, 25, 70, 20 button #calc, " f=sin(x) ", [sinx], UL, 450, 65, 40, 20 button #calc, " f=sqr(x) ", [sqrx], UL, 450,85, 40, 20 button #calc, " f=x^2 ", [puisx], UL, 455, 45, 35, 20 button #calc, " f=1/x ", [invx], UL, 450, 105, 40, 20 statictext #calc, " param ! ^", 440, 125, 55, 15 button #calc, " Visu fo ", [vis], UL, 430, 280, 45, 20 statictext #calc.vis, "Par déf >", 420, 310, 60, 20 button #calc.L, " . ", num, UL, 5, 121 button #calc.7, " 7 ", num, UL, 5, 34 'Number Buttons button #calc.8, " 8 ", num, UL, 44, 34 button #calc.9, " 9 ", num, UL, 83, 34 button #calc.4, " 4 ", num, UL, 5, 63 button #calc.5, " 5 ", num, UL, 44, 63 button #calc.6, " 6 ", num, UL, 83, 63 button #calc.1, " 1 ", num, UL, 5, 92 button #calc.2, " 2 ", num, UL, 44, 92 button #calc.3, " 3 ", num, UL, 83, 92 button #calc.0, " 0 ", num, UL, 44, 121 textbox #calc.txt, 5, 150, 110, 20 button #calc.c, " C ", num, UL, 5, 180 button #calc.x, " Enter ", [cont], UL, 35, 180 button #calc.m, " _ ", num, UL, 95, 180 graphicbox #calc.gr, 10, 250, 400, 300 OPEN "Tchebychev" FOR Window as #calc 'GRAPHICS_nsb AS #w #calc "trapclose [quit]" pi=3.141592654: hd=50: flag1=5 'initialise 1 dim b(n): dim t(n,n): dim fo(n): dim fa(hd+1) dim x(hd): dim tt(n): dim xx(hd+1): dim fd(hd+1) print #calc.gr, "down" print #calc.gr, "fill darkgreen" #calc.txt "!font Times_New_Roman 10" global number, sign$, disp$, res$, result 'initialise 2 DIM num$(2) number = 1 'disp$ = "0" disp$ = space$(32-len(disp$)*2)+disp$ 'right justified !? #calc.txt disp$ #calc.gr "setfocus" #calc.gr, "flush;discard" WAIT [go] print #calc.mess5, "" print #calc.st1, "La f(x) d'origine est-elle calculée par prog (1) >" 'r=1 print #calc.st2, " Entrée Manuellement Point par Point(2) >" 'r=2 #calc.rep1, "!contents? var$" n1 = val(var$) 'nombre echantillons n=n1-1 redim b(n): redim t(n,n): redim fo(n): redim fa(hd+1) redim x(hd): redim tt(n): redim xx(hd+1): redim fd(hd+1) #calc.rep2, "!contents? var$" a = val(var$) 'limite inferieure #calc.rep3, "!contents? var$" b = val(var$) 'limite superieure wait [cont4] #calc.rep4, "!contents? var$" r = val(var$) 'choix 1/2 12 lignes plus haut if r=1 then print #calc.mess5, "Calcul des Coeff ( Wait and See...)" for i=0 to n x(i)=cos((2*i+1)/n1*pi/2) x=0.5*(x(i)+1)*(b-a)+a if r=1 then goto [aaa170] ' Par prog if r=2 then goto [aaa200] ' Point par point [aaa170] gosub [aaa3000] fo(i)=f ' f origine----->fo()----->fd() goto [aaa210] [aaa200] print #calc.mess5, "<-<-Valeur de f(x) pour x = " ; x wait [cont] f = val(disp$) 'valeur f(x) en x fo(i)=f print #calc.mess6, "dernier x entré: ";f num$(2)="0":num$(1)="0": disp$= "": #calc.txt disp$ 'raz disp clavier [aaa210] next i k=0 b(k)=0 for i=0 to n t(k,i)=1 b(k)=b(k)+fo(i)*t(k,i) next i '270 b(k)=1/n1*b(k) k=1 b(k)=0 for i=0 to n t(k,i)=x(i) b(k)=b(k)+fo(i)*t(k,i) next i '340 b(k)=b(k)*2/n1 for k=2 to n b(k)=0 for i=0 to n t(k,i)=2*x(i)*t(k-1,i)-t(k-2,i) b(k)=b(k)+fo(i)*t(k,i) next i '400 b(k)=2/n1*b(k) next k '420 PRINT #calc.mess5, "Calcul Coeff Terminé" [aaa440] PRINT #calc.st3, "Voulez vous f(x) en un point (1) - - - - - - - - - - - - >" PRINT #calc.st4, "f(x) Approchée (2) Les deux Fonctions (3) - - - >" wait [conty] #calc.repy, "!contents? var$" r1 = val(var$) '480 if r1=1 then goto [aaa500] if r1=2 then goto [aaa700] if r1=3 then goto [aaa700] [aaa500] print #calc.mess6, "...............Donnez x - - - >- - >- - - >- - - >" wait [contx] #calc.xx, "!contents? var$" x = val(var$) if x< b and x >a then goto [aaa540] ' bon print #calc.mess6, "X hors Intervalle action précédente " ': ";a;" <--> ";b wait goto [aaa500] [aaa540] gosub [aaa2000] print #calc.mess5, "Pour x = ";x;" f(x) approch = ";fp if r=2 then goto [aaa440] gosub [aaa3000] ecar=abs(f-fp) PRINT #calc.mess5, "f(x) origine = ";f;" Ecart = ";ecar goto [aaa440] [aaa700] mi= 1: ma= -1 'code Apple: 1E30: -1E30 h=(b-a)/hd for i=0 to hd x=a+h*i:xx(i)=x gosub [aaa2000] fa(i)=fp if ma< fp then ma=fp if fp< mi then mi=fp if r1 <> 3 or r= 2 then goto [aaa860] gosub [aaa3000] fd(i)=f: x(i)=x if ma< f then ma=f if f< mi then mi=f [aaa860] next i if r1<3 or r=1 then mm=hd: goto [aaa950] for k=0 to n fd(k)=fo(k): f=fo(k): x(k)=0.5*(x(k)+1)*(b-a)+a if ma<f then ma=f if f<mi then mi=f next k mm=n [aaa950] ex=390/(b-a) ey=290/(ma-mi) ''trace fonction approchée 'jaune wx=ex*(xx(o)-a): wy=290-(fa(o)-mi)*ey print #calc.gr, "up" print #calc.gr, "goto ";wx;" "; wy for k=1 to hd sx=ex*(xx(k)-a): sy=290-(fa(k)-mi)*ey print #calc.gr, "color yellow; backcolor darkgreen" print #calc.gr, "down" print #calc.gr, "goto ";sx;" "; sy wx=sx: wy=sy next k if r1=2 then goto [aaa1120] ' fonction approchée ' trace fonction d'origine wx=ex*(x(o)-a): wy=290-(fd(o)-mi)*ey ' f()--->fo()--->fd() print #calc.gr, "up" print #calc.gr, "goto ";wx;" ";wy for k=1 to mm sx=ex*(x(k)-a): sy=290-(fd(k)-mi)*ey print #calc.gr, "color red; backcolor darkgreen" print #calc.gr, "down" print #calc.gr, "goto ";sx;" ";sy wx=sx: wy=sy next k [aaa1120] ' Axes print #calc.gr, "color cyan; backcolor darkgreen" print #calc.gr, "up" print #calc.gr, "goto 200, 10" print #calc.gr, "down" print #calc.gr, "goto 200 290" print #calc.gr, "up" print #calc.gr, "goto 10, 150" print #calc.gr, "down" print #calc.gr, "goto 390, 150" for gg= 10 to 390 step 20 'graduation X(pour le fun) print #calc.gr, "up" print #calc.gr, "goto ";gg;" ";"150" print #calc.gr, "down" print #calc.gr, "goto ";gg;" ";"145" next gg for gg= 10 to 290 step 20 'graduation Y print #calc.gr, "up" print #calc.gr, "goto ";"200";" ";gg print #calc.gr, "down" print #calc.gr, "goto ";"205";" ";gg next gg print #calc.gr, "flush" #calc.gr, "flush;discard" 'if a*b >0 then goto [aaa1160] 'a voir+++++++++??? ' wx= a*ex ' print #calc.gr, "up" ' print #calc.gr, "goto ";wx;" ";"159" ' print #calc.gr, "down" ' print #calc.gr, "goto ";wx;" ";"0" [aaa1160] ' maximum; ma :minimum; mi ' print; a : print; b ' end wait [aaa2000] ' Calcul x1=2*(x-a)/(b-a)-1 fp=b(0) tt(0)=1 ' Polyn Tcheby tt(1)=x1 fp=fp+b(1)*tt(1) for k=2 to n tt(k)=2*x1*tt(k-1)-tt(k-2) fp=fp+b(k)*tt(k) next k return [aaa3000] ' f() Origine Tests if flag1=1 then f=1/x if flag1=2 then f=sin(x) if flag1=3 then f=sqr(x) if flag1=4 then f=x*x if flag1=5 then f=x+2*cos(x) return [cls] #calc.gr "cls" print #calc.gr, "fill darkgreen" #calc.gr, "flush;discard" wait [invx] ' Choix f() Tests flag1=1 wait [sinx] flag1=2 wait [sqrx] flag1=3 wait [puisx] flag1=4 wait [cosx] flag1=5 WAIT [vis] Xmin = -10 Xmax = 10 Xpas = 1 Ymin = -10 Ymax = 10 Ypas = 1 p = (300 * 6 / 7)/(Xmax - Xmin) '300=WindowHeight gr q = (300 * 6 / 7)/(Ymax - Ymin) s = abs(Xmin*p) o = (300 * 6 / 7) - abs(Ymin*q) for m = 0 to (300 * 6 / 7) ' for m=0 300=WindowHeight gr x = (Xmin + m / p)-5.5 'pyf=1/x if flag1=1 then f=1/x: print #calc.vis, "f=1/x" end if if flag1=2 then f=sin(x): print #calc.vis, "f=sin(x)" end if 'if flag1=3 then f=sqr(x) if flag1=3 then print #calc.vis, "Soucis !" if flag1=4 then f=x*x: print #calc.vis, "f=x*x" end if if flag1=5 then f=x+2*cos(x): print #calc.vis, "f=x+2*cos(x)" end if pyf=f-1.7 y = ((Ymax - pyf) * q) if pyf< Ymax and pyf > Ymin then print #calc.gr, "COLOR yellow;up; goto ";m;" ";y;";down; goto ";x1;" ";y1;";up;flush" end if x1 = m y1 = y next m #calc.gr, "flush;discard" goto [aaa1120] wait sub num handle$ ' Clavier entrée points f(x) n$ = right$(handle$,1) select case case instr("0123456789",n$)>0 'numbers num$(number) = num$(number) + n$ if result then num$(number) = n$ disp$ = num$(number) ' res$ = disp$ result = 0 case n$ = "m" sign$ = "-" num$(number)="-" + num$(number) disp$= "-" + disp$ result = 0 case n$ = "c" 'reset disp$ = "0" sign$ = "" redim num$(2) number = 1 case n$ = "L" 'decimal if len(num$(number)) = 0 then num$(number) = "0." if instr(num$(number),".") = 0 then num$(number) = num$(number) + "." disp$ = num$(number) result = 0 end select if instr(disp$,".")=0 then 'to erase first "0" if (val(disp$)<>0 and left$(disp$,1)="0") then disp$ = str$(val(disp$)) end if disp$ = space$(32-len(disp$)*2)+disp$ 'right justified !? ( with font Times_New_Roman 10 ) #calc.txt disp$ #calc.gr "setfocus" end sub [quit] close #calc end WAIT
Edité par Roland Le 21/06/2012 à 18h04
____________________
Roro
Roro
Libertynaute Inactif
Groupe: Visiteur
Salut Roland,
Je n'ai pas bien vu le but de ce programme, puisque je n'ai pas pu le faire fonctionner.
L'erreur "division par zéro" semble survenir *après* avoir rempli le dernier textbox, peut-être son contenu n'est-il pas bien reconnu ?
Pure supposisition.
Claude
Je n'ai pas bien vu le but de ce programme, puisque je n'ai pas pu le faire fonctionner.
L'erreur "division par zéro" semble survenir *après* avoir rempli le dernier textbox, peut-être son contenu n'est-il pas bien reconnu ?
Pure supposisition.
Claude
Il est vrai que le fonctionnement est un peu complexe, j'aime bien les fenetres avec plein de boutons et de trucs à cliquer.( j'en connais un... que si il tombe dessus... il va te virer tout ça en moins de deux...
)
Bon, je viens de vérifier, ça marche. Entre 5 dans nombre d'échantillons (comme il faut les enter à la main un par un ), mets 1 en limite inférieure, et 10 en limite supérieure, clique sur "go"
choisis 2 (entrée point par point) que tu mets dans le textbox à droite des choix clique sur "ok"
A chaque x que le prog affiche donne pour f le carré exact (avec le clavier de gauche et "enter")(tu doit bien avoir une calculette dans un tiroir, c'est le moment de la faire chauffer)
Quand les cinq valeurs sont entrées , choisis 1 et "ok"( valeur en un point textbox à droite en face des choix)
entre un nombre dans le textbox indiqué par la fleche et "ok". Le prog te donne bien le carré du nombre que tu a entré, avec une approximation qui dépend du nombre de décimales que tu a donné lors de l'entrée des points.
Pour les courbes: Le prog d'origine mets une fonction en ligne 3000 ( je ne comprend pas trop le but, mais je l'ai mis, et comme je voulais comparer la tronche des courbes, j'ai piqué à "graphicus" qui est en [vis] (bouton "visu" ) de quoi afficher les fonctions.
Il ne restait plus assez de patience pour traiter les problèmes div par 0 et autres ( pour le débutant que je suis, c'est déjà pas si mal...si je peux me permettre cette auto-congratulation..
°
Le truc qui m'a vraiment troublé, c'est le: ma=1E30:mi=-1E30
qui était dans le code "apple" au début du traçage [700]..que j'ai mis en commentaire.... mystère que je ne suis pas parvenu à élucider........
Quand à dire à quoi sert ce prog...Je le déconseille pour les travaux de génie civil.
Edité par Roland Le 24/06/2012 à 01h09

Bon, je viens de vérifier, ça marche. Entre 5 dans nombre d'échantillons (comme il faut les enter à la main un par un ), mets 1 en limite inférieure, et 10 en limite supérieure, clique sur "go"
choisis 2 (entrée point par point) que tu mets dans le textbox à droite des choix clique sur "ok"
A chaque x que le prog affiche donne pour f le carré exact (avec le clavier de gauche et "enter")(tu doit bien avoir une calculette dans un tiroir, c'est le moment de la faire chauffer)
Quand les cinq valeurs sont entrées , choisis 1 et "ok"( valeur en un point textbox à droite en face des choix)
entre un nombre dans le textbox indiqué par la fleche et "ok". Le prog te donne bien le carré du nombre que tu a entré, avec une approximation qui dépend du nombre de décimales que tu a donné lors de l'entrée des points.
Pour les courbes: Le prog d'origine mets une fonction en ligne 3000 ( je ne comprend pas trop le but, mais je l'ai mis, et comme je voulais comparer la tronche des courbes, j'ai piqué à "graphicus" qui est en [vis] (bouton "visu" ) de quoi afficher les fonctions.
Il ne restait plus assez de patience pour traiter les problèmes div par 0 et autres ( pour le débutant que je suis, c'est déjà pas si mal...si je peux me permettre cette auto-congratulation..

Le truc qui m'a vraiment troublé, c'est le: ma=1E30:mi=-1E30

Quand à dire à quoi sert ce prog...Je le déconseille pour les travaux de génie civil.

Edité par Roland Le 24/06/2012 à 01h09
____________________
Roro
Roro
• Index
1 Utilisateur en ligne : 0 Administrateur, 0 Modérateur, 0 Membre et 1 Visiteur
Utilisateur en ligne : Aucun membre connecté
Utilisateur en ligne : Aucun membre connecté
Répondre
Vous n'êtes pas autorisé à écrire dans cette catégorie