Forum Liberty Basic France

Débutant » Carrés Particulier ...
Le 24/10/2017 à 11h08

Libertynaute Actif

Groupe: Membre

Inscrit le: 10/10/2017
Messages: 121
Les sommes des lignes Verticales, Horizontales et Diagonales sont identiques.

Code VB :
 
 
''-------------------------------------------------------------------------------------
' PROGRAMME CARRE.BAS - CARRE MAGIQUE FAIT LE 5 AVRIL 2002 AVEC TURBO BASIC
' CORRIGE LE 13 JUILLET 2002
' ADAPTÉ EN LIBERTY BASIC V4.04 LE LE 15 OCTOBRE 2017
'-------------------------------------------------------------------------------------
' Pour savoir la somme des chiffres horizontaux ou verticaux:
' Faire le calcul comme suit:
' Exemple: 3 X  3 =   9  ;  int  (9/2) + 1 =  5  ;   5 X  3 =   15
'          5 X  5 =  25  ;  int (25/2) + 1 = 13  ;  13 X  5 =   65
'          7 X  7 =  49  ;  int (49/2) + 1 = 25  ;  25 X  7 =  175
'          9 X  9 =  81  ;  int (81/2) + 1 = 41  ;  41 X  9 =  369
'         11 X 11 = 121  ;  int(121/2) + 1 = 61  ;  61 X 11 =  671
'         13 X 13 = 169  ;  int(169/2) + 1 = 85  ;  85 X 13 = 1105
'-------------------------------------------------------------------------------------
mainwin 80 27
[debut]           'Etiquette de repositionnement
cls               'Efface tout le contenu de l'ecran
Dim carre(13, 13) 'Définition du tableau carre à deux dimensions
 print "-------------------------------------------------------------------------------"
 locate 2, 2
 input "Entrer un Nombre Impair [3-5-7-9-11-13] plus petit ou égal à 13 ---> "; n
 print "-------------------------------------------------------------------------------"
  select case n
   case  3, 5, 7, 9, 11, 13
         goto [Effectue]
   case  1, 2, 4, 6, 8, 10
         locate 2, 4
         print "Mauvaise reponse ! Presser une touche ..."
         r$ = input$(1)
         goto [debut]
   case else
         locate 2, 4
         print "Mauvaise reponse ! Presser une touche ..."
         r$ = input$(1)
         goto [debut]
  end select
[Effectue]
'....................................................................
' Définition des écritures en haut de l'écran.
'....................................................................
 locate 2, 4
 print "Le plus petit = 1 ";chr$(186);_
       " Le milieu = ";int(n * n / 2)+ 1;" " ;chr$(186);_
       " Le plus grand = " ;n * n;" " ;chr$(186);_
       " La somme = ";int((n * n) / 2 + 1) * n;
'....................................................................
' Positionnement du chiffre 1 dans la grille.
'....................................................................
 for i = 1 to n
   for j = 1 to n
     carre(i, j) = 0
   next j
 next i
 milieu = int(n / 2) + 1
 care = 1 : i = milieu + 1 : j = milieu
 carre(i, j) = care
'....................................................................
' Calcul des chiffres dans la grille.
'....................................................................
  While care < (n * n)
   care = care + 1
   i = i + 1 : j = j + 1
   if i > n then i = 1
      if j > n then j = 1
         if  carre(i, j) = 0 then
             carre(i, j) = care
            else
             i = i + 1 : j = j - 1
             if i > n then i = 1
             if j < 1 then j = n
             if carre(i, j) = 0 then carre(i, j) = care
      end if
  Wend
'....................................................................
' Avec ou sans Grille.
'....................................................................
 if n < 9 then
     call grille n
     l = 1 + int(26 - ((2 * n) + 1)) / 2 + 1 : c = 1 + int(80 - (5 * n)) / 2
   else
     l = 1 + int(25 - n) / 2 : c = int(80 - 5 * n) / 2
 end if
'....................................................................
' Affiche dans les cases et côte latéral droit.
'....................................................................
 for i = 1 to n
   sommex = 0 : sommey = 0
     for j = 1 to n
       sommex = sommex + carre(i, j)
       locate c, l
       print using(" ###",carre(i, j));
        if n < 9 then c = c + 5 else c = c + 5
     next j
       locate c, l
       print " ="; sommex
        if n < 9 then
            l = l + 2 : c = 1 + int(80 - (5 * n)) / 2
         else
            l = l + 1 : c = int(80 - 5 * n) / 2
        end if
 next i
'....................................................................
' Affiche en bas de la grille.
'....................................................................
  if n > 8 then l = l + 1
   for k = 1 to n
     sommey = 0
      for t = 1 to n
        sommey = sommey + carre(t,k)
      next t
      locate c, l
      print using(" ####",sommey);
    if n < 11 then
        c = c + 5
      else
        c = c + 5
     end if
  next k
