Changes between Version 6 and Version 7 of Ex02課題2015


Ignore:
Timestamp:
Apr 20, 2015 5:38:57 PM (11 years ago)
Author:
nakasato
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • Ex02課題2015

    v6 v7  
    8585 
    8686= 課題5:行列積 = 
     87以下のC言語で書かれた行列乗算のプログラムを参考にして、行列積C = A x Bを計算するプログラムを作ってください。 
    8788 
     89== 行列A == 
     90{{{ 
     910  1  0  0 
     922  0  0  0  
     930  0  0  3 
     940  0  4  0 
     95}}} 
     96 
     97== 行列B == 
     98{{{ 
     991  2  3  4 
     1005  6  7  8  
     1019 10 11 12 
     10213 14 15 16 
     103}}} 
     104 
     105== C言語バージョン == 
     106{{{ 
     107 
     108#include <stdio.h> 
     109main() 
     110{ 
     111  static int mat1[4][4] = { 
     112    { 1, 0, 0, 0 }, 
     113    { 0, 1, 0, 0 }, 
     114    { 0, 0, 1, 0 }, 
     115    { 0, 0, 0, 1 }, 
     116  }; 
     117  static int mat2[4][4] = { 
     118    {  1,  2,  3,  4 }, 
     119    {  5,  6,  7,  8 }, 
     120    {  9, 10, 11, 12 }, 
     121    { 13, 14, 15, 16 }, 
     122  }; 
     123  static int result[4][4]; 
     124 
     125  int  i, j, k; 
     126  int  s; 
     127  int  cnt, mask, m1, m2; 
     128 
     129  /* 行列の乗算 */ 
     130  for( i = 0; i < 4; i++ ) { 
     131    for( j = 0; j < 4; j++ ) { 
     132      s = 0; 
     133      for( k = 0; k < 4; k++ ) { 
     134        mask = 1; 
     135        m1 = mat1[i][k];  /* 被乗数 */ 
     136        m2 = mat2[k][j];  /* 乗数 */ 
     137        /* 本来は下のループで32回繰り返すべきだが、 
     138           乗数が32未満なので、計算時間短縮のため5回だけとした */ 
     139        for( cnt = 0; cnt < 5; cnt++ ) { 
     140          if( m2 & mask ) { 
     141            s += m1;     
     142          } 
     143          mask <<= 1; 
     144          m1 <<= 1; 
     145        } 
     146      } 
     147      result[i][j] = s; 
     148    } 
     149  } 
     150 
     151  /* 結果の表示 */ 
     152  for( i = 0; i < 4; i++ ) { 
     153    for( j = 0; j < 4; j++ ) { 
     154      printf("%3d", result[i][j]);  
     155    } 
     156    printf("\n"); 
     157  } 
     158} 
     159}}} 
     160 
     161== テンプレート == 
    88162作成ファイル名は「ex02_p5.s」としてください。 
     163 
     164{{{ 
     165        .data  
     166A:      .word 0  
     167        .word 1  
     168        .word 0  
     169        .word 0  
     170    ... 配列Aの要素を書く ....  
     171 
     172B:      .word 1  
     173        .word 2  
     174        .word 3  
     175        .word 4  
     176    ... 配列Bの要素を書く ....  
     177 
     178C:      .space 64 ## 結果行列の保存用 
     179 
     180       ... 必要な変数の領域を追加する .... 
     181        .text  
     182main:       ... プログラムを書く ....  
     183 
     184 
     185exit:   j exit 
     186 
     187}}}