コンテンツへスキップ
Topos Uranos

要約

このレッスンは、データとその型にあてられた、コースの第二単元の始まりである。まず単元の目的を説明する。すなわち、プログラムのあらゆるデータは型とともにメモリに置かれ、その型が、とりうる値、占める大きさ、許される演算を決めること、そしてそれらの限界には観察できる帰結があることを教えることである。さらに、単元の四つのレッスンと、名前と値をもつ区画としての変数から型どうしの変換と定数までそれらを貫く筋道を示し、単元が第一単元から前提とすること、すなわち読み書きするプログラムを書き、コンパイルし、実行できることを確認する。また、単元が解決する問題、つまり見かけは正しいのに計算が数学の計算と一致しないプログラムという問題を、和 0.1+0.20.1 + 0.2(コンピュータでは正確に 0.30.3 にならない)から始めて定式化し、最後に、単元がどこへ通じるか、すなわちこの先の単元と「C++ プログラミング II」コースへの道を示す。

学習目標

  1. 単元の内容の順序を述べ、各レッスンがそのあとのレッスンに何をもたらすかを説明する。
  2. 第 1 単元から必要なこと(コンパイルと実行のサイクル、書式付きの出力、std::cin による読み取り、コンパイラのメッセージの読み方)を思い出し、必要なら復習する。
  3. 例を用いて、プログラムの数が数学の数ではない理由を説明し、コンピュータで 0.1+0.20.1 + 0.2 が正確には 0.30.3 にならない理由を予告する。
  4. 単元の終わりにできるようになるはずのことを確認し、それをこの先の単元で学ぶことと区別する。

導入テスト

単元に取りかかる前に、出発点を測っておくとよい。このテストは自己チェックのためのもので、採点はしない。目的はただ学習の方向づけにある。最初の四問は、単元が第一単元から前提とすることを確かめる。手続きを一歩ずつ追うこと、数を小数第二位まで書くこと、丸め、そしてエラーメッセージを読むことである。続く六問は、レッスンの順に、単元の中心となる考え方を扱う。まだ正解できなくてもかまわないし、そのうちの一問では「まだわからない」が誠実な答えである。正解であれ不正解であれ、どの答えもその要点を説明し、それを扱うレッスンを示すからである。同じ技能は、単元の最後のまとめのレッスンで再び測る。

導入テスト

単元を始める前に、自分の出発点を測りましょう。短い自己評価です。採点はされず、結果はあなたのブラウザーにだけ保存されます。

  1. 問 1前の単元からある手続きにはこうある。「1. rr の値を 17 にする。2. rr の値を r−5r - 5 にする。3. rr の値を r−5r - 5 にする」。終わったとき rr の値はいくつか。

  2. 問 2前の単元から文 std::println("{:.2f}", 2.0 / 3); は何を出力するか。

  3. 問 3前の単元から12.34612.346 を丸めて小数第二位まで書きたい。何が得られるか。

  4. 問 4前の単元からあるプログラムの 5 行目に const int pages{12}、6 行目に std::println("{}", pages); がある。コンパイラは 6:5: error: expected ',' or ';' before 'std' と出力する。欠陥はどこにあるか。

  5. 問 5あるプログラムが int a{2}; と int b{7}; を宣言し、そのあと a = b; と b = 10; を実行する。最後に a の値はいくつか。

  6. 問 6数 13 は二進法でどう書くか。

  7. 問 74 バイトの int がその最大値である 2 147 483 6472\,147\,483\,647 を保持しており、プログラムがそれに 1 を足す。何が言えるか。

  8. 問 81/31/3 は有限の小数で表せるか。

  9. 問 9std::println("{}", 0.1 + 0.2); は何を出力するか。

  10. 問 10あるプログラムが const double ratio{7 / 2}; を宣言し、ratio を出力する。何が表示されるか。