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

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

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

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

Visual Studio

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

Q&A

2回答

487閲覧

C#で四則演算の電卓を拡張して関数電卓を作る場合、下記のサンプルをどのように変えれば関数電卓になるでしょうか?

1004

総合スコア74

C#

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

Visual Studio

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

0グッド

0クリップ

投稿2025/02/04 11:32

実現したいこと

四則演算の電卓のサンプルコードを改造して、sin,cos,tanの値を求める機能をつけたい。

発生している問題・分からないこと

まずはsinの実装方法から行いたいのですが、sinを求めるコードをどこに挿入すればよいのか、理解できておりません。

該当のソースコード

特になし

試したこと・調べたこと

  • teratailやGoogle等で検索した
  • ソースコードを自分なりに変更した
  • 知人に聞いた
  • その他
上記の詳細・結果

https://github.com/petrediana/Calculator

このサイトからサンプルを落として弄っていました。

補足

特になし

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

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

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

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

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

dodox86

2025/02/04 11:46

> このサイトからサンプルを落として弄っていました。 サンプルを落としていじくる、と言いますかgithubのリポジトリにはそれぞれのリポジトリのオーナー(アカウント)が居て、コードは参考・利用させていただく、と言う姿勢だと思うのですが。 まず、利用させてもらっているC#のコードは理解できていますか? まずはそこからだと思いますがいかがですか。
TakaiY

2025/02/04 14:17

> sinを求めるコードをどこに挿入すればよいのか 何がわからないのかはっきりしませんね。 まず、sin/cos/tan のボタンを押したときに、どのような動作をすべきと考えていますか?
guest

回答2

0

関数電卓とは?

関数電卓というと、「(複数の演算を含んだ)数式を入力し、最後に1度だけ計算を実行」するタイプがやや一般的かと思われます。
一方普通の電卓は「(連続で入力したとしても)1度の計算で1つの演算のみ」といった操作になりますが
質問で言われている関数電卓はどちらの方向性でしょうか?
(『拡張』がどういう意図なのか……)

以降、次のように呼び分けるとして
①数式の関数電卓
②普通の電卓

例えば 1 + 2 * 3 = のように入力した場合
①では 1 + (2 * 3) と演算子の優先順位を考慮した計算となり結果は 7 ですが
②では (1 + 2) * 3 と入力順に1つずつ計算が実行されて結果は 9 です。

①数式の関数電卓の場合

実装するには構文解析が必要になります

②普通の電卓に演算を追加するだけの場合

参考にされている電卓スクショを見る限りは、現状対応しているのは四則演算のみだけのようなので
これは「中置記法の二項演算」のみに対応している、一番シンプルなタイプの電卓だと思われます。

中身までは読んでないですが、一般的に「入力中の数値」だけでなく内部で「1つ前の数値」「演算子」も保持するような
簡易の状態遷移機械(ステートマシン)として扱うのが普通です。

拡張したいという sin,cos などの三角関数は四則演算と異なり「単項演算」ですので
そのまま同じ処理では対応できず、まず「電卓操作としてどうあるべきか」の考察が必要となります。

進め方

質問者さんのレベル感が分からないのですが、まず元のソースがよく分からないレベルであれば
四則演算の延長線上にある「% 剰余計算」のようなものを追加実装してみればよいでしょう。

そういうレベルは既にクリアできている、というのであれば
どちらの方向性なのかそもそも逆に何が分からないのかも不明なので
改めて自分でどこまでやれたかなどを示し、より詳細な質問を追記すると回答しやすくなるでしょう。
(仮に前述の通り「電卓操作としてどうあるべきか」が定まってない場合、どこにコードを追加するか以前の問題です)

投稿2025/02/05 06:40

pecmm

総合スコア756

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

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

0

VisualStudioを利用する前提で書きます。

1.ボタンの追加

VisualStudioのフォームデザイナでボタンを作成・配置します。そのソースコードの場合、おそらくbutton11という名前のボタンが作られます。ボタンの表面をsinにしたり好きにデザインしてください。
イメージ説明

ボタンクリック時に実行される関数を追加

作ったsinボタンをデザイナー上でダブルクリックします。
すると Form1.csに以下のコードが生成されます。

cs:Form1.cs

1private void button11_Click(object sender, EventArgs e) 2{ 3}

この関数が、ボタンを押したときに呼び出されるイベントハンドラーです。ここに処理したい内容を書いてください。例えば

cs:Form1.cs

1private void button11_Click(object sender, EventArgs e) 2{ 3 // sinを求める 4 Result_Value = Math.Sin(Double.Parse(textBox_Result.Text)); 5 // 画面に反映させる 6 textBox_Result.Text = Result_Value.ToString(); 7}

VisualStudioを使わない場合は Form1.Designer.csForm1.cs を自分で編集しますが、
おそらくWinForms開発でそのようなことはほぼしないと思います。

投稿2025/02/10 03:40

hqf00342

総合スコア378

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.33%

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

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

質問する

関連した質問