こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

C++の行列について

3元3列の連立方程式の係数を格納し、格納された結果を表示するプログラムを作成せよ。ただし次の2つのパターンでプログラムせよ。
1.係数を『初期化』を使って配列に入力する
2.キーボードから入力する


聞いてみたら問題に、そうは書いてあるけど、連立方程式は考えないでよくて、下の1.2をやるみたいなんですが、どうやるか分かる人いますか?

a00x+a01y+a02z=α
a10x+a11y+a12z=β
a20x+a21y+a22z=γ

ここまでやりましたが、違うみたいなんですが、あとどこをどう修正すればいいんですか?

#include <iostream>
using namespace std;

int main() {
int i,j;
double a00,a01,a02,a10,a11,a12,a20,a21,a22;
double a[3][3]={{a00,a01,a02},{a10,a11,a12},{a20,a21,a22}};

for(i=0;i<3;i++) {
for(j=0;j<3;j++) {
cout("%9f",a[i][j]);
} cout << '\n';
} cout << '\n';

for(i=0;i<3;i++) {
for(j=0;j<3;j++) {
cout << "a[%d][%d] = i,j\n";
cin >> "%lf",&a[i][j];
}
}

for(i=0;i<3;i++) {
for(j=0;j<3;j++) {
cout << "%9f",a[i][j];
} cout << "\n";
} cout << "\n";

return 0;
}

この辺りが多分違うんですよね
cout("%9f",a[i][j]);
cout << "%9f",a[i][j]);

投稿日時 - 2009-11-16 22:00:38

QNo.5453565

すぐに回答ほしいです

質問者が選んだベストアンサー

疑ってばかりで申し訳ないので、問題の全文が掲示してあった場合の例示します。

#include <iostream>

using namespace std;
const int dim = 3;

int main() {

double temp[dim][dim];

for(int y = 0; y < dim; ++y){
for(int x = 0; x < dim; ++x){
cin >> temp[y][x];
}
}
cout << endl;

double a[dim][dim]={{temp[0][0],temp[0][1],temp[0][2]},{temp[1][0],temp[1][1],temp[1][2]},{temp[2][0],temp[2][1],temp[2][2]}};

for(int y = 0; y < dim; ++y){
for(int x = 0; x < dim; ++x){
cout << temp[y][x];
cout << " ";
}
cout << endl;
}
cout << endl;

return 0;
}

投稿日時 - 2009-11-17 00:55:30

補足

ありがとうございます。
dimとtempとは何でしょうか?

あと、入力の方(2)はできたんですが、初期化する方(1)もあるんですが、これは2の方ですよね?

投稿日時 - 2009-11-17 01:00:50

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(6)

ANo.6

#3,4の補足への回答です。

> dimとtempとは何でしょうか?
const int dim = 3; // 3行3列の3、分からない場合はdimの代わりに3を直接書く
double temp[dim][dim]; // キーボードからの入力値を保存する配列

>あと、入力の方(2)はできたんですが、初期化する方(1)もあるんですが、これは2の方ですよね?
???、何のことやら意味が分かりません。

もしもキーボード入力するが、α、β、γだったら出題の文言がヒドイですが、
>ですが、連立方程式は無視して(解かなくていい)って事でやっていいって事です。
ということだと、出題者はをこの後、今回作ったプログラムを雛形にして、次回は連立方程式解くプログラムを作らせるつもりに思えます。キーボード入力するのは係数ではなく、α、β、γの可能性が高いと思います。出題者の回答が出たら、ぜひ教えてください。首を長くして待ってます。

投稿日時 - 2009-11-17 22:30:22

ANo.5

初期化は初期化でしかない思いますけど。
int a[3]={1,2,3};
ってのが初期化です。

投稿日時 - 2009-11-17 09:51:24

ANo.3

再々度の補足要求です。
「代入の事だと思います」「係数みたい」とか言わないで、出題者に尋ねてください。あと、問題文の全文が掲示されていますか?

『初期化』と強調するくらいだから、初期化子を使用するのでしょう。手順としては、キーボードから係数を入力して、その値で配列を初期化することになります。1、2とは手順が逆です。またこのような無理やりなプログラムを出題するとは私には考えられないのです。


情報が欠落しているように思えますので、
プログラム内に生で書いた数値で配列を初期化し、
キーボードからα、β、γを入力し、
1.1x + 2.2y + 3.3z = 4.4
というふうな問題なのではないかと、勝手な妄想をしています。

全文が掲示されており、「代入の事だと思います」「係数みたい」が、本当なのか明確になれば、回答します。

投稿日時 - 2009-11-17 00:25:29

補足

行列への値の設定とその表示をさせるって事です。
 
問題文は
3元3列の連立方程式の係数を格納し、格納された結果を表示するプログラムを作成せよ。ただし次の2つのパターンでプログラムせよ。
1.係数を『初期化』を使って配列に入力する
2.キーボードから入力する

ですが、連立方程式は無視して(解かなくていい)って事でやっていいって事です。つまり、3*3行列を、1と2に従って作るんです。

投稿日時 - 2009-11-17 00:47:49

ANo.2

再度質問です。

2.キーボードから入力する
問題文には「何を入力する」と記述されていますか。ひょっとして、係数ではなく、x、y、z、α、β、γなのでは。

投稿日時 - 2009-11-16 23:26:59

補足

係数みたいです

a00x+a01y+a02z=α
a10x+a11y+a12z=β
a20x+a21y+a22z=γ

a00=9
a01=8

a22=4
みたいな感じですね

投稿日時 - 2009-11-16 23:34:27

ANo.1

逆に質問です。この問題文は正確でしょうか?

1.係数を『初期化』を使って配列に入力する
初期化子を使えというのは本当ですか。代入の間違えということはないですか。

2.キーボードから入力する
何を入力するのですか。ひょっとして、係数ではなく、x、y、z、α、β、γなのでは。

「下の1.2」とは何処を見ればよいのですか?

格納された結果を表示したとき、どのように表示されることを期待しているのか示してください。

投稿日時 - 2009-11-16 23:09:31

補足

1と2の問の事です。
問題文はそう書いてあるけど、代入の事だと思います。

そして、2つ目のプログラムでは、

多分、
1つ目の係数を入力してください
6
2つ目の係数を入力してください
9

9つ目の係数を入力してください
5

結果的に
6 9 3
4 8 2
8 9 5
(今は3つ目から8つ目は適当なんですが。)

って感じで出ればいいんじゃないでしょうか?

投稿日時 - 2009-11-16 23:12:20