プログラミング演習II 2004年12月 21日(第8回) 理学部数学科・木村巌.

Slides:



Advertisements
Similar presentations
構造体 構造体とは? 複数のデータをパックしたもの。 新しい “ 型 “ として使用できる. 構造体 キーワード struct strcut は構造体を宣言する命令。 struct { double x,y; }a,b,c; ↑ ここまでが宣 言 ← この形式で、構造体 a,b,c, を定 義.
Advertisements

プログラミング演習 II 2005 年 1 月 19 日(第 9 回) 理学部数学科・木村巌. 前回までの復習 共用体( union type ) 共用体( union type ) 列挙 (enumerated type ) 列挙 (enumerated type ) 構造体、構造体のポインタ、
第 10 回 宿題 出題日: 12 月 14 日 締切日: 12 月 21 日. 提出について 以下の場合は、出題日の出席を欠席とする 締切日を過ぎた場合 正解率が 7 割未満の場合 提出は、 PDF ファイルを印刷して、それに答 えを書いて提出すること。
C 言語講座第 5 回 構造体. 構造体とは ... 異なる型の値をまとめて新しい型とする 機能がある . つまり , 複数の変数を 1 つのまとまりにできる . 配列と違って同じ型でデータをまとめるのではな く違った型のデータをまとめられる .
アルゴリズムとデータ構造 第2回 線形リスト(復習).
情報・知能工学系 山本一公 プログラミング演習Ⅱ 第3回 配列(1) 情報・知能工学系 山本一公
プログラミング演習II 2004年11月 30日(第6回) 理学部数学科・木村巌.
情報処理Ⅱ 第10回 2004年12月14日(火).
情報基礎演習B 後半第5回 担当 岩村 TA 谷本君.
数理情報工学演習第一C プログラミング演習 (第3回 ) 2014/04/21
プログラミング入門2 第10回 構造体 情報工学科 篠埜 功.
プログラミング入門2 第10回 構造体 情報工学科 篠埜 功.
プログラミング演習Ⅱ 第12回 文字列とポインタ(1)
プログラミング演習II 2004年10月19日(第1回) 理学部数学科・木村巌.
第8回 プログラミングⅡ 第8回
情報科学1(G1) 2016年度.
構造体.
情報処理Ⅱ 2007年12月10日(月).
データ構造と アルゴリズム 第四回 知能情報学部 新田直也.
第3回 配列,構造体,ポインタ ~ データ構造について学ぶための基礎~
プログラミング 3 構造体(1).
第10回 プログラミングⅡ 第10回
データ構造とアルゴリズム 第4回 リスト ~ データ構造(1)~.
プログラミング演習I 2003年6月25日(第10回) 木村巌.
2005年度 データ構造とアルゴリズム 第3回 「C言語の復習:再帰的データ構造」
プログラミング演習I 2003年5月7日(第4回) 木村巌.
プログラミング入門2 第11回 情報工学科 篠埜 功.
プログラミング入門2 第11回 情報工学科 篠埜 功.
第7回 プログラミングⅡ 第7回
地域情報学 C言語プログラミング 第5回 ポインタ、関数、ファイル入出力 2017年11月17日
1 2 1.写真の挿入 サンプル写真内の画像アイコンをクリックすると「ライブラリ」から好きな写真を挿入することができます。
プログラミング入門2 第11回 共用体、列挙体 情報工学科 篠埜 功.
第11回 プログラミングⅡ 第11回
1 2 1.テキストの入れ替え 2.図のアート効果 テキストを自由に入れ替えることができます。
1 2 1.写真の挿入 サンプル写真内の画像アイコンをクリックすると「ライブラリ」から好きな写真を挿入することができます。
1   1.テキストの入れ替え テキストを自由に入れ替えることができます。 フチなし全面印刷がおすすめです。 印刷のポイント.
1 2 1.写真の入れ替え 2.テキストの入れ替え 印刷のポイント [書式]タブの[図の変更]から好きな写真を入れ替えることができます。
ペットへの コメント Sun Mon The Wed Thu Fri Sat
プログラミング演習I 2004年5月19日(第5回) 理学部数学科・木村巌.
プログラミング言語論 第六回 理工学部 情報システム工学科 新田直也.
構造体と共用体.
XXXXXX高校 XX期生 卒業記念 CALENDAR ▶ MON TUE WED THU FRI SAT SUN
アルゴリズムとプログラミング (Algorithms and Programming)
プログラミング演習I 2003年7月2日(第11回) 木村巌.
ポインタとポインタを用いた関数定義.
1 2 1.写真の挿入 サンプル写真内の画像アイコンをクリックすると、「ライブラリ」から好きな写真を挿入することができます。
1 2 1.写真の挿入 サンプル写真内の画像アイコンをクリックすると、「ライブラリ」から好きな写真を挿入することができます。
情報処理Ⅱ 第2回 2005年10月14日(金).
情報処理Ⅱ 第2回 2006年10月13日(金).
アルゴリズムとデータ構造1 2009年6月15日
R8C I/Oポートの仕組み SFR定義ファイルの中身.
ネットワーク・プログラミング Cプログラミングの基礎.
プログラミング論 構造体
1 2 1.写真の挿入 サンプル写真内の画像アイコンをクリックすると、「ライブラリ」から好きな写真を挿入することができます。
アルゴリズムとデータ構造 2010年6月17日
フレンド関数とフレンド演算子.
1 2 1.テキストの入れ替え 2.図のアート効果 テキストを自由に入れ替えることができます。
プログラミング演習I 2003年6月11日(第9回) 木村巌.
データ構造と アルゴリズム 第四回 知能情報学部 新田直也.
テキストの入れ替え 印刷のポイント 1.写真の挿入
情報処理Ⅱ 2005年11月25日(金).
プログラミング演習II 2004年11月 16日(第5回) 理学部数学科・木村巌.
プログラミング演習II 2003年11月19日(第6回) 木村巌.
プログラミング演習II 2003年12月10日(第7回) 木村巌.
プログラミング演習II 2004年11月 2日(第3回) 理学部数学科・木村巌.
プログラミング入門2 第5回 配列 変数宣言、初期化について
情報処理Ⅱ 小テスト 2005年2月1日(火).
TList リスト構造とは? 複数のデータを扱うために、 データの内容と、次のデータへのポインタを持つ構造体を使う。
C言語講座第5回 2017 構造体.
プログラミング演習II 2003年10月29日(第2,3回) 木村巌.
Presentation transcript:

