Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
11 changes: 8 additions & 3 deletions docs/.vitepress/theme/custom.css
Original file line number Diff line number Diff line change
@@ -1,9 +1,14 @@
@import "kiso.css";

:root {
--vp-font-family-base: 'Noto Sans JP', 'Inter', ui-sans-serif, system-ui, sans-serif;
--vp-font-family-base:
"Noto Sans JP", "Inter", ui-sans-serif, system-ui, sans-serif;
}

mjx-container.MathJax svg {
display: inline;
}
display: inline;
}

summary {
list-style-type: revert;
}
27 changes: 14 additions & 13 deletions docs/cpp/chapter-2/1.md
Original file line number Diff line number Diff line change
@@ -1,25 +1,27 @@
# 2.1 プログラミングの基礎知識

まずは「プログラミング」とはなにか、という半ばご高説を垂れるような話から始めよう。

## 2.1.1 プログラミングとは

プログラミングとは「コンピューターにどのような動作をさせるかを予め指示する行為」である。ここでいうコンピューターは、我々が今使っているノートパソコンだけではなく、TSUBAME のようなサーバーなどや、電子レンジ等の中に入っている制御装置(残り何分かを表示したり、どのボタンを押したかで動作を変えたり)も指し示す。
プログラミングとは「コンピューターにどのような動作をさせるかを予め指示する行為」である。ここでいうコンピューターは、我々が今使っているノートパソコンだけではなく、TSUBAMEのようなサーバーなどや、電子レンジ等の中に入っている制御装置(残り何分かを表示したり、どのボタンを押したかで動作を変えたり)も指し示す。

コンピューターは、私達よりもずっと速く、そして正確に計算することができるが、人間の言語を理解できない。人間の言語は思っているよりも曖昧であり、一方コンピューターはすべて0と1の2進数によって動作し厳密に指示を与えなければならない。
そのコンピューターが理解できる形で指示するために、プログラミングをするのである。

::: tip
プログラミング"言語"というものは様々あって、「C++」はその中の一つである。他にも「Python」「JavaScript」「C#」など言語がある中で今回C\++を選んでいる理由は2つ
プログラミング"言語"というものは様々あって、「C++」はその中の一つである。他にも「Python」「JavaScript」「C#」など言語がある中で今回C++を選んでいる理由は2つ

1. 大抵の言語はC++の(もっと言えばCの)派生だから。C\++で一通りプログラミングを勉強してしまえば、C#など他の言語にすぐに乗り換えられます
2. C++が比較的コンピュータ寄りだから
1. 大抵の言語はC++の(もっと言えばCの)派生だから。C++で一通りプログラミングを勉強してしまえば、C#など他の言語にすぐに乗り換えられるから
2. C++が比較的コンピューター寄りだから

:::

## 2.1.2 コンパイルとは

先述した通り、コンピューターは2進数によって動作する。よって与える命令も2進数でできるだけコンピューターでの動作に特化した形式になっている(「機械語」の形になっている)のだが、これを人間が読むことは困難である。よって比較的わかりやすく、かつ機械語に変換できる言語としてプログラミング言語を用いる。

プログラミング言語によって記述されたプログラムは、コンピューターが直接命令として理解できる形ではなく、よってコンピューターが読める形に変換しなければならない
プログラミング言語によって記述されたプログラムは、コンピューターが直接命令として理解できる形ではない。そのため、コンピューターが読める形に変換しなければならない
この操作を「コンパイル」と呼び、コンパイルによって生成された01からなるデータ(バイナリ)をコンピューターは読み込む。

