Slide 1

Slide 1 text

No content

Slide 2

Slide 2 text

• • •

Slide 3

Slide 3 text

• • • • • •

Slide 4

Slide 4 text

Slide 5

Slide 5 text

• • •

Slide 6

Slide 6 text

• • • •

Slide 7

Slide 7 text

! #include int fact(int n) { if(n == 0) { return 1; } return n*fact(n-1); } int main() { std::cout< 10 * fact(9) -> 10 * 9 * fact(8) -> 10 * ... * 1 * 1 -> 10! = 3628800

Slide 8

Slide 8 text

! #include int fact(int n) { if(n == 0) { return 1; } return n*fact(n-1); } int main() { std::cout<

Slide 9

Slide 9 text

! int fact(int n) { if(n == 0) { return 1; } else if(n < 0) { return -1; } return n*fact(n-1); } fact 0 = 1 fact n | n > 0 = n*fact(n-1)

Slide 10

Slide 10 text

Slide 11

Slide 11 text

• • • • • •

Slide 12

Slide 12 text

• • • • •

Slide 13

Slide 13 text

• • • •

Slide 14

Slide 14 text

• •

Slide 15

Slide 15 text

• •

Slide 16

Slide 16 text

• • • • •

Slide 17

Slide 17 text

• • • • • •

Slide 18

Slide 18 text

• • • • •

Slide 19

Slide 19 text

• • •

Slide 20

Slide 20 text

, , ∈ ℤ; 1 ≤ , , ≤ 1000 , ,

Slide 21

Slide 21 text

( ∈ ℤ) ∈ ℤ≥0 ; 1 ≤ ≤ = + +1 + ⋯ + +−1 1 ≤ ≤ − + 1

Slide 22

Slide 22 text

0 = 0 + 1 + ⋯ + −1 1 = 1 + 2 + ⋯ + ⋮ = + + ⋯ + + ⋮ −+1 = −+1 + −+2 + ⋯ + • × − + 1

Slide 23

Slide 23 text

0 = 0 + 1 + ⋯ + −1 1 = 1 + 2 + ⋯ + = 0 − 0 + ⋮ = −1 − −1 + ⋮ = −1 − −1 + • 2 − •

Slide 24

Slide 24 text

No content

Slide 25

Slide 25 text

std::cin std::cout

Slide 26

Slide 26 text

• • •

Slide 27

Slide 27 text

• •

Slide 28

Slide 28 text

• • constexpr • #define a b • const constexpr

Slide 29

Slide 29 text

No content

Slide 30

Slide 30 text

No content

Slide 31

Slide 31 text

op binary decimal 1 0000 0001 1 1 << 6 0100 0000 64 78 0100 1110 78 78 << 5 1100 0000 192

Slide 32

Slide 32 text

#include #define N 1 << 8 // 1<<8 is 256. int main() { std::cout << N * 2; } 1. 512 (256 * 2) 2. 65536 (1<<16) 3.

Slide 33

Slide 33 text

#include #define N 1 << 8 // 1<<8 is 256. int main() { std::cout << N * 2; } // -> 116

Slide 34

Slide 34 text

#include #define N 1 << 8 int main() { std::cout << N*2; } // -> 116 #include int main() { std::cout<<1<<8*2; } // -> 116

Slide 35

Slide 35 text

#include #define N 1 << 8 int main() { std::cout << N*2; } // -> 116 #include int main() { std::cout<<1<<8*2; } // -> 116 #define

Slide 36

Slide 36 text

#include int main() { constexpr int N = 1 << 8; std::cout << N * 2; } // -> 512

Slide 37

Slide 37 text

#define N (1 << 8)

Slide 38

Slide 38 text

Slide 39

Slide 39 text

auto x = 1; // x : int auto x = 1.3; // x : double auto x; // error!

Slide 40

Slide 40 text

#include #include int main() { std::vector vec = {0, 1, 2}; for(auto const& v : vec) { std::cout << v << " "; } } // 0 1 2

