動的配列の構造体の受け渡しについて教えていただきたいです。
typedef struct{
int class;
int **matrix;
}pattern_struct;
という構造体を用意しました。
メイン側で
int main(){
pattern_struct *sample,*prototype;
省略
for(k=0;k<9;i++){
for(i=0;i<height;i++){
for(j=0;j<width;j++){
prototype[0].matrix[i][j]=sample[k].matrix[i][j]+prototype[0].matrix[i][j];
}
}
for(i=0;i<height;i++){
for(j=0;j<width;j++){
prototype[1].matrix[i][j]=sample[k].matrix[i][j]+prototype[1].matrix[i][j];
}
}
~9まで続きます~
}
省略
}
少し変えていますが、このようなプログラムを記述しました。
記述を省略するためにmallocで作成した構造体配列の足し算をする関数を作りたいのですが、どのように記述するべきなのでしょうか。
No.1
- 回答日時:
for(i=0;i<height;i++){
for(j=0;j<width;j++){
prototype[0].matrix[i][j]=sample[k].matrix[i][j]+prototype[0].matrix[i][j];
}
}
for(i=0;i<height;i++){
for(j=0;j<width;j++){
prototype[1].matrix[i][j]=sample[k].matrix[i][j]+prototype[1].matrix[i][j];
}
}
の部分って,
for(i=0;i<height;i++){
for(j=0;j<width;j++){
prototype[0].matrix[i][j]=sample[k].matrix[i][j]+prototype[0].matrix[i][j];
prototype[1].matrix[i][j]=sample[k].matrix[i][j]+prototype[1].matrix[i][j];
}
}
のようにループをまとめられるように見えるんだが.... 気のせいか?
そしてよく考えれば k のループを中に入れることができる.
この回答への補足
少し変えたっていうところがその部分なんです。
実際は
for(k=0;k<9;i++){
switch(sample[k].class){
case 0:
for(i=0;i<height;i++){
for(j=0;j<width;j++){
prototype[0].matrix[i][j]=sample[k].matrix[i][j]+prototype[0].matrix[i][j];
}
}
break;
case 1:
for(i=0;i<height;i++){
for(j=0;j<width;j++){
prototype[1].matrix[i][j]=sample[k].matrix[i][j]+prototype[1].matrix[i][j];
}
}
break;
~9まで続きます~
}
}
こうなります。
No.2
- 回答日時:
「少し変えた」って, 全然意味違うじゃんかよ.
例えば sample[k].class の値が 0 なら
prototype[0].matrix[i][j]=sample[k].matrix[i][j]+prototype[0].matrix[i][j];
をまわすんだよね. で, 1 だったら
prototype[1].matrix[i][j]=sample[k].matrix[i][j]+prototype[1].matrix[i][j];
と.
switch の立場はいったいどこへ?
あと, 本当にこのままだとプログラムとしておかしいね.
No.3ベストアンサー
- 回答日時:
>switch の立場はいったいどこへとは?
#2でちゃんと説明してありますけど。
>prototype[0].matrix[i][j]=sample[k].matrix[i][j]+prototype[0].matrix[i][j];
switch (sample[k].class)
{
case 0:
prototype[0]~ // prototype[0] の 0 はsample[k].classの値と一緒
break;
case 1:
prototype[1]~// prototype[1] の 1 はsample[k].classの値と一緒
break;
~ これを9まで繰り返し
}
これは次に書き換えられるわけで
switch (sample[k].class)
{
case 0:
prototype[sample[k].class]~
break;
case 1:
prototype[sample[k].class]~
break;
~ これを9まで繰り返し
}
さらにswitchも意味がないので
prototype[sample[k].class].matrix[i][j]=sample[k].matrix[i][j]+prototype[sample[k].class].matrix[i][j];
になるわけですが。
なのでswitchの立場がない。
変えたのは少しのつもりなんでしょうけど質問に書かれてるのと処理的には別物になってますが、これであってるんですか?
回答ありがとうございます。
なるほど、良く分かりました。確かにswitchを使う必
要がありませんでした。
補足に書いてある方が正しい処理です。勝手に省略をしてしまい申し訳ないです。
何度もありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- 英語 Abstract Mucograft is collagen matrix was designed 1 2022/11/05 22:35
- C言語・C++・C# C言語初心者 構造体 課題について 2 2023/03/10 19:48
- C言語・C++・C# C言語(構造体) 3 2022/07/05 20:08
- C言語・C++・C# 未解決の外部シンボル _printfが関数_mainで参照されました 1 2022/09/18 15:28
- C言語・C++・C# プログラムが書けません。 4 2023/01/22 22:57
- C言語・C++・C# C言語初心者 構造体 課題について 1 2023/03/10 19:30
- C言語・C++・C# このプログラミング誰か教えてくれませんか 1 2022/06/02 15:27
- C言語・C++・C# C言語プログラム変更 2 2022/12/21 15:03
- Java javaでのプログラム(配列)について質問です. 2 2022/10/14 22:27
- C言語・C++・C# 並列プログラミングのπ計算について 1 2022/07/16 22:30
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
pythonのerrorコード
-
パイソンのクラス
-
No route matches [GET] "/post...
-
Rubyについて質問です
-
テンプレートの特殊化でコンパ...
-
Ruby
-
クラス名やモジュール名の競合...
-
Ruby ハッシュ継承クラス、作成...
-
ぱいソン
-
Ruby:シルバーについて
-
実行時エラー450:引数の数が一...
-
正規表現で両端に文字列を置換
-
get() と find() の違いについて
-
VBA/GetTickCountの49.7日の境...
-
Csvファイルの最終行を取得する...
-
Rubyでクラスファイルをディレ...
-
エラー「メソッドまたはデータ...
-
10円未満を切り捨てる方法は?
-
VBAで型が一致しないエラー(バ...
-
Ruby 特異メソッドのnewが先に...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
pythonのerrorコード
-
What class are you in? には何...
-
パイソンのクラス
-
No route matches [GET] "/post...
-
クラス名やモジュール名の競合...
-
Rubyについて質問です
-
変数の隠蔽とは?
-
HSTLやSSTL等のI/Oピン
-
クラスの再定義について(C++)
-
redirect先でredirect元の変数...
-
Ruby ハッシュ継承クラス、作成...
-
classのdelete
-
Rubyの質問です
-
PostScript言語で定積分の計算
-
class roomとclassroom どちら...
-
テンプレートの特殊化でコンパ...
-
get() と find() の違いについて
-
「arg」は何の略?
-
エラー「メソッドまたはデータ...
-
教えてください。vb5.0
おすすめ情報