```mermaid
Expand All @@ -31,15 +33,14 @@ mc --> |"命令"| cp("コンピューター")

## 2.1.3 OSとは

OS は、Operating System の略。この講習会中では、上のグラフの「機械語」を読み取って、コンピューターを実際に動かす部分を担当している。他にも、ユーザーの様々な操作(画面上のポインタを動かす、キーボードの入力を受け付けて適切に情報を分配する、HDD/SDD を操作する、などなど…)とコンピューターをつなぐ役割を果たす。

Windows / Mac (Macintosh) は主要な OS である。受講者の大半はこのどちらかのOSを使用しているだろう。
OSは、Operating Systemの略。この講習会中では、上のグラフの「機械語」を読み取って、コンピューターを実際に動かす部分を担当している。他にも、ユーザーの様々な操作(画面上のポインタを動かす、キーボードの入力を受け付けて適切に情報を分配する、HDD/SDDを操作する、などなど…)とコンピューターをつなぐ役割を果たす。

他にも、開発においてよく使用される OS として **Linux** が存在し、いくつかの班では Linux を用いて作業する
Windows / Mac(Macintosh)は主要なOSである。受講者の大半はこのどちらかのOSを使用しているだろう

Mac OS は Linux に「近い」(初学者である間は Linux の一種だと思っても良い)が、Windows は Linux とは大きく異なる OS
なので、Windows ユーザーはよく **WSL** を使用する。
WSL は **Windows Subsystem for Linux** の略。コンピューターの内部に、仮想的な Linux のコンピューターが入ってると考えると良い。
他にも、開発においてよく使用されるOSとして**Linux**が存在し、いくつかの班ではLinuxを用いて作業する。

Ubuntu は、Linux ディストリビューションの一つで、Linux のカスタマイズみたいなものである。
Mac OSはLinuxに「近い」(初学者である間はLinuxの一種だと思っても良い)が、WindowsはLinuxとは大きく異なるOS
なので、Windowsユーザーはよく**WSL**を使用する。
WSLは**Windows Subsystem for Linux**の略。コンピューターの内部に、仮想的なLinuxのコンピューターが入ってると考えると良い。

Ubuntuは、Linuxディストリビューションの一つで、Linuxのカスタマイズみたいなものである。
93 changes: 53 additions & 40 deletions docs/cpp/chapter-2/2.md
Original file line number Diff line number Diff line change
@@ -1,78 +1,91 @@
# 2.2 作業環境の構築

ここからは実際に手を動かして、作業するための場所を作っていこう。

## 2.2.1 はじめてのターミナル

まずはターミナルを開いてみよう。黒い画面に白い文字(Mac では白い画面に黒い文字)が出ていて、ここにコマンドを打ち込むことでコンピューターを直接操作することができる。
試しに `echo "Hello"` と打ち込んで改行すると、`Hello`が出力される。 `echo` は、次に与えられた文字列をそのまま出力するコマンドである。
まずはターミナルを開いてみよう。黒い画面に白い文字(Macでは白い画面に黒い文字)が出ていて、ここにコマンドを打ち込むことでコンピューターを直接操作することができる。
試しに`echo "Hello"`と打ち込んで改行すると、`Hello`が出力される。`echo`は、次に与えられた文字列をそのまま出力するコマンドである。

Windows においては、 WSL のターミナルを用いて Linux を操作することができ、Mac においてはターミナルを用いてコンピューターを操作する事ができる
Windowsの環境構築で少し出てきた 「PowerShell」は Windows を操作するイメージ
Windowsにおいては、WSLのターミナルを用いてLinuxを操作することができ、Macにおいてはターミナルを用いてコンピューターを操作することができる
Windowsの環境構築で少し出てきた「PowerShell」はWindowsを操作するイメージ

::: tip
`echo` は「こだま・反響」
`echo`は「こだま・反響」
:::

1. 「ターミナル」を起動する
2. `echo "Hello"` と入力する
3. `Hello` という行が表示されていればOK
1. 「ターミナル」を起動する
2. `echo "Hello"`と入力する
3. `Hello` という行が表示されていればOK

![](https://md.trap.jp/uploads/upload_8550a6882b611e212c99ef7b78187cb6.png)

自分の画面とはおそらく違うだろうが、概ねこのような風に `Hello` が表示されれば問題ない。
自分の画面とはおそらく違うだろうが、概ねこのような風に`Hello`が表示されれば問題ない。

## 2.2.2 ディレクトリとは

ディレクトリは、エクスプローラー(Windows)/Finder (Mac)で「フォルダ」に相当するものである。ターミナルは常にどこかのディレクトリ上に居るものとして振る舞う。
Finder/エクスプローラーと見比べながら、コマンドを打ち込んで理解しよう。
ディレクトリは、エクスプローラーWindows/FinderMacで「フォルダ」に相当するものである。ターミナルは**常にどこかのディレクトリ上に居るものとして振る舞う。**
エクスプローラー/Finderと見比べながら、コマンドを打ち込んで理解しよう。

### ターミナルでの操作

1. ターミナルを開く
2. `pwd`、現在の自分の場所がわかる
3. `ls`、今居るディレクトリにあるファイル一覧が表示される(最初はほぼないはず!)
1. ターミナルを開く
2. ターミナルで`pwd`と打つと、現在の自分の場所がわかる
3. ターミナルで`ls`と打つと、今居るディレクトリにあるファイル一覧が表示される(最初はほぼないはず!)

#### エクスプローラー(Windows)

エクスプローラーを起動すると、自分のコンピューターに保存されているファイルを一覧することができる。

1. エクスプローラーの「表示」をタップ
1. エクスプローラーを開く。
2. エクスプローラーの「表示」をクリックする。
![](./fig-1.png)

2. 「ファイル名拡張子」にチェックを入れる

3. サイドバーに「Linux」があるので、それをダブルクリックする。
3. 「ファイル名拡張子」にチェックを入れる。
4. サイドバーに「Linux」があるので、それをダブルクリックする。
![](./fig-2.png)
4. 「Ubuntu」をクリック
5. `pwd` コマンドの結果を見ながら、「home」→「(自分の名前)」でアクセスする。
5. 「Ubuntu」をクリックする。
6. `pwd`コマンドの結果を見ながら、「home」→「(自分の名前)」でアクセスする。

#### Finder (Mac)
#### Finder(Mac)

Finder を起動すると、自分のコンピューターに保存されているファイルを一覧することができる。
Finderを起動すると、自分のコンピューターに保存されているファイルを一覧することができる。

1. ⌘ + `,` → 「すべてのファイル名拡張子を表示」をON
2. Finder で⌘+Shift+G
3. `pwd` で出てきたテキストをそのまま入力
1. Finderを開く。
2. Finderで`⌘`+`,`を押す。
3. 「詳細」→「すべてのファイル名拡張子を表示」をONにする。
4. Finderで`⌘`+`Shift`+`G`を押す。
5. `pwd`で出てきたテキストをそのまま入力する。

## 2.2.3 作業環境の構築(仮)
## 2.2.3 作業環境の構築

### コマンド紹介

- `pwd` : 現在の自分の場所 (**P**rint **W**orking **D**irectory)
- `ls` : 今いるディレクトリにあるファイル (**L**ist **S**egments)
- `cd <...>` : ディレクトリを移動する (**C**hange **D**irectory)
- `cd ../` 一つ親のディレクトリに移動する (`/home/trap` なら `/home` に移動)
- `mkdir <...>` : ディレクトリを作成する (**M**a**k**e **Dir**ectory)
- `pwd`:現在の自分の場所を表示する。 (**P**rint **W**orking **D**irectory)
- `ls`:今居るディレクトリにあるファイルの一覧を表示する。 (**l**i**s**t)
- `cd {path}`:`{path}`に移動したいディレクトリを入れることで、今居るディレクトリから`{path}`のディレクトリへ移動する。 (**C**hange **D**irectory)
- 例えば、`cd abc`と打つと、今居るディレクトリの下にある、`abc`という名前のディレクトリに移動する。
- `cd ../`:一つ親のディレクトリに移動する
- 例えば、今居るディレクトリが`/home/traP`なら`/home`に移動に移動する。
- `mkdir {path}`:ディレクトリを作成する (**M**a**k**e **Dir**ectory)

### 作業環境の作成

1. `cd ~` と入力( `~` は 0 の2つ右のキー `^` と Shift 同時押し);最初の場所に戻る
2. `mkdir pgbasic` と入力; `pgbasic` というディレクトリを作成する
3. `cd pgbasic`; `pgbasic` に移動する
4. `pwd`; 今いるディレクトリの場所を出力する
まずは、ターミナルでコマンドを打ち、作業するための場所を作成しよう。

1. ターミナルで`cd ~`と入力する。(`~`は`0`の2つ右のキー`^`+`Shift`を同時押し)
- ホームディレクトリに移動できる。
2. ターミナルで`mkdir pgbasic`と入力する。
- `pgbasic`というディレクトリが作られる。

### 作業環境を開く

### 作業環境を開く方法
次に、上で作った作業環境をVSCodeで開こう。

1. `cd pgbasic`; `pgbasic` に移動する
2. `code main.cpp`; VSCode を開く。ここが講習中の作業場所。
1. ターミナルで`cd pgbasic`と入力する。
- `pgbasic`のディレクトリに移動する。
2. ターミナルで`pwd`と入力する。
- 今いるディレクトリの場所が出力される。最後が`/pgbasic`で終わっていればOK!
3. `code main.cpp`
- VSCodeを開く。ここが講習中の作業場所。

もしくは、VSCode を直接起動しても前回のファイル・ディレクトリを開けるようになる。
もしくは、VSCodeを直接起動しても前回のファイル・ディレクトリを開けるようになる。
49 changes: 30 additions & 19 deletions docs/cpp/chapter-2/3.md
Original file line number Diff line number Diff line change
@@ -1,8 +1,16 @@
# 2.3 はじめてのプログラミング

最後に、実際にプログラムを動かしてみよう。

## 2.3.1 Hello, traP!

- VSCode を開く (`code main.cpp` コマンドで開く)
1. `main.cpp`に以下のコードを書く。(コピペでOK)

::: info

`main.cpp`が開かれていない場合は、前のページの「作業環境を開く」を最初にやろう。

:::

```cpp:line-numbers
#include <iostream>
Expand All @@ -14,49 +22,52 @@ int main() {
}
```

- 保存して、VSCode 上で 「Run Code」で実行できる。
- `Hello, traP!` となっている部分を書き換えると出力が変わる。実際に試してみよう。
2. `Ctrl`(`⌘`)+`S`を押して保存する。
3. VSCodeの「Run Code」ボタン(右上の▷)をクリックすると実行できる。
4. 実行に成功すると、画面下部に「出力」と書かれた画面が出てきて、`Hello, traP!`と表示される。
5. プログラム中の`Hello, traP!`となっている部分を書き換えると出力が変わる。実際に試してみよう。

::: tip I 章のまとめ
::: tip 2章のまとめ

- プログラミングとは、「コンピューターにどのような動作をさせるかを指示する行為
- プログラミングとは、「コンピューターにどのような動作をさせるかを予め指示する行為
- プログラムは、コンパイルして実行される
- Windows, Mac, そして Linux という OS がある
- WindowsMac、そしてLinuxというOSがある
- ディレクトリという概念が存在する
:::

ここまで読んだら、練習問題を解いてみましょう!

## 2.3.2 [発展] nanoを使ったプログラミング(仮)
## 2.3.2 [発展] nanoを使ったプログラミング

さきほどの操作はすべてターミナル上で完結させることもできる。ここでは少しだけそれを試してみよう。

::: info
ここで紹介するのは「できる」というだけでの紹介で、本講習中では VSCode を使うことを強くおすすめします
ここで紹介するのは「できる」というだけでの紹介で、本講習中ではVSCodeを使うことを強くおすすめします
:::

1. 「作業環境を開く方法」まで一緒
2. `nano nano-test.cpp` でコードを開く
1. 前のページの「作業環境を開く」までを終わらせる。
2. `pg-basic`というディレクトリに居る状態で、ターミナルに`nano nano-test.cpp`と入力する。
3. キーを入力すると色々入力できる。
4. ソースコードを入力する。
5. `Ctrl + X`で終了
6. `y`を入力したあと、`Enter`を押すと保存
7. `ls`コマンドで`nano-test.cpp`があることを確認
8. ターミナル上で、`clang++ nano-test.cpp` で「コンパイル」
9. エラーが出なかったら、 `./a.out` で「実行」
10. できた!
4. プログラムを入力する。

この方法で、次のソースコードからなる `nano-test.cpp` を作成してみよう。

```cpp:line-numbers
#include <iostream>
using namespace std;