Slide 41

Slide 41 text

Slide 42

Slide 42 text

#include int main() { std::cout << [](int x, double y) { return x + y; }(3, 2.2); }

Slide 43

Slide 43 text

#include int main() { auto add = [](int x, double y) {return x + y;}; std::cout << add(3, 2.2); }

Slide 44

Slide 44 text

#include int main() { auto add = [](auto x, auto y) { return x + y; }; std::cout << add(3, 2.2); }

Slide 45

Slide 45 text

• func(int x) • func(int &x) • func(const int &x)

Slide 46

Slide 46 text

#include void func(int x) { x++; } int main() { int a = 42; func(a); std::cout << a << std::endl; // =>42 }

Slide 47

Slide 47 text

#include void func(int &x) { x++; } int main() { int a = 42; func(a); std::cout << a << std::endl; // =>43 }

Slide 48

Slide 48 text

#include void func(const int &x) { x++; // error! read-only! } int main() { int a = 42; func(a); std::cout << a << std::endl; }

Slide 49

Slide 49 text

std::vector v(10e7); // void func(std::vector x) {} // void func(const std::vector &x) {}

Slide 50

Slide 50 text

• • • • • •

Slide 51

Slide 51 text

• • • • • • • • •

Slide 52

Slide 52 text

• •

Slide 53

Slide 53 text

• + −1 −1 −1 + ⋯ + 0 = • + −1 −1 −1 + ⋯ + 0 = 0 ,

Slide 54

Slide 54 text

• • • • Δ

Slide 55

Slide 55 text

≔ lim Δ→0 + Δ − Δ Δ , ≈ + Δ − Δ + Δ = + , Δ Δ = 0 + 0 , Δ = 0 2Δ = Δ + Δ , Δ Δ, ⋯

Slide 56

Slide 56 text

• • • • Δ +1 •

Slide 57

Slide 57 text

+1 = + Δ 6 ,1 + 2,2 + 2,3 + ,4 , ∈ ℕ 0 = 0 ,1 = , ,2 = + 1 2 Δ, + 1 2 Δ,1 ,3 = + 1 2 Δ, + 1 2 Δ,2 ,4 = + Δ, + Δ,3

Slide 58

Slide 58 text

• • • • • •

Slide 59

Slide 59 text

• • • • •

Slide 60

Slide 60 text

• • • •

Slide 61

Slide 61 text

• • • • • #include

Slide 62

Slide 62 text

void ode(const T &x, T &dxdt, const double t) { dxdt = ~~~~; } void output(const T &x, const double t) { std::cout << ~~~~; } int main() { T x; boost::numeric::odeint::integrate( ode, x, 0.0, 10.0, 0.1, output); } ∶ 0 → 10, Δ = 0.1

Slide 63

Slide 63 text

using namespace boost::numeric::odeint; boost::numeric::odeint::integrate integrate

Slide 64

Slide 64 text

using namespace std; std::cout cout

Slide 65

Slide 65 text

= − = − − = − , ,

Slide 66

Slide 66 text

= − = − − = − dxdt[0] = sigma * ( x[1] - x[0] ); dxdt[1] = x[0] * (rho - x[2]) - x[1]; dxdt[2] = x[0] * x[1] - beta * x[2];

Slide 67

Slide 67 text

typedef array T; constexpr double sigma = 10.0; constexpr double rho = 28.0; constexpr double beta = 8.0 / 3.0;

Slide 68

Slide 68 text

