Forum de Programmation en langage PANORAMIC
Rechercher
 
 

Résultats par :
 


Rechercher Recherche avancée

Mots-clés

Derniers sujets
»  Capture d’écran de Windows
Ven 17 Nov - 0:27 par Admin

»  Courbes de Bézier cubiques
Mer 8 Nov - 2:28 par Admin

» Harmonographe
Mer 8 Nov - 2:22 par Admin

»  Simuler l’appui d'une touche ou combinaison de touches
Sam 16 Sep - 13:58 par Admin

» Régalez-vous !
Sam 29 Juil - 11:42 par Admin

» Les bienfaits du rire
Ven 7 Juil - 0:04 par Admin

» Derrière chaque beau parleur se cache un magnifique menteur
Ven 7 Juil - 0:01 par Admin

» Carré magique d’ordre 3 à 99 et plus si affinité !
Mer 5 Juil - 3:21 par Admin

» Dessine-moi une étoile
Mar 4 Juil - 17:32 par Admin

Novembre 2017
LunMarMerJeuVenSamDim
  12345
6789101112
13141516171819
20212223242526
27282930   

Calendrier Calendrier


Carré magique d’ordre 3 à 99 et plus si affinité !

Voir le sujet précédent Voir le sujet suivant Aller en bas

Carré magique d’ordre 3 à 99 et plus si affinité !

Message par Admin le Mer 5 Juil - 3:21

Code:
rem ============================================================================
rem             Carré magique d’ordre 3 à 99 et plus si affinité !
rem                     Par Papydall Juillet 2017
rem ============================================================================

Que_La_Magie_Se_Magnifeste()

end
rem ============================================================================
SUB Init()    
    dim n,c                          : ' Dimension du carré de 3 à ... 99
    dim sz         : sz = 36         : ' Taille des cases en pixels
    dim TopMargin  : TopMargin  = 25 : ' marge supérieure à utiliser pour l'affichage
    dim LeftMargin : LeftMargin = 25 : ' marge gauche
    dim largeur                      : ' Largeur du PICTURE (dépend du nombre des cases
    dim hauteur                      : ' hauteur du PICTURE
    dim gauche     : gauche = 25     : ' Position du PICTURE
    dim haut       : haut = 50       : ' ................
    dim sq                           : ' Nombre de cases du carré magique
    dim r$, about%
END_SUB
rem ============================================================================
SUB Que_La_Magie_Se_Magnifeste()
    label calculer, Info, About, Quitter
    full_space 0 : color 0,255,255,255
    picture 10 : 2d_target_is 10 : print_target_is 10 : font_bold 10
    alpha 20 : top 20,10 : left 20,100 : font_bold 20 : font_size 20,20
    font_color 20,255,0,0 : font_name 20,"arial" : caption 20 , "Carré magique"
    alpha 30 : top 30,15 : left 30,350 : font_bold 30 : font_size 30,16
    font_color 30,0,0,255 : caption 30,"Dimension du carré"
    
    edit 40 : top 40,18 : left 40,550 : width 40,50 : font_bold 40 : set_focus 40
    hint 40,"Entrer un entier pair ou impair de 3 à 99"
    button 50 : top 50,15 : left 50,620 : font_bold 50 : caption 50,"&Calculer"
    button 60 : top 60,15 : left 60,860 : font_bold 60 : caption 60,"&Quitter"
    
    alpha 70 : top 70,40  : left 70,1000-900 : font_bold 70 : font_size 70,14
    font_color 70,0,0,255
    button 80 : top 80,15 : left 80,700 : font_bold 80 : caption 80,"&?"
    button 90 : top 90,15 : left 90,780 : font_bold 90 : caption 90,"&A propos"
    on_click 50, calculer : on_click 60, quitter : on_click 80,Info : on_click 90,About
    
    Application_title "Carrée magique d'ordre n = 3 ... 99 et plus si affinité !"
    Init()
END_SUB
rem ============================================================================
Calculer:
   r$ = text$(40)
   if numeric(r$) = 0
      message "La dimension doit être numérique" : return
   end_if  
   c = val(r$)
   if (c < 3) or (c > 99)
      message " La dimension doit être entre 3 (mini) et 99 (maxi)" : return
   end_if
   n = c
   largeur = sz * (n+1)
   hauteur = sz * (n+1)
   sq = n*n
   width 10, largeur : height 10, hauteur : top 10,haut : left 10,gauche
   Dessiner_Grille()
   Dessiner_Carre_Magic()
return
rem ============================================================================
SUB Dessiner_Grille()
    cls
    dim_local i
     for i = 0 to n : ' dessiner les lignes horizontales
         2d_line LeftMargin,TopMargin+I*Sz,LeftMargin+N*Sz,TopMargin+I*Sz
     next i
     for i = 0 to n : ' dessiner les lignes verticales
         2d_line LeftMargin+I*Sz,TopMargin,LeftMargin+I*sz,TopMargin+N*SZ
     next i
END_SUB
rem ============================================================================
' Dessiner le carré magique lorsque la dimension  des côtes est impaire
SUB Draw_Odd()
    dim_local i%,j%,h%,v%,w%
    w% = 1 : h% = int(n/2)
     v% = h%-1
    for i% = 0 to n-1
        h% = h% + 1 : v% = v% + 1
        for j% = 0 to n-1
            Draw_Slot(mod(v%,n)*n+mod(h%,n),w%)
            w% = w% + 1 : h% = h% + 1 : v% = v% + n-1
        next j%
    next i%
