2分木の演習
2分木の説明を終え、今日は演習。 名前と年齢といった複数項目からなるデータを、2分木により処理するプログラムを作成する。 データの登録・検索・表示などの処理ができること。
検索では、2分木の右枝・左枝に分岐するためのキーとなるもので検索する処理に加え、 理解度に自信のある人は、非キーでも検索する機能を実装してほしい。 (例えば、名前と年齢の2分木で枝の左右を名前で行う場合、指定年齢のデータを表示する機能なども実装する)
関係データベースの基礎
関係データベースの基礎として、SQLの導入について説明を行う。
SQLの導入
SQLの導入として、データ定義言語,データ操作言語,データ制御言語の説明。
- データ定義言語
- CREATE TABLE
CREATE TABLE テーブル名( 要素1 型 , 要素2 型 , ) ;
型としては、integer,float,char/varchar/text,datetime などを紹介する。 ただし、型などの具体的な名称は、データベースにより微妙に違う場合がある。
DROP TABLE
DROP TABLE テーブル ;
- データ操作言語
- INSERT
INSERT INTO テーブル(要素1,要素2,...) VALUES(値1,値2,...) ;
UPDATE
UPDATE テーブル SET 要素=値 WHERE ...
DELETE
DELETE FROM テーブル WHERE ...
SELECT
SELECT 要素 FROM テーブル WHERE ...
- データ制御言語
- GRANT , REVOKE など
関係データベースの数学的基礎
関係データベースは、1970年頃のコッド博士(IBM)の論文から始まる。
A,Bを集合(set)としたとき、A×Bは直積(Cartesian product)とよばれ、A×B={(x,y)|x∈A,y∈B}となる。 この直積の部分集合を関係R(A,B)と呼ぶ。 (x,y)の組は、取り扱う集合の種類によってN項組(タプル)とかレコードと呼ばれる。 実際の取りうる値を定義域(Domain)と呼ぶ。
スティーブ・ジョブズ追悼として…
Apple社前CEOのスティーブ・ジョブズ氏が無くなったそうな。 情報構造論の前に、ネタ的に彼の逸話やApple社の変遷を少し話してみた。 でも、追悼とするならば、有名な以下の動画がいいだろう。
スタンフォード大学卒業式辞(日本語字幕版)
構造体の関数との受け渡し
週末の授業が都合が悪く、高久先生と交代で金曜と近い状態での構造体2回目。
前回の授業で、構造体の関数との受け渡しとして、ポインタ渡しとアロー演算子を 説明したけれど、ポインタ渡しに関連する概念をもう一度説明。
- C言語で一般的な値渡し(call by value)
- 大域変数渡し(競合が発生しやすいので極力使わない方がいい)
- 関数の返り値(1つしか値を返せない)
- 配列の参照渡し(配列名は先頭のポインタと同じなので本当はポインタ渡し)
- ポインタ渡し(指定したポインタの先に書きこんでもらう)
これに加え、前回授業で説明の抜けた構造体の初期化を紹介。 次に、2年で基本は習っているはずなので早々に演習として、 「前課題でのファイル入出力で、そのデータを構造体で記述すること」 として演習をしようと思ったけど、講義入れ替えなので演習室が使えない…
仕方が無いので補足説明として、 struct …{ } の後の";"忘れが多いのでその注意や、構造体宣言もスコープがあるため、 関数内でstruct…を宣言すると、自分の関数との受け渡しがかけない。 だから、構造体宣言はプログラムの最初で…といった説明を行う。
早く講義を終えた後、プログラムの好きな学生が typedef について聞いてきた。 typedef struct… では、struct…での構造体変数の宣言部の部分に、新しくつける名前を 記載することを説明。ただし、C++ では、タグ名がそのまま型名として利用できるため、 typedef struct … という使い方は、めったにすることがなくなったことを説明。
typedef struct PersonTag { char name[ 20 ] ; int age ; } Person ; void main() { Person saitoh ; strcpy( saitoh.name , "t-saitoh" ) ; saitoh.age = 46 ; }
タイからの短期留学生受け入れ
タイからの短期留学生として、電子情報工学科で プラウさんとナッツさんの2名を1月間受入れる こととなりました。
今日は最初にチュータとなる5EIの学生さんとの 面談でした。

ピンヘッダ無しかぁ… …(09/30)
- 09/30 ピンヘッダ無しかぁ… "製品開発の扉を開くArduino Leonardo" http://tinyurl.com/64clahy #fnct
- 09/29 やっぱりウォズ、ストールマン、リーナスの正統なるハッカーの名前が… "歴史に残るハッカー10人" http://www.gizmodo.jp/2011/09/10-hackers… via @gizmodojapan #fnct
この記事は、 の @TohruSaitohに掲載した #fnct タグ付き記事を、まとめたものです。
構造体の使い方
プログラミング応用の後半は、 構造体(構造体・共用体・ビットフィールド)と、中間以降はグラフィックスという予定を 説明してから説明を開始。
構造体を使わない場合の問題点として、 名前と電話番号のデータベース構築をテーマに、 問題点を説明。 複数の配列を宣言すれば、途中で1人分のデータに変更が加わって、 配列宣言すべてを見なおさないといけなくなることを紹介。
// まずは構造体の宣言を理解してもらうため struct Person { // Personはタグ名 char name[ 20 ] ; // 要素の宣言 int age ; } table[ 50 ] ; // table は Person型の50件分 // 実際は、構造体の宣言と、構造体変数の宣言は別に書く。 struct Person { char name[ 20 ] ; int age ; } ; struct Person table[ 50 ] ; void main() { struct Person saitoh ; saitoh.age = 46 ; strcpy( saitoh.name , "斉藤" ) ; printf( "%s %d¥n" , saitoh.name , saitoh.age ) ; }
構造体は入れ子にすることもできる。
struct Person { char name[ 20 ] ; int age ; struct Birthday { int year ; int month ; int day ; } bday ; } ;
構造体変数の一括代入とか説明したけど、 構造体の初期化を説明しなかったな…