void ode(const T &x, T &dxdt, const double t) { dxdt[0] = sigma * (x[1] - x[0]); dxdt[1] = x[0] * (rho - x[2]) - x[1]; dxdt[2] = x[0] * x[1] - beta * x[2]; } void output(const T &x, const double t) { cout << t << '¥t' << x[0] << '¥t' << x[1] << '¥t' << x[2] << endl; } int main() { T x0 = {10.0, 1.0, 1.0}; // initial condition integrate(ode, x0, 0.0, 25.0, 0.1, output); }

Slide 69

Slide 69 text

No content

Slide 70

Slide 70 text

std::ofstream ofs("lorenz.dat", std::ios::binary);

Slide 71

Slide 71 text

• • http://qiita.com/ignis_fatuus/items/74c b32815753d891a716

Slide 72

Slide 72 text

• http://qiita.com/ignis_fatuus/items/74c b32815753d891a716

Slide 73

Slide 73 text

= 1 + −1 + 1 + −1 2 , ∈ ℝ

Slide 74

Slide 74 text

typedef complex T; constexpr complex i(0.0, 1.0); void ode(const T &x, T &dxdt, const double t) { dxdt=(1.0+eta*i)*x+(1.0+alpha*i)*norm(x)*x; } int main() { T x(5.3, -2.0); }

Slide 75

Slide 75 text

+ −1 −1 −1 + ⋯ + 0 = 0 • 1 1 = , 2 = , ⋯ , = −1 −1 1 = 2 , 2 = 3 , ⋯ , −1 = = − −1 + −2 −1 + ⋯ + 0 1

Slide 76

Slide 76 text

2 2 + + = N ⋅ s2 m , N ⋅ s m , N m

Slide 77

Slide 77 text

2 2 + + = = = − − +

Slide 78

Slide 78 text

• • #include #include std::ostream

Slide 79

Slide 79 text

= 2 m, s m2, m/s 5.5 [m]

Slide 80

Slide 80 text

• m + m = + m • m × m = × m2 • m + kg → • Ω = Ω ⋅ m × m m2 • •

Slide 81

Slide 81 text

• [s] • [m] • [kg] • [A] • [K] • [mol] • [cd]

Slide 82

Slide 82 text

#include 1012 si::tera 102 si::hecto 10−3 si::milli 10−15 si::femto

Slide 83

Slide 83 text

using namespace boost::units; boost::units::si::length si::length

Slide 84

Slide 84 text

quantity len; len = 1 * si::meters; // default : double quantity len2(5.0*si::meter); quantity mass; mass = 5.0 * si::kilogram;

Slide 85

Slide 85 text

quantity len(10*si::meter); quantity len2(5.0*si::meter); cout << len + len2; // 15 m

Slide 86

Slide 86 text

quantity len(10*si::meter); quantity len2; len2 = 5.0 * si::kilo * si::meters; cout << len + len2; // 5010 m

Slide 87

Slide 87 text

quantity len(10*si::meter); quantity time(10*si::second); cout << len / time; // 10 m s^-1

Slide 88

Slide 88 text

quantity len(10*si::meter); cout << len; // 10 m s^-1 cout << len.value(); // 10 cout << len; // 10 m s^-1

Slide 89

Slide 89 text

quantity len(5.0*si::meter);

Slide 90

Slide 90 text

quantity len(10*si::meter); quantity time(10*si::second); cout << len + time; // error!

Slide 91

Slide 91 text

#include quantity acc(10*si::meter / pow<2>(si::second)); cout << acc; // 10 m s^-2

Slide 92

Slide 92 text

#include quantity acc(10*si::meter / si::second); // error! length time2

Slide 93

Slide 93 text

• • • •

Slide 94

Slide 94 text

• • • • • http://kaworu.jpn.org/cpp/

Slide 95

Slide 95 text

• • http://qiita.com/hmito/items/483445ac0d4 2fb4428a5 • • http://qiita.com/t_uda/items/7712671389e 016d24df6 • • http://qiita.com/ignis_fatuus/items/74cb 32815753d891a716

Slide 96

Slide 96 text

• č • • http://www.slideshare.net/konn/haskell- 6-32258528 • • • •

Slide 97

Slide 97 text

• • • • •

Slide 98

Slide 98 text

• •

Slide 99

Slide 99 text

• • • http://nalab.mind.meiji.ac.jp/~mk/labo/t ext/

Slide 100

Slide 100 text