回答編集履歴

5

定義が違ったため修正

2021/08/25 10:55

投稿

BeatStar
BeatStar

スコア4962

test CHANGED
@@ -290,7 +290,7 @@
290
290
 
291
291
  ```C#
292
292
 
293
- 1. iの初期値 0, iが10以上の間, インクリメントしてループ
293
+ 1. iの初期値 0, iが10未満の間, インクリメントしてループ
294
294
 
295
295
  1.1. "Hello" と表示する
296
296
 

4

修正1

2021/08/25 10:55

投稿

BeatStar
BeatStar

スコア4962

test CHANGED
File without changes

3

修正1

2021/08/25 10:27

投稿

BeatStar
BeatStar

スコア4962

test CHANGED
@@ -290,7 +290,7 @@
290
290
 
291
291
  ```C#
292
292
 
293
- 1. iの初期値 0, i 10以の間, インクリメントしてループ
293
+ 1. iの初期値 0, iが10以の間, インクリメントしてループ
294
294
 
295
295
  1.1. "Hello" と表示する
296
296
 
@@ -363,3 +363,19 @@
363
363
 
364
364
 
365
365
  だから、コードAは「10回"Hello"と表示する」となるのです。
366
+
367
+
368
+
369
+ ----
370
+
371
+ [追記2]
372
+
373
+
374
+
375
+ ご指摘を受けて、気づきましたが、確かに日本語での「○○以上」は○○を含むタイプと含まないタイプがありますね。
376
+
377
+
378
+
379
+ 上記は「コードを参考にして」と考えてほしいです。
380
+
381
+ (説明がしづらいので)

2

追記1

2021/08/25 10:27

投稿

BeatStar
BeatStar

スコア4962

test CHANGED
@@ -213,3 +213,153 @@
213
213
 
214
214
 
215
215
  まあ、終了条件がないため、無限牢獄(?)となりますね。
216
+
217
+
218
+
219
+ -----------------------
220
+
221
+
222
+
223
+ [追記1]
224
+
225
+
226
+
227
+ ちなみに、for文の構造(?)も考えてみましょう。
228
+
229
+
230
+
231
+ for文の構造は
232
+
233
+
234
+
235
+ ```C#
236
+
237
+ for( 初期値; 条件式; 増減式 ){
238
+
239
+ // なんらかの処理
240
+
241
+ }
242
+
243
+ ```
244
+
245
+
246
+
247
+ となっているはずです。
248
+
249
+
250
+
251
+ 言い回しが違うかもしれませんが、大体こんな感じ。
252
+
253
+
254
+
255
+ で、初期値は初期化して最初の値として使うもの。
256
+
257
+ 条件式は「この条件を満たす間」の意味です。
258
+
259
+ 増減式は i++ とかです。
260
+
261
+
262
+
263
+ ちなみに i++ は i = i + 1 のことです。つまり、「+1していく」です。
264
+
265
+
266
+
267
+ ```C#
268
+
269
+ for( int i = 0; i < 10; i++ ){
270
+
271
+ Console.WriteLine("Hello");
272
+
273
+ }
274
+
275
+ ```
276
+
277
+
278
+
279
+ の場合も考えてみましょう。
280
+
281
+
282
+
283
+ 上記コードを便宜上、「コードA」とします。
284
+
285
+
286
+
287
+ コードA を読むと、
288
+
289
+
290
+
291
+ ```C#
292
+
293
+ 1. iの初期値 0, i が 10以下の間, インクリメントしてループ
294
+
295
+ 1.1. "Hello" と表示する
296
+
297
+ ```
298
+
299
+
300
+
301
+ ですね。
302
+
303
+
304
+
305
+ これで、「10回"Hello"と表示する」となります。
306
+
307
+
308
+
309
+ この場合は、**数直線を使う**とわかりやすいです。
310
+
311
+
312
+
313
+ 数直線を現実世界のノートかなんかに書いてみてください。
314
+
315
+
316
+
317
+ 初期値: 0 なので、0を含んだ状態でチェックつけましょう。
318
+
319
+
320
+
321
+ そして、i < 10 なので、10 もチェックしましょう。
322
+
323
+ あ、この場合は「10を含まない」ので注意。
324
+
325
+
326
+
327
+ 含む場合は 数式?だと i≦10 で, C# では i <= 10 となります。
328
+
329
+
330
+
331
+ そして、0から10までを囲いましょう。
332
+
333
+
334
+
335
+ そして、次はその個数を数えてみましょう。
336
+
337
+
338
+
339
+ i = 0 のとき、 1回目 (0を含むため)
340
+
341
+ i = 1 のとき、 2回目
342
+
343
+ i = 2 のとき、 3回目
344
+
345
+ ...
346
+
347
+ i = 9 のとき、 10回目
348
+
349
+ i = 10 のとき、 11回目…とやりたいが、
350
+
351
+
352
+
353
+ 10 は含まないので、無視。
354
+
355
+
356
+
357
+ つまり、 i = 9 までしかカウントしない。
358
+
359
+
360
+
361
+ よって、10回繰り返すことになります。
362
+
363
+
364
+
365
+ だから、コードAは「10回"Hello"と表示する」となるのです。

