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

回答編集履歴

5

定義が違ったため修正

2021/08/25 10:55

投稿

BeatStar
BeatStar

スコア4962

answer CHANGED
@@ -144,7 +144,7 @@
144
144
  コードA を読むと、
145
145
 
146
146
  ```C#
147
- 1. iの初期値 0, iが10以上の間, インクリメントしてループ
147
+ 1. iの初期値 0, iが10未満の間, インクリメントしてループ
148
148
  1.1. "Hello" と表示する
149
149
  ```
150
150
 

4

修正1

2021/08/25 10:55

投稿

BeatStar
BeatStar

スコア4962

answer CHANGED
File without changes

3

修正1

2021/08/25 10:27

投稿

BeatStar
BeatStar

スコア4962

answer CHANGED
@@ -144,7 +144,7 @@
144
144
  コードA を読むと、
145
145
 
146
146
  ```C#
147
- 1. iの初期値 0, i 10以の間, インクリメントしてループ
147
+ 1. iの初期値 0, iが10以の間, インクリメントしてループ
148
148
  1.1. "Hello" と表示する
149
149
  ```
150
150
 
@@ -180,4 +180,12 @@
180
180
 
181
181
  よって、10回繰り返すことになります。
182
182
 
183
- だから、コードAは「10回"Hello"と表示する」となるのです。
183
+ だから、コードAは「10回"Hello"と表示する」となるのです。
184
+
185
+ ----
186
+ [追記2]
187
+
188
+ ご指摘を受けて、気づきましたが、確かに日本語での「○○以上」は○○を含むタイプと含まないタイプがありますね。
189
+
190
+ 上記は「コードを参考にして」と考えてほしいです。
191
+ (説明がしづらいので)

2

追記1

2021/08/25 10:27

投稿

BeatStar
BeatStar

スコア4962

answer CHANGED
@@ -105,4 +105,79 @@
105
105
  で、二個目を表示しても i++ なので 「後5つ」……となり、
106
106
  ある意味、賽の河原的な、鬼なことをしています。
107
107
 
108
- まあ、終了条件がないため、無限牢獄(?)となりますね。
108
+ まあ、終了条件がないため、無限牢獄(?)となりますね。
109
+
110
+ -----------------------
111
+
112
+ [追記1]
113
+
114
+ ちなみに、for文の構造(?)も考えてみましょう。
115
+
116
+ for文の構造は
117
+
118
+ ```C#
119
+ for( 初期値; 条件式; 増減式 ){
120
+ // なんらかの処理
121
+ }
122
+ ```
123
+
124
+ となっているはずです。
125
+
126
+ 言い回しが違うかもしれませんが、大体こんな感じ。
127
+
128
+ で、初期値は初期化して最初の値として使うもの。
129
+ 条件式は「この条件を満たす間」の意味です。
130
+ 増減式は i++ とかです。
131
+
132
+ ちなみに i++ は i = i + 1 のことです。つまり、「+1していく」です。
133
+
134
+ ```C#
135
+ for( int i = 0; i < 10; i++ ){
136
+ Console.WriteLine("Hello");
137
+ }
138
+ ```
139
+
140
+ の場合も考えてみましょう。
141
+
142
+ 上記コードを便宜上、「コードA」とします。
143
+
144
+ コードA を読むと、
145
+
146
+ ```C#
147
+ 1. iの初期値 0, i が 10以下の間, インクリメントしてループ
148
+ 1.1. "Hello" と表示する
149
+ ```
150
+
151
+ ですね。
152
+
153
+ これで、「10回"Hello"と表示する」となります。
154
+
155
+ この場合は、**数直線を使う**とわかりやすいです。
156
+
157
+ 数直線を現実世界のノートかなんかに書いてみてください。
158
+
159
+ 初期値: 0 なので、0を含んだ状態でチェックつけましょう。
160
+
161
+ そして、i < 10 なので、10 もチェックしましょう。
162
+ あ、この場合は「10を含まない」ので注意。
163
+
164
+ 含む場合は 数式?だと i≦10 で, C# では i <= 10 となります。
165
+
166
+ そして、0から10までを囲いましょう。
167
+
168
+ そして、次はその個数を数えてみましょう。
169
+
170
+ i = 0 のとき、 1回目 (0を含むため)
171
+ i = 1 のとき、 2回目
172
+ i = 2 のとき、 3回目
173
+ ...
174
+ i = 9 のとき、 10回目
175
+ i = 10 のとき、 11回目…とやりたいが、
176
+
177
+ 10 は含まないので、無視。
178
+
179
+ つまり、 i = 9 までしかカウントしない。
180
+
181
+ よって、10回繰り返すことになります。
182
+
183
+ だから、コードAは「10回"Hello"と表示する」となるのです。

