掲示板利用宣言

 次のフォームをすべてチェックしてからご利用ください。

 私は

 題名と投稿者名は具体的に書きます。
 課題の丸投げはしません。
 ソースの添付は「HTML変換ツール」で字下げします。
 返信の引用は最小限にします。
 環境(OSとコンパイラ)や症状は具体的に詳しく書きます。
 返信の付いた投稿は削除しません。
 マルチポスト(多重投稿)はしません。

掲示板2

管理者用メニュー    ツリーに戻る    携帯用URL    ホームページ    ログ    タグ一覧

No.30080

転置行列
投稿者---kokosan60(2007/04/30 20:12:42)


転置行列を求めるプログラムを以下のように作ったら
結果が
行列 a :
0.100000 0.200000 0.300000
1.100000 1.200000 1.300000
2.100000 2.200000 2.300000

転置行列 b :
0.200000 0.099999 1.100000
0.300003 1.200000 1.300000
2.100000 2.200000 2.300000

となりうまくいきませんでした。どこが悪いのでしょうか。
また、結果では0.200000となっていますがこれを0.2というふうに小数点第1位までしか表示させないようにするためにはどうしたらいいのでしょうか。
それから、できればメイン関数でない関数部分を行列を表示させるためだけのものにする場合も教えてください。

#include <stdio.h>

void transpose(int x[][3]);

int main(void){
int i;
double a[3][3]
={{0.5,0.4,0.6},
{1.3,1.7,1.8},
{2.4,2.8,2.7}};

printf("行列 a :\n");
for(i=0; i<=2; i++){
printf("%f %f %f \n",
a[i][0], a[i][1], a[i][2]);
}

transpose(a);
printf("\n");

printf("転置行列 b :\n");
for(i=0; i<=2; i++){
printf("%f %f %f \n",
a[i][0], a[i][1], a[i][2]);
}

return 0;
}


void transpose(int x[][3])
{
int i, j;
float temp;
for(i=0; i<=1; i++){
for(j=i+1; j<=2; j++){
temp = x[i][j];
x[i][j] = x[j][i];
x[j][i] = temp;
}
}
}
戻る



この投稿にコメントする

削除パスワード

発言に関する情報 題名 投稿番号 投稿者名 投稿日時
<子記事> Re:転置行列 30081 -- 2007/04/30 20:32:50


No.30081

Re:転置行列
投稿者-----(2007/04/30 20:32:50)


ほんのちょっとしたサンプルです。

#include <stdio.h>

#define SIZE (3)

void printArray(double (*x)[SIZE]);
void transpose(double (*x)[SIZE]);

int main(void)
{
    double a[SIZE][SIZE] = {
        {0.5, 0.4, 0.6},
        {1.3, 1.7, 1.8},
        {2.4, 2.8, 2.7}
    };
    
    printf("【転置前】\n");
    printArray(a);
    
    transpose(a);
    
    printf("【転置後】\n");
    printArray(a);
    return 0;
}

void printArray(double (*x)[SIZE])
{
    int i, j;
    
    for (i = 0; i < SIZE; i++) {
        for (j = 0; j < SIZE; j++)
            printf("%.1f ", x[i][j]);
        putchar('\n');
    }
    putchar('\n');
}

void transpose(double (*x)[SIZE])
{
    int i, j;
    double t;
    
    for (i = 0; i < SIZE; i++) {
        for (j = 0; j < SIZE; j++) {
            if (j > i) {
                t = x[i][j];
                x[i][j] = x[j][i];
                x[j][i] = t;
            }
        }
    }
}




この投稿にコメントする

削除パスワード

管理者用メニュー    ツリーに戻る    携帯用URL    ホームページ    ログ    タグ一覧