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

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

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

Re[8]: C#べき乗計算


(過去ログ 10 を表示中)

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

■1641 / inTopicNo.1)  C#べき乗計算
  
□投稿者/ しろと (1回)-(2007/03/01(Thu) 15:04:03)

分類:[C# (Windows)] 



Visual studio2005(English Version)を使用しています。

べき乗の計算を行いたいと思っています。

Pow = System.Math.Pow(x, y); //x ^ y

上記の場合、値はDoubleとして扱われると思うのですが、

Textbox1がDecimal data
Textbox2がInteger data を保持させた状態で、上記の手法が使えるのでしょうか?
どのようにコードを書くのか解らずにいます。

どうかお知恵を拝借させて下さい。
よろしくお願いいたします。


引用返信 編集キー/
■1643 / inTopicNo.2)  Re[1]: C#べき乗計算
□投稿者/ επιστημη (421回)-(2007/03/01(Thu) 15:13:25)
επιστημη さんの Web サイト
> Pow = System.Math.Pow(x, y); //x ^ y
>
> 上記の場合、値はDoubleとして扱われると思うのですが、
>
> Textbox1がDecimal data
> Textbox2がInteger data を保持させた状態で、上記の手法が使えるのでしょうか?

TextBoxとMath.Powとの関係を明らかにしてください。
なにやりたいんだかさっぱりわかりません。

引用返信 編集キー/
■1645 / inTopicNo.3)  Re[2]: C#べき乗計算
□投稿者/ しろと (2回)-(2007/03/01(Thu) 15:48:25)
No1643 (επιστημη さん) に返信
>>Pow = System.Math.Pow(x, y); //x ^ y
>>
>>上記の場合、値はDoubleとして扱われると思うのですが、
>>
>>Textbox1がDecimal data
>>Textbox2がInteger data を保持させた状態で、上記の手法が使えるのでしょうか?
>
> TextBoxとMath.Powとの関係を明らかにしてください。
> なにやりたいんだかさっぱりわかりません。

計算機の、一つの機能である、べき乗計算を自分で作りたいと思っていました。

Form上に、Textbox1とTextbox2を入力欄、べき乗を計算するボタンbutton1として置き、べき乗の
ボタンを押すと、Texitbox1に入力したDecimalの値(x)と、Textbox2に入力した値(y)で、べき乗計算を
Labelに表示したいと思っていました。

TextBox2には、入力制限として1〜5の範囲を設定したいと考えています。、その上で、Labelに
計算結果を表示したいと思っていました。Label2についてIntegerの値を使用を考えて
いるのは、1から5までの範囲で計算を行う手法として、For loopを使うことを
考えていたためです。

Math.powについては、べき乗計算の方法について調べていた際見つけただけで、関連性は
何もありません。この手法が使えるものかと、解釈していました。

すいません、未だ意図している点が伝わりきらなければ、指摘いただけないでしょうか。
よろしくお願いします。

引用返信 編集キー/
■1649 / inTopicNo.4)  Re[3]: C#べき乗計算
□投稿者/ Blue (281回)-(2007/03/01(Thu) 16:04:58)
Math.PowメソッドがDobuleしか扱えない以上 Decimal の値を計算させるには
必ず誤差が出てしまうと思います。
(整数であればいけそうだけど(よってIntegerとかは大丈夫そう)、Decimalは小数を扱えるので)

正確な値を扱いたいのであれば、やはりループさせるしかないでしょう。
引用返信 編集キー/
■1651 / inTopicNo.5)  Re[3]: C#べき乗計算
□投稿者/ επιστημη (422回)-(2007/03/01(Thu) 16:24:02)
επιστημη さんの Web サイト
> >>Textbox1がDecimal data
> >>Textbox2がInteger data を保持させた状態で、上記の手法が使えるのでしょうか?
>>
>>TextBoxとMath.Powとの関係を明らかにしてください。
>>なにやりたいんだかさっぱりわかりません。
>
> 計算機の、一つの機能である、べき乗計算を自分で作りたいと思っていました。
>
> Form上に、Textbox1とTextbox2を入力欄、べき乗を計算するボタンbutton1として置き、べき乗の
> ボタンを押すと、Texitbox1に入力したDecimalの値(x)と、Textbox2に入力した値(y)で、べき乗計算を
> Labelに表示したいと思っていました。

だったら(誤差を考慮するならMath.Powは使えそうにないので)

