12 réponses
Salut,
Tu n'as pas bien cherché.
http://fr.wikipedia.org/wiki/Carr%C3%A9_magique_(math%C3%A9matiques)
Tu n'as pas bien cherché.
http://fr.wikipedia.org/wiki/Carr%C3%A9_magique_(math%C3%A9matiques)
Program C_Magic ; {uses wincrt;} uses crt; Var Tab : array [1..19,1..19] of integer; d,i,j,n : integer ; m ,s: integer; ok : boolean; Begin clrscr; Writeln('Programme de construction d''un Carr‚ Magique'); writeln; ok:=false; repeat begin Write('Dimension du Carr‚ : nombre impair entre 3 et 19 -> '); readln(d); if ((d>=3) and (d<=19)) then begin if ((d mod 2)=1) then ok:=true; end; end; until ok ; for i:=1 to d do begin for j:=1 to d do tab[i,j]:=0; end; n:=1; {position de d‚part} i:=1 ; j:=d div 2 +1; tab [i,j]:=n; { d‚placement - une ligne vers le haut, une colonne vers la droite - si une case est occup‚e, une colonne vers la gauche et deux lignes vers le bas - si on sort par le haut et par la droite : comme case occup‚e - si on sort du tableau par le haut on entre par le bas - si on sort du tableau par le bas on entre par le haut - si on sort du tableau par la droite on entre par la gauche - si on sort du tableau par la gauche on entre par la droite } While (n<(d*d)) do begin i:=i-1; j:=j+1; {si on sort par le haut et par la droite} if ((i=0) and (j>d)) then begin i:=i+2;j:=j-1; end; {si on sort par le bas } if i>d then i:=1; {si on sort par le haut } if i=0 then i:=d; {si on sort par la droite } if j>d then j:=1; {si on sort par la gauche } if j=0 then j:=d; if tab[i,j]>0 then begin i:=i+2;j:=j-1; end; n:=n+1; tab [i,j]:=n; { write(i, ' ' ,j , ' ' , n); readln; } end; writeln; Writeln(' Carr‚ Magique ', d,'x',d); m := d*(d*d+1) div 2; writeln(' Nombre Magique = ',m); writeln; for i:=1 to d do begin s:=0; writeln; for j:=1 to d do begin write(tab[i,j]:3 , ' '); end; writeln; writeln; end; readln; end.
Bonjour,
comment écrire un programme en langage Pascal qui affiche un carré avec les caractéristiques suivantes:
carré d'ordre impaire comprenant n lignes et n colonnes (n est impaire et >3 )tel que : quelque soit i,j a[i,j]=v
v inférieur ou égale à n² et supérieur ou égale à 1.Aucun élément n'est répété plus d'une fois et la somme des éléments de chaque ligne doit être égale à la somme des éléments de chaque colonne (somme de toutes les lignes égales à elles mêmes et à celles des colonnes et des deux diagonales du carré.)par exemple:pour n=5 on a 25 cases et la somme de chaque ligne ou colonne ou diagonale =65
Configuration: Windows XP
Firefox 2.0.0.12
comment écrire un programme en langage Pascal qui affiche un carré avec les caractéristiques suivantes:
carré d'ordre impaire comprenant n lignes et n colonnes (n est impaire et >3 )tel que : quelque soit i,j a[i,j]=v
v inférieur ou égale à n² et supérieur ou égale à 1.Aucun élément n'est répété plus d'une fois et la somme des éléments de chaque ligne doit être égale à la somme des éléments de chaque colonne (somme de toutes les lignes égales à elles mêmes et à celles des colonnes et des deux diagonales du carré.)par exemple:pour n=5 on a 25 cases et la somme de chaque ligne ou colonne ou diagonale =65
Configuration: Windows XP
Firefox 2.0.0.12
Bonjour,
Ce sujet est récurent sur CCM. Fais une recheche par pertinence, tu trouveras sans doute ce que tu cherches, sinon demande à Google.
Salut.
Ce sujet est récurent sur CCM. Fais une recheche par pertinence, tu trouveras sans doute ce que tu cherches, sinon demande à Google.
Salut.
Merci de votre reponse,mais cela ne m'aide pas .Vous pensez bien que si je suis arrivé au forum,c'est que je suis passé par les etapes de google,devellopez.com et tutti quanti.Si vous pouvez m"aider à ecrire un algo en pascal d'un carré magique d'ordre impair,qui sera affiché pour n=5 par exemple,merci.Si vous ne pouvez pas m'aider tant pis.
Salut.
Salut.
Bonjour,
comment écrire un programme en langage Pascal qui affiche un carré avec les caractéristiques suivantes:
carré d'ordre impaire comprenant n lignes et n colonnes (n est impaire et >3 )tel que : quelque soit i,j a[i,j]=v
v inférieur ou égale à n² et supérieur ou égale à 1.Aucun élément n'est répété plus d'une fois et la somme des éléments de chaque ligne doit être égale à la somme des éléments de chaque colonne (somme de toutes les lignes égales à elles mêmes et à celles des colonnes et des deux diagonales du carré.)par exemple:pour n=5 on a 25 cases et la somme de chaque ligne ou colonne ou diagonale =65
comment écrire un programme en langage Pascal qui affiche un carré avec les caractéristiques suivantes:
carré d'ordre impaire comprenant n lignes et n colonnes (n est impaire et >3 )tel que : quelque soit i,j a[i,j]=v
v inférieur ou égale à n² et supérieur ou égale à 1.Aucun élément n'est répété plus d'une fois et la somme des éléments de chaque ligne doit être égale à la somme des éléments de chaque colonne (somme de toutes les lignes égales à elles mêmes et à celles des colonnes et des deux diagonales du carré.)par exemple:pour n=5 on a 25 cases et la somme de chaque ligne ou colonne ou diagonale =65
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Bonjour,
Ce sujet est récurent sur CCM. Fais une recheche par pertinence, tu trouveras sans doute ce que tu cherches, sinon demande à Google.
Salut.
Ce sujet est récurent sur CCM. Fais une recheche par pertinence, tu trouveras sans doute ce que tu cherches, sinon demande à Google.
Salut.
Bonjour,
J'espère que c'est une blague, là. Mais je relève le défi parce ça m'ammuse.
Tu ne précises pas ce qui doit clignoter, la grille, les chiffres ou l'ensemble?
Salut.
J'espère que c'est une blague, là. Mais je relève le défi parce ça m'ammuse.
Tu ne précises pas ce qui doit clignoter, la grille, les chiffres ou l'ensemble?
Salut.
Bonjour,
Carré Magique 2ème version
Salut.
Carré Magique 2ème version
Program Magic2 ; {uses wincrt;} uses crt; Var Tab : array [1..19,1..19] of integer; d,i,j,n : integer ; m ,t,err: integer; ok : boolean; a:string; startX , startY , mrg: integer; procedure grille(d:integer); var i,j:integer; marge:string; const hg=201;hd=187;bd=188;bg=200;dt=205;dh=209;db=207; const dg=199;st=196;sx=197;dd=182;dv=186;sv=179;bb=32; begin mrg:=(80-(d*4)) div 2; marge:=''; for i:=0 to mrg-4 do marge:=marge+' '; writeln; textbackground(0); textcolor(3); {ligne du haut} startX:=whereX; startY:=whereY; write(marge,chr(hg),chr(dt),chr(dt),chr(dt)); for i:=1 to d-1 do write(chr(dh),chr(dt),chr(dt),chr(dt)); writeln(chr(hd)); {lignes intermediaires} for j:=1 to d-1 do begin write(marge,chr(dv),chr(bb),chr(bb),chr(bb)); for i:=1 to d-1 do write(chr(sv),chr(bb),chr(bb),chr(bb)); writeln(chr(dv)); write(marge,chr(dg),chr(st),chr(st),chr(st)); for i:=1 to d-1 do write(chr(sx),chr(st),chr(st),chr(st)); writeln(chr(dd)); end; write(marge,chr(dv),chr(bb),chr(bb),chr(bb)); for i:=1 to d-1 do write(chr(sv),chr(bb),chr(bb),chr(bb)); writeln(chr(dv)); {ligne du bas} write(marge,chr(bg),chr(dt),chr(dt),chr(dt)); for i:=1 to d-1 do write(chr(db),chr(dt),chr(dt),chr(dt)); writeln(chr(bd)); end; procedure deplace(x:integer; y:integer; nb:integer; tc:integer; tb:integer); var posX,posY:integer; begin textcolor(tc); textbackground(tb); posX:=startX+mrg-1+((x-1)*4); posY:=startY+1+((y-1)*2); gotoXY(posX-1,PosY); write(nb:3); gotoXY(PosX,PosY); delay(t); end; BEGIN textcolor(7);textbackground(0); clrscr; Writeln('Programme de construction d''un Carr‚ Magique'); writeln; ok:=false; repeat begin gotoXY(1,3); clreol; gotoXY(1,3); Write('Dimension du Carr‚ : nombre impair entre 3 et 19 -> '); readln(a); d:=0; val(a,d,err); if ((d>=3) and (d<=19)) then begin if ((d mod 2)=1) then ok:=true; end; end; until ok ; writeln; Writeln(' Carr‚ Magique ', d,'x',d); m := d*(d*d+1) div 2; writeln(' Nombre Magique = ',m); writeln; grille(d); textcolor(7);textbackground(0); ok:=false; repeat begin gotoXY(1,47); clreol; gotoXY(1,47);write('Vitesse de remplissage entre 50 et 300 : '); readln(a); val(a,t,err); if ((t>=50) and (t<=300)) then ok:=true; end; until ok ; gotoXY(1,47); clreol; for i:=1 to d do begin for j:=1 to d do tab[i,j]:=0; end; {position de d‚part} n:=1; i:=1 ; j:=d div 2 +1; tab [i,j]:=n; deplace(j,i,n,14,0); While (n<(d*d)) do begin i:=i-1; j:=j+1; {si on sort par le haut et par la droite} if ((i=0) and (j>d)) then begin deplace(j,i,0,4,4); deplace(j,i,0,0,0); i:=i+2;j:=j-1; end; {si on sort par le bas } if i>d then begin deplace(j,i,0,4,4); deplace(j,i,0,0,0); i:=1; end; {si on sort par le haut } if i=0 then begin deplace(j,i,0,4,4); deplace(j,i,0,0,0); i:=d; end; {si on sort par la droite } if j>d then begin deplace(j,i,0,4,4); deplace(j,i,0,0,0); j:=1; end; {si on sort par la gauche } if j=0 then begin deplace(j,i,0,4,4); deplace(j,i,0,0,0); j:=d; end; if tab[i,j]>0 then begin deplace(j,i,tab[i,j],14,4); deplace(j,i,tab[i,j],14,0); i:=i+2;j:=j-1; end; n:=n+1; tab [i,j]:=n; deplace(j,i,0,2,2); deplace(j,i,n,14,0); { write(i, ' ' ,j , ' ' , n); readln; } end; gotoXY(1,47);write('Termin‚'); readln; END. { d‚placement - une ligne vers le haut, une colonne vers la droite - si une case est occup‚e, une colonne vers la gauche et deux lignes vers le bas - si on sort par le haut et par la droite : comme case occup‚e - si on sort du tableau par le haut on entre par le bas - si on sort du tableau par le bas on entre par le haut - si on sort du tableau par la droite on entre par la gauche - si on sort du tableau par la gauche on entre par la droite }
Salut.
PS:
Le carré 19x19 est trop grand et l'affichage est décalé, il faut se limiter à 17x17 et peut-etre moins suivant le mode d'écran.
Le carré 19x19 est trop grand et l'affichage est décalé, il faut se limiter à 17x17 et peut-etre moins suivant le mode d'écran.
Salut, monsieur Amigo ,
Merci pour le programme . Juste une remarque : pourquoi si je change la position de depart du nombre 1 (Par exemple
3éme colonne et 4eme ligne) le carre affiché est erronné avec des zeros et une diagonale dont la somme est superieure à 65 exemple ce carre ne s'affiche pas malgré le changement de le position de depart.
4 12 25 8 16
11 24 7 20 3
23 6 19 2 15
10 18 1 14 22
17 5 13 21 9
Merci!!
Ps: Je n'ai pas encore testé votre nouveau programme.Je vous enverrai des nouvelles.merci encore pour votre disponibilité.
Merci pour le programme . Juste une remarque : pourquoi si je change la position de depart du nombre 1 (Par exemple
3éme colonne et 4eme ligne) le carre affiché est erronné avec des zeros et une diagonale dont la somme est superieure à 65 exemple ce carre ne s'affiche pas malgré le changement de le position de depart.
4 12 25 8 16
11 24 7 20 3
23 6 19 2 15
10 18 1 14 22
17 5 13 21 9
Merci!!
Ps: Je n'ai pas encore testé votre nouveau programme.Je vous enverrai des nouvelles.merci encore pour votre disponibilité.
Bonjour,
Le carré magique, ce n'est pas moi qui l'a inventé, loin s"en faut. Je me suis juste contenté d'appliquer la méthode trouvée sur le site http://fr.wikipedia.org/wiki/Carr%C3%A9_magique_(math%C3%A9matiques)
J'ai vu qu'il y existait d'autres algorithmes. Mais celui-là c'était le plus facile à mettre en œuvre.
J'ai remarqué qu'on pouvait aussi construire le carré magique avec une symétrie miroir, au lieu de démarrer au milieu de la première ligne, on démarre au milieu de la dernière ligne, et le déplacement est inversé, un pas vers le bas et un pas vers la gauche ....
Mais de toutes façon, quelle que soit la méthode, on ne peut pas démarrer n'importe où.
Désolé mais j'en sais pas plus. Peut-être le prof de maths saura te répondre.
Salut.
Le carré magique, ce n'est pas moi qui l'a inventé, loin s"en faut. Je me suis juste contenté d'appliquer la méthode trouvée sur le site http://fr.wikipedia.org/wiki/Carr%C3%A9_magique_(math%C3%A9matiques)
J'ai vu qu'il y existait d'autres algorithmes. Mais celui-là c'était le plus facile à mettre en œuvre.
J'ai remarqué qu'on pouvait aussi construire le carré magique avec une symétrie miroir, au lieu de démarrer au milieu de la première ligne, on démarre au milieu de la dernière ligne, et le déplacement est inversé, un pas vers le bas et un pas vers la gauche ....
Mais de toutes façon, quelle que soit la méthode, on ne peut pas démarrer n'importe où.
Désolé mais j'en sais pas plus. Peut-être le prof de maths saura te répondre.
Salut.
Monsieur Amigo,merci quand meme.Vous m'avez montré beaucoup de choses.
Salut!!
Salut!!
Salut, carré magique 3eme version (C++)
#include <iostream>
using namespace std;
#define max 3 //Le numéro de ligne et colonne
int t[max][max];
int virifie(int i,int j)
{
for(int k = 1; k < (max*max)+1; k++)
{
if(t[i][j] == k){return 1;}
}
return 0;
}
void vidé()
{
for(int i = 1; i < (max+1); i++)
{
for(int j = 1; j < (max+1); j++)
{
t[i][j] = 0;
}
}
}
void affiche()
{
for(int i = 1; i < (max+1); i++)
{
for(int j = 1; j < (max+1); j++)
{
if(j == max)
{
cout << t[i][j] << endl;
}
else
{
cout << t[i][j] << '\t';
}
}
}
}
void calculer()
{
int l = 0, c = 0,le = 0,ri = 0;
for(int i = 1; i < (max+1); i++)
{
for(int j = 1; j < (max+1); j++)
{
l = l + t[i][j];
c = c + t[j][i];
}
cout << l << " , ";
cout << c << " , ";
c = 0;
l = 0;
}
for(int i = 1, j = 1, r = max, rr = max; i < (max+1); i++, j++, r--, rr--)
{
le = le + t[i][j];
ri = ri + t[i][j];
}
cout << le << " , ";
cout << ri << " , ";
}
void main()
{
vidé();
int i = (max/2)+2, j = (max/2)+1;
for(int k = 1;k < ((max*max)+1); k++)
{
t[i][j] = k;
i++;
j++;
if(i == (max+1)){i = 1;}
if(j == (max+1)){j = 1;}
if(j == 0){j = max;}
int v = virifie(i,j);
if (v == 1)
{
i++;
j--;
}
if(i == (max+1)){i = 1;}
if(j == (max+1)){j = 1;}
if(j == 0){j = max;}
}
affiche();
calculer();
}
#include <iostream>
using namespace std;
#define max 3 //Le numéro de ligne et colonne
int t[max][max];
int virifie(int i,int j)
{
for(int k = 1; k < (max*max)+1; k++)
{
if(t[i][j] == k){return 1;}
}
return 0;
}
void vidé()
{
for(int i = 1; i < (max+1); i++)
{
for(int j = 1; j < (max+1); j++)
{
t[i][j] = 0;
}
}
}
void affiche()
{
for(int i = 1; i < (max+1); i++)
{
for(int j = 1; j < (max+1); j++)
{
if(j == max)
{
cout << t[i][j] << endl;
}
else
{
cout << t[i][j] << '\t';
}
}
}
}
void calculer()
{
int l = 0, c = 0,le = 0,ri = 0;
for(int i = 1; i < (max+1); i++)
{
for(int j = 1; j < (max+1); j++)
{
l = l + t[i][j];
c = c + t[j][i];
}
cout << l << " , ";
cout << c << " , ";
c = 0;
l = 0;
}
for(int i = 1, j = 1, r = max, rr = max; i < (max+1); i++, j++, r--, rr--)
{
le = le + t[i][j];
ri = ri + t[i][j];
}
cout << le << " , ";
cout << ri << " , ";
}
void main()
{
vidé();
int i = (max/2)+2, j = (max/2)+1;
for(int k = 1;k < ((max*max)+1); k++)
{
t[i][j] = k;
i++;
j++;
if(i == (max+1)){i = 1;}
if(j == (max+1)){j = 1;}
if(j == 0){j = max;}
int v = virifie(i,j);
if (v == 1)
{
i++;
j--;
}
if(i == (max+1)){i = 1;}
if(j == (max+1)){j = 1;}
if(j == 0){j = max;}
}
affiche();
calculer();
}
25 mars 2008 à 16:08
Merci et grand merci pour l'algo.Il est super.Vous étes un as.Je vais abuser de votre gentillesse pour vous demander de me completer le programme pourafficher les chiffres du carré dans une grille qui clignote et qui est située au milieu de l' ecran.Je suis un neophyte dans la programmation.Je vous remercie d'avance quelquesoit votre reponse et remerci.
22 avril 2013 à 17:24