Novembre 2024 | Lun | Mar | Mer | Jeu | Ven | Sam | Dim |
---|
| | | | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | | Calendrier |
|
|
| COMPILATEUR version beta 18 du 09/05/2020 | |
| | Auteur | Message |
---|
Jack Admin
Nombre de messages : 2394 Date d'inscription : 28/05/2007
| Sujet: COMPILATEUR version beta 18 du 09/05/2020 Ven 8 Mai 2020 - 17:24 | |
| Une nouvelle version du compilateur est disponible: version beta 17 du 8 mai 2020
C'est encore une version Béta, donc sujette à des bugs.
La modification par rapport à la version précédente porte sur la correction de quelques bugs: - les commandes GRID_COLUMN_FIXED et GRID_ROW_FIXED n'acceptaient pas la valeur 0 pour ligne ou colonne - les commandes midi suivantes n'étaient pas activées : MIDI_ON, MIDI_OFF, MIDI_PLAY, MIDI_VOLUME, MIDI_INSTRUMENT _________________ username : panoramic@jack-panoramic password : panoramic123
Dernière édition par Jack le Sam 9 Mai 2020 - 16:23, édité 1 fois | |
| | | Marc
Nombre de messages : 2466 Age : 63 Localisation : TOURS (37) Date d'inscription : 17/03/2014
| Sujet: Re: COMPILATEUR version beta 18 du 09/05/2020 Ven 8 Mai 2020 - 17:27 | |
| Merci Jack ! | |
| | | Pedro
Nombre de messages : 1594 Date d'inscription : 19/01/2014
| Sujet: COMPILATEUR version beta 17. Ven 8 Mai 2020 - 17:48 | |
| Bonjour.
Cette nouvelle version du compilateur corrige certes certains bugs, mais en ajoute d'autres !!
Il semble que les button_picture n'apparaissent plus, alors que tout fonctionnait parfaitement avant.
Pour ma part, je retourne à l'ancienne version du compilateur. | |
| | | papydall
Nombre de messages : 7017 Age : 74 Localisation : Moknine (Tunisie) Entre la chaise et le clavier Date d'inscription : 03/03/2012
| Sujet: Re: COMPILATEUR version beta 18 du 09/05/2020 Ven 8 Mai 2020 - 19:01 | |
| Salut tout le monde. Merci Jack pour les efforts que tu fais pour nous offrir gratuitement Panoramic et dérivés. Je viens de télécharger la nouvelle version V09Beta17. Mais, désolé de te l’annoncer, ça plante et je n’arrive pas à comprendre pourquoi. Le code suivant fonctionne parfaitement avec les versions précédentes (Beta 11, Beta 12, et Beta 14) sauf pour Beta 16 et aussi pour cette version toute fraiche. V09Beta11 : Compilation et exécution : ok V09Beta12 : Compilation et exécution : ok V09Beta14 : Compilation et exécution : ok V09Beta16 et V09Beta17 : compilation : Ok ; Exécution : plantage au niveau SUB Demo_7() , lignes 132 à 143 - Code:
-
rem ============================================================================ rem Tracé d’arc de cercle par l’algorithme de Bresenham rem Par Papydall rem ============================================================================ dim xc,yc,where_x,where_y,p Init() Demo() end rem ============================================================================ SUB Init() width 0,800 : height 0, 600 top 0,(screen_y - height(0))/2 : left 0,(screen_x - width(0))/2 color 0,0,0,255 : 2d_pen_color 255,0,0 : font_color 0,255,255,255 : font_bold 0 xc = width(0)/2 : yc = height(0)/2 : p = 3000 END_SUB rem ============================================================================ SUB Demo() Les_8_Octants() : pause p : cls Demo_1() : pause p : cls Demo_2() : pause p : cls Demo_3() : pause p : cls Demo_4() : pause p : cls Demo_5() : pause p : cls Demo_6() : pause p : cls Demo_7() : pause p : cls Alphabet() : pause p : cls Bonhommes() : pause p : cls Texte(50,50,20) Bonhomme(100,400,10) : Bonhomme(250,400,8) : Bonhomme(350,400,5) Bonhomme(400,400,3) : Bonhomme(430,400,2) : Bonhomme(450,400,1) END_SUB rem ============================================================================
' Tracer un arc de cercle : un huitième de cercle ' x_centre,y_centre : coordonnées du centre du cercle ' rayon : rayon du cercle ' octant : numéro de l'octant de 1 à 8 dans le sens trigonométrique ' octant = 1 : angle compris entre 0 et pi/4 rad soit entre 0° et 45° ' octant = 2 : angle compris entre pi/4 et pi/2 rad soit entre 45° et 90° ' octant = 3 : angle compris entre pi/2 et 3*pi/4 rad soit entre 90° et 135° ' octant = 4 : angle compris entre 3*pi/4 et pi rad soit entre 135° et 180° ' octant = 5 : angle compris entre pi et 5*pi/4 rad soit entre 180° et 225° ' octant = 6 : angle compris entre 5*pi/4 et 3*pi/2 rad soit entre 225° et 270° ' octant = 7 : angle compris entre 3*pi/2 et 7*pi/4 rad soit entre 270° et 315° ' octant = 8 : angle compris entre 7*pi/4 et 2*pi rad soit entre 315° et 360°
SUB Tracer_Octant(x_centre,y_centre,rayon,octant) dim_local x, y, m, xp, yp x = 0 : y = rayon : m = 5 - 4*rayon while x <= y select octant case 1 : xp = x_centre + y : yp = y_centre - x case 2 : xp = x_centre + x : yp = y_centre - y case 3 : xp = x_centre - x : yp = y_centre - y case 4 : xp = x_centre - y : yp = y_centre - x case 5 : xp = x_centre - y : yp = y_centre + x case 6 : xp = x_centre - x : yp = y_centre + y case 7 : xp = x_centre + x : yp = y_centre + y case 8 : xp = x_centre + y : yp = y_centre + x end_select 2d_point xp,yp if m > 0 then y = y - 1 : m = m - 8 * y x = x + 1 : m = m + 8 * x + 4 end_while where_x = xp : where_y = yp END_SUB rem ============================================================================ SUB Les_8_Octants() caption 0,"Les 8 octants d'un cercle" dim_local i,j print_locate xc-100,50 : print "Les 8 octants d'un cercle" Cercle(xc,yc,100) : j = 9 for i = 0 to 2*pi step pi/4 : 2d_line xc,yc,xc+100*cos(i),yc+100*sin(i) : next i for i = pi/8 to 2*pi step pi/4 j = j-1 : print_locate xc+120*cos(i),yc+120*sin(i) : print j next i END_SUB rem ============================================================================ SUB Demo_1() dim_local i,j caption 0,"Tracé d'un carreau par les octants" for j = 1 to height(0) step 150 for i = 1 to width(0) step 100 : carreau(50+i,50+j,50,1,255,255,0) : next i next j END_SUB rem ---------------------------------------------------------------------------- SUB Demo_2() Carreau(xc,yc,yc-100,1,255,0,0) Carreau(100,100,100,1,255,255,0) Carreau(500,100,50,1,255,255,0) Carreau(200,300,20,1,255,255,0) END_SUB rem ---------------------------------------------------------------------------- SUB Demo_3() dim_local i,j for i = 10 to 150 step 4 : Carreau(xc,yc,i,1,255,255,0) : next i Cercle(xc,yc-150,25) : cercle(xc,yc+150,25) : ' tracer cercle par 8 octants 2d_circle xc-200,yc,50 : 2d_circle xc+200,yc,50 : ' tracer cercle par 2d_circle END_SUB rem ---------------------------------------------------------------------------- SUB Demo_4() dim_local r r = 30 caption 0,"Tracé de carreau / Trèfle / Coeur / Pique" Carreau(4*r,yc,3*r,1,255,255,0) Trefle(10*r,yc,r,1,255,255,0) Coeur(15*r,yc,r,1,255,255,0) Pique(20*r,yc,r,1,255,255,0) END_SUB rem ---------------------------------------------------------------------------- SUB Demo_5() dim_local x,y,r r = 25 caption 0,"Tracé d'une frise par les octants" for x = 100 to 2*xc-4*r step 4*r for y = 2*r to 2*yc step 4*r+10 : Frise_1(x,y,r,1,255,0,0) : next y next x for x = 100 to 2*xc-8*r step 4*r for y = 2*r to 2*yc step 4*r+10 : 2d_flood x+2*r,y,255,255,0 : next y next x END_SUB rem ============================================================================ SUB Demo_6() dim_local x,y,r r = 20 for x = 0 to 2*xc step 2*r for y = 0 to 2*yc step 2*r : Frise_2(x,y,r) : next y next x END_SUB rem ============================================================================ SUB Demo_7() dim_local x,y,r,r1 r = 30 caption 0,"Tracé d'une balle par les octants" for x = r to 2*xc step 2*r r1 = 1-r1 for y = r to 2*yc step 2*r : Balle(x,y,r+r1) : next y next x pause p : cls for r = 20 to yc-50 step 5 : cls : Balle(xc,yc,r) : pause 50 : next r
END_SUB rem ============================================================================ ' Tracé d'un cercle par octant ' Pour obtenir un cercle complet, on trace les 8 octants SUB Cercle(x,y,r) dim_local i for i = 1 to 8 : Tracer_Octant(x,y,r,i) : next i END_SUB rem ============================================================================ ' Tracé d'un carreau par combinaison d'octants ' Chaque branche est constituée par 2 octants (soit un quart de cercle) ' x,y : coordonnées du centre du carreau ' r : rayon ' p : si p > 0 , le carreau est rempli de la couleur cr,cg,cb SUB Carreau(x,y,r,p,cr,cg,cb) dim_local i for i = 7 to 8 : Tracer_Octant(x-r,y-r,r,i) : next i for i = 5 to 6 : Tracer_Octant(x+r,y-r,r,i) : next i for i = 1 to 2 : Tracer_Octant(x-r,y+r,r,i) : next i for i = 3 to 4 : Tracer_Octant(x+r,y+r,r,i) : next i if p > 0 then 2d_flood x,y,cr,cg,cb END_SUB rem ============================================================================ SUB Trefle(x,y,r,p,cr,cg,cb) dim_local i,r1,x1,y1 : r1 = sqr(2) for i = 1 to 5 : Tracer_Octant(x,y-r1*r,r,i) : next i for i = 2 to 7 : Tracer_Octant(x-r1*r,y,r,i) : next i for i = 1 to 3 : Tracer_Octant(x+r1*r,y,r,i) : next i for i = 6 to 8 : Tracer_Octant(x+r1*r,y,r,i) : next i Tracer_Octant(x,y-r1*r,r,8) Tracer_Octant(x-r1*r,y+r1*r,r,1) Tracer_Octant(x+r1*r,y+r1*r,r,4) Tracer_Octant(x-r1*r,y+r1*r,r,8) : x1 = where_x : y1 = where_y Tracer_Octant(x+r1*r,y+r1*r,r,5) : 2d_line where_x,where_y,x1,y1 if p > 0 then 2d_flood x,y,cr,cg,cb END_SUB rem ============================================================================ SUB Coeur(x,y,r,p,cr,cg,cb) dim_local i for i = 1 to 6 : Tracer_Octant(x-r,y,r,i) : next i for i = 1 to 4 : Tracer_Octant(x+r,y,r,i) : next i for i = 7 to 8 : Tracer_Octant(x+r,y,r,i) : next i for i = 3 to 4 : Tracer_Octant(x+r,y+2*r,r,i) : next i for i = 1 to 2 : Tracer_Octant(x-r,y+2*r,r,i) : next i if p > 0 then 2d_flood x,y+2,cr,cg,cb END_SUB rem ============================================================================ SUB Pique(x,y,r,p,cr,cg,cb) dim_local i for i = 3 to 6 : Tracer_Octant(x-r,y,r,i) : next i for i = 1 to 2 : Tracer_Octant(x+r,y,r,i) : next i for i = 7 to 8 Tracer_Octant(x+r,y,r,i) : Tracer_Octant(x-r,y+r,r,i) Tracer_Octant(x-r,y-2*r,r,i) next i for i = 5 to 6 Tracer_Octant(x+r,y-2*r,r,i) : Tracer_Octant(x+r,y+r,r,i) next i
2d_line x-r,y+r,x+r,y+r : 2d_line x-r,y+2*r,x+r,y+2*r if p > 0 then 2d_flood x,y,cr,cg,cb: 2d_flood x,y+2*r-2,cr,cg,cb END_SUB rem ============================================================================ SUB Frise_1(x,y,r,p,cr,cg,cb) dim_local i 2d_pen_color 0,0,254 for i = 1 to 4 : Tracer_Octant(x,y,r,i) : next i for i = 7 to 8 : Tracer_Octant(x,y,r,i) : next i for i = 3 to 8 : Tracer_Octant(x,y+2*r,r,i) : next i for i = 1 to 6 : Tracer_Octant(x+2*r,y,r,i) : next i for i = 1 to 2 : Tracer_Octant(x+2*r,y+2*r,r,i) : next i for i = 5 to 8 : Tracer_Octant(x+2*r,y+2*r,r,i) : next i if p > 0 then 2d_flood x,y+2*r,cr,cg,cb END_SUB rem ============================================================================ SUB Frise_2(x,y,r) dim_local i 2d_pen_color 255,0,0 for i = 3 to 4 : Tracer_Octant(x,y,r,i) : next i for i = 1 to 2 : Tracer_Octant(x+r,y,r,i) : next i 2d_line x,y-r,x+r,y-r for i = 5 to 6 : Tracer_Octant(x,y+r,r,i) : next i for i = 7 to 8 : Tracer_Octant(x+r,y+r,r,i) : next i 2d_line x,y+2*r,x+r,y+2*r : 2d_line x-r,y,x-r,y+r : 2d_line x+2*r,y,x+2*r,y+r END_SUB rem ============================================================================ SUB Balle(x,y,r) dim_local i,r1 r1 = int(r/2) for i = 1 to 8 : Tracer_Octant(x,y,r,i) : next i for i = 1 to 2 : Tracer_Octant(x,y-r1,r1,i) : next i for i = 7 to 8 : Tracer_Octant(x,y-r1,r1,i) : next i for i = 3 to 6 : Tracer_Octant(x,y+r1,r1,i) : next i for i = 1 to 4 : Tracer_Octant(x-r1,y,r1,i) : next i for i = 5 to 8 : Tracer_Octant(x+r1,y,r1,i) : next i if odd(r) = 1 2d_flood x,y-r1,255,255,000 : 2d_flood x,y+r1,255,255,000 2d_flood x-r1,y,255,000,000 : 2d_flood x+r1,y,255,000,000 else 2d_flood x,y-r1,255,000,000 : 2d_flood x,y+r1,255,000,000 2d_flood x-r1,y,255,255,000 : 2d_flood x+r1,y,255,255,000 end_if END_SUB rem ============================================================================ SUB Alphabet() caption 0,"Création des lettres de l'alphabet par les octants" A(050,100,20) : B(100,100,20) : C(150,100,20) : D(200,100,20) : E(250,100,20) F(300,100,20) : G(350,100,20) : H(400,100,20) : I(450,100,20) : J(500,100,20) K(550,100,20) : L(600,100,20) : M(650,100,20) : N(050,200,20) : O(100,200,20) P(150,200,20) : Q(200,200,20) : R(250,200,20) : S(300,200,20) : T(350,200,20) U(400,200,20) : V(450,200,20) : W(500,200,20) : X(550,200,20) : Y(600,200,20) Z(650,200,20) END_SUB rem ============================================================================ SUB A(x,y,r) dim_local i for i = 1 to 4 : Tracer_Octant(x+r,y+r,r,i) : next i 2d_line x,y+r,x,y+4*r : 2d_line x+2*r,y+r,x+2*r,y+4*r : 2d_line x,y+2*r,x+2*r,y+2*r END_SUB rem ============================================================================ SUB B(x,y,r) dim_local i 2d_poly_from x+r,y : 2d_poly_to x,y : 2d_poly_to x,y+4*r 2d_poly_to x+r,y+4*r : 2d_line x,y+2*r,x+r,y+2*r for i = 1 to 2 : Tracer_Octant(x+r,y+r,r,i) : Tracer_Octant(x+r,y+3*r,r,i) : next i for i = 7 to 8 : Tracer_Octant(x+r,y+r,r,i) : Tracer_Octant(x+r,y+3*r,r,i) : next i END_SUB rem ============================================================================ SUB C(x,y,r) dim_local i for i = 1 to 4 : Tracer_Octant(x+r,y+r,r,i) : next i for i = 5 to 8 : Tracer_Octant(x+r,y+3*r,r,i) : next i 2d_line x,y+r,x,y+3*r END_SUB rem ============================================================================ SUB D(x,y,r) dim_local i 2d_poly_from x+r,y : 2d_poly_to x,y : 2d_poly_to x,y+4*r :2d_poly_to x+r,y+4*r for i = 1 to 2 : Tracer_Octant(x+r,y+r,r,i) : next i for i = 7 to 8 : Tracer_Octant(x+r,y+3*r,r,i) : next i 2d_line x+2*r,y+r,x+2*r,y+3*r END_SUB rem ============================================================================ SUB E(x,y,r) dim_local i 2d_poly_from x+2*r,y : 2d_poly_to x,y : 2d_poly_to x,y+4*r 2d_poly_to x+2*r,y+4*r : 2d_line x,y+2*r,x+r,y+2*r END_SUB rem ============================================================================ SUB F(x,y,r) dim_local i 2d_poly_from x+2*r,y : 2d_poly_to x,y : 2d_poly_to x,y+4*r 2d_line x,y+2*r,x+r,y+2*r END_SUB rem ============================================================================ SUB G(x,y,r) dim_local i for i = 1 to 4 : Tracer_Octant(x+r,y+r,r,i) : next i for i = 5 to 8 : Tracer_Octant(x+r,y+3*r,r,i) : next i 2d_line x,y+r,x,y+3*r : 2d_line x+r,y+2*r,x+2*r,y+2*r : 2d_poly_to x+2*r,y+3*r END_SUB rem ============================================================================ SUB H(x,y,r) 2d_line x,y,x,y+4*r : 2d_line x+2*r,y,x+2*r,y+4*r : 2d_line x,y+2*r,x+2*r,y+2*r END_SUB rem ============================================================================ SUB I(x,y,r) 2d_line x,y,x+2*r,y : 2d_line x,y+4*r,x+2*r,y+4*r: 2d_line x+r,y,x+r,y+4*r END_SUB rem ============================================================================ SUB J(x,y,r) dim_local i 2d_line x,y,x+2*r,y :2d_poly_to x+2*r,y+3*r for i= 5 to 8 : Tracer_Octant(x+r,y+3*r,r,i) : next i END_SUB rem ============================================================================ SUB K(x,y,r) dim_local i 2d_line x,y,x,y+4*r for i = 3 to 4 : Tracer_Octant(x+2*r,y+r,r,i) : next i for i = 7 to 8 : Tracer_Octant(x,y+r,r,i) : next i for i = 1 to 2 : Tracer_Octant(x,y+3*r,r,i) : next i for i = 5 to 6 : Tracer_Octant(x+2*r,y+3*r,r,i) : next i END_SUB rem ============================================================================ SUB L(x,y,r) 2d_poly_from x,y : 2d_poly_to x,y+4*r : 2d_poly_to x+2*r,y+4*r END_SUB rem ============================================================================ SUB M(x,y,r) dim_local i for i = 5 to 8 : Tracer_Octant(x+r,y,r,i) : next i 2d_line x,y,x,y+4*r : 2d_line x+2*r,y,x+2*r,y+4*r END_SUB rem ============================================================================ SUB N(x,y,r) dim_local i 2d_line x,y,x,y+4*r : 2d_line x+2*r,y,x+2*r,y+4*r for i = 1 to 2 : Tracer_Octant(x,y+r,r,i) : next i for i = 5 to 6 : Tracer_Octant(x+2*r,y+r,r,i) : next i END_SUB rem ============================================================================ SUB O(x,y,r) dim_local i for i = 1 to 4 : Tracer_Octant(x+r,y+r,r,i) : next i for i = 5 to 8 : Tracer_Octant(x+r,y+3*r,r,i) : next i 2d_line x,y+r,x,y+3*r : 2d_line x+2*r,y+r,x+2*r,y+3*r END_SUB rem ============================================================================ SUB P(x,y,r) dim_local i for i = 1 to 2 : Tracer_Octant(x+r,y+r,r,i) : next i for i = 7 to 8 : Tracer_Octant(x+r,y+r,r,i) : next i 2d_poly_from x+r,y : 2d_poly_to x,y 2d_poly_to x,y+4*r : 2d_line x,y+2*r,x+r,y+2*r END_SUB rem ============================================================================ SUB Q(x,y,r) dim_local i for i = 1 to 4 : Tracer_Octant(x+r,y+r,r,i) : next i for i = 5 to 8 : Tracer_Octant(x+r,y+3*r,r,i) : next i 2d_line x,y+r,x,y+3*r : 2d_line x+2*r,y+r,x+2*r,y+3*r for i = 5 to 6 : Tracer_Octant(x+2*r,y+3*r,r,i) : next i END_SUB rem ============================================================================ SUB R(x,y,r) dim_local i 2d_poly_from x+r,y : 2d_poly_to x,y : 2d_poly_to x,y+4*r : 2d_line x,y+2*r,x+r,y+2*r for i = 1 to 2 : Tracer_Octant(x+r,y+r,r,i) : Tracer_Octant(x+r,y+3*r,r,i) : next i for i = 7 to 8 : Tracer_Octant(x+r,y+r,r,i) : next i 2d_line x+2*r,y+3*r,x+2*r,y+4*r END_SUB rem ============================================================================ SUB S(x,y,r) dim_local i for i = 1 to 6 : Tracer_Octant(x+r,y+r,r,i) : next i for i = 1 to 2 : Tracer_Octant(x+r,y+3*r,r,i) : next i for i = 5 to 8 : Tracer_Octant(x+r,y+3*r,r,i) : next i END_SUB rem ============================================================================ SUB T(x,y,r) 2d_line x,y,x+2*r,y : 2d_line x+r,y,x+r,y+4*r END_SUB rem ============================================================================ SUB U(x,y,r) dim_local i for i = 5 to 8 : Tracer_Octant(x+r,y+3*r,r,i) : next i 2d_line x,y,x,y+3*r : 2d_line x+2*r,y,x+2*r,y+3*r END_SUB rem ============================================================================ SUB V(x,y,r) dim_local i 2d_line x,y,x,y+3*r : 2d_line x+2*r,y,x+2*r,y+3*r for i = 1 to 2 : Tracer_Octant(x,y+4*r,r,i) : next i for i = 3 to 4 : Tracer_Octant(x+2*r,y+4*r,r,i) : next i END_SUB rem ============================================================================ SUB W(x,y,r) dim_local i 2d_line x,y,x,y+4*r : 2d_line x+2*r,y,x+2*r,y+4*r for i = 7 to 8 : Tracer_Octant(x,y+3*r,r,i) : next i for i = 5 to 6 : Tracer_Octant(x+2*r,y+3*r,r,i) : next i END_SUB rem ============================================================================ SUB X(x,y,r) dim_local i 2d_line x,y,x,y+r : 2d_line x+2*r,y,x+2*r,y+r 2d_line x,y+3*r,x,y+4*r : 2d_line x+2*r,y+3*r,x+2*r,y+4*r for i = 5 to 8 : Tracer_Octant(x+r,y+r,r,i) : next i for i = 1 to 4 : Tracer_Octant(x+r,y+3*r,r,i) : next i END_SUB rem ============================================================================ SUB Y(x,y,r) dim_local i 2d_line x,y,x,y+r : 2d_line x+2*r,y,x+2*r,y+3*r for i = 5 to 8 : Tracer_Octant(x+r,y+r,r,i) : Tracer_Octant(x+r,y+3*r,r,i) : next i END_SUB rem ============================================================================ SUB Z(x,y,r) dim_local i 2d_line x,y,x+2*r,y : 2d_poly_to x+2*r,y+r 2d_line x,y+3*r,x,y+4*r : 2d_poly_to x+2*r,y+4*r for i = 7 to 8 : Tracer_Octant(x+r,y+r,r,i) : next i for i = 3 to 4 : Tracer_Octant(x+r,y+3*r,r,i) : next i END_SUB rem ============================================================================ SUB Bonhommes() caption 0,"Création de bonhommes par les octants" Bonhomme(100,50,30) : Bonhomme(300,50,20) : Bonhomme(450,50,15) Bonhomme(550,50,10) : Bonhomme(620,50,05) : Bonhomme(660,50,02) Bonhomme(680,50,01) END_SUB rem ============================================================================ SUB Bonhomme(x,y,r) dim_local i for i = 1 to 4 : Tracer_Octant(x,y,r,i) : next i for i = 7 to 8 : Tracer_Octant(x-2*r,y,r,i) : next i for i = 5 to 6 : Tracer_Octant(x+2*r,y,r,i) : next i 2d_line x-2*r,y+r,x+2*r,y+r 2d_line x-r,y+r,x-r,y+2*r : 2d_line x+r,y+r,x+r,y+2*r for i = 5 to 8 : Tracer_Octant(x,y+2*r,r,i) : next i 2d_line x-2*r,y+3*r,x+2*r,y+3*r for i = 3 to 4 : Tracer_Octant(x-2*r,y+4*r,r,i) : next i for i = 1 to 2 : Tracer_Octant(x+2*r,y+4*r,r,i) : next i 2d_line x-3*r,y+4*r,x-3*r,y+10*r : 2d_poly_to x-2*r,y+10*r 2d_line x+3*r,y+4*r,x+3*r,y+10*r : 2d_poly_to x+2*r,y+10*r for i = 5 to 6 : Tracer_Octant(x-2*r,y+10*r,r,i) : next i for i = 7 to 8 : Tracer_Octant(x+2*r,y+10*r,r,i) : next i 2d_line x-2*r,y+6*r,x-2*r,y+15*r : 2d_line x+2*r,y+6*r,x+2*r,y+15*r 2d_line x-2*r,y+9*r,x+2*r,y+9*r 2d_line x,y+9*r,x,y+15*r 2d_line x-2*r,y+15*r,x+2*r,y+15*r for i = 5 to 8 : Tracer_Octant(x-r,y+15*r,r,i) : Tracer_Octant(x+r,y+15*r,r,i) : next i END_SUB rem ============================================================================ SUB Texte(x,y,r) dim_local s,x1, y1 ,y2 caption 0,"Un texte écrit par un alphabet crée par les octants" s = 3*r : y1 = y + 4*r+10 : y2 = y+10*r : x1 = x+6*r P(x,y,r) : A(x+s,y,r) : N(x+2*s,y,r) : O(x+3*s,y,r) : R(x+4*s,y,r) A(x+5*s,y,r) : M(x+6*s,y,r) : I(x+7*s,y,r) : C(x+8*s,y,r) E(x1,y1,r) : C(x1+s,y1,r) : R(x1+2*s,y1,r) : I(x1+3*s,y1,r) : T(x1+4*s,y1,r) P(x,y2,r) : A(x+s,y2,r) : R(x+2*s,y2,r) O(x+4*s,y2,r) : C(x+5*s,y2,r) : T(x+6*s,y2,r) : A(x+7*s,y2,r) N(x+8*s,y2,r) : T(x+9*s,y2,r) : S(x+10*s,y2,r) 2d_pen_color 0,255,0 A(600,500,5) : U(615,500,5) R(640,500,5) : E(655,500,5) : V(670,500,5) O(685,500,5) : I(700,500,5) : R(715,500,5) END_SUB rem ==========================================================
REM : Ce code fonctionne parfaitement avec l'interpréteur. | |
| | | papydall
Nombre de messages : 7017 Age : 74 Localisation : Moknine (Tunisie) Entre la chaise et le clavier Date d'inscription : 03/03/2012
| Sujet: Re: COMPILATEUR version beta 18 du 09/05/2020 Sam 9 Mai 2020 - 5:35 | |
| Bonjour tout le monde. @Jack J’ai testé avec plusieurs codes et ça marche parfaitement ! Toutefois je n’ai pas trouvé ce qui cloche dans le code que j’ai posté ci-haut ! Est-ce que tu vois ce que je n’arrive pas à voir | |
| | | papydall
Nombre de messages : 7017 Age : 74 Localisation : Moknine (Tunisie) Entre la chaise et le clavier Date d'inscription : 03/03/2012
| Sujet: Re: COMPILATEUR version beta 18 du 09/05/2020 Sam 9 Mai 2020 - 7:03 | |
| Comme je suis têtu, j’ai décortiqué mon code pour découvrir ce qui ne va pas. Et j’ai enfin trouvé la petite bête. Le Bug se trouve dans la fonction INT - Code:
-
dim r,r1 r = 31 r2 = int(r/2) print r print r2 : ' <--- r2 = 15 pour la version beta 14 : c'est correct ' r2 = 0 pour la version beta 16 : c'est la ... ' et r2 = 4096 pour la beta 17 : ... petite bête !!!
| |
| | | papydall
Nombre de messages : 7017 Age : 74 Localisation : Moknine (Tunisie) Entre la chaise et le clavier Date d'inscription : 03/03/2012
| Sujet: Re: COMPILATEUR version beta 18 du 09/05/2020 Sam 9 Mai 2020 - 9:02 | |
| Voici un code et son résultat: - Code:
-
print int(123.456) : ' <--- 2048 print int(5) : ' <--- 1179680 print int(2/3) : ' <--- 1194016 print int(0) : ' <--- 1208352 print int(-1) : ' <--- 1190176 print int(sqr(100)) : ' <--- 8224 print "=======" print int(123.456) : ' <--- 1185889 print int(5) : ' <--- ??<00000 print int(2/3) : ' <--- ??<00000 print int(0) : ' <--- ??<00000 print int(-1) : ' <--- ??<00000 print int(sqr(100)) : ' <--- ??<00
Et si on modifie le code et on le compile à nouveau,ça donne : Remarquer le CAPTION de la fenêtre Beta 12 et non Beta 17 | |
| | | Jack Admin
Nombre de messages : 2394 Date d'inscription : 28/05/2007
| Sujet: Re: COMPILATEUR version beta 18 du 09/05/2020 Sam 9 Mai 2020 - 9:46 | |
| @Pedro: J'ai refait tous mes tests sur l'objet BUTTON_PICTURE et je n'ai trouvé aucun défaut. Peux-tu mettre en évidence en quelques lignes le défaut que tu observes ? Le seul petit problème, c'est que 'BUTTON_PICTURE" n'est pas coloré dans l'éditeur. C'est peut-être cela qui te chagrines. C'est alors un problème purement esthétique et qui n'empêche pas de fonctionner. J'en profite pour rappeler ce que je dis depuis 6 mois: Je n'examinerai que les bugs qui seront mis en évidence par quelques lignes de code.
Je ne conteste pas qu'il y ait des bugs dans Panoramic. Je tiens à les corriger, mais encore faut-il me les signaler de manière précise. @Papydall: Tu as mis le doigt sur un bug. En effet, il y a un problème sur la fonction INT().Cela est du au fait que j'utilise indifféremment le Pascal (FreePascal) et le Basic (FreeBasic) pour générer le compilateur. En pascal comme en basic, on passe un réel à cette fonction, mais FreePascal retourne un entier alors que FreeBasic retourne un réel. J'ai compilé les 2 dernières versions (la Beta 16 et la Beta 17) avec FreeBasic, mais en laissant par erreur, un appel "à la mode" du pascal. Il y a alors une confusion: un retour avec un entier au lieu d'un réel, et tout cela sans conversion entier/réel, ce qui provoque le bug. J'ai remarqué le bandeau avec beta 12 au lieu de beta 17. Il y a un sac de nœuds dans cette version beta 17. Je corrige, je refais des tests et je mets une nouvelle version… A bientôt. La version beta 17 n'est plus disponible au téléchargement. _________________ username : panoramic@jack-panoramic password : panoramic123 | |
| | | Pedro
Nombre de messages : 1594 Date d'inscription : 19/01/2014
| Sujet: COMPILATEUR version beta 17. Sam 9 Mai 2020 - 11:17 | |
| Bonjour. @Jack. Il faudrait que tu remettes au téléchargement, la nouvelle version du compilateur, au moins jusqu'à ce soir. Car je n'ai pas conservé cette version. Info de dernière minute: En décortiquant le code d'affichage des button_picture, je m'aperçois que la sub fait appel 4 fois à la fonction int. Le problème viendrait-il de là ? - Code:
-
left no%,int(x%*fl2):top no%,int(y%*fh2):width no%,int(l%*fl2):height no%,int(h%*fh2) | |
| | | papydall
Nombre de messages : 7017 Age : 74 Localisation : Moknine (Tunisie) Entre la chaise et le clavier Date d'inscription : 03/03/2012
| Sujet: Re: COMPILATEUR version beta 18 du 09/05/2020 Sam 9 Mai 2020 - 13:33 | |
| J’ai testé avec BUTTON_PICTURE et ça marche ! C’est vrai qu’il manquait la coloration, mais ça fonctionne. C’est surement la faute à la fonction INT().
J’ai compilé et exécuté plusieurs codes et je n’ai détecté aucune anomalie à part INT. | |
| | | papydall
Nombre de messages : 7017 Age : 74 Localisation : Moknine (Tunisie) Entre la chaise et le clavier Date d'inscription : 03/03/2012
| Sujet: Re: COMPILATEUR version beta 18 du 09/05/2020 Sam 9 Mai 2020 - 14:31 | |
| @Jack Je viens de découvrir une autre petite insecte. La fonction RND génère toujours la même séquence. Le code suivant affiche à chaque exécution la liste suivante, alors qu’avec l’interpréteur, c’est toujours une liste de valeurs différentes - Code:
-
dim i list 10 : top 10,20 : left 10,20 : width 10,200 : height 10,400 for i = 1 to 30 item_add 10,str$(rnd(i)) : pause 100 next i
- Résultat toujours le même:
| |
| | | Jack Admin
Nombre de messages : 2394 Date d'inscription : 28/05/2007
| Sujet: Re: COMPILATEUR version beta 18 du 09/05/2020 Sam 9 Mai 2020 - 14:49 | |
| @Pedro: Le bug sur INT est corrigé. Je vais mettre une nouvelle version au téléchargement dans quelques heures. Je vais appliquer la coloration syntaxique à tous les nouveaux mots-clés. Par contre, la documentation ne sera pas à jour (il s'agit d'une version beta donc "instantanée").
@Papydall: Il y avait un double bug sur la fonction INT(): - un problème interne d'entier non converti en réel, - mais aussi un problème congénital (depuis le début) sur les nombres négatifs. Si int(-1,7) retournait correctement -2, int(-1) retournait -2 ce qui est incorrect.
La fonction RND() n'est pas codée de la même façon dans l'interpréteur et dans le compilateur. Je corrigerai cela plus tard pour qu'avec le compilateur, il y ait un "randomize" automatique. Ainsi le "germe" étant différent, une séquence sera différente à chaque fois. _________________ username : panoramic@jack-panoramic password : panoramic123 | |
| | | papydall
Nombre de messages : 7017 Age : 74 Localisation : Moknine (Tunisie) Entre la chaise et le clavier Date d'inscription : 03/03/2012
| Sujet: Re: COMPILATEUR version beta 18 du 09/05/2020 Sam 9 Mai 2020 - 14:53 | |
| Merci Jack et bon courage ! | |
| | | Marc
Nombre de messages : 2466 Age : 63 Localisation : TOURS (37) Date d'inscription : 17/03/2014
| Sujet: Re: COMPILATEUR version beta 18 du 09/05/2020 Sam 9 Mai 2020 - 15:38 | |
| Je réitère mon merci, Jack ! Et je ne te remercierai jamais assez au regard des milliers d’heures que tu as passées pour nous offrir ce langage. Grâce au compilateur, j’ai pu trouver des erreurs dans le source d’EliP. Après différentes corrections du code, EliP a passé avec succès le test du compilateur. Bonne continuation ! | |
| | | Jack Admin
Nombre de messages : 2394 Date d'inscription : 28/05/2007
| Sujet: Re: COMPILATEUR version beta 18 du 09/05/2020 Sam 9 Mai 2020 - 16:24 | |
| Et voici la version beta 18 qui corrige le bug sur la fonction INT(). Bonne programmation ! _________________ username : panoramic@jack-panoramic password : panoramic123 | |
| | | Marc
Nombre de messages : 2466 Age : 63 Localisation : TOURS (37) Date d'inscription : 17/03/2014
| Sujet: Re: COMPILATEUR version beta 18 du 09/05/2020 Sam 9 Mai 2020 - 18:34 | |
| Merci Jack ! De mon coté, R.A.S. ! | |
| | | Pedro
Nombre de messages : 1594 Date d'inscription : 19/01/2014
| Sujet: COMPILATEUR version beta 18. Sam 9 Mai 2020 - 18:53 | |
| @Jack.
Cette fois, les button_picture sont revenus. Merci. | |
| | | papydall
Nombre de messages : 7017 Age : 74 Localisation : Moknine (Tunisie) Entre la chaise et le clavier Date d'inscription : 03/03/2012
| Sujet: Re: COMPILATEUR version beta 18 du 09/05/2020 Dim 10 Mai 2020 - 0:14 | |
| Je viens de télécharger la nouvelle version Beta 18. C’est bon pour la fonction INT(). C’est bon pour la coloration syntaxique. En attendant la correction de la fonction RND(), j’ai codé mon propre générateur de nombres pseudo-aléatoires, juste pour voire ce que ça pourrait donner. Le résultat est tout à fait honorable : j’obtiens toujours une séquence différente. A toute fin utile, voici mon code du générateur - Code:
-
rem ============================================================================ rem Générateur de nombres pseudo-aléatoires rem Par Papydall rem ============================================================================ rem Génération de nombres pseudo-aléatoires distribués uniformément entre 0 et 1 rem selon la formule de Lehmer et l’algorithme et les paramètres de rem Parker and Miller (1988): rem rem ____________________________ rem | | rem | x(i+1) = a * x(i) modulo c | rem |____________________________| rem rem rem Avec : rem a = 7^5 = 16807 rem c = 2^31 - 1 = 2147483647 rem Sa période est fixée par c rem ============================================================================
rem Appel : rem rand() : retourne un nombre pseudo-aléatoire de l’intervalle semi-ouvert[0..1[
rem ============================================================================ dim i caption 0, "Générateur aléatoire Par Papydall" list 10 : top 10,50 : left 10,100 : height 10,380 : item_add 10,"RND Papydall" : item_add 10,"" list 20 : top 20,50 : left 20,300 : height 20,380 : item_add 20,"RND Panoramic": item_add 20,"" font_bold 10 : font_bold 20 : width 10,150 : width 20,150
font_bold 0 : font_color 0,0,0,255 print_locate 30,20 : print "Séquence différente pour chaque appel" + string$(18," ") +"Toujours la même séquence" for i = 1 to 25 item_add 10,rand() : ' nombre aléatoire généré par FNC Rand() item_add 20,rnd(1) : ' nombre aléatoire généré par le compilateur Panoramic pause 1000 next i
end rem ============================================================================ ' Génération de la constante d'initialisation du générateur Random ' à partir de la date courante selon Anderson (1990) FNC GenerationSeed() dim_local t0,t1,t2,t3,t4,t5,lseed,t$,d$
t$ = time$ : ' Récupération de l'heure actuelle d$ = date$ : ' Récupération de la date actuelle
t0 = val(mid$(t$,7,8)) : ' secondes t1 = val(mid$(t$,4,2)) : ' minutes t2 = val(mid$(t$,1,2)) : ' heures
t3 = val(mid$(d$,1,2)) : ' Jour t4 = val(mid$(d$,4,2)) : ' Mois t5 = val(mid$(d$,7,4)) : ' année
' calcul du seed d'après l'algo d'Anderson (seed varie entre 0 et 2^31-1 lseed = t5 + 70*(t4 + 12*(t3 + 31*(t2 + 23*(t1 + 59*t0)))) ' s'assurer que seed est impair if even(lseed) = 1 then lseed = lseed - 1 result lseed END_FNC rem ============================================================================ FNC Rand() dim_local a,c,x,y,seed seed = GenerationSeed() a = 16807 : c = 2147483647 : x = a * seed : seed = mod(x,c) y = seed/c : ' normalisation par c result y END_FNC rem ============================================================================
- Résultat:
| |
| | | papydall
Nombre de messages : 7017 Age : 74 Localisation : Moknine (Tunisie) Entre la chaise et le clavier Date d'inscription : 03/03/2012
| Sujet: Re: COMPILATEUR version beta 18 du 09/05/2020 Dim 10 Mai 2020 - 2:57 | |
| Comme le compilateur est basé sur FreePascal / FreeBasic, il hérite de certaines subtilités de ces deux langages telles que la récursivité et les expressions logiques qui facilitent beaucoup la programmation. Merci Jack. | |
| | | papydall
Nombre de messages : 7017 Age : 74 Localisation : Moknine (Tunisie) Entre la chaise et le clavier Date d'inscription : 03/03/2012
| Sujet: Re: COMPILATEUR version beta 18 du 09/05/2020 Dim 10 Mai 2020 - 17:37 | |
| Salut tout le monde. @Jack Il y a du pain sur la planche. Quelques lignes de code valent mieux qu'un long discours. - Code:
-
dim a,b a = 2 : b = 17 c = a*b+z ' les variables c et z n'ont pas été DIMentionnées, mais acceptées par le compilateur print c : ' < --- 34 c = a*b+z/x+w*sin(t) ' ni c, ni z,ni x, ni w, ni t ont été DIMentionnées print c : ' <--- -2147483648 !!! où a-t-il chercher ce résultat ???? d = sigma :' ni d, ni sigma déclarées print d + sigma : ' <--- 0 f = sigma / d : ' f non déclarée print f : ' <--- -2147483648 print 0/0 : ' <--- NAN
Du courage, Jack, car tu en as besoin. | |
| | | Pedro
Nombre de messages : 1594 Date d'inscription : 19/01/2014
| Sujet: COMPILATEUR version beta 18. Lun 11 Mai 2020 - 8:44 | |
| Bonjour.
Ce nombre 2147483648 me rappelait quelque chose (une limite de valeur pour un nombre entier peut-être).
En consultant la doc de FreeBasic, j'ai trouvé ceci :
Syntaxe de la déclaration Long: dim variable as Long
Description: 32-bit signed whole-number data type. Can hold values from -2147483648 to 2147483647. Corresponds to a signed DWORD.
En plein dans le mille ! | |
| | | papydall
Nombre de messages : 7017 Age : 74 Localisation : Moknine (Tunisie) Entre la chaise et le clavier Date d'inscription : 03/03/2012
| Sujet: Re: COMPILATEUR version beta 18 du 09/05/2020 Lun 11 Mai 2020 - 18:03 | |
| On peut sûrement se passer de ces dysfonctionnements en veillant à bien déclarer toutes les variables par DIM. Seulement, voilà : j’ai mal orthographié l’identificateur d’une variable : Conséquences : résultat erroné, absence de message d’erreur et surtout difficulté de trouver d’où venait l’erreur surtout quand le code comporte plusieurs centaines de lignes. En définitive : le compilateur est tout à fait utilisable avec quelques précautions à prendre. Personnellement je le préfère à l’interpréteur qui souffre d’une lenteur parfois exaspérante. D’autre part, le compilateur permet l’utilisation de la récursivité et l’utilisation des expressions logiques. Ce n'était pas nécessairement voulu par Jack, mais comme le compilateur est à base de FreePascal / FreeBasic, on peut considérer qu'il s'agit là d'un heureux événement survenu par ricochet ! Pour la récursivité, j’ai posté quelques programmes pour l’illustrer. Avec les expressions logiques, on peut coder comme suit (ce qui est interdit par l’interpréteur). - Code:
-
rem ============================================================================ rem Expressions logiques retournant un boolien (-1 true ou 0 false) dim a,b,c,x a = 5 : b = 7 : c = sin(pi/12) print x = a > 0 and b = 7 = 3 + 4 or (c < sqr(3)/2) : ' <--- -1 valeur true (vrai) print 12 + 3 = 15 and 6 <= 17 or b = 10 - 3 : ' <--- -1 valeur true (vrai) x = a = b = c : ' expression logique print x : ' <--- 0 valeur false (faux)
Je propose à Jack de porter son attention au développement et à l’amélioration du compilateur au lieu de l’interpréteur ; mais c’est à lui de décider. Bon courage Jack! | |
| | | Jack Admin
Nombre de messages : 2394 Date d'inscription : 28/05/2007
| Sujet: Re: COMPILATEUR version beta 18 du 09/05/2020 Lun 11 Mai 2020 - 20:31 | |
| Le bug qui fait qu'on peut utiliser une variable non déclarée sera corrigé dans la prochaine version. - papydall a écrit:
- Je propose à Jack de porter son attention au développement et à l’amélioration du compilateur au lieu de l’interpréteur
Je préfèrerai aussi développer le compilateur plutôt que l'interpréteur. C'est plus intéressant intellectuellement, et c'est l'avenir. Paradoxalement, c'est même plus facile à porter sur Mac, sur Linux et sur Android que l'interpréteur. J'ai certaines idées sur le développement d'un compilateur que je mettrai en œuvre prochainement. Mais pour le moment, je vais corriger les bugs. Un autre poids est aussi le développement de l'éditeur. Je regarde de près le développement des éditeurs "alternatifs" dont en particulier celui de Marc, et il se pourrait que je l'adopte comme support du compilateur. _________________ username : panoramic@jack-panoramic password : panoramic123 | |
| | | Contenu sponsorisé
| Sujet: Re: COMPILATEUR version beta 18 du 09/05/2020 | |
| |
| | | | COMPILATEUR version beta 18 du 09/05/2020 | |
|
Sujets similaires | |
|
| Permission de ce forum: | Vous ne pouvez pas répondre aux sujets dans ce forum
| |
| |
| |