今学校で習ったのは
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: 多次元配列を使って行列の積を求める問題がわかりません
#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;
}
non
Re: 多次元配列を使って行列の積を求める問題がわかりません
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: 多次元配列を使って行列の積を求める問題がわかりません
きちんとインデントを行う癖を付けた方がいいと思います。
int型なのに%lfで入力しようとしているからですね。
int型なのに%lfで入力しようとしているからですね。
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)
Re: 多次元配列を使って行列の積を求める問題がわかりません
やはりうまくいかないです
数値は出ますが
明らかに変な数値が出ます
数値は出ますが
明らかに変な数値が出ます
#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: 多次元配列を使って行列の積を求める問題がわかりません
double型なのに%5dで出力しようとしているからです。
インデントも直すことをおすすめします。
インデントも直すことをおすすめします。
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)
Re: 多次元配列を使って行列の積を求める問題がわかりません
#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文の中身なのか、などがよく分かります。
最後に編集したユーザー beatle on 2011年11月10日(木) 13:08 [ 編集 1 回目 ]
Re: 多次元配列を使って行列の積を求める問題がわかりません
printfでは%lfではなく%fです。
http://9cguide.appspot.com/r_mark.html
http://9cguide.appspot.com/r_mark.html
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)
Re: 多次元配列を使って行列の積を求める問題がわかりません
×改行 ○インデント(字下げ)you さんが書きました: 改行の大切さを学べました