C言語関係掲示板

過去ログ

No.98.2行2列の行列の逆行列


はじめまして。2行2列の行列を入力し、その行列の求めるプログラムを作りたいんですが、以下のプログラムを考えてのですが、エラーが出て実行できません。フローチャートの観点を含めて教えていただけると助かります。
よろしくお願いします。

/*2次元配列と逆行列の計算*/

#include <stdio.h>

main()
{
short a[2][2],b[2][2],c,i,j

printf("2行2列の行列要素を入力してください。\n");
for(i=0;i<2;++i){
for(j=0;j<2,++j){
printf("%1d 行 %1d 列 の要素:",i+1,j+1);
scanf("%d",&a[i][j]);
}
}

c=a[0][0]*a[1][1]-a[0][0]*a[1][0];
if(c){
b[0][0]=a[1][1];
b[0][1]=-a[0][1];
b[1][0]=-a[1][0];
b[1][1]=a[0][0];
printf("|%3d %3d|-1 1|%3d %3d|\n",a[0][0],a[0][1],b[0][0],b[0][1])
printf("| | =---| |\n");
printf("|%3d %3d| %3d|%3d %3d|\n",a[1][0],a[1][1],b[1][0],b[1][1]);
}else{
printf("|%3d %3d|\n",a[0][0],a[0][1])
printf("| |の逆行列は存在しません。\n");
printf("|%3d %3d|\n",a[1][0],a[1][1])
}
}


初めまして。

麻由美さんが提示されたプログラム、コンパイルが通らないとのことですが、
見てみましたところ、エラーは全部「;」抜けでした。

ネット上で「逆行列」のアルゴリズムについて検索すると、
かなりの件数が上がってきますので、そちらを参照してみてください。


ども。

>ネット上で「逆行列」のアルゴリズムについて検索すると、
>かなりの件数が上がってきますので、そちらを参照してみてください。

はおそらくNxNの一般的な方法について書かれてあり、きっと勉強になります。


では。


2行2列の行列の逆行列
http://media.dj.kit.ac.jp/prog/matrix.html


ども。


どの時点(コンパイル時/実行時)で、どのようなエラー(ないし警告)が出ている
のかが書いてないのでわからないのですが、提示されたコードだと
・セミコロンがたらないところがある
・カンマとセミコロンをまちがえているところがある
・返却値がない
ので、少なくともそられは修正しないとならないと思います。コンパイル時の
エラーなら、まちがっている行と内容が表示されるはずなのでそれを参考に。

処理自体は基本的にはまちがっていませんが、行列bに1/cをかけてないです。
行列bに1/cをかけるような表示をしたいのか、計算してしまうのかはわかり
ませんが。

フローチャートの観点というのがどのようなものを期待しているのかがちょと
わかりませんが、現時点の書き込みを見た限りでは、障害とフローチャート
は関係ないように思えます。断言はできませんが。。


では。


ども。


>行列bに1/cをかけるような表示をしたいのか、計算してしまうのかはわかり
>ませんが。

計算してしまう場合は、shortだと割り算があるのでうまくいきません。ので、
実数型を使ってください。


では。


私も補足。

> c=a[0][0]*a[1][1]-a[0][0]*a[1][0];

c=a[0][0]*a[1][1]-a[0][1]*a[1][0];

ですね。

戻る


「初心者のためのポイント学習C言語」 Last modified:2002.01.11
Copyright(c) 2000-2002 TOMOJI All Rights Reserved