//
//   ラプラス方程式を解く。
//
#include <stdio.h>
#include <math.h>

int main(){
double v[17][13];
double vkeep;
int i,j,k;

for(i=0;i<17;i++){
for(j=0;j<13;j++){
v[i][j]=0.0;
}
}


for(i=0;i<17;i++){
v[i][0]=0.0;
v[i][6]=-30.0;
v[i][12]=0.0;
}

for(j=1;j<12;j++){
v[0][j]=20.0;
v[16][j]=-20.0;
v[9][j]=-10.0;
}

for(k=0;k<1000;k++){

for(i=1;i<16;i++){
for(j=1;j<12;j++){

if(i>=9 && j>=6) { break;} // 空いている部分を計算領域から省く

v[i][j]=0.25*(v[i][j-1]+v[i][j+1]+v[i-1][j]+v[i+1][j]);

}
} 

if(fabs(v[2][2]-vkeep)<=pow(10,-7)) {break;}  // 収束しているかをチェック

vkeep= v[2][2];
}


for(i=0;i<17;i++){
for(j=0;j<13;j++){
printf(" %d  %d  %f \n", i,j,v[i][j]);
}
printf("\n");
}


}
