FORUM DE DISCUSSION SUR LE LANGAGE PANORAMIC

Développement d'applications avec le langage Panoramic
 
AccueilAccueil  FAQFAQ  RechercherRechercher  S'enregistrerS'enregistrer  MembresMembres  GroupesGroupes  Connexion  
Derniers sujets
» Un petit "coucou" à tous les Panoramiciens !
par Yannick Aujourd'hui à 23:06

» mise a jour calculatrice
par joeeee2017 Aujourd'hui à 22:44

» Logiciel de soutien scolaire en langues.
par Pedro Alvarez Aujourd'hui à 16:52

» KGF_dll - nouvelles versions
par Klaus Aujourd'hui à 14:16

» Compilateur FBPano
par Ouf_ca_passe Aujourd'hui à 12:25

» double guillemets "" dans un EDIT
par Marc Hier à 23:43

» Documentation de KGF
par Klaus Lun 20 Nov 2017 - 22:52

» Zoom sur une portion d'écran
par JL35 Lun 20 Nov 2017 - 21:51

» Recherche d'une expression dans un source
par Marc Lun 20 Nov 2017 - 13:08

» Tracer une grille n'importe où sur l'écran
par JL35 Dim 19 Nov 2017 - 22:14

» TourD Version 2
par Klaus Sam 18 Nov 2017 - 23:58

» La métamatière et le peuple
par JL35 Ven 17 Nov 2017 - 21:18

» Capture d'une zone de l'écran total
par JL35 Ven 17 Nov 2017 - 18:41

» qui peut résoudre mon prb
par pascal10000 Jeu 16 Nov 2017 - 17:30

» évènements et objets système : listage automatique
par Jean Claude Jeu 16 Nov 2017 - 11:15

Navigation
 Portail
 Index
 Membres
 Profil
 FAQ
 Rechercher
Rechercher
 
 

Résultats par :
 
Rechercher Recherche avancée
Novembre 2017
LunMarMerJeuVenSamDim
  12345
6789101112
13141516171819
20212223242526
27282930   
CalendrierCalendrier

Partagez | 
 

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

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

avatar

Nombre de messages : 5594
Age : 67
Localisation : Moknine (Tunisie) Entre la chaise et le clavier
Date d'inscription : 03/03/2012

MessageSujet: Carré magique d’ordre 3 à 99 et plus si affinité !   Mer 5 Juil 2017 - 5:16

Quand je me suis inscrit sur ce forum, l’un de mes tout premiers codes était un programme de calcul de carrés magiques d’ordre impair.
Il est toujours ici

Que des choses ont évolué depuis !
Je reviens aujourd’hui avec un autre code de calcul des carrées magiques.
Cette fois-ci on n’est pas limité à un ordre impair.
Tout entier supérieur à 2 peut convenir.
Le programme accepte un ordre de 3 à … 99 !
L’unique raison de cette limite, c’est pour que les nombres restent de 4 chiffres max pour l’esthétique de l’affichage
En effet 100*100 donnent un nombre de 5 chiffres.
En théorie rien n’empêche d’aller aussi loin que l’on veut, mais soyons raisonnable !


Une capture d’écran pour
un carré magique de dimension 15:
 

