Skip to content

Commit 9f10cb8

Browse files
authored
Merge pull request #465 from ut-code/462-fix-array-exercise
配列の章の演習問題の修正
2 parents 38cda4b + 9d9ae44 commit 9f10cb8

File tree

10 files changed

+127
-69
lines changed

10 files changed

+127
-69
lines changed

docs/1-trial-session/08-loop/index.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -180,7 +180,7 @@ const string2 = `10から2を引くと${10 - 2}です。`;
180180

181181
---
182182

183-
## 基礎演習
183+
## 基礎課題
184184

185185
### 1 ~ 10 の積
186186

@@ -221,7 +221,7 @@ document.write(product);
221221

222222
</Answer>
223223

224-
## 中級演習
224+
## 中級課題
225225

226226
### 素数判定問題
227227

docs/1-trial-session/09-functions/index.md

Lines changed: 13 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -124,11 +124,16 @@ increment();
124124

125125
:::
126126

127-
## モジュール化
127+
## パーツに分割する
128128

129-
複雑な操作を <Term type="javascriptFunction">関数</Term> として <Term strong type="javascriptModularization">モジュール化</Term> して複数のブロックに分解することで、コードの可読性を上げることができます。
129+
複雑な操作を複数の <Term type="javascriptFunction">関数</Term> ブロックに分解することで、コードの可読性を上げることができます。この操作を <Term strong type="javascriptModularization">モジュール化</Term> と呼びます。
130+
パーツに分割すると、次のようなメリットがあります。
130131

131-
モジュール化前:
132+
- ブロックあたりのコードが短くなるので、読みやすい
133+
- パーツごとにテストができるので、デバッグがしやすい
134+
- 汎用性のあるパーツなら、使いまわしができる
135+
136+
以下の例では、階段を表示する操作の中の、文字列を繰り返す操作を `repeat` 関数というパーツに分けています。
132137

133138
```javascript
134139
const stringToRepeat = "";
@@ -142,29 +147,24 @@ for (let i = 0; i < 10; i += 1) {
142147
}
143148
```
144149

145-
モジュール化後:
146-
147150
```javascript
148-
function repeat(stringToRepeat, times) {
151+
function repeat(stringToRepeat, count) {
149152
let result = "";
150-
for (let j = 0; j < times; j += 1) {
153+
for (let j = 0; j < count; j += 1) {
151154
result += stringToRepeat;
152155
}
153156
return result;
154157
}
158+
155159
for (let i = 0; i < 10; i += 1) {
156160
document.write(repeat("", i));
157161
document.write("<br>");
158162
}
159163
```
160164

161-
:::note
162-
この例における`repeat`<Term type="javascriptFunction">関数</Term>は、第一<Term type="javascriptParameter">引数</Term>の<Term type="javascriptString">文字列</Term>を第二<Term type="javascriptParameter">引数</Term>回だけ繰り返し<Term type="javascriptStringConcatenation">足した</Term>ものを返します。
163-
:::
164-
165165
---
166166

167-
## 基礎演習
167+
## 基礎課題
168168

169169
### 最大値
170170

