質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Visual Studio

Microsoft Visual StudioはMicrosoftによる統合開発環境(IDE)です。多種多様なプログラミング言語に対応しています。

XAML

XAML(Extensible Application Markup Language)はWPF、Silverlight、Windows PhoneそしてWindows Store appsでユーザーインターフェースを定義するために使われるXML言語です。

teratail

teratail(テラテイル)は、プログラミングに特化した日本語Q&Aサイトです。

Q&A

解決済

7回答

19636閲覧

商と余りを一度に算出したい

b1ackc0ffee

総合スコア267

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Visual Studio

Microsoft Visual StudioはMicrosoftによる統合開発環境(IDE)です。多種多様なプログラミング言語に対応しています。

XAML

XAML(Extensible Application Markup Language)はWPF、Silverlight、Windows PhoneそしてWindows Store appsでユーザーインターフェースを定義するために使われるXML言語です。

teratail

teratail(テラテイル)は、プログラミングに特化した日本語Q&Aサイトです。

0グッド

1クリップ

投稿2015/11/02 03:00

編集2015/11/02 05:35

①商が0か、2の倍数の時
②それ以外の場合

という式をたてたいのですが、
DivRemは使えないようでエラーが出てしまいます。

どこを直せばよいのでしょうか。

現在の式は下記です。

c#

1 int count = items.Count(); 2 int sho = 0; 3 4 for (int index = 0; index < count; index++) 5 { 6 7 //sho = Math.DivRem(index, 2, out amari); 8 sho = index / 2; 9 10 //インデックス番号を割り振り、item変数に入れる 11 LinkListItem item = items[index]; 12 13 //商が0か2の倍数の時は背景を白に、それ以外の場合はグレーに 14 if (sho % 2 == 0 || sho == 0 ) 15 { 16 item.backgroundBrush = (SolidColorBrush)Resources["BackGroundWhite"]; 17 } 18 else 19 { 20 item.backgroundBrush = (SolidColorBrush)Resources["BackGroundLightGray"]; 21 } 22 } 23

宜しくお願いいたします。

追記

イメージ説明

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答7

0

こんにちは。

他の方が仰っているとおり、対象となる数値が意図どおりかは判断できませんが、
提示のコードはどういったエラーになりますか?

ちなみにWindowsRuntimeで使えないMath.DivRemの実体は、以下の静的メソッドなので自分で実装して使用されても良いと思います。

C#

1public static int DivRem(int a, int b, out int result) 2{ 3 result = a % b; 4 return a / b; 5}

投稿2015/11/02 03:35

Tak1wa

総合スコア4791

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

yuba

2015/11/02 04:54

IDIV命令一発ではなくてこんなILコードだったんですね。騙された気分。StackOverFlowでもこの事実に面食らっている人たちがいました。
b1ackc0ffee

2015/11/02 06:02

計算式ありがとうございます。 「MathにDivRemの定義がありません。」 というエラーが出ますがどうしてでしょうか? 今回はamariは必要ないような気がしてきたので、商だけで大丈夫です^^ GridViewのItemに背景色を代入していきたいです。 [2×データの数だけ上下に自動スクロール]という仕様で、 1行ずつ交互に背景色を設定したいのですが、 この式であっていますでしょうか? int count = items.Count(); int sho = 0; for (int index = 0; index < count; index++) { //sho = Math.DivRem(index, 2, out amari); sho = index / 2; //インデックス番号を割り振り、item変数に入れる LinkListItem item = items[index]; //商が0か2の倍数の時は背景を白に、それ以外の場合はグレーに if (sho % 2 == 0 || sho == 0) { item.backgroundBrush = (SolidColorBrush)Resources["BackGroundWhite"]; } else { item.backgroundBrush = (SolidColorBrush)Resources["BackGroundLightGray"]; } } 宜しくお願いいたします。
guest

0

2とか、4、8などの、2のn乗の数での割算と余りは、算術右シフト演算と、論理積で代用できます。
(ただし、一般的は形式のintegerに限る)

2の小とあまりの時
sho = target >> 1;
amari = target & 1;

4の小とあまりの時
sho = target >> 2;
amari = target & 3;

投稿2015/11/04 05:14

T.Kanno

総合スコア915

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

nを整数とすると、偶数は2nです。
ということは、「2で割った商が偶数になる数」というのは 22n または 22n+1になります。
であれば、indexを4で割った余りが1以下か、で判定すればいいのではないでしょうか?

投稿2015/11/02 06:17

swordone

総合スコア20651

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

(indexを2で割ったときの)
①商が0か、2の倍数の時
②それ以外の場合

で処理を分岐したいだけであれば、単純に

C#

1for (int index = 0; index < count; index++) 2{ 3 int amari = index % 4; 4 if (amari == 0 || amari == 1) 5 { 6 // ①商が0か、2の倍数の時 7 item.backgroundBrush = (SolidColorBrush)Resources["BackGroundWhite"]; 8 } 9 else 10 { 11 // ②それ以外の場合 12 item.backgroundBrush = (SolidColorBrush)Resources["BackGroundLightGray"]; 13 } 14}

で、実現できます。

ご質問に添付いただいた手書きのメモ帳と照らし合わせて、確認してみて下さい。

話はそれますが、0も2の倍数(0 = 2 * 0)ですw

投稿2015/11/02 06:14

KiyoshiMotoki

総合スコア4791

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

ベストアンサー

こんにちは

今回のケースでは、余りは見なくてもいいんじゃないですか?
int型の除算の場合、以下のように商が求められます(sho変数に入ります)。
0 / 2 = 0
1 / 2 = 0
2 / 2 = 1
3 / 2 = 1
4 / 2 = 2
5 / 2 = 2
6 / 2 = 3
・・・

ですので、b1ackc0ffeeさんの載せていただいたコードでいいと思います。
ただし、sho == 0 は不要です。

以上です。

投稿2015/11/02 05:57

daichan

総合スコア225

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

b1ackc0ffee

2015/11/02 06:07

ありがとうございます。 別の理由で実行できませんでしたが、確かめたらちゃんとできていました^^
guest

0

C#

1int amari; 2sho = Math.DivRem(index, 2, out amari);

indexを2で割った商(整数):shoが0又は2の倍数である」
って
index = 0,1,4,5,8,9,...となりますが
これって意図通りなのでしょうか?

投稿2015/11/02 03:20

ozwk

総合スコア13521

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

b1ackc0ffee

2015/11/02 05:32

ありがとうございます。 indexはインデックス番号なので、 0,2,3,4,5,6,7,8,....となってほしいです。 宜しくお願いいたします。
guest

0

偶数奇数の判定なら、

C#

1if (( index & 1) != 0) // 奇数 2else // 偶数 3

ですね。
2進数で、
10進数5は、0101
10進数8は、1000
です。

投稿2015/11/02 03:14

ipadcaron

総合スコア1693

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

b1ackc0ffee

2015/11/02 05:34

ありがとうございます。 そうなんですか? if (( index & 1) != 0) // 奇数 になる理由がわたしにはわかりませんでした><、
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問