見出し画像

コンピュータサイエンス概論 #2(2週目)

先週末急に地方に行くことになり投稿遅れました。
というかあまり需要ないですかね?
まぁ、とりあえず、連載として残しておきます。

Lecture 3

課題の振り返り

  • climitやsizeofを考慮する必要があるのは何故か

    • 桁あふれやメモリの観点でのデータに使えるbit数

  • 何故cmathのpowは浮動小数点へのキャストを求めるか

    • bit表現のexponentの話

この辺はコンピューターからのデータの見え方を意識する必要性を理解すると良いと思います。なぜを考えるとアルゴリズム的思考が強くなります。

  • データ型

    • リテラル("Hello", 10, 0.3など単体で見たままの意味を持つもの)

    • データ型とは

      • Primitive

      • ユーザー定義型

    • Primitive

      • char, double, float, int, long, short, bool

      • signed, unsigned


データの型のOverviewですね。基本的に文字、文字列、数値(整数型、浮動小数型)、論理値(true, false)はありますね。数値は使うビット数に応じて複数の型があるのが一般的です。

  • Operators(演算子)

    • +(加算)

    • - (減算)

    • * (乗算)

    • / (除算)

    • % (剰余)

  • オペランド

  • 評価

基本的な算術演算に必要な諸々ですね。

  • オペレーターの優先順位

掛け算の方が足し算より先に処理されたり、かっこが先に展開されたり、処理の優先順位がある話です。結構中堅でも見落としたりしますが、テストをしっかりすればミスっても拾えるので、テスト書きましょう。

  • 計算

    • 整数の算術演算

    • 小数の算術演算

整数同士の割り算で小数点切り捨てられたり、片方小数の場合など、知っておいた方が良い話。

  • 数値のキャスト

整数と小数のキャストの位置での結果の違い。先に割り算の片方を小数でキャストすると結果が小数で出ますが、結果を小数にキャストしても、.0が付くだけのような話。

  • 変数

    • 変数はデータが保存されているメモリの位置に定義される名前と型

  • 宣言

    • メモリで使われるサイズを型で、呼び出すための名前を変数名として宣言する

  • Identifier(識別子)

    • プログラム内のアイテムを識別する名前(変数名や関数名など)

    • 先頭は文字である必要がある

    • キーワード(予約語)

変数を理解する時はメモリの使われ方と紐づけて理解すると将来的に楽になります。型がわかればメモリで確保すべきサイズ(ビット数)がわかる、というのが肝です。この辺を理解するとポインタの理解もできると思います。

  • 変数について

    • 宣言時の初期値の有無

    • =は代入であって比較(等号)ではない

変数初期化の話とプログラムでの代入と比較の話。

Lecture 4

  • C++の入出力

    • std::cin >> val;  // 変数varに入力が入る

    • std::cout << val << std::endl;  // 変数varの値がコンソールに表示される 

入出力はプログラムの前提として表現されます。入出力は大事。

Lecture 5

  • 定数(#define, const)

コンパイル時に値が決まるimmutableな定数です。constexprもありますね。#defineはコンパイル時に直接定義箇所を書き換えます。

  • +=, -=, ++, --など

一つのオペランドの値を変更して同じレジスタに戻すような演算です。

  • ++val or val++

変更してから評価するか、評価した後に変更するか、です。後者は一旦一時変数に値を保持します。 varが1の時、func(++var)は2が渡りますが、func(var++)は1が渡ってからメモリ上の変数の値が2に変わります(次に読み込むと2が取れる)。ただ、単独で使う場合(forの、++varの方が裏側の処理が少ないので最適化されてるとされますね。まぁ、コンパイラがやってくれそうな話ではありますが。

  • 条件文

    • if/ else if/ else

if (<expression>) {
    <statement>
} else if (<expression>) {
    <statement>;
} else {
    <statement>;
}

カッコがあったりなかったり、elseifだったりしますが大抵の言語でありますね。条件文が条件式として、変数に代入できる言語もあったりしますが、それは別のお話。

  • expression = 関係式 | 論理値 | 論理演算子

  • 関係式

    • ==, !=, <, >, <=, >=

  • 論理演算子

    • &&, ||, !

条件に入る部分は基本的に評価して論理値になるものが入りますね。&&と&の違いとかの話もあります。&&を使って前の論理演算子が真の場合のみ関数を実行したり、という使い方をする言語もあったり。

課題2

課題2

内容:条件文の練習。
締め切り:次の週月曜授業まで。

  • 下記の問題に対し設計を行った上で実装せよ

    • Text Adventure(ゲームブック≒サウンドノベルのようなもの)を作成せよ

    • 少なくとも5つの道筋のAdventureを作成すること

    • 選択肢による道筋の分岐を作ること(1なら右、2なら左の分かれ道等)

    • 不正な入力をハンドリングすること

  • 配点

    • 設計(5点)

    • 計画の策定(10点)

    • テストプラン(テスト内容、期待する結果、実際の結果の表)(10点)

    • 実装(65点)

    • 終了後もう一度やりたいか聞いてそうなら最初に戻る(Extra10点)

    • コーディングスタイル(10点)

この記事が気に入ったらサポートをしてみませんか?