papydall
Nombre de messages : 7017 Age : 74 Localisation : Moknine (Tunisie) Entre la chaise et le clavier Date d'inscription : 03/03/2012
| Sujet: Le parcours du cavalier sur un échiquier 8 x 8 Sam 22 Juil 2017 - 18:58 | |
| Tout est dans le code. - Code:
-
rem ============================================================================ rem Le parcours du cavalier sur un échiquier 8 x 8 rem Papydall le 22 / 07 / 2017 rem ============================================================================ rem Ça consiste à faire parcourir à un cavalier les 64 cases de l’échiquier, rem en passant à chaque saut sur une case non visitée. rem Le joueur et théoricien d’échecs arabe Al-Adli Ar-Rumi a donné une solution vers 840. rem Il en existe plusieurs. rem Leonhard Euler reprit l’étude scientifique en 1759. rem Au fil des siècles, beaucoup des mathématiciens ont étudié ce thème en variant rem les dimensions de l’échiquier, le déplacement du cavalier, etc. rem ============================================================================ rem Le code suivant affiche la solution donnée par Euler qui fait montrer un carré rem semi-magique. rem En inscrivant les numéros des sauts dans l’ordre, on constate que : rem La somme des éléments de chaque ligne et de chaque colonne est constante et vaut 260. rem Chaque demi-ligne et chaque demi-colonne a une somme de 130. rem ============================================================================
La_Dance_Du_Cheval()
end rem ============================================================================ SUB La_Dance_Du_Cheval() GUI() Echiquier() Afficher_Solution() END_SUB rem ============================================================================ SUB GUI()
label restore_solution, restore_parcours, clic dim cote, half_cote, x, y, t$ : cote = 50 : half_cote = cote / 2 width 0,1000 : height 0,600 picture 110 : width 110,500 : height 110,520 : top 110,30 : left 110,120 caption 0,"Le parcours du cavalier sur un échiquier 8 x 8" shape 120 : shape_rectangle_rounded 120 : top 120,top(110)+20 : left 120,left(110)+20 width 120,width(110)-40 : height 120,height(110)-40 2d_flood 150,150,0,0,255 : 2d_flood 300,200,255,255,0 shape 130 : shape_rectangle_rounded 130 : top 130,30 : left 130,170+width(110) width 130,250 : height 130,40 alpha 140 : top 140,40 : left 140,182+width(110) : color 140,255,255,255 font_bold 140 : font_name 140,"arial" : font_color 140,0,0,255 : font_size 140,14 caption 140," Le parcours du cavalier " 2d_flood left(140)-5,top(140)+5,255,0,0 shape 150 : shape_rectangle_rounded 150 : top 150,100 : left 150,130+width(110) width 150,320 : height 150,40 alpha 160 : top 160,110 : left 160,left(150)+12 : color 160,255,255,255 font_bold 160 : font_name 160,"arial" : font_color 160,0,0,255 : font_size 160,14 caption 160, " Dimension de l'échiquier : 8 x 8 " 2d_flood left(160)-5,top(160)+5,255,0,0 shape 170 : shape_ellipse 170 : top 170,150 : left 170,170+width(110) width 170, 250 : height 170,100 alpha 180 : top 180,180 : left 180,left(170) + 20 : color 180,255,255,255 font_bold 180 : font_name 180,"arial" : font_color 180,0,0,255 : font_size 180,14 caption 180,"Solution proposée par" + chr$(13) + string$(6," ") +"Leonhard Euler" shape 190 : shape_rectangle_rounded 190 : top 190,280 : left 190,left(170)-20 width 190,280 : height 190,200 alpha 200 : top 200,310 : left 200,left(190) + 30 : color 200,255,255,255 font_bold 200 : font_name 200,"arial" : font_color 200,0,0,255 : font_size 200,10 t$ = "Remarquez que c'est un carré" + chr$(13) + "semi-magique."+ chr$(13)+chr$(13) t$ = t$ + "La somme des éléments de chaque"+chr$(13) t$ = t$ + "ligne et de chaque colonne" +chr$(13) t$ = t$ + "est constante et vaut 260." + chr$(13) t$ = t$ + "Chaque demi-ligne et chaque" + chr$(13) t$ = t$ + "demi-colonne a une somme de 130." + chr$(13)+ chr$(13) t$ = t$ + " ***** Surprenant, non ? *****" caption 200,t$ button 210 : top 210,100 : left 210,05 : font_bold 210 width 210,110 : caption 210,"Afficher Solution" : on_click 210,clic button 220 : top 220,200 : left 220,05 : font_bold 220 width 220,110 : caption 220,"Afficher Parcours" : on_click 220,clic button 230 : top 230,500 : left 230,20 : font_bold 230 : font_size 230,16 caption 230,"Quitter" : on_click 230,clic END_SUB rem ============================================================================ Clic: select number_click case 210 : Afficher_Solution() case 220 : Afficher_Parcours() case 230 : Quitter() end_select return rem ============================================================================ SUB Echiquier() dim_local i,j,n for i = 1 to 8 for j = 1 to 8 n = (i-1) * 8 + j picture n : width n,cote : height n,cote top n,top(120) + 25 + (i-1) * (cote+2) left n,left(120)+ 25 + (j-1) * (cote+2) if odd(i) = 1 if odd(j) = 1 color n,200,100,50 else color n,0,0,0 end_if else if odd(j) = 0 color n,200,100,50 else color n,0,0,0 end_if end_if next j next i 2d_flood 100,10,100,150,150 END_SUB rem ============================================================================ SUB Afficher_Solution() dim_local c,i,zero$ cls : inactive 210 2d_flood 100,10,100,150,150 2d_flood left(120)+20,top(120)+20,255,255,0 2d_flood left(120)-20,top(120)-20,0,0,255 restore_label Restore_Solution for i = 1 to 64 read c : print_target_is i : font_bold i : font_size i,12 if c < 10 then zero$ = "0" : else : zero$= "" print_locate 15,15 : print zero$ + str$(c) next i END_SUB rem ============================================================================ SUB Afficher_Parcours() dim_local c,i cls : inactive 220 : inactive 210 2d_flood 100,10,100,150,150 2d_flood left(120)+20,top(120)+20,255,255,0 2d_flood left(120)-20,top(120)-20,0,0,255 restore_label Restore_Parcours 2d_pen_color 0,255,255 : 2d_pen_width 2 read c : Determiner_Lig_Col(c) : display : 2d_circle x,y,8 : 2d_poly_from x,y for i = 1 to 63 read c : Determiner_Lig_Col(c) : 2d_poly_to x,y : pause 200 : ' à modifier next i 2d_circle x,y,8 active 220 : active 210 END_SUB rem ============================================================================ SUB Determiner_Lig_Col(c) dim_local lig,col lig = int(c/8) + 1 col = mod(c,8) if col = 0 col = 8 : lig = lig - 1 end_if x = left(120) + col * (cote+2) y = top(120) + lig * (cote+2) END_SUB rem ============================================================================ SUB Quitter() terminate END_SUB rem ============================================================================ ' Une solution publié par Euler en 1759 ' En inscrivant les numéros des sauts dans l'ordre, il réalisa un carré semi-magique ' La somme des éléments de chaque ligne et de chaque colonne est constante et vaut 260. ' Chaque demi-ligne et chaque demi-colonne a une somme de 130. Restore_Solution: data 01,48,31,50,33,16,63,18 data 30,51,46,03,62,19,14,35 data 47,02,49,32,15,34,17,64 data 52,29,04,45,20,61,36,13 data 05,44,25,56,09,40,21,60 data 28,53,08,41,24,57,12,37 data 43,06,55,26,39,10,59,22 data 54,27,42,07,58,23,38,11 rem ============================================================================ Restore_Parcours: data 01,18,12,27,33,50,60,43 data 37,54,64,47,32,15,21,06 data 23,08,14,29,39,56,62,45 data 35,52,58,41,26,09,03,20 data 05,22,16,31,48,63,53,38 data 44,59,49,34,28,11,17,02 data 19,04,10,25,42,57,51,36 data 46,61,55,40,30,13,07,24 rem ============================================================================
Dernière édition par papydall le Sam 23 Fév 2019 - 0:47, édité 1 fois | |
|