注意: この記事は古い方針に基づいた内容であり、閲覧しないことを推奨します。学びたい人は こちら をどうぞ。
はじめに
ここでは、C++ という言語に触れて
プログラミングを勉強する
この演習の流れとしては、
- 問題を解くためのいろんな概念を解説
- 覚えるためにまず手を動かす
- 覚えたことを応用する
をやっていくうちに、
パズルのような問題を解いたり
または自分でアプリを作るときに
プログラミングで解決できるようになれるかも
プログラミングって何さ
これを作ること↓
「入力」→「システム」→「出力」
プログラミングという概念はまさにこれ
Wandbox
ウェブで C++ が書けるサイト
三へ( へ՞ਊ ՞)へ ハッハッ
まず最初は
このサイトの機能で用意したテンプレート上で
書いていってもらいます
問題が出る度にリンクがあるので解いてください
始まりの関数
関数
処理を書く場所で、
値を 0 つ以上受け取って
値を 0 ~ 1 つ返す
// Like this!
int something(int v) { ~ }
// To explain ...
int // returns
something // named
(int v) // receives
{
// function
}
まだ自分で関数を作るところまでは行かないから
詳しくは解説していないよ
int
整数を表す型、いわば値の種類
int v; // can have:
0;
1;
-3;
+2;
401;
24;
-314;
return
関数から値を返す
return;
return 1;
return 0;
例題 1
さぁ実際に書くよ
馬鹿らしくても必ず書いて
auto echo_back(int val) {
// val is parameter
// Write here
return 0;
}
ここで関数を実装せよ
値 val
が入力される
これをそのまま返せ
ちなみにテスト用の
プログラムも仕込んである
解説
return
に val
と書くとこれを返せる
auto echo_back(int val) {
return val;
}
基本のアイテムたち
四則演算
それぞれ、
- 足し算
- 引き算
- 掛け算
- 割り算
- 剰余演算
- 括弧式
a + b; // a plus b
a - b; // a minus b
a * b; // a times b
a / b; // a over b
a % b; // a mod b
a * (b + c); // with parenthesis
問 1
問に解説はありません
自力で解いて
auto add(int a, int b) {
// Write here
return 0;
}
ここで関数を実装せよ
値 a
b
が入力される
この和を返せ
問 2
auto sum_1_to(int n) {
// Write here
return 0;
}
ここで関数を実装せよ
値 n
が入力される
1
から n
の総和を返せ
計算式が分からなかったら検索してみよう
これ大事
double
浮動小数点数 (小数に近いやつ) を表す値の種類
double v;
// can have:
0.0;
1.;
-.3;
+2e0;
401e-8;
0.024e+5;
-3.14;
正負の演算子
+
-
で数に符号をつける
double a;
+a; // 1 * a
-a; // -1 * a
問 3
auto linear_eq(double a, double b) {
// Write here
return 0;
}
ここで関数を実装せよ
値 a
b
が入力される
ax + b = 0
となる
x
を返せ
式を x
について変形してみよう
bool
正しいか正しくないかを表す値の種類
bool v;
// can only have:
true;
false;
比較演算
- 小さい
- 大きい
- 以下
- 以上
- 等しい
- 等しくない
// They return bool
a < b; // a less b
a > b; // a greater b
a <= b; // a less-equal b
a >= b; // a greater-equal b
a == b; // a equal b
a != b; // a not-equal b
例題 2
auto is_even(int val) {
// Write here
return false;
}
ここで関数を実装せよ
値 val
が入力される
これが偶数かどうかを返せ
解説
2
で割ったあまりが 0
になるのが偶数
演算子を繋げてこうする
auto is_even(int val) {
return val % 2 == 0;
}
問 4
auto is_odd(int val) {
// Write here
return false;
}
ここで関数を実装せよ
値 val
が入力される
これが奇数かどうかを返せ
負の数の剰余はマイナスになる可能性があることに注意
つまり、val % 2 == 1
は不完全
論理演算
- OR (論理和)
- AND (論理積)
- NOT (論理否定)
// They return bool
a || b; // a or b
a && b; // a and b
!a; // not a
true || false; // true
true && false; // false
!false; // true
例題 3
auto is_leap(int year) {
// Write here
return false;
}
ここで関数を実装せよ
値 year
が入力される
これが閏年かどうかを返せ
閏年とは、
- 400 で割り切れる
- 100 で割り切れず 4 で割り切れる
に当てはまる年のこと。
解説
OR と AND でそれぞれの条件をつなげます
auto is_leap(int year) {
return year % 400 == 0 // 1st condition
|| year % 100 != 0 && year % 4 == 0; // 2nd condition
}
分かれ道
分岐 if
bool a;
if (a) {
// when a is true
}
int b;
if (b < 5) {
// when b less than 5
}
if (真偽値) { 処理 }
真偽値が true
の時に
処理が実行される
分岐時の return
bool a;
if (a) {
// when a is true
return;
// this won’t run
}
// when a is false
return;
もともとそれ以降の処理は
実行されない
例題 4
auto max(int a, int b) {
// Write here
return a;
}
ここで関数を実装せよ
値 a
b
が入力される
このうち大きい方を返せ
解説
a
より b
が大きい時点で b
を返せば、
あとのそれ以外の場合は a
を返すだけです
auto max(int a, int b) {
if (a < b) { return b; }
return a;
}
問 5
auto negative(int a, int b) {
// Write here
return a;
}
ここで関数を実装せよ
値 a
が入力される
正の数なら負に、負の数ならそのまま返せ
しめくくり
お疲れ様!
次回はもっとたくさんの処理を扱って、
「たくさんの入力」→「それぞれを加工するシステム」→「出力」
を実装するよ
次回もよしなに