数列が100個あるとして
そのうち連続した値を10個だけ別の処理をする場合は
for( int i = 0; i < 100; i++ ){
if( i < 10 ){
//処理の仕方を書く
}
else{
//処理の仕方を書く
}
}
といった感じで書いておけば処理はできると思いますが
値が不連続の場合はどのように書けば処理できますか?
もちろん下のようにすれば何とかなると思いますが下の場合、コードが非常に長くなってしまうため実用的ではないと思います。
for( int i = 0; i < 100; i++ ){
if( ( i == 5 ) || ( i == 17 )||(i == 23)||・・・ ){
//処理の仕方を書く
}
else{
//処理の仕方を書く
}
}
値が不連続の処理をしたいのです。
- softya(ソフト屋)
- 副管理人
- 記事: 11677
- 登録日時: 14年前
- 住所: 東海地方
- 連絡を取る:
Re: 値が不連続の処理をしたいのです。
処理する数値に素数などのルールがない場合、処理する数値だけを書いた配列を用意して、その配列とループ比較するという手があります。
まぁその数値のルール次第なので、場合によってはもっと良い方法があります。
まぁその数値のルール次第なので、場合によってはもっと良い方法があります。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。
Re: 値が不連続の処理をしたいのです。
偶数であるときとか、ある数列に従っているとかであればそのアルゴリズムを使って評価すればいいと思いますが、
規則性がない任意の番号にある処理をさせたいのであれば、
私なら各要素に属性を持たせて分岐させます
規則性がない任意の番号にある処理をさせたいのであれば、
私なら各要素に属性を持たせて分岐させます
ヽ(*゚д゚)ノ カイバー
- softya(ソフト屋)
- 副管理人
- 記事: 11677
- 登録日時: 14年前
- 住所: 東海地方
- 連絡を取る:
Re: 値が不連続の処理をしたいのです。
書き添えておくと、どの方法も一長一短ありますので、私の方式のほうが都合が良い場合もありますし、せんちゃさんの方式が都合が良い場合もあります。
状況に応じてチョイスされるべきです。
状況に応じてチョイスされるべきです。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。
Re: 値が不連続の処理をしたいのです。
例としての値は素数を使いましたが、実際に処理したいのは規則性は全くないとは全くいえませんね
ある画面の処理がこんな感じであったときに
■ ■ ■ ■ ■ ■
■ □ □ ■ ■ ■
■ □ □ ■ ■ ■
■ ■ ■ ■ ■ ■
■ ■ □ □ □ ■
■ ■ □ □ □ ■
□の時 の処理は~
それ以外の■の時の処理は~
と分けたかったのですが規則性が全くないとはいえません。
全体的には不規則でも個別的に考えるなら規則性はありますね。
ああ、これが解決法ですか・・・っと言う事はせん茶さんの案の関数を作ればいいのですね。
教えていただきありがとうございました。
ある画面の処理がこんな感じであったときに
■ ■ ■ ■ ■ ■
■ □ □ ■ ■ ■
■ □ □ ■ ■ ■
■ ■ ■ ■ ■ ■
■ ■ □ □ □ ■
■ ■ □ □ □ ■
□の時 の処理は~
それ以外の■の時の処理は~
と分けたかったのですが規則性が全くないとはいえません。
全体的には不規則でも個別的に考えるなら規則性はありますね。
ああ、これが解決法ですか・・・っと言う事はせん茶さんの案の関数を作ればいいのですね。
教えていただきありがとうございました。
Re: 値が不連続の処理をしたいのです。
for (int j = 0; j < 6; j++ ){
for( int i = 0; i < 6; i++ ){
if( ( j == 1 ) || ( j == 2) ){
if( ( i == 1 )|| ( i == 2 ) ){
syori_A();
}
}
else if( ( j == 4 ) || ( j == 5) ){
if( ( 1 < i ) && ( i < 5 ) ){
syori_A();
}
}
else{
syori_B();
}
}
}
このような感じですね。
for( int i = 0; i < 6; i++ ){
if( ( j == 1 ) || ( j == 2) ){
if( ( i == 1 )|| ( i == 2 ) ){
syori_A();
}
}
else if( ( j == 4 ) || ( j == 5) ){
if( ( 1 < i ) && ( i < 5 ) ){
syori_A();
}
}
else{
syori_B();
}
}
}
このような感じですね。
- softya(ソフト屋)
- 副管理人
- 記事: 11677
- 登録日時: 14年前
- 住所: 東海地方
- 連絡を取る:
Re: 値が不連続の処理をしたいのです。
それだとマップパーツのアトリビュート(対象の性質や設定などを示す付加情報。「属性」と訳される。)の処理に近い気がします。
今までの話が断片的な情報なので、アルゴリズムが最適かは判断できないです。
調整など変更要素が多いなら、プログラムコードとして埋め込んでしまうのでは無くデータとして持つべきですよ。
「アトリビュートとは【attribute】(attr) - 意味/解説/説明/定義 : IT用語辞典」
http://e-words.jp/w/E382A2E38388E383AAE ... 38388.html
今までの話が断片的な情報なので、アルゴリズムが最適かは判断できないです。
調整など変更要素が多いなら、プログラムコードとして埋め込んでしまうのでは無くデータとして持つべきですよ。
「アトリビュートとは【attribute】(attr) - 意味/解説/説明/定義 : IT用語辞典」
http://e-words.jp/w/E382A2E38388E383AAE ... 38388.html
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。
Re: 値が不連続の処理をしたいのです。
softyaさんのおっしゃるような視覚的に分かりやすい方法。