Constructia Unui Patrat Magic Impar

  • November 2019
  • PDF

This document was uploaded by user and they confirmed that they have the permission to share it. If you are author or own the copyright of this book, please report to us by using this DMCA report form. Report DMCA


Overview

Download & View Constructia Unui Patrat Magic Impar as PDF for free.

More details

  • Words: 547
  • Pages: 4
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): 4 9 2

3 5 7

8 1 6

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: 11 18 25 2 9

10 12 19 21 3

4 6 13 20 22

23 5 7 14 16

17 24 1 8 15

Despre program:

1. 2.

Programul permite 2 tipuri de afişare a pătratului magic: Direct − programul afişează pătratul chiar dacă nu o să încapă pe ecran 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 <stdio.h>#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'); }

Related Documents