Essayez avec une dimension 99 et observez bien la manière dont le programme rempli les cases.
Nb : Si vous voulez aller plus haut (un carré de 200*200 ou plus, il vous suffira de modifier la valeur de la constante sz en ligne 14.

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 ============================================================================


Bon amusement avec la magie !


Dernière édition par papydall le Mer 5 Juil 2017 - 12:57, édité 1 fois
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://papydall-panoramic.forumarabia.com/
Ouf_ca_passe

avatar

Nombre de messages : 198
Age : 69
Localisation : Villeneuve d'Ascq (59-Dpt du NORD) France
Date d'inscription : 21/12/2015

MessageSujet: Lewis Carroll   Mer 5 Juil 2017 - 8:52

Ça y est !

Papydall est comme Lewis Carroll.

Il vient de basculer dans d'autres dimensions.

D'ici qu'il nous compte des histoires merveilleuses. Smile
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
jean_debord

avatar

Nombre de messages : 762
Age : 63
Localisation : Limoges
Date d'inscription : 21/09/2008

MessageSujet: Re: Carré magique d’ordre 3 à 99 et plus si affinité !   Mer 5 Juil 2017 - 9:59

Merci papydall !

Encore un bon candidat pour une adaptation en FBPano.

Pour ce qui est des histoires et des écrivains, rappelons que le roman de Georges Perec, "la vie mode d'emploi" est basé sur le bicarré latin d'ordre 10 et sur le parcours du cavalier sur un échiquier de 10 x 10 cases (https://fr.wikipedia.org/wiki/La_Vie_mode_d%27emploi).
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://www.unilim.fr/pages_perso/jean.debord/index.htm
papydall

avatar

Nombre de messages : 5594
Age : 67
Localisation : Moknine (Tunisie) Entre la chaise et le clavier
Date d'inscription : 03/03/2012

MessageSujet: Re: Carré magique d’ordre 3 à 99 et plus si affinité !   Mer 5 Juil 2017 - 13:18

Bonjour tout le monde.
@Ouf_ca_passe
Pour les histoires, je commence une et c’est à toi de la continuer.
« Il était une fois, un Panoramicien … »

@Jean_debord

Tu as toute la liberté de t’en servir pour une adaptation en FBPano.
D’ailleurs, je me suis fortement inspiré d’un code en Delphi (datant de 2005 et dont l’auteur est inconnu) pour composer mon programme.

Je peux fournir le code source en Delphi si ça vous intéresse .
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://papydall-panoramic.forumarabia.com/
Ouf_ca_passe

avatar

Nombre de messages : 198
Age : 69
Localisation : Villeneuve d'Ascq (59-Dpt du NORD) France
Date d'inscription : 21/12/2015

MessageSujet: Croire ou pas   Mer 5 Juil 2017 - 17:36

Papydall a écrit:

« Il était une fois, un Panoramicien … »

"qui croyait que NOTRE univers est à la recherche constante d'harmonie et pas de chaos."

Qui prend la suite ?
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
papydall

avatar

Nombre de messages : 5594
Age : 67
Localisation : Moknine (Tunisie) Entre la chaise et le clavier
Date d'inscription : 03/03/2012

MessageSujet: Re: Carré magique d’ordre 3 à 99 et plus si affinité !   Mer 5 Juil 2017 - 20:37

Restons plutôt dans la magie des carrés magiques !
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://papydall-panoramic.forumarabia.com/
jean_debord

avatar

Nombre de messages : 762
Age : 63
Localisation : Limoges
Date d'inscription : 21/09/2008

MessageSujet: Re: Carré magique d’ordre 3 à 99 et plus si affinité !   Jeu 6 Juil 2017 - 10:18

Bonjour papydall

Oui je serais intéressé par le code Delphi.

Je suppose qu'on peut dissocier le calcul de l'affichage graphique ?

On pourrait ainsi stocker les nombres dans un tableau, dont on n'afficherait ensuite qu'une partie, avec un mécanisme de défilement comme dans le jeu de la vie ?

PS. Le chaos est la face cachée de l'harmonie. Les deux sont complémentaires (enfin je crois ...)
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://www.unilim.fr/pages_perso/jean.debord/index.htm
Ouf_ca_passe

avatar

Nombre de messages : 198
Age : 69
Localisation : Villeneuve d'Ascq (59-Dpt du NORD) France
Date d'inscription : 21/12/2015

MessageSujet: Ambivalence   Jeu 6 Juil 2017 - 11:07

Comme qui dirait le Ying et le Yang

Harmonie.
Vous avez parlé d'harmonie ?

http://www.cite-sciences.fr/fr/ressources/science-actualites/detail/news/nombres-premiers-coup-de-tonnerre-dans-le-monde-discret-des-mathematiques/?tx_news_pi1%5Bcontroller%5D=News&tx_news_pi1%5Baction%5D=detail&cHash=282acc1f0ef3ac0a8d73e36613345583

@ Papydall
Je regarde toujours "Science étonnante" même si je ne comprends pas tout.

Cordialement
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
papydall

avatar

Nombre de messages : 5594
Age : 67
Localisation : Moknine (Tunisie) Entre la chaise et le clavier
Date d'inscription : 03/03/2012

MessageSujet: Re: Carré magique d’ordre 3 à 99 et plus si affinité !   Jeu 6 Juil 2017 - 13:27

Voici l'unité Magic.pas

Code:

unit magic;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  StdCtrls;

Type TMyControl = class (TCustomControl)
                    private
                      N,Sz,Sq,
                      TopMargin,LeftMargin : integer;
                      procedure DrawCanevas;
                      procedure DrawOdd;
                      procedure DrawDim4 (B,M : integer);
                      procedure DrawBorder;
                      procedure DrawSlot(Slot,Nombre : integer);
                    public
                      procedure Paint; override;
                    published
                      constructor Create(AOwner : TComponent; C : integer);
                  end;
type
  TForm1 = class(TForm)
    Label1: TLabel;
    Label2: TLabel;
    Cote: TEdit;
    Button1: TButton;
    procedure Dessiner(Sender: TObject);
  private
    MyControl : TMyControl;
  public
  end;

var
  Form1: TForm1;

implementation

{$R *.DFM}

constructor TMyControl.Create (AOwner : TComponent; C : integer);
{ création du controle d'affichage du carré }
begin
  inherited Create(AOwner);
  N := C;                  { dimension du carré }
  Sz := 36;                { taille des cases en pixels }
  TopMargin := 25;         { marge supérieure à utiliser pour l'affichage du contrôle }
  LeftMargin := 25;        { marge gauche }
  width := Sz*(N+1);       { largeur du contrôle (dépend du nombre de cases) }
  height := Sz*(N+1);      { hauteur du contrôle }
  left := 25;              { position du contrôle sur le formulaire }
  Top := 50;
  Sq := N*N;               { nombre de case du carré magique }
  Canvas.Font.Style := [fsBold];
  Canvas.Brush.Color := $d0d0d0;
end;

procedure TMyControl.DrawCanevas;
{ dessiner les cases du carré magique }
var I : integer;
begin
  with Canvas do
  begin
    for I := 0 to N do                 { dessiner les lignes horizontales }
    begin
      MoveTo (LeftMargin,TopMargin+I*Sz);
      LineTo(LeftMargin+N*Sz,TopMargin+I*Sz);
    end;
    for I := 0 to N do                 { dessiner les lignes verticales}
    begin
      MoveTo(LeftMargin+I*Sz,TopMargin);
      LineTo(LeftMargin+I*sz,TopMargin+N*SZ);
    end;
  end;
end;

procedure TMyControl.DrawOdd;
{ dessiner le carré magique lorsque la dimension  des côtes est impaire }
var I,J,H,V,W: integer;
begin
  W := 1;
  H := (N div 2);
  V := H - 1;
  for I := 0 to N-1 do
  begin
    inc(H);
    inc(V);
    for J := 0 to N-1 do
    begin
      DrawSlot((V mod N)*N+(H mod N),W);
      inc(W);
      inc(H);
      inc(V,N-1);
    end;
  end;

end;

procedure TMyControl.DrawBorder;
{ dessiner les cases en bordure, pour les carrés magiques dont la dimension
  des côtés est paire, mais pas divisible par 4 }
var J,K,L : integer;
begin                          { dessiner les cases 22 cases en bordure pour un carré de 6*6 }
  DrawSlot(0,1);
  DrawSlot(Sq-1,Sq);
  DrawSlot(Sq-N,2);
  DrawSlot(N-1,Sq-1);
  DrawSlot(2*N-1,3);
  DrawSlot(N,Sq-2);
  DrawSlot(3*N-1,4);
  DrawSlot(2*N,Sq-3);
  DrawSlot(4*N-1,5);
  DrawSlot(3*N,Sq-4);
  DrawSlot(1,6);
  DrawSlot(Sq-N+1,Sq-5);
  DrawSlot(Sq-N+3,7);
  DrawSlot(3,Sq-6);
  DrawSlot(Sq-N+2,8);
  DrawSlot(2,Sq-7);
  DrawSlot(4*N,9);
  DrawSlot(5*N-1,Sq-8);
  DrawSlot(4,10);
  DrawSlot(Sq-N+4,Sq-9);
                                  { dessiner les autres cases en bordure }
  for J := 0 to (N-10) div 4 do   { pour les carrés plus grand que 6*6 }
  begin
    K := J SHL 2;
    L := J SHL 3;
    DrawSlot(K+5,L+11);
    DrawSlot(Sq-N+K+5,Sq-L-10);
    DrawSlot((6+K)*N-1,L+12);
    DrawSlot((5+K)*N,Sq-L-11);
    DrawSlot(Sq-N+K+6,L+13);
    DrawSlot(K+6,Sq-L-12);
    DrawSlot((6+K)*N,L+14);
    DrawSlot((7+K)*N-1,SQ-L-13);
    DrawSlot((7+K)*N,L+15);
    DrawSlot((8+K)*N-1,Sq-L-14);
    DrawSlot(Sq-N+K+7,L+16);
    DrawSlot(7+K,Sq-L-15);
    DrawSlot((9+K)*N-1,L+17);
    DrawSlot((8+K)*N,Sq-L-16);
    DrawSlot(8+K,L+18);
    DrawSlot(Sq-N+K+8,SQ-L-17);
  end;
end;

procedure TMyControl.DrawSlot(Slot,Nombre : integer);
{ afficher le nombre affecté à une case }
var S : string[8];
    H,V : integer;
begin
  S := IntToStr(Nombre);
  with Canvas do
  begin
    H := Textwidth(S);         { pour afficher au milieu de la case }
    V := TextHeight(S);
    TextOut(LeftMargin+(Slot mod N)*Sz + ((Sz-H) div 2),
             TopMargin+(Slot div N)*SZ + ((Sz-V) div 2),S);
  end;
end;

procedure TMyControl.DrawDim4 (B,M : integer);
{ dessiner les cases quand la dimension des côtés est divisible par 4 }
var I,J,W,C : integer;
    Petit,Grand : integer;
begin
  Petit := N div 4;
  Grand := (N div 4)*3;
  if B = 0 then C := 0 else C := N+1;
  W := 0;
  for J := 0 to M-1 do
  begin
    for I := 0 to M-1 do
    begin
      if (((J < Petit) or (J >= Grand)) AND ((I < Petit) or (I >= Grand))) OR
         ((J >= Petit) and (J < Grand) and (I >= Petit) and (I < Grand)) then DrawSlot(J*N+I+C,W+B+1)
                                                                         else DrawSlot(J*N+I+C,Sq-B-W);
      inc(W);
    end;
  end;
end;

procedure TMyControl.Paint;
{ dessiner tout le carré magique }
begin
  DrawCanevas;                              { dessiner les lignes horizontales et verticales }
  If odd(N) then DrawOdd                    { si les côtés comportent un nombre de cases impaires }
  else if (N mod 4) = 0 then DrawDim4(0,N)  { si les côtés comportent un nombre de case divisible par 4 }
  else
  begin                                     { côtés de dimension paire mais pas divisible par 4 }
    DrawBorder;                             { dissiner les cases en bordure }
    DrawDim4((N*N-(N-2)*(N-2)) div 2,N-2);  { dessiner le centre (toujours divisible par 4) }
  end;
end;

procedure TForm1.Dessiner;
var N : integer;
begin
  try
    N := StrToInt(Cote.text);                { lire la dimension souhaitée }
  except
    on exception do
    begin
      Showmessage('La dimension des côtés doit être numérique');
      exit;
    end;
  end;
  if (N < 3) then                           { impossible de générer un carré magique de dimension inférieure à 3*3 }
  begin
    ShowMessage('La dimension minimum doit être 3');
    exit;
  end;
  if MyControl <> nil then
  begin
    Removecontrol(MyControl);               { d'abord détruire le précédent carré magique }
    MyControl.Free;
  end;
  MyControl := TMyControl.Create(Self,N);   { créer un carré magique }
  InsertControl(MyControl);                 { déclare rel contrôle. La& procedure paint va se charger de l'affichage }
end;

begin
end.
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://papydall-panoramic.forumarabia.com/
jean_debord

avatar

Nombre de messages : 762
Age : 63
Localisation : Limoges
Date d'inscription : 21/09/2008

MessageSujet: Re: Carré magique d’ordre 3 à 99 et plus si affinité !   Ven 7 Juil 2017 - 10:07

Merci papydall Smile J'ai bien récupéré le code Delphi.
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://www.unilim.fr/pages_perso/jean.debord/index.htm
papydall

avatar

Nombre de messages : 5594
Age : 67
Localisation : Moknine (Tunisie) Entre la chaise et le clavier
Date d'inscription : 03/03/2012

MessageSujet: Re: Carré magique d’ordre 3 à 99 et plus si affinité !   Ven 7 Juil 2017 - 15:36

Pour ceux qui veulent comprendre le code en Delphi.

Dans le code source Delphi
Code:

K := J SHL 2;
L := J SHL 3;


L’opération SHL (Shift Left) n’étant pas présente en Panoramic, on peut la coder ainsi
Code:

 K = J*4
 J = J*8


Mais peut-être qu’elle est implémentée en Free Basic Question


Dernière édition par papydall le Sam 8 Juil 2017 - 13:45, édité 1 fois
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://papydall-panoramic.forumarabia.com/
jean_debord

avatar

Nombre de messages : 762
Age : 63
Localisation : Limoges
Date d'inscription : 21/09/2008

MessageSujet: Re: Carré magique d’ordre 3 à 99 et plus si affinité !   Sam 8 Juil 2017 - 10:36

Extrait de la documentation de FBPano Smile

Code:

- Opérateurs de décalage :

        shl   '   décalage à gauche (x shl n : décale de n bits = multiplie par 2^n)
        shr   '   décalage à droite (x shr n : décale de n bits = divise par 2^n)

Ces opérations logiques sont plus rapides que les multiplications et divisions. De ce fait on les utilise souvent quand on travaille sur des nombres entiers.
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://www.unilim.fr/pages_perso/jean.debord/index.htm
papydall

avatar

Nombre de messages : 5594
Age : 67
Localisation : Moknine (Tunisie) Entre la chaise et le clavier
Date d'inscription : 03/03/2012

MessageSujet: Re: Carré magique d’ordre 3 à 99 et plus si affinité !   Sam 8 Juil 2017 - 13:47

Malheureusement, elles manquent en Panoramic. Embarassed
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://papydall-panoramic.forumarabia.com/
jean_debord

avatar

Nombre de messages : 762
Age : 63
Localisation : Limoges
Date d'inscription : 21/09/2008

MessageSujet: Re: Carré magique d’ordre 3 à 99 et plus si affinité !   Mer 12 Juil 2017 - 11:55

Un site intéressant sur les carrés magiques :

http://roger.astier.free.fr/app/plus/raCarreMagie.html

Les programmes sont en Java... donc pas forcément simples à traduire !
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://www.unilim.fr/pages_perso/jean.debord/index.htm
Contenu sponsorisé




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

Revenir en haut Aller en bas
 
Carré magique d’ordre 3 à 99 et plus si affinité !
Voir le sujet précédent Voir le sujet suivant Revenir en haut 
Page 1 sur 1
 Sujets similaires
-
» Carré magique
» importation de tracés depuis mapsource vers map 62 dans un ordre déterminé
» Peut-on classer par ordre alphabétique ses adresses sur nüvi 660 ?
» Lieux enregistrés par ordre alphabétique ?
» Apres prises CPL, plus de télé erreur "4 carrés"

Permission de ce forum:Vous ne pouvez pas répondre aux sujets dans ce forum
FORUM DE DISCUSSION SUR LE LANGAGE PANORAMIC :: PANORAMIC :: Vos sources, vos utilitaires à partager-
Sauter vers: