
c言語の質問です。
5×5の行列で
300 300 300 300 300
300 〇 〇 〇 300
300 〇 1200 〇 300
300 〇 〇 〇 300
300 300 300 300 300
の形の行列を作りたいです。
〇は周り4方向の値を足したものを4で割った値にしたいです。
実際にプログラムを書いた結果が
300 300 300 300 300
300 150 0 150 300
300 0 1200 0 300
300 150 0 150 300
300 300 300 300 300 となりました。
#include <stdio.h>
#define M 5
#define N 5
int main(void) {
/* 4行5列の行列 */
int mat[5][5];
int y, x;
for(y=0;y<5;y++){
for(x=0;x<5;x++){
mat[y][x]=0;
}
}
for(y=2;y<3;y++){
for(x=2;x<3;x++){
mat[y][x]=1200;
}
}
for(y=0;y<5;y++){
for(x=0;x<5;x++){
mat[y][x]=0;
if(x==0 || x == 4 || y==0 || y==4 ){
mat[y][x]=300;
}
}
}
for(y=0;y<5;y++){
for(x=0;x<5;x++){
}
}
for(y=0;y<5;y++){
for(x=0;x<5;x++){
mat[y][x]=0;
if( x==0 || x == 4 || y==0 || y==4 ){
mat[y][x]=300;
}
}
}
for(y=0;y<5;y++){
for(x=0;x<5;x++){
if(x==2&&y==2){
mat[y][x]=1200;
}
}
}
for(y=0;y<5;y++){
for(x=0;x<5;x++){
if( x!=0 && x != 4 && y!=0 && y!=4 && (x!=2&&y!=2)){
mat[y][x]=(mat[y-1][x]+mat[y+1][x]+mat[y][x-1]+mat[y][x+1])/4;
}
}
}
for(y=0;y<5;y++){
for(x=0;x<5;x++){
printf( "%3d ", mat[y][x]);
}
printf("\n");
}
return 0;
}
if分のx=2かつy=2のときの表し方がよくない気がするのですがどこが問題か分かる方いらっしゃいませんか?
また反復計算の反復回数はどうやったら指定できるのですか?
この計算をexcelでやったときとくらべて、〇の値が小さいので反復回数が足りていないと思います。
A 回答 (2件)
- 最新から表示
- 回答順に表示
No.2
- 回答日時:
この問題
https://oshiete.goo.ne.jp/qa/13693773.html
と全くと言って良い程同じ。
取り立てて新しいモノもないし、これも本質的には「連立方程式を解け」と言う一文で要約出来る。
それだけ。
> この計算をexcelでやったときとくらべて、〇の値が小さいので反復回数が足りていないと思います。
そうじゃなくって、最初に手計算ででも何でも、解を求めてみたらいいじゃない。
「不確かな情報のまま不確かに解く」程無駄な事はない。
上のページでも書いたけど、Maxima辺りを使えば簡単に結果は見れる。
Maxima:
https://maxima.sourceforge.io/
このソフトは方程式を解いてくれる「数式処理システム」と言われるジャンルのソフトウェアで、それこそ大学の数学でも役立ってくれる「大学生の必需品」だ。
実装例:
https://www.ideone.com/kfIGZ2
No.1
- 回答日時:
&& (x!=2&&y!=2)
これだと、括弧の意味がなく、
&& x != 2 && y !=2
と同等で、つまり、x = 2の時や、y = 2の時は偽になるので、mat[y][x]へ代入されません。
なので、1200の上下左右には、値が代入されなくなります。
質問者さんがやりたいのは、x = 2 でかつ y = 2の時に、偽になるような論理式を作ればいいだけです。
必ず収束するのであれば、反復計算は、計算前と、計算後の値が全て変化がないか、近似値の条件に一致すれば終了すればいいと思います。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# このプログラミング誰か教えてくれませんか 1 2022/06/02 15:27
- C言語・C++・C# プログラミング c言語 4 2023/03/07 01:05
- C言語・C++・C# 並列プログラミングのπ計算について 1 2022/07/16 22:30
- C言語・C++・C# LU分解法のピボッティングについて(C言語/gcc-9) 3 2022/07/11 23:10
- C言語・C++・C# LU分解法のピボット選択機能実装について(C言語・gcc-9) 1 2022/07/22 15:20
- C言語・C++・C# C 言語の Gauss Jordan 法について 2 2022/12/28 11:16
- Java javaでのプログラム(配列)について質問です. 2 2022/10/14 22:27
- C言語・C++・C# プログラミング実行後に表示される値を答えよ #include <stdio.h> void main 4 2022/05/28 10:20
- C言語・C++・C# プログラミングのペーパーテスト 実行結果の表示を答えてください #include <stdio.h> 2 2022/07/09 16:14
- その他(プログラミング・Web制作) 十進BASICでの再帰についての質問です。 2 2022/11/18 09:17
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・「それ、メッセージ花火でわざわざ伝えること?」
- ・ゆるやかでぃべーと すべての高校生はアルバイトをするべきだ。
- ・【お題】甲子園での思い出の残し方
- ・【お題】動物のキャッチフレーズ
- ・人生で一番思い出に残ってる靴
- ・これ何て呼びますか Part2
- ・スタッフと宿泊客が全員斜め上を行くホテルのレビュー
- ・あなたが好きな本屋さんを教えてください
- ・かっこよく答えてください!!
- ・一回も披露したことのない豆知識
- ・ショボ短歌会
- ・いちばん失敗した人決定戦
- ・性格悪い人が優勝
- ・最速怪談選手権
- ・限定しりとり
- ・性格いい人が優勝
- ・これ何て呼びますか
- ・チョコミントアイス
- ・単二電池
- ・初めて自分の家と他人の家が違う、と意識した時
- ・「これはヤバかったな」という遅刻エピソード
- ・ゴリラ向け動画サイト「ウホウホ動画」にありがちなこと
- ・泣きながら食べたご飯の思い出
- ・一番好きなみそ汁の具材は?
- ・人生で一番お金がなかったとき
- ・カラオケの鉄板ソング
- ・自分用のお土産
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
繰り返し1行~28行までを順順に...
-
C言語で余りがマイナスになる場合
-
H8マイコン C言語でのプロ...
-
エクセルで特定の列が0表示の場...
-
配列数式の解除
-
教えて下さい
-
特定のPCだけ動作しないVBAマク...
-
Excel・Word リサーチ機能を無...
-
一つのTeratermのマクロで複数...
-
メッセージボックスのOKボタ...
-
エクセルマクロでワードの一ペ...
-
UserForm1.Showでエラーになり...
-
Excel マクロ VBA プロシー...
-
Excel vbaについての質問
-
Excel_マクロ_現在開いているシ...
-
VBAにて別ワークブック上の実行...
-
エクセルに張り付けた写真のフ...
-
ExcelのVBA。public変数の値が...
-
マクロのクリア設定がシートの...
-
エクセルのマクロをセルの値に...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
おすすめ情報