• 締切済み

ほかの人が作ったのも見たいのでよろしくお願いします

if,for,switch,while,do-while文、配列、バブルソートを用いて 入力した行列の掛け算を行うプログラムを作成せよ。 但し、行列数は任意に指定できるものにし、表示のさせ方にも気を付けること。 また、入力した行列の掛け算が行えない場合はエラーを返すようにすること。 <実行結果例1> 行列1:N×M行列数を入力してください N=2 M=2 行列2:O×P行列数を入力してください O=2 P=2 行列1:2×2行列を入力して下さい 1行1列を入力して下さい 1 1行2列を入力して下さい 2 2行1列を入力して下さい 3 2行2列を入力して下さい 4 行列2:2×2行列を入力して下さい 1行1列を入力して下さい 5 1行2列を入力して下さい 6 2行1列を入力して下さい 7 2行2列を入力して下さい 8 入力した行列1(2×2行列)×行列2(2×2行列)の計算結果は次ようなものです 19.00 22.00 43.00 50.00 <実行結果例2> 行列1:N×M行列数を入力してください N=2 M=3 行列2:O×P行列数を入力してください O=3 P=4 行列1:2×3行列を入力して下さい 1行1列を入力して下さい 1.21 1行2列を入力して下さい 2.35 1行3列を入力して下さい 2.65 2行1列を入力して下さい 1.2356 2行2列を入力して下さい 5.952165 2行3列を入力して下さい 5.23 行列2:3×4行列を入力して下さい 1行1列を入力して下さい 5.9685 1行2列を入力して下さい 86.3251 1行3列を入力して下さい 2.14 1行4列を入力して下さい 1.415 2行1列を入力して下さい 2 2行2列を入力して下さい 3.1415 2行3列を入力して下さい 0.717 2行4列を入力して下さい 2.36 3行1列を入力して下さい 2 3行2列を入力して下さい 3 3行3列を入力して下さい 8.23 3行4列を入力して下さい 4.956 入力した行列1(2×3行列)×行列2(3×4行列)の計算結果は次ようなものです 17.22 119.79 26.08 20.39 29.74 141.05 49.95 41.72 <実行結果例3> 行列1:N×M行列数を入力してください N=3 M=2 行列2:O×P行列数を入力してください O=4 P=3 入力した行列の掛け算は出来ません

みんなの回答

  • BLK314
  • ベストアンサー率55% (84/152)
回答No.5

ちょっと思いつきました。 fprintf, fscanf を使うのが正解かもしれないです。 fprintf,fscanfならprintf, scanfの親戚みたいなものなので、 Cの入門レベルの問題集なら、早めに紹介されている 可能性は十分あり、 質問者様のレベルにも合うかもしれないです。 ただ.......... こんな”おバカ"な私でも 一応C++で生計を立てている人間としては、 行列の演算問題に”ファイル入出力を用いる" という発想はありえないので... (後でCSVやなんかに保存するという仕様ならともかく 表示して終わりの場合 "ファイル"という発想そのものが出てきません) これでいいのか、確認お願いします。

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.4

いや, 細部はいろいろあるけどこんなものじゃないでしょうか>#3. 個人的には「2次元配列のようにアクセスしたいな」とは思いますけど. そもそも「質問者が気に入らないとしてもどこが気に入らないのかを言わない以上答える人間が考える必要はない」でしょう.

  • BLK314
  • ベストアンサー率55% (84/152)
回答No.3

この質問は http://questionbox.jp.msn.com/qa4965779.html の続きなんですね。 で私(#3)の回答が気に入らないということなのでしょう。 他の人とは 質問者様以外という意味でなく 私以外という意味だと思います。 推測ですが、お気に召さないのは 1)mallocを使っている   質問者様が使ったことのない関数なので使わないで欲しい 2) 自作関数がある   質問者様が関数を自作したことがないので、使わないで欲しい   全部main()の中で完結させて欲しい ということじゃないかなと思います。 私の言い分は 1)正確な行列数が実行時まで分からず、   上限も明示されていない状況ではmalloc等の   動的確保で実装するしか考えられない。 2) 私のスキル不足かもしれないが、   複雑な処理をmain()ひとつで考えられない。   ”分割統治"でなければ問題を解決できない。 以上を踏まえ A)配列はstaticもしくは自動変数 B)main関数内に全て実装 という条件でお願いします。 質問者様、スキル不足で申し訳ございません。 (一応それなりのスキルはあるつもりでしたが.... 自信過剰だったようです)

  • Gotthold
  • ベストアンサー率47% (396/832)
回答No.2

> ほかの人が作ったのも って事なら、まずは自分が作ったのを見せておいた方がいいんじゃない? 自分が作ったのと似たようなのが出てきたらつまらんだろうし、回答者側も無駄手間だ。 運が良ければ、作ったプログラムに対してけちつけてくれる人も現れるかもよ。

  • BLK314
  • ベストアンサー率55% (84/152)
