アプリ版:「スタンプのみでお礼する」機能のリリースについて

3次行列の積を計算するプログラムを作成したいのですが、コンパイルして実行すると何も入力していないのに終了してしまいます。
コンパイル時、実行時ともにエラーが出ず、ネットで調べてもどこがおかしいのか良く分かりません。
よろしくお願いします。
環境はideoneです。
1.プログラム
#include <stdio.h>

int main(void) {
double a[3][3],
b[3][3],
c[3][3];

int i=0,j=0;// your code goes here
if(i<3)
{scanf("%lf,%lf,%lf,%lf,%lf,%lf",&a[i][0],&a[i][1],&a[i][2],&b[i][0],&b[i][1],&b[i][2]);
i++;}
i=0;
if(j<3)
{if(i<3)({c[i][j]=a[i][0]*b[0][j]+a[i][1]*b[1][j]+a[i][2]*b[2][j];
i++;});
j++;};


printf("%lf,%lf,%lf\n",c[0][0],c[0][1],c[0][2]);
printf("%lf,%lf,%lf\n",c[1][0],c[1][1],c[1][2]);
printf("%lf,%lf,%lf\n",c[2][0],c[2][1],c[2][2]);
return 0;

}
2.実行結果
Success #stdin #stdout 0s 9432KB
0.000000,0.000000,0.000000
0.000000,0.000000,0.000000
0.000000,0.000000,0.000000

A 回答 (2件)

> ネットで調べてもどこがおかしいのか良く分かりません。



書かれたプログラムの処理アルゴリズムを考えられたのは質問者様なのでしたらネットで調べても答えは見つかりません。
自ら考えた方法なのですから結果が求める物と違う場合は自ら探るしかありません。

プログラムは思った通りには動かず作った通りに動きます。
思いと実際の動きの違いを見つけるのがデバッグです。それをしましょう。

ちなみに、、、

> if(j<3)
> {if(i<3)({c[i][j]=a[i][0]*b[0][j]+a[i][1]*b[1][j]+a[i][2]*b[2][j];
> i++;});
> j++;};

ここの {if(i<3)({c[i][j]= って if(i<3)( の最後の ( がおかしくないですか?
閉じカッコは次の行の i++;}); の ) だと思うのですが、この () は何を意味するのか。。。

それで思ったのですがコーディング規約をもう少し考えられた方が読みやすく、読みやすいとミスを見つけやすいです。

例えば、、、

int main(void) {
double a[3][3],
b[3][3],
c[3][3];

ではなく

int main(void) {
  double a[3][3],
  b[3][3],
  c[3][3];

とし、
if文やfor文は

  if(i<3)
  {scanf("%lf,%lf,%lf,%lf,%lf,%lf",&a[i][0],&a[i][1],&a[i][2],&b[i][0],&b[i][1],&b[i][2]);
  i++;}

ではなく、

  if(i<3){
    scanf("%lf,%lf,%lf,%lf,%lf,%lf",&a[i][0],&a[i][1],&a[i][2],&b[i][0],&b[i][1],&b[i][2]);
    i++;
  }

とするとか。
参考まで。
    • good
    • 1
この回答へのお礼

ありがとう

ご指摘ありがとうございます!
確かにきれいに整えたらミスを簡単に見つけることが出来ました!
初歩的なところですね…汗 頑張ります

お礼日時:2017/09/28 01:21

3次行列ということで、プログラム中の「if」文の3箇所は「while」文に置き換えることで、3次行列が一気に入力できるようになるかと思います。



次に環境がideoneということですので、
if文をwhile文に置き換えたという前提でプログラムを実行(ideone it!)する前に、
ideone環境の「input」画面に下記のように記載しておくと、自動的に入力されます。

1.1,1.2,1.3,1.4,1.5,1.6
2.1,2.2,2.3,2.4,2.5,2.6
3.1,3.2,3.3,3.4,3.5,3.6
    • good
    • 1
この回答へのお礼

解決しました

ご丁寧にありがとうございます!
if文でなくwhile文ですね…汗 根本的なところを見落としてました。また、ミスを色々修正してから教えていただいたように入力したところうまくいきました!
求めていた答えに一番近かったのでベストアンサーとさせていただきます。
一応完成したソースコードを載せておきます(いらないと思いますが…(笑))
#include <stdio.h>

int main(void) {
double a[3][3],
b[3][3],
c[3][3];

int i=0,j=0;// your code goes here
while(i<3)
{scanf(
"%lf,%lf,%lf,%lf,%lf,%lf",&a[i][0],&a[i][1],&a[i][2],&b[i][0],&b[i][1],&b[i][2]);
i++;
};

i=0;
while(j<3){
while(i<3){
c[i][j]=a[i][0]*b[0][j]+a[i][1]*b[1][j]+a[i][2]*b[2][j];
printf("%lf\n",c[i][j]);
i++;
};
i=0;
j++;
};
printf("%lf,%lf,%lf\n",c[0][0],c[0][1],c[0][2]);
printf("%lf,%lf,%lf\n",c[1][0],c[1][1],c[1][2]);
printf("%lf,%lf,%lf\n",c[2][0],c[2][1],c[2][2]);
return 0;

}

お礼日時:2017/09/28 01:31

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!