ページ 1 / 1
多次元配列を使って行列の積を求める問題がわかりません
Posted: 2011年11月09日(水) 11:04
by you
今学校で習ったのは
for文,配列,if文,scanf,printfなどです
実際に作ってみましたが
意味のわからない動きをします
助けてください
#include <stdio.h>
#define N 3
int main()
{
int i,j,k;
double A[N][N],B[N][N],C[N][N];
for(i=0;i<N;i++) {
for(j=0;j<N;j++) {
scanf("%lf",&A
[j]);
scanf("lf",&B[j]);
}
}
for(j=0;j<N;j++) {
for(k=0;k<N;k++) {
C[j]+=A[k]*C[k][j];
}
}
for(i=0;i<N;i++)
{
for(j=0;j<N;j++)
{
printf("%lf",C[j]);
}
}
return 0;
}
[/code]
Re: 多次元配列を使って行列の積を求める問題がわかりません
Posted: 2011年11月09日(水) 12:23
by non
コード:
#include <stdio.h>
#define N 3
int main()
{
int i,j,k;
double A[N][N],B[N][N],C[N][N];
for(i=0;i<N;i++) {
for(j=0;j<N;j++) {
scanf("%lf",&A[i][j]);
scanf("lf",&B[i][j]); //間違い
}
}
// iのループがないけどいいの?また、配列cの初期化は?
for(j=0;j<N;j++) {
for(k=0;k<N;k++) {
C[i][j]+=A[i][k]*C[k][j];
}
}
for(i=0;i<N;i++)
{
for(j=0;j<N;j++)
{
printf("%lf",C[i][j]); //間違い
}
}
return 0;
}
Re: 多次元配列を使って行列の積を求める問題がわかりません
Posted: 2011年11月09日(水) 18:20
by you
cの初期値を決めて結構直してみたんですけど
まだ答えが出ません
どうしたらいいのでしょうか?
コード:
int main()
{
int i,j,k,l,m;
int a[3][3];
int b[3][3];
int c[3][3];
printf("行列 A の成分を入力:\n");
for (i = 0; i < 3; i++) {
for (j = 0; j < 3; j++) {
scanf("%lf", &b[i][j]);
}
}
printf("行列 B の成分を入力:\n");
for (i = 0; i < 3; i++) {
for (j = 0; j < 3; j++) {
scanf("%lf", &b[i][j]);
}
}
for ( l=0; l< 3; ++l){
for ( m=0; m< 3; ++m){
c[l][m] = 0;
for( k=0; k< 3; ++k){
c[l][m]+= a[l][k]*b[k][m];
}
printf("%5d ",c[l][m]);
}
printf("\n");
}
return 0;
}
Re: 多次元配列を使って行列の積を求める問題がわかりません
Posted: 2011年11月09日(水) 18:26
by みけCAT
きちんとインデントを行う癖を付けた方がいいと思います。
int型なのに%lfで入力しようとしているからですね。
Re: 多次元配列を使って行列の積を求める問題がわかりません
Posted: 2011年11月09日(水) 18:37
by you
やはりうまくいかないです
数値は出ますが
明らかに変な数値が出ます
コード:
#include<stdio.h>
int main()
{
int i,j,k,l,m;
double a[3][3];
double b[3][3];
double c[3][3];
printf("行列 A の成分を入力:\n");
for (i = 0; i < 3; i++) {
for (j = 0; j < 3; j++) {
scanf("%lf", &b[i][j]);
}
}
printf("行列 B の成分を入力:\n");
for (i = 0; i < 3; i++) {
for (j = 0; j < 3; j++) {
scanf("%lf", &b[i][j]);
}
}
for ( l=0; l< 3; ++l){
for ( m=0; m< 3; ++m){
c[l][m] = 0;
for( k=0; k< 3; ++k){
c[l][m]+= a[l][k]*b[k][m];
}
printf("%5d ",c[l][m]);
}
printf("\n");
}
return 0;
}
Re: 多次元配列を使って行列の積を求める問題がわかりません
Posted: 2011年11月09日(水) 18:44
by みけCAT
double型なのに%5dで出力しようとしているからです。
インデントも直すことをおすすめします。
Re: 多次元配列を使って行列の積を求める問題がわかりません
Posted: 2011年11月09日(水) 19:56
by beatle
コード:
#include<stdio.h>
int main()
{
int i,j,k,l,m;
double a[3][3];
double b[3][3];
double c[3][3];
printf("行列 A の成分を入力:\n");
for (i = 0; i < 3; i++) {
for (j = 0; j < 3; j++) {
scanf("%lf", &b[i][j]); // bで合ってる?
}
}
printf("行列 B の成分を入力:\n");
for (i = 0; i < 3; i++) {
for (j = 0; j < 3; j++) {
scanf("%lf", &b[i][j]);
}
}
for (l = 0; l < 3; ++l){
for (m = 0; m < 3; ++m){
c[l][m] = 0;
for(k = 0; k < 3; ++k){
c[l][m] += a[l][k] * b[k][m];
}
printf("%5d ",c[l][m]); // d -> lf
}
printf("\n");
}
return 0;
}
他の方も仰っていますが、こんな感じで、インデント(=字下げ)を適切にすれば、
どこからどこまでがfor文の中身なのか、などがよく分かります。
Re: 多次元配列を使って行列の積を求める問題がわかりません
Posted: 2011年11月09日(水) 20:02
by みけCAT
Re: 多次元配列を使って行列の積を求める問題がわかりません
Posted: 2011年11月09日(水) 22:54
by you
ありがとうございました
できました
改行の大切さを学べました
Re: 多次元配列を使って行列の積を求める問題がわかりません
Posted: 2011年11月10日(木) 08:06
by naohiro19
you さんが書きました:
改行の大切さを学べました
×改行 ○インデント(字下げ)
Re: 多次元配列を使って行列の積を求める問題がわかりません
Posted: 2011年11月10日(木) 19:29
by みけCAT
解決したのでしたら解決チェックをお願いします。