@@ -208,7 +208,7 @@ function max(a, b) {
208208

209209
</Answer>
210210

211-
## 中級演習
211+
## 中級課題
212212

213213
### 携帯電話料金
214214

docs/1-trial-session/10-array/_samples/array-max/index.html

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
<html lang="ja">
33
<head>
44
<meta charset="utf-8" />
5-
<title>findMax関数 解答例 (reduce)</title>
5+
<title>findMaxNumber関数 解答例 (reduce)</title>
66
</head>
77
<body>
88
<script src="./script.js"></script>
Lines changed: 21 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,29 @@
1-
function findMax(array) {
2-
if (array.length == 0) return; //空配列の例外処理
3-
let maxValue = array[0];
4-
for (let i = 0; i < array.length; i += 1) {
5-
if (array[i] > maxValue) maxValue = array[i];
1+
function findMaxNumber(numbers) {
2+
if (numbers.length === 0) return; // 空配列を除外
3+
let maxNumber = numbers[0];
4+
for (const number of numbers) {
5+
if (maxNumber < number) {
6+
maxNumber = number;
7+
}
68
}
7-
return maxValue;
9+
return maxNumber;
810
}
911

1012
const array1 = [3, 6, 8, 5, 0];
1113
const array2 = [-8, -7, -3, -1, -5];
1214
const array3 = [5986, 7202, 9347, 3593, 8166, 662, 2235, 9323, 2240, 943];
1315
const array4 = [-878, -40, -324, -410, -592, -610, -880, -65, -423, -32];
1416

15-
document.write(`<p>配列 [${array1}] の最大値は${findMax(array1)} です。</p>`);
16-
document.write(`<p>配列 [${array2}] の最大値は${findMax(array2)} です。</p/>`);
17-
document.write(`<p>配列 [${array3}] の最大値は${findMax(array3)} です。</p>`);
18-
document.write(`<p>配列 [${array4}] の最大値は${findMax(array4)} です。</p>`);
19-
document.write(`<p>空の配列の最大値は ${findMax([])} です。</p/>`);
17+
document.write(
18+
`<p>配列 [${array1}] の最大値は${findMaxNumber(array1)} です。</p>`,
19+
);
20+
document.write(
21+
`<p>配列 [${array2}] の最大値は${findMaxNumber(array2)} です。</p>`,
22+
);
23+
document.write(
24+
`<p>配列 [${array3}] の最大値は${findMaxNumber(array3)} です。</p>`,
25+
);
26+
document.write(
27+
`<p>配列 [${array4}] の最大値は${findMaxNumber(array4)} です。</p>`,
28+
);
29+
document.write(`<p>空の配列の最大値は ${findMaxNumber([])} です。</p>`);

docs/1-trial-session/10-array/_samples/array-sum/index.html renamed to docs/1-trial-session/10-array/_samples/array-sum-for-of/index.html

File renamed without changes.
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
const numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
2+
3+
let sum = 0;
4+
for (const number of numbers) {
5+
sum += number;
6+
}
7+
8+
document.write(`配列の合計値は ${sum} です。`);
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
<!doctype html>
2+
<html lang="ja">
3+
<head>
4+
<meta charset="utf-8" />
5+
<title>配列の和 解答例</title>
6+
</head>
7+
<body>
8+
<script src="./script.js"></script>
9+
</body>
10+
</html>
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
const numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
2+
3+
let sum = 0;
4+
for (let i = 0; i < numbers.length; i += 1) {
5+
sum += numbers[i];
6+
}
7+
8+
document.write(`配列の合計値は ${sum} です。`);

docs/1-trial-session/10-array/_samples/array-sum/script.js

Lines changed: 0 additions & 13 deletions
This file was deleted.

docs/1-trial-session/10-array/index.md

Lines changed: 64 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -108,45 +108,70 @@ document.write(studentNames); // 田中,佐藤,鈴木,内藤
108108

109109
## 基礎課題
110110

111-
### 連続表示
111+
### 要素の和
112112

113-
- 引数に与えられた配列の、要素の和を取る関数 `sumArray` を書いてみましょう
113+
- 配列があります。その配列の要素の和を求めてみましょう
114114

115115
:::tip
116-
変数 `i``0` から `(作成した配列の長さ) - 1` まで順番に増やしながら、配列の `i` 番目の要素を足してみましょう。
116+
`for 〜 of` 文を使って、配列のそれぞれの要素に対して操作を実行します。
117+
:::
118+
119+
:::note
120+
次の配列をテスト用に使ってください。
121+
122+
```javascript
123+
const numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
124+
```
125+
126+
```javascript
127+
const numbers = [-3, -1, 9, -10, 3, 7, 6, 1, 0, 5];
128+
```
129+
117130
:::
118131

119132
<Answer>
120133

121134
```javascript
122-
const array1 = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
123-
const array2 = [-3, -1, 9, -10, 3, 7, 6, 1, 0, 5];
135+
const numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
124136

125-
function sumArray(array) {
126-
let sum = 0;
127-
for (let i = 0; i < array.length; i += 1) {
128-
sum += array[i];
129-
}
130-
return sum;
137+
let sum = 0;
138+
for (const number of numbers) {
139+
sum += number;
140+
}
141+
142+
document.write(`配列の合計値は ${sum} です。`);
143+
```
144+
145+
<ViewSource url={import.meta.url} path="_samples/array-sum-for-of" />
146+
147+
### 別解
148+
149+
`for 〜 of` 文を使わず、次のように書くこともできます。
150+
151+
```javascript
152+
const numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
153+
154+
let sum = 0;
155+
for (let i = 0; i < numbers.length; i += 1) {
156+
sum += numbers[i];
131157
}
132158

133-
document.write(`sum of array1: ${sumArray(array1)} <br>`);
134-
document.write(`sum of array2: ${sumArray(array2)} <br>`);
159+
document.write(`配列の合計値は ${sum} です。`);
135160
```
136161

137-
<ViewSource url={import.meta.url} path="_samples/array-sum" />
162+
<ViewSource url={import.meta.url} path="_samples/array-sum-simple-for" />
138163

139164
</Answer>
140165

141166
## 中級課題
142167

143-
### 最大値
168+
### 配列の最大値
144169

145-
引数にひとつの配列が与えられたとき、その配列の最大値を求める関数 `findMax` を作成しましょう。
170+
引数に配列を一つ取り、その配列の最大値を求める関数 `findMaxNumber` を作成しましょう。
146171

147172
:::note
148173

149-
テスト用に、ランダムに生成された以下の配列を使ってよいものとします
174+
テスト用に、ランダムに生成された次の配列を使ってください
150175

151176
```javascript
152177
const array1 = [3, 6, 8, 5, 0];
@@ -175,24 +200,34 @@ const array2 = [-8, -7, -3, -1, -5];
175200
const array3 = [5986, 7202, 9347, 3593, 8166, 662, 2235, 9323, 2240, 943];
176201
const array4 = [-878, -40, -324, -410, -592, -610, -880, -65, -423, -32];
177202

178-
function findMax(array) {
179-
if (array.length === 0) return; // 空配列の例外処理
180-
let maxValue = array[0];
181-
for (let i = 0; i < array.length; i += 1) {
182-
if (array[i] > maxValue) maxValue = array[i];
203+
function findMaxNumber(numbers) {
204+
if (numbers.length === 0) return; // 空配列を除外
205+
let maxNumber = numbers[0];
206+
for (const number of numbers) {
207+
if (maxNumber < number) {
208+
maxNumber = number;
209+
}
183210
}
184-
return maxValue;
211+
return maxNumber;
185212
}
186213

187-
document.write(`<p>配列 [${array1}] の最大値は${findMax(array1)} です。</p>`);
188-
document.write(`<p>配列 [${array2}] の最大値は${findMax(array2)} です。</p/>`);
189-
document.write(`<p>配列 [${array3}] の最大値は${findMax(array3)} です。</p>`);
190-
document.write(`<p>配列 [${array4}] の最大値は${findMax(array4)} です。</p>`);
191-
document.write(`<p>空の配列の最大値は ${findMax([])} です。</p/>`);
214+
document.write(
215+
`<p>配列 [${array1}] の最大値は${findMaxNumber(array1)} です。</p>`,
216+
);
217+
document.write(
218+
`<p>配列 [${array2}] の最大値は${findMaxNumber(array2)} です。</p>`,
219+
);
220+
document.write(
221+
`<p>配列 [${array3}] の最大値は${findMaxNumber(array3)} です。</p>`,
222+
);
223+
document.write(
224+
`<p>配列 [${array4}] の最大値は${findMaxNumber(array4)} です。</p>`,
225+
);
226+
document.write(`<p>空の配列の最大値は ${findMaxNumber([])} です。</p>`);
192227
```
193228

194229
:::danger
195-
配列の長さにかかわらず配列の最初の値を使うような処理をする場合は、長さが0である空の配列を渡された時に例外処理することを忘れないでください
230+
配列の長さにかかわらず配列の最初の値を使うような処理をする場合は、長さが0である空の配列を除外することを忘れないでください
196231
:::
197232

198233
<ViewSource url={import.meta.url} path="_samples/array-max" />

0 commit comments

Comments
 (0)