困っています知恵を貸して下さい。おねがいします
Posted: 2009年10月31日(土) 22:51
/*
プログラム1-4(Prog1-4.cpp)
行列の演算と関数への引き渡し
*/
#include <stdio.h>
#include <stdlib.h>
#define ROWS 3 /* 行数 */
#define COLUMS 3 /* 列数 */
void add_matrix(const double (*)[COLUMS],
const double (*)[COLUMS],double (*)[COLUMS]);
void mlt_matrix(const double (*)[COLUMS],
const double (*)[COLUMS],double (*)[COLUMS]);
void dsp_matrix(const double (*)[COLUMS]);
int main(void)
{
double A[/url][COLUMS]={{1,2,3},{4,5,6},{7,8,9}};
double B[/url][COLUMS]={{9,8,7},{6,5,4},{3,2,1}};
double add[ROWS][COLUMS],mlt[ROWS][COLUMS];
int i,j;
for(i=0;i<ROWS;++i) /* 配列初期化 */
for(j=0;j<COLUMS;++j)
add[j]=mlt[j]=0;
add_matrix(A,B,add);
mlt_matrix(A,B,mlt);
puts("和A+B =");
dsp_matrix(add);
puts("積AB =");
dsp_matrix(mlt);
mlt_matrix(B,A,mlt);
puts("積BA ="); /* 一般に AB と BA は異なる */
dsp_matrix(mlt);
return EXIT_SUCCESS;
}
/* 3×3 型行列の和 */
void add_matrix(const double (*a)[COLUMS],
const double (*b)[COLUMS],double (*c)[COLUMS])
{
int i,j;
for(i=0;i<ROWS;++i)
for(j=0;j<COLUMS;++j)
c[j]=a[j]+b[j];
}
/* 3×3 型行列の積 */
void mlt_matrix(const double (*a)[COLUMS],
const double (*b)[COLUMS],double (*c)[COLUMS])
{
int i,j,k;
for(i=0;i<ROWS;++i)
for(j=0;j<COLUMS;++j)
for(k=0;k<COLUMS;++k)
c[j]+=a[k]*b[k][j];
}
/* 3×3 型行列の表示 */
void dsp_matrix(const double (*a)[COLUMS])
{
int i,j;
char ch;
for(i=0;i<ROWS;++i)
for(j=0;j<COLUMS;++j){
ch=((j+1)%COLUMS)?'\t':'\n';
printf("%10.6f%c",a[j],ch);
}
}
/* EOF */
行列
A三カッコ1 2 3 カッコ
4 5 6
B三カッコ9 8 カッコ
6 5
3 2
を使って2ABを算出するプログラムを作りたいですが、C言語初心者で全く手がつけられません・・・・。
すごく困っています。
教えて下さいお願いします。皆さんの知恵をかしてください。
プログラム1-4(Prog1-4.cpp)
行列の演算と関数への引き渡し
*/
#include <stdio.h>
#include <stdlib.h>
#define ROWS 3 /* 行数 */
#define COLUMS 3 /* 列数 */
void add_matrix(const double (*)[COLUMS],
const double (*)[COLUMS],double (*)[COLUMS]);
void mlt_matrix(const double (*)[COLUMS],
const double (*)[COLUMS],double (*)[COLUMS]);
void dsp_matrix(const double (*)[COLUMS]);
int main(void)
{
double A[/url][COLUMS]={{1,2,3},{4,5,6},{7,8,9}};
double B[/url][COLUMS]={{9,8,7},{6,5,4},{3,2,1}};
double add[ROWS][COLUMS],mlt[ROWS][COLUMS];
int i,j;
for(i=0;i<ROWS;++i) /* 配列初期化 */
for(j=0;j<COLUMS;++j)
add[j]=mlt[j]=0;
add_matrix(A,B,add);
mlt_matrix(A,B,mlt);
puts("和A+B =");
dsp_matrix(add);
puts("積AB =");
dsp_matrix(mlt);
mlt_matrix(B,A,mlt);
puts("積BA ="); /* 一般に AB と BA は異なる */
dsp_matrix(mlt);
return EXIT_SUCCESS;
}
/* 3×3 型行列の和 */
void add_matrix(const double (*a)[COLUMS],
const double (*b)[COLUMS],double (*c)[COLUMS])
{
int i,j;
for(i=0;i<ROWS;++i)
for(j=0;j<COLUMS;++j)
c[j]=a[j]+b[j];
}
/* 3×3 型行列の積 */
void mlt_matrix(const double (*a)[COLUMS],
const double (*b)[COLUMS],double (*c)[COLUMS])
{
int i,j,k;
for(i=0;i<ROWS;++i)
for(j=0;j<COLUMS;++j)
for(k=0;k<COLUMS;++k)
c[j]+=a[k]*b[k][j];
}
/* 3×3 型行列の表示 */
void dsp_matrix(const double (*a)[COLUMS])
{
int i,j;
char ch;
for(i=0;i<ROWS;++i)
for(j=0;j<COLUMS;++j){
ch=((j+1)%COLUMS)?'\t':'\n';
printf("%10.6f%c",a[j],ch);
}
}
/* EOF */
行列
A三カッコ1 2 3 カッコ
4 5 6
B三カッコ9 8 カッコ
6 5
3 2
を使って2ABを算出するプログラムを作りたいですが、C言語初心者で全く手がつけられません・・・・。
すごく困っています。
教えて下さいお願いします。皆さんの知恵をかしてください。