プログラミング演習II 2004年12月 21日(第8回) 理学部数学科・木村巌

前回までの復習 構造体 typedef 構造体のサイズ 構造体の応用 関数の引数に構造体を使う 関数の引数に構造体へのポインタを使う 構造体の配列

今日学ぶこと 共用体(union type) 列挙(enumerated type) 構造体、構造体のポインタ、typedefなどを用いた、リンクトリストの実装例

共用体 異なる型を持つ値を保持する ただし、同時に一つの値しか保持できない 共用体型の宣言 union 共用体型名 { }; 型名 識別子; 型名 識別子; … };

共用体の例 Sample11.cを打ち込んで、コンパイル・実行してみよう union YearにtypedefでYearという型名を与えている メンバーが異なる型の場合、unionのサイズ(sizeof 演算子の結果)はどうなるか? 試してみよう!

列挙型 識別子を値として格納できる型 構文 例 enum Week型の変数には、SUNからSATまでのいずれかを保持できる enum Week {SUN, MON, TUE, WED, THU, FRI, SAT}; enum Week型の変数には、SUNからSATまでのいずれかを保持できる Sample12.cを入力し、コンパイル・実行してみよう 列挙型を使うと、プログラムが分かりやすくなる

列挙型の数値を指定する 列挙型は、内部的には0から順に1づつ増える整数が割り当てられている 例 値を明示的に割り当てることも出来る typedef enum Week {SUN, MON, TUE, WED, THU, FRI, SAT} Week; この例だと、Week型は0から6までの整数値 値を明示的に割り当てることも出来る typedef enum Week {SUN, MON = 0, TUE = 5,…}; のように

列挙型とマクロを比較する マクロを使っても、同様にプログラムを読みやすくすることが出来る: 列挙型は自動的に値を割り振ってくれる #define SUN 0 などなど(教科書p. 381) 列挙型は自動的に値を割り振ってくれる デバッガでプログラムを追跡する際に、列挙子型の識別子名が表示される(かも) 列挙子型のスコープは定義されたブロックであること

リンクトリスト(Linked List) データが数珠つながりになったようなデータ構造(それぞれをノードnodeという) シーケンシャルアクセス(始めから順にしかアクセスできない) 途中にノードを挿入することが容易 次のノードには容易にアクセスできる 前のノードへのアクセスは困難 この点は、次にやるダブルリンクトリストを使うと解消できる

リンクトリストの実装 実装は、構造体を使う データそのものを表すメンバ 次の構造体を指すポインタ

構造体へのポインタをメンバに 次のような構造体を考えてみよう struct _Node { char *contents; struct _Node *next; }; 保持するデータは、contentsが指す文字列 nextは、次の構造体を指すポインタ

typedefで詳細を隠蔽 typedef struct _Node { char *contents; struct _Node *next; } *Node これで、Node型が定義された. 実際は、struct _Node 型のポインタだが、そのことは使う人には意識させない

メンバーへのアクセス Node型は、struct _Node型へのポインタなので、 Node n; n->contents = “abc”; のようになるが、マクロを使って、実装の詳細を隠蔽する #define NODE_GET_CONTENTS(n) (n)->contents #define NODE_GET_NEXT(n) (n)->next メンバへの代入も同様に、マクロで定義する

実装の詳細の隠蔽:メリット 実装の詳細を隠蔽(typedefなど) 使い方だけを公開(マクロによるアクセサ accesser) メリット? 後から内部の実装を変更できる コードの不要な部分を知らなくても使えるようにする

今日学んだこと 共用体(union type) 列挙(enumerated type) 構造体、構造体のポインタ、typedefなどを用いた、リンクトリストの実装例

レポート課題 (1)二つのリンクトリストsl1, sl2が与えられたとき、sl1の末尾にsl2を連結する関数、void sllist_append (SLList sl1, SLList sl2) を書け sl1の最後のノードまで読み飛ばし、sl1の最後のノードの次を、sl2のheadにすればよい (2)リンクトリストについて、文献などを調査したことを簡潔にまとめよ.

レポート課題 締め切り:2005年1月10日一杯(日本時間で) 提出:メールで木村(iwao@sci.toyama-u.ac.jp)まで. 感想などあると木村が喜びます