3×3行列と3×1行列の積を求めるプログラム

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
rubyxx
記事: 4
登録日時: 6年前

3×3行列と3×1行列の積を求めるプログラム

#1

投稿記事 by rubyxx » 6年前

先月プログラム作成を始めた初心者です.
3×3行列と3×1行列の積を求めるプログラムをネットの情報を参考に作りました。
行列内の数値が4桁ほどの整数の場合はうまく出力されます。しかし、実際は以下に示すような桁数が多く、少数が混じっている計算をしたいのですが、値が正しく出力されません。
直すべき点はどこか教えていただきたいです。
よろしくお願いします。

コード:

#include <stdio.h>
main()
{
int o, p, q;
	  	int v[3][3] = { {0.00003,0.000144,-0.010793 },{ -0.002352,0.00072,0.451383 },{0.072793,-0.053127,-12.838918} };
			int w[3][1]= { {-86157861},{-13984372},{-422159} };
			int z[3][1];

			for (o = 0; o< 3; ++o) {
			    for (p = 0; p< 1; ++p) {
			    z[o][p] = 0;
			for (q = 0; q< 3; ++q) {

			z[o][p] += v[o][q] * w[q][p];
			}
			printf("%d ", z[o][p]);
			}
			printf("\n");
			}
       return 0;
       }

アバター
みけCAT
記事: 6734
登録日時: 13年前
住所: 千葉県
連絡を取る:

Re: 3×3行列と3×1行列の積を求めるプログラム

#2

投稿記事 by みけCAT » 6年前

int型では少数を保存できないので、double型を使用すると改善するでしょう。
double型のデータをprintfで出力するには、%fなどが使用できますが、%dはint型のデータを出力する用なので使用できません。
また、インデントも整えるといいでしょう。
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

box
記事: 2002
登録日時: 13年前

Re: 3×3行列と3×1行列の積を求めるプログラム

#3

投稿記事 by box » 6年前

字下げ(インデント)の悪いくせが身に付いてしまうと、あとあとやっかいです。
今のうちから、せめて下記の感じくらいに書くようにする方がよいでしょう。
誤解しないでいただきたいのは、「何が何でも下記のように書け」ということではなく
(それ言い出すと宗教論争みたくなってしまう)、質問者さんのコードと当方のコードでは
どっちが見やすいですか?っていうことです。

あと、少数じゃなくって小数です。少数派とか少数精鋭とかだったら少数でいいんですけどね。

コード:

#include <stdio.h>

int main(void)
{
    double v[3][3] = {
        {  0.00003,   0.000144,  -0.010793 },
        { -0.002352,  0.00072,    0.451383 },
        {  0.072793, -0.053127, -12.838918 },
    };
    double w[3][1] = { -86157861, -13984372, -422159 };
    double z[3][1];
    int i, j, k;

    for (i = 0; i < 3; i++) {
        for (j = 0; j < 1; j++) {
            z[i][j] = 0;
            for (k = 0; k < 3; k++) {
                z[i][j] += v[i][k] * w[k][j];
            }
            printf("%f", z[i][j]);
        }
        printf("\n");
    }
    return 0;
}
実行結果
-42.123311
2019.145335
-108676.660567
バグのないプログラムはない。
プログラムは思ったとおりには動かない。書いたとおりに動く。

rubyxx
記事: 4
登録日時: 6年前

Re: 3×3行列と3×1行列の積を求めるプログラム

#4

投稿記事 by rubyxx » 6年前

ご指摘およびご教授ありがとうございます!
これからは見やすさも考えて作成していきたいと思います!

返信

“C言語何でも質問掲示板” へ戻る