Skip to content

Commit a3f9026

Browse files
yas-akorurun418
andauthored
第4章, 第5章の細かな修正 (#67)
* 第4章, 第5章の細かな修正 * chapter-4 indexの編集 * 4.1の編集 * 4.2の編集 * 5/indexの編集 * 5.1の編集 * 5.2の編集 * 5.3の編集 * 第4章の問題を作成 * 第5章の問題を作成 * configの編集 --------- Co-authored-by: rurun <docile.notepad.0n@icloud.com>
1 parent 36f9224 commit a3f9026

14 files changed

Lines changed: 495 additions & 113 deletions

File tree

docs/.vitepress/config.ts

Lines changed: 42 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -79,28 +79,61 @@ export default withMermaid({
7979
link: "/cpp/chapter-3/problems/",
8080
collapsed: true,
8181
items: [
82-
{ text: "Multiplication(★☆☆)", link: "/cpp/chapter-3/problems/multiplication" },
83-
{ text: "Sum of n(★★☆)", link: "/cpp/chapter-3/problems/sum-of-n" },
82+
{
83+
text: "Multiplication(★☆☆)",
84+
link: "/cpp/chapter-3/problems/multiplication",
85+
},
86+
{
87+
text: "Sum of n(★★☆)",
88+
link: "/cpp/chapter-3/problems/sum-of-n",
89+
},
8490
{ text: "4bit(★★☆)", link: "/cpp/chapter-3/problems/4bit" },
8591
],
8692
},
8793
],
8894
},
8995
{
90-
text: "[WIP] 4. 条件分岐",
96+
text: "4. 条件分岐",
9197
link: "/cpp/chapter-4/",
9298
items: [
93-
{ text: "[WIP] 4.1 if文", link: "/cpp/chapter-4/1" },
94-
{ text: "[WIP] 4.2 演算子", link: "/cpp/chapter-4/2" },
99+
{ text: "4.1 if文", link: "/cpp/chapter-4/1" },
100+
{ text: "4.2 演算子", link: "/cpp/chapter-4/2" },
101+
{
102+
text: "4.Q 練習問題",
103+
link: "/cpp/chapter-4/problems/",
104+
collapsed: true,
105+
items: [
106+
{
107+
text: "Positive or Negative(★☆☆)",
108+
link: "/cpp/chapter-4/problems/positive-or-negative",
109+
},
110+
{
111+
text: "Fraction(★★☆)",
112+
link: "/cpp/chapter-4/problems/fraction",
113+
},
114+
],
115+
},
95116
],
96117
},
97118
{
98-
text: "[WIP] 5. 型",
119+
text: "5. 型",
99120
link: "/cpp/chapter-5/",
100121
items: [
101-
{ text: "[WIP] 5.1 bool型", link: "/cpp/chapter-5/1" },
102-
{ text: "[WIP] 5.2 double型", link: "/cpp/chapter-5/2" },
103-
{ text: "[WIP] 5.3 string型①", link: "/cpp/chapter-5/3" },
122+
{ text: "5.1 bool型", link: "/cpp/chapter-5/1" },
123+
{ text: "5.2 double型", link: "/cpp/chapter-5/2" },
124+
{ text: "5.3 string型①", link: "/cpp/chapter-5/3" },
125+
{
126+
text: "5.Q 練習問題",
127+
link: "/cpp/chapter-5/problems/",
128+
collapsed: true,
129+
items: [
130+
{
131+
text: "Circle Area(★☆☆)",
132+
link: "/cpp/chapter-5/problems/circle-area",
133+
},
134+
{ text: "Echo(★☆☆)", link: "/cpp/chapter-5/problems/echo" },
135+
],
136+
},
104137
],
105138
},
106139
{

docs/cpp/chapter-4/1.md

Lines changed: 38 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
1-
# [WIP] 4.1 if文
1+
# 4.1 if文
22

33
## 4.1.1 if
44

5-
特定の条件を満たす時だけ実行したい時は、if 文を用いる。if の後に条件を記し、その後の `{}` に条件を満たしていた時だけ実行したい命令を記述する
5+
何らかの処理を、**特定の条件を満たすときにだけ実行したい**場合は、if文と呼ばれる構文を用いる。`if`の後に**条件**を記し、その後の`{}`の中に条件を満たしていたときだけ実行したい命令を記述する
66

77
以下は、入力された点数が60点以上であれば「合格」、そうでなければ「不合格」と表示するプログラムである。
88

@@ -12,7 +12,7 @@ using namespace std;
1212
1313
int main() {
1414
cout << "点数を入力してください。" << endl;
15-
int score = 0;
15+
int score;
1616
cin >> score;
1717
1818
if (score >= 60) {
@@ -37,7 +37,7 @@ flowchart LR
3737
condunder --> |No| e[End]
3838
```
3939

40-
`score >= 60` は、 $score \geq 60$ と同じである。 `+-/*` と同じくして、条件を記述する演算子も存在する。演算子は以下の通り。
40+
`score >= 60`は、$score \geq 60$と同じである。`+-/*`と同じくして、条件を記述する演算子も存在する。演算子は以下の通り。
4141

4242
| 演算子 | 数学の記号 |
4343
|------|--------|
@@ -49,33 +49,32 @@ flowchart LR
4949
| `!=` | $\neq$ |
5050

5151
:::warning
52-
`==``=` を混同しないように注意。 `=` **代入**`==` **等価** である。
52+
`==``=`を混同しないように注意。`=`**代入**`==`**等価**である。
5353
:::
5454

5555
## 4.1.2 else
5656

57-
3.1.1. で示した例は、60点以上「でない」ときを `if (score < 60)` と記述することで実装した。ただ、実際には「そうでない時」を else
58-
文によって簡単に記述できる。
57+
4.1.1で示した例は、60点以上「でない」ときを`if (score < 60)`と記述することで実装した。ただ、実際には「そうでないとき」を**else文**によって簡単に記述できる。
5958

6059
```cpp:line-numbers
6160
#include <iostream>
6261
using namespace std;
6362
6463
int main() {
6564
cout << "点数を入力してください。" << endl;
66-
int score = 0;
67-
cin >> score;
65+
int score;
66+
cin >> score;
6867
6968
if (score >= 60) {
70-
cout << "合格です" << endl;
69+
cout << "合格です" << endl;
7170
} else {
72-
cout << "不合格です" << endl;
71+
cout << "不合格です" << endl;
7372
}
7473
}
7574
```
7675

7776
::: tip
78-
else 文は、if文の終わり( = `}` )の次に書く必要がある。
77+
else文は、if文の終わり(=`}`)の次に書く必要がある。
7978
:::
8079

8180
```mermaid
@@ -89,24 +88,24 @@ flowchart LR
8988

9089
## 4.1.3 else if
9190

92-
3.1.2. のコード に「満点だったら」という条件を足す。
91+
4.1.2のコードに「満点だったら」という条件を足す。
9392

9493
```cpp:line-numbers
9594
#include <iostream>
9695
using namespace std;
9796
9897
int main() {
9998
cout << "点数を入力してください。" << endl;
100-
int score = 0;
99+
int score;
101100
cin >> score;
102101
103102
if (score == 100) {
104-
cout << "満点です" << endl;
103+
cout << "満点です" << endl;
105104
} else {
106105
if (score >= 60) {
107-
cout << "合格です" << endl;
106+
cout << "合格です" << endl;
108107
} else {
109-
cout << "不合格です" << endl;
108+
cout << "不合格です" << endl;
110109
}
111110
}
112111
}
@@ -124,23 +123,23 @@ flowchart LR
124123
printunder --> e
125124
```
126125

127-
ただ、このように書くのは冗長なので、`else if` と短縮する事が許されている。
126+
ただ、このように書くのは冗長なので、`else if`と短縮する事が許されている。
128127

129128
```cpp:line-numbers
130129
#include <iostream>
131130
using namespace std;
132131
133132
int main() {
134133
cout << "点数を入力してください。" << endl;
135-
int score = 0;
134+
int score;
136135
cin >> score;
137136
138137
if (score == 100) {
139-
cout << "満点です" << endl;
138+
cout << "満点です" << endl;
140139
} else if (score >= 60) {
141-
cout << "合格です" << endl;
140+
cout << "合格です" << endl;
142141
} else {
143-
cout << "不合格です" << endl;
142+
cout << "不合格です" << endl;
144143
}
145144
}
146145
```
@@ -149,23 +148,28 @@ int main() {
149148

150149
## 4.1.4 変数のスコープ
151150

152-
変数が使える範囲には制限があり、これを変数のスコープと呼ぶ
151+
変数が使える範囲には制限があり、これを変数の**スコープ**と呼ぶ
153152

154-
具体的には、 `{}` の外からは変数にアクセスできない。
153+
具体的には、`{}`の外からは変数にアクセスできない。
155154

156-
例えば次のソースコードで言えば、 変数 `z` は 4 ~ 6 行目でしか使用できない。
157-
**8 行目は正しく実行できない。(コンパイルエラーとなる)**
155+
例えば次のプログラムで言えば、変数`z`は8行目から10行目まででしか使用できない。**12行目は正しく実行できない。(コンパイルエラーとなる。)**
158156

159-
変数 `x` は 1行目から 9 行目まで好きなところで使用できる
157+
変数`x`は5行目から13行目まで好きなところで使用できる
160158

161159
```cpp:line-numbers
162-
int x = 8;
160+
#include <iostream>
161+
using namespace std;
162+
163+
int main() {
164+
int x = 8;
163165
164-
if (x < 10) {
165-
int z = 10;
166-
cout << z << endl; // OK !
167-
cout << x << endl; // OK !
166+
if (x < 10) {
167+
int z = 10;
168+
cout << z << endl; // OK!
169+
cout << x << endl; // OK!
170+
}
171+
cout << z << endl; // NG
172+
cout << x << endl; // OK!
168173
}
169-
cout << z << endl; // NG
170-
cout << x << endl; // OK !
174+
171175
```

docs/cpp/chapter-4/2.md

Lines changed: 28 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,23 @@
1-
# [WIP] 4.2 演算子
1+
# 4.2 演算子
22

33
## 4.2.1 比較演算子
44

5+
[4.1.1](1#_4-1-1-if)で説明したような、2つの値を比較する演算子のことを、**比較演算子**と呼ぶ。比較演算子を列挙した表を以下に再掲しておく。
6+
7+
| 演算子 | 数学の記号 |
8+
|------|--------|
9+
| `>=` | $\geq$ |
10+
| `>` | $>$ |
11+
| `<` | $<$ |
12+
| `<=` | $\leq$ |
13+
| `==` | $=$ |
14+
| `!=` | $\neq$ |
15+
516
## 4.2.2 論理演算子
617

7-
条件が1つの変数のみに依存する時は `if``else` でわかりやすく書けた。
8-
しかし、条件が2つ以上になるとif と else だけでは煩雑になっていく。
9-
数学では「または」「かつ」 「でない」($\lor,\land, \lnot$) をよく使ったと思うが、プログラミングでもそれに当たるものが存在する。
18+
条件が1つの変数のみに依存する時は`if``else`でわかりやすく書けた。では、条件が2つ以上ある場合はどうすればよいだろうか。if文の中にif文を書くことで、2つの条件の組み合わせを記述することができるが、煩雑にである
19+
20+
数学では「または」「かつ」「でない」($\lor,\land, \lnot$)をよく使ったと思うが、プログラミングでもそれに当たるものが存在する。これらを**論理演算子**と呼ぶ。論理演算子を用いることで、比較的簡単に、複数の条件の組み合わせを書くことができる
1021

1122
| 演算子 | 意味 | 意味・数学記号 |
1223
|------|-----|-------------|
@@ -28,18 +39,26 @@ if (!(y >= 10)) {
2839

2940
## 4.2.3 演算子の優先順位
3041

31-
数学と同じように、演算子には優先順位がついている。優先順位自体は覚えなくても良いが、たまに優先順位が自分の想定と違うときがある。そのようなときは `()`
32-
で式をくくることで、計算順序を変えられるので覚えると良い(数学と同じ)。
42+
数学と同じように、演算子には優先順位がついている。優先順位自体は覚えなくても良いが、たまに優先順位が自分の想定と違うときがある。そのようなときは`()`で式をくくることで、計算順序を変えられる。
3343

34-
特に、 `<<` は比較演算子より優先順位が高い。
35-
`cout << a <= b << endl;` と書くとコンパイルエラーとなってしまうので2行目のように書かなければならない。
44+
特に、`<<`は比較演算子より優先順位が高い。
45+
`cout << a <= b << endl;`と書くとコンパイルエラーとなってしまうので2行目のように書かなければならない。
3646

3747
```cpp:line-numbers
3848
cout << ((a + b) * c) << endl;
3949
cout << (a <= b) << endl;
4050
```
4151

4252
::: tip
43-
「じゃあ `<<` 演算子の優先度を一番低くすればいいじゃん」と思ったかもしれない。
53+
「じゃあ`<<`演算子の優先度を一番低くすればいいじゃん」と思ったかもしれない。
4454
しかし、実際には複雑な事情があるのだ……。
4555
:::
56+
57+
::: tip 第4章のまとめ
58+
59+
* if文、else文で条件分岐ができます。
60+
* `if(x==0)`はどのような条件を表していますか? `==`は比較、`=`は代入です。
61+
* `<` `>` `<=` `>=`で大小の比較ができます。
62+
* `&&` `||` `!`でAND, OR, NOTを扱えます。
63+
64+
:::

docs/cpp/chapter-4/index.md

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1,3 @@
1-
# [WIP] 4. 条件分岐
1+
# 4. 条件分岐
2+
3+
プログラムの中では、「**指定した条件を満たすときにのみ**」実行してほしい処理というものが存在する。第4章では、この「**条件分岐**」を扱う。
Lines changed: 91 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,91 @@
1+
# 4.Q Fraction(★★☆)
2+
3+
## 問題
4+
5+
入力から整数$a,b,c,d$を受け取り、$\frac{a}{b}+\frac{c}{d}$を計算して、存在するなら分数`n/m`のような文字列として表示しよう。
6+
7+
結果を約分する必要はないものとします。
8+
9+
## 入出力例
10+
11+
### 例1
12+
13+
#### 入力
14+
15+
```Input:line-numbers
16+
1 2 3 4
17+
```
18+
19+
#### 出力
20+
21+
```Output:line-numbers
22+
10/8
23+
```
24+
25+
$\frac{1}{2} + \frac{3}{4} = \frac{10}{8}$
26+
27+
### 例2
28+
29+
#### 入力
30+
31+
```Input:line-numbers
32+
1 3 5 7
33+
```
34+
35+
#### 出力
36+
37+
```Output:line-numbers
38+
22/21
39+
```
40+
41+
$\frac{1}{3} + \frac{5}{7} = \frac{22}{21}$
42+
43+
### 例3
44+
45+
#### 入力
46+
47+
```Input:line-numbers
48+
1 0 1 0
49+
```
50+
51+
#### 出力
52+
53+
```Output:line-numbers
54+
```
55+
56+
0除算は定義されないため、$\frac{1}{0}$は存在しません。
57+
58+
## ヒント
59+
60+
::: details ヒント1
61+
今回は約分が必要ないので、最小公倍数を求める必要はありません。素直に掛け算で分母を求めてしまってよいでしょう。
62+
:::
63+
64+
## 解答例
65+
66+
::: details 解答例
67+
68+
```cpp
69+
#include <iostream>
70+
using namespace std;
71+
72+
int main() {
73+
int a, b, c, d;
74+
cin >> a >> b >> c >> d;
75+
76+
// 分母が0でないなら
77+
if (b != 0 && d != 0) {
78+
// 分母を計算 (今回は約分が不要なため、最小公倍数でなくともよい)
79+
int denominator = b * d;
80+
81+
// 分子を計算
82+
int numerator = a * d + c * b;
83+
84+
// 結果を出力
85+
cout << numerator << "/" << denominator << endl;
86+
}
87+
}
88+
```
89+
90+
なお、約分をしたい場合は`std::gcd`などを使って最小公倍数を得ることができます。
91+
:::

0 commit comments

Comments
 (0)