Decimal power(Decimal x, int y) // xのy乗を返す

って関数を書けばいいですねぇ。

引用返信 編集キー/
■1653 / inTopicNo.6)  Re[4]: C#べき乗計算
□投稿者/ しろと (3回)-(2007/03/01(Thu) 17:12:23)
Blue 大将 様
επιστημη 様

ご回答頂き、ありがとうございます。

Math.powを使ってDecimalを計算すると、誤差が発生することまで気付きませんでした。

επιστημηさんに教えて頂きました方法でコードを書いてみているのですが、
エラーから抜け出せずにいます。。。何度も申し訳ありません。。
ご指摘いただけないでしょうか。。

private void btnExponent_Click(object sender, EventArgs e)
{

int y = Convert.ToInt16(txtEnter2ndNumber.Text);

for(y = 1; y <=5; y++)
{
decimal x = Convert.ToDecimal(txtEnter1stNumber.Text);
decimal power(decimal x, int y);

txtMathResult.Text = power.ToString();
}

Powerと( の間、x、y、それぞれに対して赤波線が表示され、エラーとして
出てしまいます。

引用返信 編集キー/
■1655 / inTopicNo.7)  Re[5]: C#べき乗計算
□投稿者/ Blue (282回)-(2007/03/01(Thu) 17:16:49)
?
επιστημηさんがおっしゃっているのは自分で関数を作れということですよ。

public Decimal power(Decimal x, int y)
{
     Decimal ret = 1;
     for (int i = 0; i < y; ++i)
         ret *= x;
     return ret;
}

のような関数(メソッド)をつくり、

int y = Convert.ToInt16(txtEnter2ndNumber.Text);
Decimal x = Convert.ToDecimal(txtEnter1stNumber.Text);

Decimal ret = power(x, y);
txtMathResult.Text = ret.ToString();

という風にする。

引用返信 編集キー/
■1656 / inTopicNo.8)  Re[6]: C#べき乗計算
□投稿者/ ぽぴ王子 (157回)-(2007/03/01(Thu) 17:45:31)
ぽぴ王子 さんの Web サイト
> Decimal power(Decimal x, int y) // xのy乗を返す
> って関数を書けばいいですねぇ。

という文章を

> Decimal power(Decimal x, int y) // xのy乗を返す
> って書けばいいですねぇ。

と解釈してしまったということですね。
「関数を書けば」というのを「こういう風に書けば」だと思ったと。

確かに元の文章もちょっと誤解しやすい感じを受けますが、でも赤波線が
表示されてエラーと出た時点で、もう少し注意深く考えてみると良かったですね。
言葉と言葉のやりとり(しかも文章だけ)だと、誤解はつきものですから。

関数については Blue さんがすでに書いてくださっているので…
というか
> int y = Convert.ToInt16(txtEnter2ndNumber.Text);
これって ToInt32 の方が良くないですか?(と余計なことを言ってみる)
引用返信 編集キー/
■1657 / inTopicNo.9)  Re[7]: C#べき乗計算
□投稿者/ Blue (283回)-(2007/03/01(Thu) 17:59:35)
2007/03/01(Thu) 18:11:52 編集(投稿者)
No1656 (ぽぴ王子 さん) に返信
> これって ToInt32 の方が良くないですか?(と余計なことを言ってみる)
むしろ
>Visual studio2005
なら絶対int.TryParse、Decimal.TryParseですね。

Decimal x;
if (Decimal.TryParse(this.txtEnter1stNumber.Text, out x))
{
    int y;
    if (int.TryParse(this.txtEnter2ndNumber.Text, out y) && (y >= 0)))
    {
        this.txtMathResult.Text = power(x, y).ToString();
        return;
    }
}
this.txtMathResult.Text = "Error";

引用返信 編集キー/
■1658 / inTopicNo.10)  Re[8]: C#べき乗計算
□投稿者/ しろと (4回)-(2007/03/01(Thu) 18:22:50)

Blue 大将 様
ぽぴ王子 様

全くもって素人で、お手数お掛けし、申し訳ありません。。
丁寧な解説を頂き、ようやく理解することが出来ました。Tryparaseも知識には
あったものの、使い方を導き出せるまで知識と経験が無く、別な方法を学ぶ
貴重な機会を頂きました。

大変勉強になりました。
ありがとうございました。もっと勉強したいと思います。。

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


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

このトピックに書きこむ

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

管理者用

- Child Tree -