fork download
  1. /*
  2. 行列xを表示
  3. 1 2
  4. 3 4
  5. 5 6
  6.  
  7. 行列yを表示
  8. 1 2 4
  9. 3 6 9
  10.  
  11. 行列xとyの積を表示
  12.  */
  13. /* 計算する行列 */
  14. #define MATRIXA {{1,2},{3,4},{5,6}} /* 行列A */
  15. #define MATRIXA_X 3 /* 行列Aの大きさ */
  16. #define MATRIXA_Y 2 /* 行列Aの大きさ */
  17. #define MATRIXB {{1,2,4},{3,6,9}} /* 行列A */
  18. #define MATRIXB_X 2 /* 行列Bの大きさ */
  19. #define MATRIXB_Y 3 /* 行列Bの大きさ */
  20. /*-- 以上定数 --*/
  21.  
  22.  
  23. /* 以下ソース */
  24. # define s float
  25. #define i int
  26. # define XX \
  27. void X
  28. # define PF "%f"
  29. # define a MATRIXA
  30. # define a1 MATRIXA_X
  31. # define a2 MATRIXA_Y
  32. # define p(o) f("%s\n",o)
  33. # define b1 MATRIXB_X
  34. #define S sizeof
  35. # define z 0
  36. # define f __builtin_printf
  37. # define b MATRIXB
  38. # define b2 MATRIXB_Y
  39. # define sz (4*la*lb)
  40. #define SP " "
  41. #define M main
  42. #define B ()
  43. #define E X B, 0;
  44. # define l(a) S(a)/S(a[0])
  45. # define al __builtin_alloca \
  46.  
  47. #define zr(o,c) \
  48. __builtin_memset(o,z,c)
  49. # define r for
  50. #define e \
  51. ""
  52. #define op PF SP
  53. XX B{
  54. s ma[a1][a2]=a, mb[b1][b2]=b;
  55. i la=l(ma),la2=l(ma[z]);i lb=l(mb[z]),n=z,x,y,Z;
  56. s* o=al(sz);zr(o,sz);
  57. r(Z=z;Z<la;++Z){r(y=z;y<lb;++y){
  58. r(x=z;x<la2;++x){o[n]+=ma[Z][x]*mb[x][y];
  59. }++n;
  60. }}
  61. r(n=z,y=z;y<lb;++y){r(x=z;x<la;++x){
  62. f(op,o[n++]);}
  63. p(e);
  64. }}i M B{return E}
  65.  
Success #stdin #stdout 0.01s 1720KB
stdin
Standard input is empty
stdout
7.000000 14.000000 22.000000 
15.000000 30.000000 48.000000 
23.000000 46.000000 74.000000