2021/11/19 前回の内容 前回の内容 : データ構造 (2) データ構造 機能 : 既存のデータ型から新しいデータ型を作る仕組み 目的 : データ(計算機内部の数値)を利用して、情報(現実の何かに対応するもの)を表現したい 表現方法 => コーディング ( データ <-> 情報 : 1 対 1 なら良い ) 例: { 英数字記号 } ( : ASCII [文字] 集合 ) <-> { 小さな整数 ( 0 〜 255 ) } 情報(が表す対象..)が単純(構造を持たない..)な場合は、 適当な数値の集合で、対応関係 ( 1 対 1 ) があればよい 情報が構造を持つ場合 ( 例 : 二次元平面上の「点」は、x, y 座標からなる ) 「構造を持つ」=> 他の情報の組み合わせでその情報が作られている => 対応するデータも構造をもっていた方が(対応付け[や、それを扱うプログラム]が簡単になる) => 「データ構造」が必要になる (数学) 集合が構造を持つと、 その構造に基づく操作が可能になり、 それが、集合の性質にかかわってくる C 言語で、利用可能な「データ構造」(の表現) 構造体 配列 共用体 ポインター型 構造体 : 複数のデータの組み合せ ( データタイプの直積 ) を作る 例: 2 次元平面上の「点」 その「点」に対応する座標の組 ( x 座標, y 座標 ) で表す事ができる 情報の世界 データの世界(C言語) 点 P struct { ^ double x; | P=(x,y) double y; v } x 座標 x ----> double x x y 座標 y ----> double 構文 : struct { データの組み合せ } ( 要素の型名とタグ名を宣言 ) ![めも] ! struct 構造体名 { データの組み合わせ } ! として、構造体に名前をつける事ができる ! => こうすると、(以後) ! 「struct 構造体名」だけで、 ! 型を表現する事が可能になる 利用 : 「typedef struct { データの組み合せ } 型名」で、新しい型を作る 要素の参照 : タグ名を指定して要素が参照できる 配列 : 複数の『同じ型』の変数(配列の要素)をまとめたもの 同じ型の値が並んだもの(ベクトル)を表現するデータ型 配列の宣言 : 配列を構成する要素数を指定して宣言 要素の個数 ( 配列のサイズ ) 要素の型 例 (整数を要素とするサイズ 3 の配列の宣言) int a[3] -> 3 つの変数 ( a[0], a[1], a[2] : 配列 a の要素 ) を宣言 配列の要素(配列の一部となる変数)は、[] (添字) で参照可能 例 : a[1] -> 配列 a の 2 つ目 ( 1 つ目 a[0] なので.. ) を表す 「添字」には、「整数値を持つ式」が入れられる 配列と for 構文の関係 配列の要素を処理する場合は for 構文が馴染む データ型 操作の構造 構造体 順接 例: sturct { x, y, z } v v.x = .. v.y = .. v.z = .. 配列 くり返し 例: int v[3] for ( i = 0; i < 3; i++ ) { v[i] = .. } 共用体 条件分岐 10:20 〜 10:30 休憩 配列が表現(しやすい)するデータ構造 (配列は、同じ型の要素の組み合わせ) => 同じ要素からなる情報を表現する 例 : 有限部分集合 : 集合の要素をいつか集めたもの 6 の約数の集合 = { 1, 2, 3, 6 } 自然数(全体)の集合の部分集合 C 言語での表現 int a[4]: a[0] = 1; a[1] = 2: a[2] = 3; a[3] = 6; 集合の要素に対する操作 => for 構文で実装する事になる 例: 全ての要素を 2 倍 その集合の中に、ある自然数が入っているかどうか 配列使い方(その一) 同じ種類がまとまっている物 -> 集合を表現している 「集合」を表現する場合は、配列の方が(構造体より)良い 「集合の操作」は「要素の操作の繰返し」になる事が多い 「繰返し」と「配列」は相性がよい ( for 文 ) 配列使い方(そのニ) 「集合」から、「集計」を行う 全体の情報を集約して一つのデータ書き換える作業 例 : 総和、平均、最大値、最小値..(検索[包含関係]) 多次元の話 # 構造体のところ # 既存の型(異なってもよい)を組み合わせて、新しい型を作る # => 構造体の要素は、型をもてば、型は何でもよい # => メンバの型も、構造体にしてよい (構造体の入れ子) # # 構造体の要素に配列をいれることも(当然)できる 配列は、同じ型の並び、 => 配列の配列を考える事もできる 多次元配列 ( 1 次元の配列は、単純な配列とよぶ ) 多次元の配列 配列の配列が作れる : 多次元配列 [例] int d[3][4]; /* 二次元 3 × 4 の 12 個の要素を持つ配列 */ cf. 一次元の配列は、ベクトルに対応 二次元の配列は、行列に対応 (n 次元の配列は、n 次元テンソルになる) 次元は幾つでも増やす事ができる int t[3][4][5]; /* 三次元配列 */ まとめ 配列の処理の方法 for 構文をうまく利用する 配列 <-> リレーショナル DB (表型の DB) <-> MS-Excel のデータ (表形式)