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 impar

Citeste 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 );