من ويكيبيديا، الموسوعة الحرة
في الرياضيات المسلية، الوَفْقُ[1][2] أو المربع السحري هي مصفوفة مربعة ذات حيز ، مكونة من أعداد صحيحة، بحيث أن حاصل جمع رقم في كلّ من الصفوف والأعمدة والأقطار الرئيسية يأدي لنفس الحاصل.[3] توجد مربعات سحرية مهما كان الحيز ، بإقصاء (أربع أعداد)، مع كون الحالة تعتبر أمرا بديهيا. يبين الشكل التالي مثالا لمربع سحري من
لاحظ أن مجموع كل سطر وعمود وقطر رئيسي يساوي دائما 15. يسمى هذا المجموع ثابتا سحريا وقيمته بصفة عامة:
قيم الثوابت السحرية لمربعات سحرية عادية ذات حيز هي متتالية: (البقية[4]).
هناك العديد من الطرق القديمة والحديثة لبناء مربعات سحرية.[5] يمكن تصنيف المربع السحري إلى ثلاثة أنواع رئيسية:
تتميز المربعات السحرية فردية الرتبة في إمكانية تدوير المربع حتى تصبح الصفوف والأعمدة أقطارا بينما الأقطار صفوفا وأعمدة. يكون مركز المربع السحري دائما تتم العملية بالشكل الاتي:
تمتاز المربعات السحرية التي يقبل ثابتها السحري القسمة على 4 بدون باقي بإمكانية تطبيق قاعدة التبديل بين المرافقات بعد كل خليتين. يمكن تلخيص العملية كما يلي
تعتبر عملية إنشاء المربعات السحرية التي لا تقبل القسمة على 4 بدون باقي صعبة نسبيا، كما أنها لا تتميز بالتماثل التام. أبسط الطرق تتمثل في إعادة تقسيم المربع إلى 4 مربعات صغيرة متكافئة كما يلي:
استخدام عملية الطرح في مكعب من الاعداد من 1 إلى 9
حساب المربعات السحرية يصبح سهلا بعد معرفة خوارزمياتها ومن الممكن برمجتها بأي لغة برمجة. مثلا باستعمال متصفح الويب ولغة جافا سكربت يمكن إنشاء دالة المربع السحري لأي عدد طبيعي كما يلي[6]
<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] += '\n';
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>
للمربع السحري بعض التطبيقات المسلية والعلمية أحيانا. يمكن بواسطته مثلا تحليل المساحات بشكل منتظم. مثال ذلك المسألة التالية:
لو كان لدينا 81 قطعة ذهبية بحيث أن كتلة كل قطعة تساوي ترتيبها. أي أن كتلة الأولى 1 غرام والثانية 2 غرام وهكذا وتطلب الأمر توزيعها بشكل عادل بين 9 أفراد. نلاحظ أن إعادة توزيع هذه القطع في مربع سحري 9×9 يعطي الحل الأمثل بحيث يصبح نصيب كل فرد أحد صفوف المربع. يمكن أيضا توزيعها بطريقة الأعمدة بحيث يكون نصيب كل فرد أحد أعمدة المربع السحري.
Seamless Wikipedia browsing. On steroids.