END_SUB
rem ============================================================================
' afficher le nombre affecté à une case
SUB Draw_Slot(slot,nombre)
    dim_local s$,h,v
    s$ = str$(nombre)
    h = text_width(s$,10) : ' Pour afficher au milieu de la case
    v = text_height(s$,10)
    print_locate LeftMargin+mod(Slot,N)*Sz + int(((Sz-H) / 2)),TopMargin+int(Slot / N)*SZ + int((Sz-V) / 2)
    print s$
END_SUB
rem ============================================================================
' dessiner les cases quand la dimension des côtés est divisible par 4
SUB Draw_Dim4(b,m)
    dim_local i,j,w,c,petit, grand
    petit = int(n/4) : grand = int(n/4)*3
    if b = 0 then c = 0 : else : c = n+1
    w = 0
    for j = 0 to m-1
        for i = 0 to m-1
            if (((J < Petit) or (J >= Grand)) AND ((I < Petit) or (I >= Grand))) OR ((J >= Petit) and (J < Grand) and (I >= Petit) and (I < Grand))
               Draw_Slot(J*N+I+C,W+B+1)
            else
               Draw_Slot(J*N+I+C,Sq-B-W)
            end_if
            w = w+1
        next i
    next j
END_SUB
rem ============================================================================
SUB Dessiner_Carre_Magic()
    hide 70
    if odd(n) = 1  
       Draw_Odd()  : ' si les côtés comportent un nombre de cases impaires      
    else
       if mod(n,4) = 0
          Draw_Dim4(0,n) : ' si les côtés comportent un nombre de case divisible par 4
       else              : ' côtés de dimension paire mais pas divisible par 4
          Draw_Border()  : ' dessiner les cases en bordure  
          Draw_Dim4((N*N-(N-2)*(N-2)) / 2,  N-2 ) : ' dessiner le centre (toujours divisible par 4)
       end_if
    end_if
    caption 70,"Somme magique : " + str$(n*(1+n*n)/2) : show 70
END_SUB
rem ============================================================================
' dessiner les cases en bordure, pour les carrés magiques dont la dimension
' des côtés est paire, mais pas divisible par 4
SUB DRaw_Border()
    dim_local j,k,l
    Draw_Slot(0,1)
    Draw_Slot(Sq-1,Sq)
    Draw_Slot(Sq-N,2)
    Draw_Slot(N-1,Sq-1)
    Draw_Slot(2*N-1,3)
    Draw_Slot(N,Sq-2)
    Draw_Slot(3*N-1,4)
    Draw_Slot(2*N,Sq-3)
    Draw_Slot(4*N-1,5)
    Draw_Slot(3*N,Sq-4)
    Draw_Slot(1,6)
    Draw_Slot(Sq-N+1,Sq-5)
    Draw_Slot(Sq-N+3,7)
    Draw_Slot(3,Sq-6)
    Draw_Slot(Sq-N+2,8)
    Draw_Slot(2,Sq-7)
    Draw_Slot(4*N,9)
    Draw_Slot(5*N-1,Sq-8)
    Draw_Slot(4,10)
    Draw_Slot(Sq-N+4,Sq-9)
    if n > 6 : ' pour les carrés plus grand que 6*6    
       for J = 0 to int((N-10) / 4)
          k = j*4
          l = j*8
          Draw_Slot(K+5,L+11)
          Draw_Slot(Sq-N+K+5,Sq-L-10)
          Draw_Slot((6+K)*N-1,L+12)
          Draw_Slot((5+K)*N,Sq-L-11)
          Draw_Slot(Sq-N+K+6,L+13)
          Draw_Slot(K+6,Sq-L-12)
          Draw_Slot((6+K)*N,L+14)
          Draw_Slot((7+K)*N-1,SQ-L-13)
          Draw_Slot((7+K)*N,L+15)
          Draw_Slot((8+K)*N-1,Sq-L-14)
          Draw_Slot(Sq-N+K+7,L+16)
          Draw_Slot(7+K,Sq-L-15)
          Draw_Slot((9+K)*N-1,L+17)
          Draw_Slot((8+K)*N,Sq-L-16)
          Draw_Slot(8+K,L+18)
          Draw_Slot(Sq-N+K+8,SQ-L-17)
       next j
    end_if
END_SUB
rem ============================================================================
Info:
    r$ = " En mathématiques, un carré magique d'ordre n est composé de n*n entiers" + chr$(13)
    r$ = r$ + "strictement positifs, écrits sous la forme d'un tableau carré." + chr$(13)
    r$ = r$ + "Ces nombres sont disposés de sorte que leurs sommes sur chaque rangée,"+chr$(13)
    r$ = r$ + "sur chaque colonne et sur chaque diagonale principale soient égales."
    message r$
return
rem ============================================================================
About:
   r$ = ""
   dll_on "shell32"
   about% = dll_call4("ShellAboutA",handle(0), adr(r$),adr(r$),0)
   dll_off
return
rem ============================================================================
Quitter:
terminate
rem ============================================================================

_________________
Invité, merci d'être passé par ici.
avatar
Admin
Admin

Messages : 71
Date d'inscription : 08/09/2015
Age : 67
Localisation : MOKNINE (Tunisie)

Voir le profil de l'utilisateur http://papydall-panoramic.forumarabia.com

Revenir en haut Aller en bas

Voir le sujet précédent Voir le sujet suivant Revenir en haut

- Sujets similaires

 
Permission de ce forum:
Vous ne pouvez pas répondre aux sujets dans ce forum