int main() {
cout << "Hello, nano!" << endl;
// Hello, nano! を出力する
}
```

5. `Ctrl`(`control`)+`X`で終了する。
6. `y`を入力したあと、`Enter`を押してファイルを保存する。
7. `ls`コマンドで`nano-test.cpp`があることを確認する。
8. ターミナル上で、`clang++ nano-test.cpp`と入力すると、プログラムが**コンパイル**される。
9. エラーが出なかったら、`./a.out`と入力し、コンパイルしたプログラムを**実行**できる。
10. `Hello, traP!`と出力された!

::: tip
わからなかったり、詰まったりしたらすぐに TA を呼びましょう
わからなかったり、詰まったりしたらすぐにTAを呼びましょう
:::
5 changes: 2 additions & 3 deletions docs/cpp/chapter-2/index.md
Original file line number Diff line number Diff line change
@@ -1,9 +1,8 @@
# 2. はじめてのプログラミング

:::warning @講師, TA

:::warning TA向け
**この段階で環境構築にまだまだ時間が掛かりそうな受講者が居る場合は、GitHub Codespaces に移行させてください。**
講習後に環境構築の続きをするようにお願いします。
:::

まずは「プログラミング」とはなにか、という半ばご高説を垂れるような話から始めよう。
この章ではまず、「プログラミングとは何か」という話をした後に、第1章で作成した環境を使って、
Loading
Loading