العربية  

books programming magic squares

If you do not find what you're looking for, you can use more accurate words.

View more

برمجة المربعات السحرية (Info)


حساب المربعات السحرية يصبح سهلا بعد معرفة خوارزمياتها ومن الممكن برمجتها بأي لغة برمجة. مثلا باستعمال متصفح الويب ولغة جافا سكربت يمكن إنشاء دالة المربع السحري لأي عدد طبيعي كما يلي

<html> <script> function magic(n) { var i=0, j=(n-1)/2, p, k, m=[], m1=[], m2=[]; if(n<=0 || n-Math.ceil(n)!=0) return 'Error: n must be a positive integer..'; if(n==2) return 'Error: there is no magic square of 2x2 !'; if(n%4==0){//Double Even for (i=0; i<n/2; i++){ for (j=0; j<n; j++){ if((((i%4==0)||(i%4==3))&&((j%4==1)||(j%4==2)))||(((j%4==0)||(j%4==3))&&((i%4==1)||(i%4==2)))){ m1[j]= i*n+j+1; m2[n-j-1]= n*(n-i)-j; } else{ m1[j]= n*(n-i)-j; m2[n-j-1]=i*n+j+1; } } m[i]=m1; m[n-i-1]=m2; m1=[]; m2=[]; } } else if(n%2==0){//Single Even p = n/2; m1 = magic(p); for (i=0; i<2*p; i++)m[i]=[]; for (i=0; i<p; i++)for(j=0; j<p; j++){ m[i][j] = m1[i][j]*1; m[i][j+p] = m1[i][j]*1+2*p*p; m[i+p][j] = m1[i][j]*1+3*p*p; m[i+p][j+p] = m1[i][j]*1+p*p; } for(i=0; i<p; i++){ k = (n-2)/4; for(j=0; j<k; j++){ k2=m[i][j]; m[i][j]=m[i+p][j]; m[i+p][j]=k2; } } for(i=0; i<p; i++){ for(j=n-k+1; j<n; j++){ k2=m[i][j]; m[i][j]=m[i+p][j]; m[i+p][j]=k2; } } k2=m[k][0]; m[k][0]=m[k+p][0]; m[k+p][0]=k2; k2=m[k][k]; m[k][k]=m[k+p][k]; m[k+p][k]=k2; } else{// Odd for (k=1; k<=n*n; k++) { m2[i*n +j] = k; i--; j++; if (k%n == 0){ i += 2; j--; } if (j==n)j = 0; if (i==-1) i = n-1; } for(i=0;i<n;i++){for(j=0;j<n;j++)m1[j]=m2[i*n+j];m[i]=m1;m1=[];} } m[0][0]=' '+m[0][0]; for (k=0; k<n; k ++) m[k][n-1] += ' '; return m; } </script> <noscript> Java script must be enabled..<br /> </noscript> <body> Magic square of <input id=ent value="6"> <input type="button" value = " = " onclick ="disp.value=magic(ent.value*1)"> <br /><textarea id="disp" style="width: 780px; height: 300px"> </textarea> </body> </html>

Source: wikipedia.org