Referat Constructia Unui Patrat Magic Impar
Mai jos puteti citi fragmente din
Referat Constructia Unui Patrat Magic Impar si de asemenea puteti face
Download Referat Constructia unui patrat magic imparCiteste fragmente din Referat Constructia Unui Patrat Magic Impar
Construcюia unui pótrat magic impar
Problema:
Só se construiascó un pótrat magic de dimensiune n ( cu n impar),
adicó o matrice cu n linii si n coloane avònd ca elemente numerele
naturale 1, 2, ..., n^2 astfel þncòt sumele elementelor pe linii, pe
coloane si pe cele doua diagonale sa fie identice.
Introducere:
Un pótrat magic constó dintr-un tablou de numere aranjate þn forma
unui pótrat, astfel þncòt sumele elementelor din fiecare linie,
coloanó Ñâ€i din cele douó diagonale só fie identice; valoarea sumei
se numeÑâ€te numór magic. Un pótrat magic este de ordin n dacó pe o
laturó a sa sunt aÑâ€ezate n numere, iar þn componenÑŽa sa intró
numerele 1, 2, 3…, n2; atunci numórul magic poate fi calculat cu
formula: numór magic = n(n2+1)/2.
Existó un singur pótrat magic de ordinul 3 (cu toate có prin
rotaÑŽii Ñâ€i simetrii pot fi obÑŽinute 8 astfel de pótrate):
438951276
Pótratele magice de ordin 4 sunt þn numór de 880 (7040 dacó sunt
considerate Ñâ€i rotaÑŽiile Ñâ€i simetriile), iar numórul pótratelor
magice de ordin 5 este de circa 13.000.000.
Sunt cunoscute mai multe metode de obюinere a pótratelor magice, ele
diferind pentru pótratele de ordin par, respectiv impar.
Metoda:
O metodó foarte simpló constó þn urmótoarele acюiuni:
è Se plaseazó 1 þn centrul ultimei coloane;
è Se merge þn linie oblicó, dreapta-jos, cu numórul urmótor; dacó
se iese din pótrat prin partea dreaptó, se merge þn partea opusó,
þn stònga liniei unde trebuia depus numórul, iar dacó se iese prin
partea de jos a pótratului, se merge þn partea de sus a coloanei unde
trebuia depus numórul;
è Dupó ce se completeazó un grup de n numere, se merge cu o
cósuюó spre stònga, pe aceeaÑâ€i linie, pentru a se repeta apoi pasul
2 Ñâ€i a genera urmótorul grup de n numere.
Se obюine þn final urmótorul pótrat magic:
11104231718126524251913712212014893221615
Despre program:
Programul permite 2 tipuri de afiÑâ€are a pótratului magic:
1. Direct
- programul afiÑâ€eazó pótratul chiar dacó nu o só þncapó pe ecran
2. Pas cu pas
- dupó fiecare numór afiÑâ€at trebuie apósató o tastó
- se vor afiÑâ€a numai pótratele cu n<15. Pentru n>15 afiÑâ€area se va
face numai þn mod ‘Direct’
Sursa programului:
#include
#include unsigned char m[200][200];int n;
void af() for (int i=1;i<=n;i++) for (int j=1;j<=n;j++)
printf("%3d%c",m[i][j],j==n? n : );void mod_1() int i=n/2+1,j=1; for
(int nr=1;nr<=n*n;nr++)
if (nr%n==1) if (!(--j)) j=n;
else if (++i==n+1) i=1;
if (++j==n+1) j=1;
m[i][j]=(unsigned char)nr;
af();
void mod_2()
if (n>17)
printf("Nu pot afisa pas cu pas patrate cu n>17.Il afisez
normal...n");
mod_1();
return;
int poz=wherey()-1;
int i=n/2+1,j=1;
for (int nr=1;nr<=n*n;nr++)
if (nr%n==1) if (!(--j)) j=n;
else if (++i==n+1) i=1;
if (++j==n+1) j=1;
gotoxy(j*4,poz+i);
printf("%3d ",nr);
getch();
gotoxy(1,poz+n);
void main(void)
char c;
do
clrscr();
printf("N=");scanf("%d",&n);fflush(stdin);
if (n%2)
puts("1. Direct 2. Pas cu pas");
printf("Alegeti modul de afisare al patratului (1/2):");
unsigned char k;
scanf("%u",&k);
if (k==1) mod_1();
else mod_2();
printf("nAcesta este patratul magic de ordin %d.",n);
printf("nNumarul magic este %d.",n*(n*n+1)/2);
else printf("Ati introdus un numar par...");
printf("nContinuati? (d/n) ");c=getch();
while (c!= n );