1

見切れていた…

2021/08/25 09:01

投稿

BeatStar
BeatStar

スコア4962

answer CHANGED
@@ -22,13 +22,87 @@
22
22
  // 変数 a は 0 とする
23
23
  int a =0
24
24
 
25
-
25
+ // a が i 未満である間
26
26
  while(a < i)
27
27
  {
28
+          // ■を表示する
28
29
  Console.Write("■");
30
+          
31
+ // iをインクリメントする
29
32
  i++;
33
+
34
+ // ループから強制的に抜ける
30
35
  break;
31
36
  }
37
+        
38
+        // 改行する
32
39
  Console.WriteLine()
33
40
  }
34
- ```
41
+ ```
42
+
43
+ これを日本語でもいいし英語でも中国語でも韓国語でもなんでもいいので、自分が読み書きできる言語で書き下す。(便宜上、これを"疑似コード"とする)
44
+
45
+ ```
46
+ 1. 入力を促す文字列を表示
47
+ 2. ユーザ入力を受け付けて, (int型として)変数 i にセット
48
+ 3. 変数 a は 0 とする
49
+ 4. a が i 未満である間以下を繰り返す
50
+ 4.1. ■を表示する
51
+ 4.2. iをインクリメントする
52
+ 4.3. ループから強制的に抜ける( 強制的に (5) へ )
53
+ 5. 改行する
54
+ ```
55
+
56
+ この疑似コードをレシピと考えて、シミュレーションしてみてください。
57
+
58
+ ちなみに、今回の問題の言い換えは、
59
+
60
+ ```
61
+ [依頼]
62
+ あなたはAさんに数を聞いて、その数だけ"■"をホワイトボードに書いてくれ
63
+ ```
64
+
65
+ のようなものでしょうか。
66
+
67
+ で、疑似コードを使って、具体的な値を入れて計算してみる。
68
+
69
+ ユーザ入力が 1 だったらどうでしょうか。
70
+
71
+ ```
72
+ 1. (入力を促す文字列を表示)
73
+ 2. i = 1
74
+ 3. a = 0
75
+ 4. a < i (→ 0 < 1 ) かどうか (= true )
76
+ 4.1. (■を表示)
77
+ 4.2. i++ => 1 + 1 = 2 => i = 2
78
+ 4.3. (強制的に(5)へ)
79
+ 5. 改行
80
+ ```
81
+
82
+ あれ????????? なんかおかしくないですか?
83
+ なんで、(4.3) でbreakしているのでしょうか。
84
+
85
+ break は『(直近の)ループから強制的に抜ける』です。
86
+
87
+ これが動いたら、ループなんてなるわけないじゃん。
88
+
89
+ 仮に(4.3) を排除しても、なんで、(4.2)で 「iをインクリメント」しているのでしょうか。
90
+
91
+ そもそもi とは何でしょうか。
92
+
93
+ 確か、私の記憶が正しければ、今回のコードでは「ユーザ入力によって受け取った整数(= 個数)」だったはずです。
94
+
95
+ なんで i を +1 しているのでしょうか。
96
+
97
+ おそらく、(4.3)を除くと、無限ループに陥るでしょうね。
98
+ だって、a は変動すらせず、基準の i だけ増加していっている。
99
+
100
+ たとえば、5つ表示するとしたら、
101
+
102
+ 一個目のものを表示したら本来は「後4つ」になるはずです。
103
+ でも i++ しているので、i = 6 となり、「後5つ」となります。
104
+
105
+ で、二個目を表示しても i++ なので 「後5つ」……となり、
106
+ ある意味、賽の河原的な、鬼なことをしています。
107
+
108
+ まあ、終了条件がないため、無限牢獄(?)となりますね。