第11講 配列を関数に送る 
第5話 復元しないで転置・左右対称移動・上下対称移動・逆転置を重ねると?
復元しないで転置→左右対称移動→上下対称移動→逆転置としていくとどうなるか?
解答コード例
class t{
  public static void main(String args[]){
    int[][] x=new int[4][4];
    int[][] y=new int[4][4];
    int i,j;
    for(i=0;i<4;i++){
      for(j=0;j<4;j++){
        x[i][j]=(int)(Math.random()*100);
      }
    }
    System.out.println("配列xのデータ");
    for(i=0;i<4;i++){
      for(j=0;j<4;j++){
        if(x[i][j]<10){
          System.out.print (" ");
          System.out.print(x[i][j]);
          System.out.print (" ");
        }
        if(x[i][j]>=10 && x[i][j]<100){
          System.out.print (" ");
          System.out.print(x[i][j]);
          System.out.print (" ");
        }
        if(x[i][j]>=100 && x[i][j]<1000){
          System.out.print(x[i][j]);
          System.out.print (" ");
        }
      }
      System.out.println();
    }
    g(x,y);
    System.out.println("配列xを配列yにコピー");
    for(i=0;i<4;i++){
      for(j=0;j<4;j++){
        if(y[i][j]<10){
          System.out.print (" ");
          System.out.print(y[i][j]);
          System.out.print (" ");
        }
        if(y[i][j]>=10 && y[i][j]<100){
          System.out.print (" ");
          System.out.print(y[i][j]);
          System.out.print (" ");
        }
        if(y[i][j]>=100 && y[i][j]<1000){
          System.out.print(y[i][j]);
          System.out.print (" ");
        }
      }
      System.out.println();
    }
    f(x);
    System.out.println("配列xのデータを2倍");
    for(i=0;i<4;i++){
      for(j=0;j<4;j++){
        if(x[i][j]<10){
          System.out.print (" ");
          System.out.print(x[i][j]);
          System.out.print (" ");
        }
        if(x[i][j]>=10 && x[i][j]<100){
          System.out.print (" ");
          System.out.print(x[i][j]);
          System.out.print (" ");
        }
        if(x[i][j]>=100 && x[i][j]<1000){
          System.out.print(x[i][j]);
          System.out.print (" ");
        }
      }
      System.out.println();
    }
    h(x,y);
    System.out.println("配列xのデータ復元");
    for(i=0;i<4;i++){
      for(j=0;j<4;j++){
        if(x[i][j]<10){
          System.out.print (" ");
          System.out.print(x[i][j]);
          System.out.print (" ");
        }
        if(x[i][j]>=10 && x[i][j]<100){
          System.out.print (" ");
          System.out.print(x[i][j]);
          System.out.print (" ");
        }
        if(x[i][j]>=100 && x[i][j]<1000){
          System.out.print(x[i][j]);
          System.out.print (" ");
        }
      }
      System.out.println();
    }
    i(x);
    System.out.println("配列xの転置");
    for(i=0;i<4;i++){
      for(j=0;j<4;j++){
        if(x[i][j]<10){
          System.out.print (" ");
          System.out.print(x[i][j]);
          System.out.print (" ");
        }
        if(x[i][j]>=10 && x[i][j]<100){
          System.out.print (" ");
          System.out.print(x[i][j]);
          System.out.print (" ");
        }
        if(x[i][j]>=100 && x[i][j]<1000){
          System.out.print(x[i][j]);
          System.out.print (" ");
        }
      }
      System.out.println();
    }
    j(x);
    System.out.println("配列xの左右対称移動");
    for(i=0;i<4;i++){
      for(j=0;j<4;j++){
        if(x[i][j]<10){
          System.out.print (" ");
          System.out.print(x[i][j]);
          System.out.print (" ");
        }
        if(x[i][j]>=10 && x[i][j]<100){
          System.out.print (" ");
          System.out.print(x[i][j]);
          System.out.print (" ");
        }
        if(x[i][j]>=100 && x[i][j]<1000){
          System.out.print(x[i][j]);
          System.out.print (" ");
        }
      }
      System.out.println();
    }
    k(x);
    System.out.println("配列xの上下対称移動");
    for(i=0;i<4;i++){
      for(j=0;j<4;j++){
        if(x[i][j]<10){
          System.out.print (" ");
          System.out.print(x[i][j]);
          System.out.print (" ");
        }
        if(x[i][j]>=10 && x[i][j]<100){
          System.out.print (" ");
          System.out.print(x[i][j]);
          System.out.print (" ");
        }
        if(x[i][j]>=100 && x[i][j]<1000){
          System.out.print(x[i][j]);
          System.out.print (" ");
        }
      }
      System.out.println();
    }
    l(x);
    System.out.println("配列xの逆転置");
    for(i=0;i<4;i++){
      for(j=0;j<4;j++){
        if(x[i][j]<10){
          System.out.print (" ");
          System.out.print(x[i][j]);
          System.out.print (" ");
        }
        if(x[i][j]>=10 && x[i][j]<100){
          System.out.print (" ");
          System.out.print(x[i][j]);
          System.out.print (" ");
        }
        if(x[i][j]>=100 && x[i][j]<1000){
          System.out.print(x[i][j]);
          System.out.print (" ");
        }
      }
      System.out.println();
    }
  }
  public static void f(int x[][]){
    int i,j;
    for(i=0;i<4;i++){
      for(j=0;j<4;j++){
        x[i][j]*=2;
      }
    }
  }
  public static void g(int x[][],int y[][]){
    int i,j;
    for(i=0;i<4;i++){
      for(j=0;j<4;j++){
        y[i][j]=x[i][j];
      }
    }
  }
  public static void h(int x[][],int y[][]){
    int i,j;
    for(i=0;i<4;i++){
      for(j=0;j<4;j++){
        x[i][j]=y[i][j];
      }
    }
  }
  public static void i(int x[][]){
    int i,j;
    int[][] w=new int[4][4];
    for(i=0;i<4;i++){
      for(j=0;j<4;j++){
        w[i][j]=x[j][i];
      }
    }
    for(i=0;i<4;i++){
      for(j=0;j<4;j++){
        x[i][j]=w[i][j];
      }
    }
  }
  public static void j(int x[][]){
    int i,j;
    int[][] w=new int[4][4];
    for(i=0;i<4;i++){
      for(j=0;j<4;j++){
        w[i][j]=x[i][3-j];
      }
    }
    for(i=0;i<4;i++){
      for(j=0;j<4;j++){
        x[i][j]=w[i][j];
      }
    }
  }
  public static void k(int x[][]){
    int i,j;
    int[][] w=new int[4][4];
    for(i=0;i<4;i++){
      for(j=0;j<4;j++){
        w[i][j]=x[3-i][j];
      }
    }
    for(i=0;i<4;i++){
      for(j=0;j<4;j++){
        x[i][j]=w[i][j];
      }
    }
  }
  public static void l(int x[][]){
    int i,j;
    int[][] w=new int[4][4];
    for(i=0;i<4;i++){
      for(j=0;j<4;j++){
        w[i][j]=x[3-j][3-i];
      }
    }
    for(i=0;i<4;i++){
      for(j=0;j<4;j++){
        x[i][j]=w[i][j];
      }
    }
  }
}
実行結果
入門
なんと!? 転置→左右対称移動→上下対称移動→逆転置を重ねると、元に戻るではありませんか。
不思議ですね。

では、次の課題です。
1次元のときと同様に、3つの2次元配列配列x、y、zを用意して、
関数f、gは引数をx、zとし、
関数h,i,jは引数をx、yとします。
それぞれの関数任務は、
fはxのデータをzにコピーすること、
gはzのデータをxにコピーすること(すなわち復元が使命)、
hはx、yのデータを足してそのデータをxに入れること、
iはx、yのデータを掛けてそのデータをxに入れること、
jはx、yのデータの差を取りそのデータをxに入れることします。
ただし、演算をするときxは必ず最初の状態に復元してからということにします。
Java

第4話へ 第6話へ

戻る

VB講義へ
VB講義基礎へ
vc++講義へ第1部へ
初心者のための世界で一番わかりやすいVisual C++入門基礎講座
初心者のための世界で一番わかりやすいVisual Basic入門基礎講座

初心者のための世界で一番わかりやすいVBA入門講義(基礎から応用まで)
初心者のための VC++による C言語 入門 C++ 入門 基礎から応用まで第1部
初心者のための VC++による C言語 入門 C++ 入門 基礎から応用まで第2部
初心者のための VC++による C言語 入門 C++ 入門 基礎から応用まで第3部