Skip to content
117 changes: 102 additions & 15 deletions docs/.vitepress/config.ts
Original file line number Diff line number Diff line change
Expand Up @@ -137,32 +137,119 @@ export default withMermaid({
],
},
{
text: "[WIP] 6. 繰り返し処理",
text: "6. 繰り返し処理",
link: "/cpp/chapter-6/",
items: [
{ text: "[WIP] 6.1 for文", link: "/cpp/chapter-6/1" },
{ text: "[WIP] 6.2 while文", link: "/cpp/chapter-6/2" },
{ text: "[WIP] 6.3 配列", link: "/cpp/chapter-6/3" },
{ text: "[WIP] 6.4 string型②とchar型", link: "/cpp/chapter-6/4" },
{ text: "[WIP] 6.5 continueとbreak", link: "/cpp/chapter-6/5" },
{ text: "6.1 for文", link: "/cpp/chapter-6/1" },
{ text: "6.2 while文", link: "/cpp/chapter-6/2" },
{ text: "6.3 配列", link: "/cpp/chapter-6/3" },
{ text: "6.4 string型②とchar型", link: "/cpp/chapter-6/4" },
{ text: "6.5 breakとcontinue", link: "/cpp/chapter-6/5" },
{
text: "6.Q 練習問題",
link: "/cpp/chapter-6/problems/",
collapsed: true,
items: [
{
text: "Count Down(★☆☆)",
link: "/cpp/chapter-6/problems/count-down",
},
{
text: "Even Numbers in Range(★☆☆)",
link: "/cpp/chapter-6/problems/even-number-in-range",
},
{
text: "DO NOT FAIL(★☆☆)",
link: "/cpp/chapter-6/problems/do-not-fail",
},
{
text: "lower or UPPER(★☆☆)",
link: "/cpp/chapter-6/problems/lower-or-upper",
},
{
text: "Prime Check(★★☆)",
link: "/cpp/chapter-6/problems/prime-check",
},
{
text: "Fibonatti(★★☆)",
link: "/cpp/chapter-6/problems/fibonatti",
},

{
text: "fizz-buzz 2D(★★★)",
link: "/cpp/chapter-6/problems/fizz-buzz-2d",
},
],
},
],
},
{
text: "[WIP] 7. 関数",
text: "7. 関数",
link: "/cpp/chapter-7/",
items: [
{ text: "[WIP] 7.1 関数とは", link: "/cpp/chapter-7/1" },
{ text: "[WIP] 7.2 引数", link: "/cpp/chapter-7/2" },
{ text: "[WIP] 7.3 返り値", link: "/cpp/chapter-7/3" },
{ text: "[WIP] 7.4 [発展] 参照渡し", link: "/cpp/chapter-7/4" },
{ text: "7.1 関数とは", link: "/cpp/chapter-7/1" },
{ text: "7.2 引数", link: "/cpp/chapter-7/2" },
{ text: "7.3 返り値", link: "/cpp/chapter-7/3" },
{ text: "7.4 [発展] 参照渡し", link: "/cpp/chapter-7/4" },
{
text: "7.Q 練習問題",
link: "/cpp/chapter-7/problems/",
collapsed: true,
items: [
{
text: "Max of Three(★☆☆)",
link: "/cpp/chapter-7/problems/max-of-three",
},
{
text: "Swap Two Numbers(★★☆)",
link: "/cpp/chapter-7/problems/swap-two",
},
],
},
],
},
{
text: "[WIP] 8. 構造体",
text: "8. 構造体",
link: "/cpp/chapter-8/",
items: [
{ text: "[WIP] 8.1 構造体とは", link: "/cpp/chapter-8/1" },
{ text: "[WIP] 8.2 メソッド", link: "/cpp/chapter-8/2" },
{ text: "8.1 構造体とは", link: "/cpp/chapter-8/1" },
{ text: "8.2 メソッド", link: "/cpp/chapter-8/2" },
{
text: "8.Q 練習問題",
link: "/cpp/chapter-8/problems/",
collapsed: true,
items: [
{
text: "Order(★★☆)",
link: "/cpp/chapter-8/problems/order",
},
],
},
],
},
{
text: "(2025年度版テキスト)<br>VIII. 発展事項 (WIP)",
link: "/text/chapter-8/",
items: [
{ text: "計算量とオーダー", link: "/text/chapter-8/complexity" },
{ text: "再帰関数", link: "/text/chapter-8/recursive-function" },
{ text: "実行時間", link: "/text/chapter-8/exec-time" },
{ text: "カプセル化", link: "/text/chapter-8/capsule" },
{
text: "練習問題",
link: "/text/chapter-8/practice/",
collapsed: true,
items: [
{
text: "Capsulated Zer0-Star",
link: "/text/chapter-8/practice/capsulate-user",
},
{
text: "Exponentation",
link: "/text/chapter-8/practice/exponentation",
},
],
},
],
},
{
Expand All @@ -172,7 +259,7 @@ export default withMermaid({
],
"/text/": [
{
text: "[WIP] 2026年度版テキスト",
text: "2026年度版テキスト",
link: "/cpp/preface/",
},
{
Expand Down
86 changes: 77 additions & 9 deletions docs/cpp/chapter-6/1.md
Original file line number Diff line number Diff line change
@@ -1,29 +1,33 @@
# [WIP] 6.1 for文
# 6.1 for文

## 6.1.1 for文の基本

繰り返しの処理には**for文**と呼ばれる構文を用いる。for文は以下のように記述できる。

繰り返しの処理 `for` は以下のように記述する。

```cpp:line-numbers
for (int i=0; i<5; i++) {
cout << i << endl;
}
```

```
[output]
このプログラムの出力は以下のようになる。

```Output:line-numbers
0
1
2
3
4
```

新しい演算`++` が出ているが、これは **変数の値を1増やす** という演算である。 `i = i+1;` と同値
コードの中に`i++`と書かれている部分がある。これは**変数iの値を1増やす**演算(インクリメント)であり、`i = i+1;`と同値である

for 文がどのように動作しているかを解説すると、`for` の後に `;` 区切りで 3 つ情報を指定している
for文がどのように動作しているかを解説する。for文は、`for`の後に`;`区切りで3つの情報を指定している

```cpp
```cpp:line-numbers
for ([初期化];[条件];[継続処理]) {
[実行文]
[実行文]
}
```

Expand All @@ -49,4 +53,68 @@ flowchart LR
cond --> |No| e["End"]
```

つまり、0,1,2,3,4 の整数を出力するプログラムである。これを使えば、例えば $7^4$ 等がプログラムで計算できる。
つまり、0, 1, 2, 3, 4の整数を出力するプログラムである。したがって、以下のようなコードも、上のコードと全く同じ出力となる。

```cpp:line-numbers
for (int i=1; i<=5; i++) {
cout << i-1 << endl;
}
```

```cpp:line-numbers
for (int count=10; count<15; count++) {
cout << count-10 << endl;
}
```

```cpp:line-numbers
for (int num=0; num<10; num+=2) {
cout << num/2 << endl;
}
```

```cpp:line-numbers
for (int x=5; x>0; x--) {
cout << 5-x << endl;
}
```

`i--`は`i -= 1`や`i = i-1`と同じ意味であり、デクリメントと呼ばれる。

for文において、初期化で定義した変数のスコープはそのfor文内となる。

for文の初期化は省略することもできる。以下は初期化を省略した例である。この例では、変数`i`をfor文の外でも使うことができる。

```cpp:line-numbers
int i = 0;
for (; i<5; i++) {
cout << i << endl;
}
```

for文を使えば、階乗や累乗なども計算できる。

## 6.1.2 多重ループ

for文の中にfor文を入れ子にすることもできる。以下は2重ループの例である。

```cpp:line-numbers
for (int i=0; i<2; i++) {
for (int j=0; j<3; j++) {
cout << i << " " << j << endl;
}
}
```

```Output:line-numbers
0 0
0 1
0 2
1 0
1 1
1 2
```

外側のfor文と内側のfor文で、繰り返しに使う変数名を同じにしてしまわないよう、注意しよう。繰り返しに使う変数には、`i`が使われることが多い。また、多重ループでは、`i`, `j`, `k`...と続けていくが多い。しかし、これらはあくまでも慣習的なものであり、必ずしも従わなければいけない、というわけではない。変数名は自由につけることができる。


10 changes: 6 additions & 4 deletions docs/cpp/chapter-6/2.md
Original file line number Diff line number Diff line change
@@ -1,4 +1,8 @@
# [WIP] 6.2 while文
# 6.2 while文

## 6.2.1 while文とは

**条件を満たすまで**処理を繰り返したい、というときには`while`文を用いる。while文は、`while`の後にある`()`内の条件文が、真の間実行される繰り返し処理である。

```cpp:line-numbers
int a = 10;
Expand All @@ -8,9 +12,7 @@ while (a > 0) {
}
```

while文は、 `while` の中の条件文が真の間実行される繰り返し処理。

上記のコードだと、 10,9,8,7,6,5,4,3,2,1 と順に出力される。
上記のコードだと、10,9,8,7,6,5,4,3,2,1と順に出力される。

```mermaid
flowchart LR
Expand Down
57 changes: 36 additions & 21 deletions docs/cpp/chapter-6/3.md
Original file line number Diff line number Diff line change
@@ -1,10 +1,10 @@
# [WIP] 6.3 配列
# 6.3 配列

プログラミングでは、同じ様な変数を複数作りたいときがある。例えば、100人の点数の平均点を取りたい時に変数は100個必要となる。このときに、配列を使う。
## 6.3.1 配列の基本

配列とは、変数の集合のようなものである。
プログラミングでは、同じような変数を複数作りたいときがある。例えば、100人の点数の平均点を取りたいときには変数は100個必要となる。このときに、配列を使う。配列とは、変数の集合のようなものである。

C++ において配列を使う時は、`vector` を用いる。`string` と同様にして、`vector`をインクルードする。
C++において配列を使う時は、`vector`を用いる。**`string`と同様に、`vector`をインクルードする必要がある。**

```cpp:line-numbers
#include <vector>
Expand All @@ -17,14 +17,13 @@ vector<int> array;
vector<string> strarray;
```

このように記述すると空の配列が作成される。以下のように、初めから配列に値を入れることもできる
このように記述すると空の配列が作成される。以下のように、初めから配列に値を入れることもできる

```cpp:line-numbers
vector<int> arr = {10, 20, 30, 40, 50};
```

以下のように、 `[]` の中に数字を書くことで要素を取得できる。数列を考えた時の $a_i$ の $i$ だと思うと良い。この時要素番号は*
*0始まり**である。
以下のように、`[]`の中に数字を書くことで要素を取得できる。数列を考えた時の$a_i$の$i$だと思うと良い。このとき、要素番号は**0始まり**である。

```cpp:line-numbers
vector<int> arr = {10, 20, 30, 40, 50};
Expand All @@ -33,26 +32,27 @@ arr[1] = 100;
cout << arr[1] << endl;
```

```
[output]
```Output:line-numbers
30
100
```

`.size()` とすると、配列の要素数を調べることができる。
## 6.3.2 size

`.size()`とすると、配列の要素数を調べることができる。

```cpp:line-numbers
vector<int> arr = {10, 20, 30, 40, 50};
int siz = arr.size();
cout << siz << endl;
cout << arr.size() << endl;
```

```
[output]
このコードの出力は以下のようになる。

```Output:line-numbers
5
```

これと、`for` を用いれば、配列の要素を全て取得することができる
`.size()`と`for`を用いれば、配列の要素をすべて取得することができる

```cpp:line-numbers
vector<int> arr = {10, 20, 30, 40, 50};
Expand All @@ -61,10 +61,11 @@ for (int i=0; i < arr.size(); i++) {
}
```

`for` 文の中で、 `arr[0]` から `arr[4]` までが1つずつ出力されるコードだという事が理解できるだろうか。`i < arr.size()`
の条件から、`i` は 0 から 4 までの場合で実行される。(5 は `5 < 5` となり条件を満たさない。)
`for`文の中で、`arr[0]`から`arr[4]`までが1つずつ出力されるコードだという事が理解できるだろうか。`i < arr.size()`の条件から、`i`は0から4までの場合で実行される。(5は`5 < 5`となり条件を満たさない。)

## 6.3.3 push_back

`.push_back()` を用いると、配列の末尾に新しい要素を追加することができる。
`.push_back()`を用いると、配列の末尾に新しい要素を追加することができる。

```cpp:line-numbers
vector<int> arr = {10, 20, 30, 40, 50};
Expand All @@ -74,11 +75,25 @@ cout << arr[5] << endl;
cout << arr.size() << endl;
```

```
[output]
このコードの出力は以下のようになる。

```Output:line-numbers
-10
6
```

for文と組み合わせると、できる事が非常に広がる。
for文と組み合わせると、できることが非常に広がる。

## 6.3.4 多次元配列

配列の中に配列を入れ子にすることで多次元配列を作ることができる。

以下は2次元配列の例である。(オセロ盤みたいなイメージ)

```cpp:line-numbers
vector<vector<int>> v = {
{1, 2, 3, 4},
{3, 5, 1, 2},
{10, 20, 10, 20},
};
```
Loading
Loading