teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

1

コードの最小限の変更で実行できるコードを追加しました。

2022/01/02 03:28

投稿

kkokuke
kkokuke

スコア32

answer CHANGED
@@ -29,4 +29,85 @@
29
29
  }
30
30
  }
31
31
 
32
- ```
32
+ ```
33
+
34
+ 追記です。
35
+
36
+ C#では、変数は、クラスメンバーとして扱わないと、スコープの問題で苦労するので、使い回すプロジェクトであれば、現実的には、クラス設計をし直すことになります。
37
+ 一方、Cなどの関数型のプログラムを、C#で処理したい、その場でしか使わないプログラムなど、極力手を加えたくない場合があります。
38
+
39
+ その場合は、作法的にはよろしくないと思いますが、単純に、クリックイベントにすべてを格納する方法が一番ラクです。
40
+
41
+ ```C#
42
+ using System;
43
+ using System.Windows.Forms;
44
+
45
+ namespace ShowDecimals
46
+ {
47
+ public partial class Form1 : Form
48
+ {
49
+ public Form1()
50
+ {
51
+ InitializeComponent();
52
+ }
53
+
54
+ public void button1_Click(object sender, EventArgs e)
55
+ {
56
+ double s;
57
+ var Val = new int[] { 20,21,24,324,345,344,23,22,21,327,344,322,21,21,21,329,344,321,21,21,21,323,345,344,21,21,21,324,344,344,21,21,21,21,
58
+ 326,344,345,21,21,21,21,344,322,321,324,21,21,21,21,21 };
59
+
60
+ //Valの隣り合う要素の値の差を要素値とする配列 A を作る
61
+ var A = new int[Val.Length - 1];
62
+
63
+ int[] C = new int[101];
64
+ for (int i = 0; i < A.Length; ++i)
65
+ {
66
+ A[i] = Val[i + 1] - Val[i];
67
+ }
68
+ //配列Aの要素の中から295より大きいものを配列retに代入していく
69
+ // int[] ret = Array.FindAll(A, num => num > 295);
70
+
71
+ int n = 0;
72
+ for (int i = 0; i < A.Length; i++)
73
+ {
74
+
75
+ if (A[i] >= 295)
76
+ {
77
+ C[n] = i; n = n + 1;
78
+ }
79
+ }
80
+
81
+
82
+ //配列 ret の隣り合う要素の値の差を要素値とする配列 hip を作る
83
+ var hip = new int[C.Length - 1];
84
+ for (int i = 0; i < hip.Length; ++i)
85
+ {
86
+
87
+ hip[i] = C[i + 1] - C[i];
88
+ }
89
+
90
+ //配列 hip の要素から奇数番目の要素を取り出す
91
+ int[] B = new int[3];
92
+ double l = 0;
93
+ for (int i = 0; i < B.Length; ++i)
94
+ {
95
+ B[i] = hip[i * 2];
96
+ }
97
+
98
+ for (int i = 0; i < B.Length; ++i)
99
+ {
100
+ l += B[i];
101
+ }
102
+
103
+ s = l / 50 * 0.01;
104
+
105
+ textBox1.Text = Convert.ToString(s);
106
+ }
107
+ }
108
+
109
+ }
110
+
111
+ ```
112
+
113
+ ![イメージ説明](d84542d11a6b1b6ec7ddcac80e2343d7.gif)