回答No.1

> if,for,switch,while,do-while文、配列、バブルソートを用いて > 入力した行列の掛け算を行うプログラムを作成せよ。 > 但し、行列数は任意に指定できるものにし、表示のさせ方にも気を付けること。 "if,for,switch,while,do-while文、配列、バブルソート"のみで (mallocなどは用いずに) "行列数は任意に指定できるものにし" は不可能です。 代案 A)行列数は 2 x 3(等) 固定とする B)行列数は 10 X 10 以下の任意とする(行列数に上限を明示する) C)malloc等、メモリの動的割り当ての使用を許可する

関連するQ&A

  • 非常に困ってます

    C言語の問題集の回答がないので困っているので誰か教えてください。 私はまだ始めたばかりなので手におえません。 今私が理解しているif文、switch文、for文、while文、do-while文、配列、を 使用してでお願いします。 入力した行列の掛け算を行うプログラムを作成しなさい。 ただし、行列数は任意に指定できるものにし、表示のさせ方にも気を付けること。 また、入力した行列の掛け算が行えない場合はエラーを返すようにしなさい。 実行結果例1 行列1:N×M行列数を入力してください N=2 M=2 行列2:O×P行列数を入力してください O=2 P=2 行列1:2×2行列を入力して下さい 1行1列を入力して下さい 1 1行2列を入力して下さい 2 2行1列を入力して下さい 3 2行2列を入力して下さい 4 行列2:2×2行列を入力して下さい 1行1列を入力して下さい 5 1行2列を入力して下さい 6 2行1列を入力して下さい 7 2行2列を入力して下さい 8 入力した行列1(2×2行列)×行列2(2×2行列)の計算結果は次ようなものです 19.00 22.00 43.00 50.00 実行結果例2 行列1:N×M行列数を入力してください N=2 M=3 行列2:O×P行列数を入力してください O=3 P=4 行列1:2×3行列を入力して下さい 1行1列を入力して下さい 1.21 1行2列を入力して下さい 2.35 1行3列を入力して下さい 2.65 2行1列を入力して下さい 1.2356 2行2列を入力して下さい 5.952165 2行3列を入力して下さい 5.23 行列2:3×4行列を入力して下さい 1行1列を入力して下さい 5.9685 1行2列を入力して下さい 86.3251 1行3列を入力して下さい 2.14 1行4列を入力して下さい 1.415 2行1列を入力して下さい 2 2行2列を入力して下さい 3.1415 2行3列を入力して下さい 0.717 2行4列を入力して下さい 2.36 3行1列を入力して下さい 2 3行2列を入力して下さい 3 3行3列を入力して下さい 8.23 3行4列を入力して下さい 4.956 入力した行列1(2×3行列)×行列2(3×4行列)の計算結果は次ようなものです 17.22 119.79 26.08 20.39 29.74 141.05 49.95 41.72 実行結果例3 行列1:N×M行列数を入力してください N=3 M=2 行列2:O×P行列数を入力してください O=4 P=3 入力した行列の掛け算は出来ません

  • C言語をなるべく早く教えてください

    C言語の問題集の回答がないので困っているので誰か教えてください。 私はまだ始めたばかりなので手におえません。 今私が理解しているif文、switch文、for文、while文、do-while文、配列、を 使用してでお願いします。 入力した行列を表示させるプログラムを作成しなさい。ただし、行列は任意に指定できるものにし、表示のさせ方にも気を付けること。 実行結果例1 N×M行列数を入力してください N=3 M=2 3×2行列を入力して下さい 1行1列を入力して下さい 1 1行2列を入力して下さい 2 2行1列を入力して下さい 3 2行2列を入力して下さい 4 3行1列を入力して下さい 5 3行2列を入力して下さい 6 入力した3×2行列は次のようなものです 1.00 2.00 3.00 4.00 5.00 6.00 <実行結果例2> N×M行列数を入力してください N=3 M=4 3×4行列を入力して下さい 1行1列を入力して下さい 1 1行2列を入力して下さい 2 1行3列を入力して下さい 3 1行4列を入力して下さい 4.23 2行1列を入力して下さい 5.1224 2行2列を入力して下さい 92.12 2行3列を入力して下さい 2.12 2行4列を入力して下さい 36.54 3行1列を入力して下さい 2.213 3行2列を入力して下さい 9.56 3行3列を入力して下さい 8 3行4列を入力して下さい 5.23153 入力した3×4行列は次のようなものです 1.00 2.00 3.00 4.23 5.12 92.12 2.12 36.54 2.21 9.56 8.00 5.23

  • 分散共分散行列の逆行列

    以下の行列を考えます. 行列X(M行N列,成分の値は分散1のガウスノイズ) 行列Xの分散共分散行列S(M行M列), 行列Sの逆行列Y(M行M列) N=M+1のときはN≠M+1のときに比べて行列Yの各成分の大きさがかなり大きくなる,という結果が得られました. (計算にはMATLABの関数covとpinvを用いました.) これは数学的に正しいことなのでしょうか. また,正しいとしたらどうしてこのようなことが起こるのでしょうか. 行列Yの計算結果の例を以下に示します.(行列Yを500回算出し,それらの平均値を示しています.) http://wisteria.orz.ne.jp/download/pinvcovX.jpg 縦・横方向の軸は行列Yのインデックスを,高さ方向の軸は行列Yの成分の値を示しています. 上述した現象の原因についてご教授いただけると幸いです.

  • 行列をベクトルに(C言語)

    行列をベクトルに(C言語) m行n列の行列Aがあったとき、それをm×n行1列の行列(ベクトル)Bに するというプログラムを作りたいです。 これは、行列Aの1列目m行分の要素をそのまま行列Bの1行1列目に持っていき、 それを行列Aのn列の数だけ繰り返す、といった要領です(画像参照) つまり MATRIX B; B.m=A.m*A.n; B.n=1; return B; ということだと思うのですが、なかなかうまいくいきません。 また、構造体も使いたいので、 typedef struct { int m; int n; double *mat; } MATRIX; と宣言しました。 画像は説明のため、一応載せておきました。(例として4列の行列になっています) みなさんよろしくお願いします。

  • アルゴリズム(行列積)

    行列M1,M2,M3,M4が以下の数の行、列を持つ行列としたとき、行列積M1,M2,M3,M4をもっとも少ない演算回数で計算するには、どの順序で計算すればよいか? M1:20行60列 M2:60行5列 M3:5行20列 M4:20行100列 全くわかりません(>_<)みなさま手取り足取り教えてくださいm(__)m

  • エクセルでのセルに1桁だけの数字を入れての掛け算

    123×9という掛け算をエクセルでさせたいと考えています。 但し、次の様にセルに入力して、結果を出したく考えています。 1行2列に1、1行3列に2、1行4列に3、2行4列に9と入力し、計算して、3行1列に1、3行2列に1、3行3列に0、3行4列に7と表示させる。 上記を実施する為の計算式を教えて頂きたく、よろしくお願いいたします。

  • OpenCVの行列の掛け算

    OpenCVで行列同士の掛け算をしようとしています. 4×1の行列と4×4の行列を cvMullで掛け算しようとすると 行と列の次元が合わないので掛け算できません 二つの行列を掛け算する方法はありますか?

  • 行列の掛け算と逆行列にて最も少ない計算量は?

    宜しくお願い致します。 行列の計算の評価を探しています。 n×n実行列A,Bの掛け算ABと逆行列A^-1を計算するのに一番少ない計算法はどのくらいで評価できるのでしょうか? Time(ABの計算)=O(??), Time(A^-1の計算)=O(??) よろしければそのサイトもご紹介頂けましたら有難いです。

  • c言語のプログラムで行列の積を計算する

    指定された行・列数(それぞれ10以下とする)の行列 X, Y の積 Z = X × Y を求めるプログラムを作成せよ.行列の要素はすべて整数とする. このプログラムで行と列の成分を入力するときに、1列になってしまうのですがどうしたらちゃんと入力できますか? int main(void) { double A[10][10]; double B[10][10]; int i,j,m,n,p,k; printf("行列xの行数は?:"); scanf("%d",&m); printf("行列xの列数(行列yの行数)は?:"); scanf("%d",&n); printf("行列yの列数は?:"); scanf("%d",&p); printf("行列xを入力してください。\n"); for (i = 0; i < m; i++) { for (j = 0; j < n; j++) { scanf("%d", &A[i][j]); } } printf("行列yを入力してください。\n"); for (i = 0; i < n; i++) { for (j = 0; j < p; j++) { scanf("%d", &B[i][j]); } }

  • 行列 大学受験問題

    よろしくお願いします。 問題は、 A=(1 6) (2 -3) ↑行列です。 について次の各問にこたえよ A(P)=q(P)   (1)= (1) ↑行列です。 をみたす実数P, qの組を求めよです。 私は普通に計算したのですが、回答では、 (A-QE)(P)=(0)       (1)=(0) として計算していましたが、ここで質問です。 QE(P)    (1) の部分おかしくないですか? というのも(P)       (1) でくくるのはわかりますが、この場合 (P) (1) とEは計算できないと思うのです。 Eは行も列も二行ですか?それだと計算できないのでこれは成立しないと思います。行列が計算できるのは、左の行と右の列が同じ数の場合ですよね?この場合Eはどういう行列なのでしょう? 普通に計算しても答えがあっていたのでいいと思うのですが、少し疑問に思いました。わかりにくい質問ですみませんが、よろしくお願いします。