'....................................................................
' Affiche en bas à droite pour la diagonale.
'....................................................................
  locate c + 2, l : print sommey;
'....................................................................
' Affiche en haut à droite pour la diagonale.
'....................................................................
  if n < 9 then
    locate int(80 - (5 * n)) / 2 + 5 * n + 1 + 2, int(26 - ((2 * n) + 1)) / 2
    print sommey;
   else
    locate int(80 - (5 * n)) / 2 + (4 * n) + n + 2, int(25 - n) / 2 - 1
    print sommey;
  end if
'....................................................................
' On décide si l'on veut continuer ou arrêter
'....................................................................
  locate 1, 23
  print "-------------------------------------------------------------------------------"
  locate 14, 24
  print "Presser [O] pour une autre Grille ou [N] pour Sortir"
  locate 1, 25
  print "-------------------------------------------------------------------------------"
  locate 1, 1
[redoo]
  rep$ = input$(1)
  locate 0, 0
   if rep$ = "N" or rep$ = "n" then
       cls
       end
     else
       if rep$ = "O" or rep$ = "o" then
           goto [debut]
         else
           goto [redoo]
       end if
   end if
  end
'....................................................................
' Sub pour la Définition des grilles [3-5-7].
'....................................................................
  sub grille n
    l = int(26 - ((2 * n) + 1)) / 2 + 1 : c = int(80 - (5 * n)) / 2
    locate c, l
    print "+";: for x = 1 to n-1 : print "-----";: next x : print "----+";
    z = 0
    for y = 1 to n - 1
      z = z + 1 : locate c, l + z
        for x = 1 to n + 1  : print "¦    ";: next x
          z = z + 1 : locate c, l + z
          print "+";: for x = 1 to n - 1 : print "-----";: next x : print "----+"
    next y
    z = z + 1 : locate c, l + z
    for x = 1 to n + 1 : print "¦    ";: next x
    z = z + 1 : locate c, l + z
    print "+";: for x = 1 to n - 1 : print "-----";: next x : print "----+"
  end sub
'....................................................................

 
____________________
Castel

   
Le 24/10/2017 à 12h32

Administrateur

Groupe: Administrateur

Inscrit le: 04/03/2012
Messages: 2484
C'est une diablerie ! :)
Jusqu'à 7 c'est carré; mais au delà, c'est rectangulaire; remboursez ! :o

Bon, et ton truc avec bmp's, tu nous le montre ou c'est top sicrèt ?

Si tu veux récupérer les royalties sur "IMC" il faut que tu copie ton code et que tu en fasse un nouveau thread (dans "Général" ou dans "Open source")
Et comme ce code "Carrés" est opérationnel, tu va être bon pour lui faire subir le même sort. (sinon, pas de royalties ! (virtuelles les royalties, of course)
"Débutant", c'est pour poser des questions et les problèmes divers...
Je mets ton carré du diable dans la bibliothèque.
Et je retourne retourner le web à la recherche d'idées (peut être un générateur de recettes de cuisine à ingrédients aléatoires (j'aime l'innovation...) :crazy )
____________________
Roro

   
Le 24/10/2017 à 13h33

Libertynaute Actif

Groupe: Membre

Inscrit le: 10/10/2017
Messages: 121
Hello
Dans les 6 cas il y a autant de lignes que de colonnes.
Dans les cas 3, 5, 7 j'ai mis une grille, dans les autre cas il n'y en a pas .
Effectivement, visuellement, cela ne ressemble pas à un carré.
Peut être que ce serait plus joli avec graphisme et couleurs.
Concernant "les BMP", j'y travaille, pour mon niveau c'est ardu, c'est en très bonne voie, cela prend du temps.
Si je suis bloqué sur une procédure particulière, je demanderais de l'aide.
Je préfère y arriver(si possible) seul pour plus de motivation.

J'applique la démarche suivante allègrement :

ACTION ---> DECISION ---> ITERATION

qui sont les trois mamelles de la programmation.

Désolé, je me suis laissé un peu allé ......
A+
____________________
Castel

   
Le 24/10/2017 à 15h07

Administrateur

Groupe: Administrateur

Inscrit le: 04/03/2012
Messages: 2484
Bon, alors on attend les questions
En espérant pouvoir y répondre
____________________
Roro

   
Débutant » Carrés Particulier ...  

 |  |

1 Utilisateur en ligne : 0 Administrateur, 0 Modérateur, 0 Membre et 1 Visiteur
Utilisateur en ligne : Aucun membre connecté
Répondre
Vous n'êtes pas autorisé à écrire dans cette catégorie