C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[2]: whileでの積算のやり方


(過去ログ 171 を表示中)

[トピック内 7 記事 (1 - 7 表示)]  << 0 >>

■98752 / inTopicNo.1)  whileでの積算のやり方
  
□投稿者/ 初心のもの (5回)-(2021/12/21(Tue) 12:45:01)

分類:[.NET 全般] 


 [c#]

 2つのTextBoxに値を入れ、while文でその積算値の答えをlabelに出す場合はどのようにすればよいでしょうか

 *コード*
int TB1 = int.Parse(textBox1.Text);
int TB2 = int.Parse(textBox2.Text);
int A =TB1;
while(TB1 < TB2)
{
A = A + TB1;
TB2++;
}
label3.Text = A.ToString();

 
 
引用返信 編集キー/
■98755 / inTopicNo.2)  Re[1]: whileでの積算のやり方
□投稿者/ 魔界の仮面弁士 (3261回)-(2021/12/21(Tue) 13:13:13)
掲示板投稿時の注意書きにも記載がありますように、
「半角カナ」の投稿はお控えください。

No98752 (初心のもの さん) に返信
>  2つのTextBoxに値を入れ、

TextBox.Text ではなく、NumeriUpDown.Value を使ってみるのはどうでしょう。

NumeriUpDown なら数値以外の文字が入力されることを防げますし、
最大値、最小値、小数部の桁数なども設定しておくことができます。
入力値も文字列(string)ではなく、数値(decimal)として得られます。


> while文でその積算値の答えをlabelに出す場合はどのようにすればよいでしょうか
加算(TB1 + TB2) や乗算(TB1 * TB2) ではなく、積算ですか?


積算というと累積計を想像してしまいましたが…仮に
 TB1 = 10;
だった場合、「TB2 が 0 の時」「TB2 が 1 の時」「TB2 が 12 の時」に
それぞれ何という値が表示されることを期待しているのでしょうか。


現状は TextBox なので、int.TryParse か decimal.TryParse を使ったうえで
 decimal TB1, TB2;
 if (decimal.TryParse(textBox1.Text, out d1) && decimal.TryParse(textBox2.Text, out d2))
 {
  decimal answer = 「TB1 と TB2 から求めた積算値」をここに記述;
  label3.Text = answer.ToString();
 }
 else
 {
  // TextBox に数値が記入されていなかった場合の振る舞いをここに記述
  // label3.Text = "";
 }



> [c#]

× c#, C#, C♯
○ C#
引用返信 編集キー/
■98756 / inTopicNo.3)  Re[2]: whileでの積算のやり方
□投稿者/ 魔界の仮面弁士 (3262回)-(2021/12/21(Tue) 13:40:46)
No98755 (魔界の仮面弁士) に追記
> 積算というと累積計を想像してしまいましたが…仮に
>  TB1 = 10;
> だった場合、「TB2 が 0 の時」「TB2 が 1 の時」「TB2 が 12 の時」に
> それぞれ何という値が表示されることを期待しているのでしょうか。

なお、初心のものさんが最初に提示された No98752 で処理した場合、
 TB1 = 10; TB2 = 0; → A = 10;
 TB1 = 10; TB2 = 1; → A = 10;
 TB1 = 10; TB2 = 12; → A = -110;
になります。恐らくこれは期待する結果ではないですよね。


まずは、設問の「積算」という言葉の指す意味を
日本語で説明するところから考えてみてください。

計算手順を脳内で組み立てられなければ、その手続きを
C# を通じてコンピューターに指示することもできませんので。
引用返信 編集キー/
■98757 / inTopicNo.4)  Re[2]: whileでの積算のやり方
□投稿者/ 初心のもの (8回)-(2021/12/21(Tue) 14:09:32)
No98755 (魔界の仮面弁士 さん) に返信
> 掲示板投稿時の注意書きにも記載がありますように、
> 「半角カナ」の投稿はお控えください。

 申し訳ありませんでした。以後使わないようにします。

> 設問の「積算」という言葉の指す意味を
> 日本語で説明するところから考えてみてください。

 うまく説明ができないのですが、計算したい内容が「xからyまでの積算値:z」
 x=1
 y=100
 だとするときに、xがyになるまでの和をzに表示させたい(x<yがx==yになるまでxをzに足していく)
 という感じのものをwhile,forで書きたいです
引用返信 編集キー/
■98758 / inTopicNo.5)  Re[1]: whileでの積算のやり方
□投稿者/ shu (1265回)-(2021/12/21(Tue) 14:35:12)
No98752 (初心のもの さん) に返信

> int A =TB1;
int A = 0;

> while(TB1 < TB2)
while(TB1 <= TB2)

> TB2++;
TB1++;

でどうでしょう?

引用返信 編集キー/
■98759 / inTopicNo.6)  Re[3]: whileでの積算のやり方
□投稿者/ 魔界の仮面弁士 (3263回)-(2021/12/21(Tue) 14:54:19)
2021/12/21(Tue) 14:55:18 編集(投稿者)

No98757 (初心のもの さん) に返信
>  うまく説明ができないのですが、計算したい内容が「xからyまでの積算値:z」
>  x=1
>  y=100
>  だとするときに、

x が 0 になることは許可されるのでしょうか。幾ら足しても増えません。
x が -1 になることは許可されるのでしょうか。幾ら足しても減るだけです。


> xがyになるまでの和をzに表示させたい(x<yがx==yになるまでxをzに足していく)
最初のコードでいうと、x が T1、y が T2、z が A というわけですよね。

その仕様で進めるとしたら、
 TB1 = 10; TB2 = 12;
の場合はどうなりますか?


TB1 * 0 < TB2
TB1 * 1 < TB2
TB1 * 2 > TB2
TB1 * 3 > TB2

という関係になりますから、A に T1 を整数回加算し続けた所で、
合計値が TB2 と一致することは永遠にあり得ません。

「x == yになるまで」ではなく
「x >= y になるまで」の間違いだったりはしませんか?
もう一度仕様を考え直してみましょう。
引用返信 編集キー/
■98760 / inTopicNo.7)  Re[2]: whileでの積算のやり方
□投稿者/ 初心のもの (10回)-(2021/12/21(Tue) 14:58:48)
No98758 (shu さん) に返信
> 
>>   int A =TB1;
> int A = 0;
> 
>>while(TB1 < TB2)
> while(TB1 <= TB2)
> 
>>      TB2++;
> TB1++;
> 
> でどうでしょう?
 
 できました!自分が出した答えとはすっきり度合が違くてとても助かりました!

         //while (TB1 < int.Parse(textBox2.Text))
          //{
          //    TB2 += TB1;
          //    TB1++;
          //}
          //label3.Text = TB2.ToString();
>NumeriUpDown なら数値以外の文字が入力されることを防げますし、
>最大値、最小値、小数部の桁数なども設定しておくことができます。
>入力値も文字列(string)ではなく、数値(decimal)として得られます。
 
 これも今後使わせていただきます!ありがとうございました:)

解決済み
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -