#include #define N 32 void initSquare(int); int createSquare(int, int, int); void displaySquare(int); int square[N][N]; main() { int order; while(1) { printf("Give an odd n: "); scanf("%d", &order); if (order % 2 != 0) break; } createSquare(0,0,order); displaySquare(order); } /* * Δημιουργεί ένα μαγικό τετράγωνο περιττής τάξης, n, ξεκινώντας από * το στοιχείο x,y του πίνακα squares. */ int createSquare(int x, int y, int n) { int i,j, counter, numOfSquares; int Inew, Jnew; if (x >= n || y >= n) return -1; if (n % 2 == 0) return -1; initSquare(n); i = x; j = y; numOfSquares = n * n; for (counter = 1; counter <= numOfSquares; counter++){ Inew = (i + 1) % n; Jnew = (j + 1) % n; if (square[Inew][Jnew] != 0) { Inew = (i - 1 + n) % n; /* Εναλλακτικά Inew = i - 1; if (Inew == -1) Inew = n - 1; */ Jnew = j; } square[Inew][Jnew] = counter; i = Inew; j = Jnew; } return 0; } void initSquare(int n) { int i,j; for (i=0; i < n; i++) for (j = 0; j < n; j++) square[i][j] = 0; } void displaySquare(int n) { int i,j; for (i = 0; i < n; i++) { for (j = 0; j < n; j++) printf("%3d ", square[i][j]); printf("\n"); } }