1

見切れていた…

2021/08/25 09:01

投稿

BeatStar
BeatStar

スコア4962

test CHANGED
@@ -46,22 +46,170 @@
46
46
 
47
47
 
48
48
 
49
-
49
+ // a が i 未満である間
50
50
 
51
51
  while(a < i)
52
52
 
53
53
  {
54
54
 
55
+          // ■を表示する
56
+
55
57
  Console.Write("■");
56
58
 
59
+          
60
+
61
+ // iをインクリメントする
62
+
57
63
  i++;
58
64
 
65
+
66
+
67
+ // ループから強制的に抜ける
68
+
59
69
  break;
60
70
 
61
71
  }
62
72
 
73
+        
74
+
75
+        // 改行する
76
+
63
77
  Console.WriteLine()
64
78
 
65
79
  }
66
80
 
67
81
  ```
82
+
83
+
84
+
85
+ これを日本語でもいいし英語でも中国語でも韓国語でもなんでもいいので、自分が読み書きできる言語で書き下す。(便宜上、これを"疑似コード"とする)
86
+
87
+
88
+
89
+ ```
90
+
91
+ 1. 入力を促す文字列を表示
92
+
93
+ 2. ユーザ入力を受け付けて, (int型として)変数 i にセット
94
+
95
+ 3. 変数 a は 0 とする
96
+
97
+ 4. a が i 未満である間以下を繰り返す
98
+
99
+ 4.1. ■を表示する
100
+
101
+ 4.2. iをインクリメントする
102
+
103
+ 4.3. ループから強制的に抜ける( 強制的に (5) へ )
104
+
105
+ 5. 改行する
106
+
107
+ ```
108
+
109
+
110
+
111
+ この疑似コードをレシピと考えて、シミュレーションしてみてください。
112
+
113
+
114
+
115
+ ちなみに、今回の問題の言い換えは、
116
+
117
+
118
+
119
+ ```
120
+
121
+ [依頼]
122
+
123
+ あなたはAさんに数を聞いて、その数だけ"■"をホワイトボードに書いてくれ
124
+
125
+ ```
126
+
127
+
128
+
129
+ のようなものでしょうか。
130
+
131
+
132
+
133
+ で、疑似コードを使って、具体的な値を入れて計算してみる。
134
+
135
+
136
+
137
+ ユーザ入力が 1 だったらどうでしょうか。
138
+
139
+
140
+
141
+ ```
142
+
143
+ 1. (入力を促す文字列を表示)
144
+
145
+ 2. i = 1
146
+
147
+ 3. a = 0
148
+
149
+ 4. a < i (→ 0 < 1 ) かどうか (= true )
150
+
151
+ 4.1. (■を表示)
152
+
153
+ 4.2. i++ => 1 + 1 = 2 => i = 2
154
+
155
+ 4.3. (強制的に(5)へ)
156
+
157
+ 5. 改行
158
+
159
+ ```
160
+
161
+
162
+
163
+ あれ????????? なんかおかしくないですか?
164
+
165
+ なんで、(4.3) でbreakしているのでしょうか。
166
+
167
+
168
+
169
+ break は『(直近の)ループから強制的に抜ける』です。
170
+
171
+
172
+
173
+ これが動いたら、ループなんてなるわけないじゃん。
174
+
175
+
176
+
177
+ 仮に(4.3) を排除しても、なんで、(4.2)で 「iをインクリメント」しているのでしょうか。
178
+
179
+
180
+
181
+ そもそもi とは何でしょうか。
182
+
183
+
184
+
185
+ 確か、私の記憶が正しければ、今回のコードでは「ユーザ入力によって受け取った整数(= 個数)」だったはずです。
186
+
187
+
188
+
189
+ なんで i を +1 しているのでしょうか。
190
+
191
+
192
+
193
+ おそらく、(4.3)を除くと、無限ループに陥るでしょうね。
194
+
195
+ だって、a は変動すらせず、基準の i だけ増加していっている。
196
+
197
+
198
+
199
+ たとえば、5つ表示するとしたら、
200
+
201
+
202
+
203
+ 一個目のものを表示したら本来は「後4つ」になるはずです。
204
+
205
+ でも i++ しているので、i = 6 となり、「後5つ」となります。
206
+
207
+
208
+
209
+ で、二個目を表示しても i++ なので 「後5つ」……となり、
210
+
211
+ ある意味、賽の河原的な、鬼なことをしています。
212
+
213
+
214
+
215
+ まあ、終了条件がないため、無限牢獄(?)となりますね。