Microsoft PowerPoint - exp2-02_intro.ppt [互換モード]

Similar documents
PowerPoint プレゼンテーション

02: 変数と標準入出力

バイオプログラミング第 1 榊原康文 佐藤健吾 慶應義塾大学理工学部生命情報学科

02: 変数と標準入出力

JavaプログラミングⅠ

Taro-ポインタ変数Ⅰ(公開版).j

演算増幅器

7 ポインタ (P.61) ポインタを使うと, メモリ上のデータを直接操作することができる. 例えばデータの変更 やコピーなどが簡単にできる. また処理が高速になる. 7.1 ポインタの概念 変数を次のように宣言すると, int num; メモリにその領域が確保される. 仮にその開始のアドレスを 1

プログラミングI第10回

(2) 構造体変数の宣言 文法は次のとおり. struct 構造体タグ名構造体変数名 ; (1) と (2) は同時に行える. struct 構造体タグ名 { データ型変数 1; データ型変数 2;... 構造体変数名 ; 例 : struct STUDENT{ stdata; int id; do

基礎プログラミング2015

Microsoft PowerPoint - handout07.ppt [互換モード]

memo

PowerPoint プレゼンテーション

RX ファミリ用 C/C++ コンパイラ V.1.00 Release 02 ご使用上のお願い RX ファミリ用 C/C++ コンパイラの使用上の注意事項 4 件を連絡します #pragma option 使用時の 1 または 2 バイトの整数型の関数戻り値に関する注意事項 (RXC#012) 共用

情報処理Ⅰ演習

Microsoft PowerPoint - lec10.ppt

memo

Microsoft PowerPoint - 11.pptx

PowerPoint プレゼンテーション

C プログラミング演習 1( 再 ) 2 講義では C プログラミングの基本を学び 演習では やや実践的なプログラミングを通して学ぶ

Microsoft PowerPoint - 6.pptx

Microsoft Word - no12.doc

Microsoft PowerPoint ppt

02: 変数と標準入出力

Microsoft PowerPoint - prog03.ppt

C 資料 電脳梁山泊烏賊塾 構造体 C++ の構造体 初めに 此処では Visual Studio 2017 を起動し 新しいプロジェクトで Visual C++ の Windows デスクトップを選択し Windows コンソールアプリケーションを作成する 定義と変数宣言 C++ に

プログラミング及び演習 第1回 講義概容・実行制御

gengo1-11

PowerPoint Presentation

第1回 プログラミング演習3 センサーアプリケーション

Microsoft PowerPoint pptx

Microsoft PowerPoint - prog08.ppt

Microsoft Word - 3new.doc

始めに, 最下位共通先祖を求めるための関数 LcaDFS( int v ) の処理を記述する. この関数は値を返さない再帰的な void 関数で, 点 v を根とする木 T の部分木を深さ優先探索する. 整数の引数 v は, 木 T の点を示す点番号で, 配列 NodeSpace[ ] へのカーソル

プログラミング方法論 II 第 14,15 回 ( 担当 : 鈴木伸夫 ) 問題 17. x 座標と y 座標をメンバに持つ構造体 Point を作成せよ 但し座標 は double 型とする typedef struct{ (a) x; (b) y; } Point; 問題 18. 問題 17 の

Microsoft PowerPoint - CproNt02.ppt [互換モード]

Prog1_10th

02: 変数と標準入出力

Microsoft Word - Cプログラミング演習(12)

program7app.ppt

02: 変数と標準入出力

02: 変数と標準入出力

memo

今回のプログラミングの課題 ( 前回の課題で取り上げた )data.txt の要素をソートして sorted.txt というファイルに書出す ソート (sort) とは : 数の場合 小さいものから大きなもの ( 昇順 ) もしくは 大きなものから小さなもの ( 降順 ) になるよう 並び替えること

02: 変数と標準入出力

PowerPoint プレゼンテーション

C プログラミング 1( 再 ) 第 4 回 講義では C プログラミングの基本を学び 演習では やや実践的なプログラミングを通して学ぶ 1

Microsoft PowerPoint - 09.pptx

Microsoft Word - Cプログラミング演習(11)

Microsoft PowerPoint Java基本技術PrintOut.ppt [互換モード]

02: 変数と標準入出力

Microsoft PowerPoint - ca ppt [互換モード]

関数の呼び出し ( 選択ソート ) 選択ソートのプログラム (findminvalue, findandreplace ができているとする ) #include <stdiu.h> #define InFile "data.txt" #define OutFile "surted.txt" #def

Microsoft PowerPoint - prog03.ppt

Microsoft Word - no202.docx

Microsoft PowerPoint - 12.ppt [互換モード]

Microsoft PowerPoint - 5Chap15.ppt

Microsoft PowerPoint - kougi9.ppt

<4D F736F F D2091E63589F182628CBE8CEA8D758DC08E9197BF2E646F6378>

問 2 ( 型変換 ) 次のプログラムを実行しても正しい結果が得られない 何が間違いかを指摘し 正しく修正せよ ただし int サイズが 2 バイト long サイズが 4 バイトの処理系での演算を仮定する #include <stdio.h> int main( void ) { int a =

PowerPoint プレゼンテーション

C-programming_kouza4(2007)

Microsoft PowerPoint - 13th.ppt [互換モード]

Microsoft Word - no205.docx

PowerPoint プレゼンテーション

概要 プログラミング論 構造体 構造体 複数の変数を組合わせて, ひとまとめにしたもの 簡単 重要 自己参照型, リスト 重要, 難しい S-1 S-2 新しい構造体の宣言 struct 構造体名 { データ型メ

Microsoft PowerPoint - 13.ppt [互換モード]

Prog1_15th

Microsoft PowerPoint - kougi11.ppt

PowerPoint プレゼンテーション

Microsoft PowerPoint pptx

Microsoft Word - 第5回 基本データ構造2(連結リスト).doc

データ構造

gengo1-8

Java Scriptプログラミング入門 3.6~ 茨城大学工学部情報工学科 08T4018Y 小幡智裕

プログラミング実習I

Microsoft Word _VBAProg1.docx

Microsoft Word - Cプログラミング演習(10)

ガイダンス

C言語7

< F2D837C E95CF CF68A4A94C5816A2E6A>

Microsoft PowerPoint - 12.ppt [互換モード]

Microsoft PowerPoint - prog13.ppt

Microsoft PowerPoint - 05.pptx

1. 入力した正の整数を降順に並べ換えて出力するプログラムを作成せよ プログラムは個別にコンパイルし make コマンドで実行すること 入力データは 50 以下とし 以下の数が混在しているとする 16 進数 : 先頭 1 文字が x または X( エックスの小文字か大文字 ) 8 進数 : 先頭 1

プログラミング基礎I(再)

また 初期化について 以下のサンプルコードのように指定すれば 定義時に値を代入できます * オマケ配列は同名で複数個の箱を用意出来ます 同名ではありますが それぞれは別々の個体であるわけです また この複数個の変数は メモリ上に連続で確保されます 2. 文字と文字列 C 言語では文字と文字列は異なる

プログラミング基礎

PowerPoint プレゼンテーション

PowerPoint プレゼンテーション

第 3 回 Java 講座 今回の内容 今週の Java 講座はコレクション 拡張 for 文, ガベージコレクションについて扱う. 今週の Java 講座は一番内容が薄いも のになるだろう. コレクション コレクションとは大きさが決まっていない配列だと考えればよい. コレクションには List 先

Microsoft PowerPoint - 計算機言語 第7回.ppt

PowerPoint プレゼンテーション

Microsoft PowerPoint pptx

Microsoft PowerPoint - 12Chap16.ppt

Microsoft Word - no13.docx

コマンドラインから受け取った文字列の大文字と小文字を変換するプログラムを作成せよ 入力は 1 バイトの表示文字とし アルファベット文字以外は変換しない 1. #include <stdio.h> 2. #include <ctype.h> /*troupper,islower,isupper,tol

ファイル入出力

Transcription:

情報工学実験 II 実験 2 アルゴリズム ( リスト構造とハッシュ ) 実験を始める前に... C 言語を復習しよう 0. プログラム書ける? 1. アドレスとポインタ 2. 構造体 3. 構造体とポインタ

0. プログラム書ける? 講義を聴いているだけで OK? 言語の要素技術を覚えれば OK? 目的のプログラム? 要素技術 データ型 配列 文字列 関数 オブジェクト クラス ポインタ 2

0. プログラム書ける? 講義を聴いているだけで OK? 言語の要素技術を覚えれば OK? 目的のプログラム データ構造? アルゴリズム 要素技術 データ型 配列 文字列 関数 オブジェクト クラス ポインタ 3

0. プログラム書ける? よく使われるデータ構造やアルゴリズムをパターンとして習得し, 目的に応じて使い分ける. どんなプログラムを書けばよいかを考える... プログラムを構成する3 要素を意識する. 入力 ( 内部 ) 処理 出力 プログラム 入力データ 出力データ 4

0. プログラム書ける? プログラムが苦手 と感じる人は... 教科書 ( 入門書 ) やチュートリアルに書かれているサンプルプログラムを書き写す ( 写経 ). コピー & ペーストは駄目! 本 1 冊分のサンプルプログラムを打ち込んでみるべし. いろいろなコンパイルエラーに遭遇しよう. リファレンスの引き方を覚える. その場その場で必要な関数やクラスを調べる能力. 標準関数やライブラリを必ずしも全て覚える必要はない. 5

0. プログラム書ける? 簡単なプログラムが書けるようになったら... 目的に応じたデータ構造を考え, 処理の手順 ( アルゴリズム ) を考える. このデータを扱うならリストで, この問題は要素間に親子関係があるから木構造で デバッガやプロファイラなどのツールを積極的に使う. 統合開発環境は開発者の必携ツール 外部ライブラリ等を調べて使う. 典型的なソースは自分で書かない方がよいこともある. 性能, 信頼性, 汎用性,etc. 6

本日の実験で作るプログラム Federer 11255 Nadal 8845 Murray 8390 Djokovic 7330 ルート Federer 11255 Nadal Murray Djokovic =null 8845 8390 7330 ノードノードノードノード 7

情報工学実験 II 実験 2 アルゴリズム ( リスト構造とハッシュ ) 実験を始める前に... C 言語を復習しよう 0. プログラム書ける? 1. アドレスとポインタ 2. 構造体 3. 構造体とポインタ

1. アドレスとポインタ アドレス : メモリ空間内の住所 00 12 0a 7f aa 30 00 17 90 23 90 : 1 byte = = 10010000 8 bits 9

1. アドレスとポインタ アドレス : メモリ空間内の住所 00 00 00 7b (123(10 進数 )) 整数型 a のメモリ領域が確保され, 123 が格納される. : 1 byte int 型 : 4byte のメモリを使用 10

1. アドレスとポインタ 実際に確認してみよう. 11

1. アドレスとポインタ ポインタ : アドレスを格納する 変数 メモリのアドレス メモリに格納された値 int a = 0, b = 0 a 12ff60 0 b 12ff61 0 p( ポインタ ) int *p ( ポインタ p を int 型ポインタとして宣言 ) 12ff60 0 12ff61 0 12ff62??? p = &a ( ポインタ p に変数 a のアドレスを代入 ) 12ff60 0 12ff61 0 12ff62 12ff60 *p = 100 ( ポインタ p が指すアドレスに 100 を格納 ) 12ff60 100 12ff61 0 12ff62 12ff60 b = *p + 1 ( ポインタ p が指すアドレスに格納されている 12ff60 100 12ff61 101 12ff62 12ff60 値に 1 を足した値を変数 b に格納 ) +1 12

1. アドレスとポインタ ポインタ : アドレスを格納する 変数 変数 a, b に格納されている値は? 13

1. アドレスとポインタ int 型のメモリ領域を確保し, その先頭のアドレスをポインタ i に記憶させる. void *malloc( size_t size ): 指定されたバイト分のメモリ領域を確保する. 確保した領域の先頭のアドレスを返す. sizeof 演算子 : 指定されたデータ型のメモリ領域サイズを返す. 14

1. アドレスとポインタ ポインタ : アドレスを格納する変数... データ型毎に区別しなくてもよいのでは? データ型毎にメモリ量が異なる 15

情報工学実験 II 実験 2 アルゴリズム ( リスト構造とハッシュ ) 実験を始める前に... C 言語を復習しよう 0. プログラム書ける? 1. アドレスとポインタ 2. 構造体 3. 構造体とポインタ

2. 構造体 構造体 : 様々なデータ ( メンバ ) をまとめて扱うデータ型 12ff58 Member (member 型変数 ) 12ff5c age 12ff60????????? 構造体変数 Memberを宣言すると同時に データ型 memberとして定義 以降 memberをintやcharと同様に使えるようになる 17

2. 構造体 構造体の宣言および利用方法 メンバはピリオド (.) を用いて指定 bob age 12ff58 12ff5c 12ff60??? 100?????? 21 malloc で確保 Bob??? strcpy で格納 18

情報工学実験 II 実験 2 アルゴリズム ( リスト構造とハッシュ ) 実験を始める前に... C 言語を復習しよう 0. プログラム書ける? 1. アドレスとポインタ 2. 構造体 3. 構造体とポインタ

3. 構造体とポインタ 構造体を参照するポインタ メンバはアロー演算子 (->) を用いて指定 malloc で確保 john 12ff60 member 394674 age 394678 構造体の最初のアドレスを記憶??? 3946a8??? 50?????? 19 malloc で確保 3946a8 John??? strcpy で格納 20

情報工学実験 II 実験 2 アルゴリズム ( リスト構造とハッシュ ) 実験を始める前に... C 言語を復習しよう 0. プログラム書ける? 1. アドレスとポインタ 2. 構造体 3. 構造体とポインタ

リスト構造 : ノード内に, データ部と次のノードへの参照 ( ポインタ ) を持つデータ構造 Bob 102 Linda Mike John =null 294 105 44 Member (member 型変数 ) 394678 394682 394684 Member (member 型変数 ) 394688 3946a2 abff60 3946a8 102 394684 3946c8 102 abff60 1266fa 3946a8 Bob 3946c8 Linda 22 12 M

リスト構造 : 構造体を宣言 typedef struct Member{ char *; int ; struct Member *; } member;?????????????????? member 型変数 23

リスト構造 : 最初のノード (= ルート ) を作成 member 型ポインタ root: 先頭ノードのアドレスを記憶 ( 始めは ) root??? 24

リスト構造 : 最初のノード (= ルート ) を作成 関数 addmember を実行 ( リスト先頭の と を引数とする ) root リスト先頭の リスト先頭の 関数 addmember (Bob, 102) 25

リスト構造 : 最初のノード (= ルート ) を作成 member 型ポインタ curmember を宣言 root の内容 () をコピー root リスト先頭の リスト先頭の 関数 addmember (Bob, 102) curmember abff60??? 26

リスト構造 : 最初のノード (= ルート ) を作成 member 型ポインタ を宣言 root 関数 addmember (Bob, 102) curmember abff60??? abff61??? 27

リスト構造 : 最初のノード (= ルート ) を作成 関数 createmember を実行 ( リスト先頭の と を引数とする ) root 関数 addmember (Bob, 102) 関数 createmember (Bob, 102) curmember abff60??? abff61??? 28

リスト構造 : 最初のノード (= ルート ) を作成 member 型ポインタ を宣言 メモリ領域を確保 root 関数 addmember (Bob, 102) 関数 createmember (Bob, 102) curmember abff60??? abff61??? 12ff6a?????? 13af62??? 13af63??? 29

リスト構造 : 最初のノード (= ルート ) を作成 と に引数, に をコピー root 関数 addmember (Bob, 102) 関数 createmember (Bob, 102) curmember abff60??? abff61??? 12ff6a??? 13af62 13af63 Bob??? 102?????? 30

リスト構造 : 最初のノード (= ルート ) を作成 関数 createmember の の内容を 関数 addmember の にコピー ( 関数 createmember の処理終了 ) root 関数 addmember (Bob, 102) 関数 createmember (Bob, 102) curmember abff60??? create! abff61??? 12ff6a Bob 13af62 102 13af63 31

リスト構造 : 最初のノード (= ルート ) を作成 curmember が の場合 root 関数 addmember (Bob, 102) 関数 createmember (Bob, 102) curmember abff60 abff61 12ff6a??? Bob 13af62 102 13af63 32

root リスト構造 : 最初のノード (= ルート ) を作成 curmember curmemberがの場合 rootにの内容をコピー関数 addmemberの処理終了 = 最初のノード作成完了 関数 addmember (Bob, 102) 関数 createmember (Bob, 102) abff60??? abff61 12ff6a??? Bob 13af62 102 13af63 33

リスト構造 : 最初のノード (= ルート ) を作成 つまり root に関数 createmember で作った構造体の情報が格納 root 関数 addmember (Bob, 102) 関数 createmember (Bob, 102) curmember abff60??? abff61 12ff6a??? Bob 13af62 102 13af63 34

リスト構造 : 最初のノード (= ルート ) を作成 つまり root に関数 createmember で作った構造体の情報が格納 root 関数 addmember (Bob, 102) 関数 createmember (Bob, 102) curmember abff60??? add! Bob abff61 13af62 102 13af63 12ff6a??? Bob 13af62 102 13af63 35

リスト構造 :2 番目のノードを作成 member 型ポインタ curmember を宣言 root の内容 () をコピー root Bob 13af62 102 13af63 関数 addmember (Linda, 294) 関数 createmember (Linda, 294) curmember abff60??? ea9130 733578??? Linda 43f702 294 43f703 36

リスト構造 :2 番目のノードを作成 curmember の (=root の ) が? root Bob 13af62 102 13af63 関数 addmember (Linda, 294) 関数 createmember (Linda, 294) curmember abff60??? ea9130 733578??? Linda 43f702 294 43f703 37

root リスト構造 :2 番目のノードを作成 curmember もし curmemberの(=rootの) がなら curmemberのにの内容をコピー 関数 addmember (Linda, 294) 関数 createmember (Linda, 294) abff60 13af63??? Bob ea9130 13af62 102 13af63 733578??? Linda 43f702 294 43f703 38

リスト構造 :2 番目のノードを作成 つまり 関数 createmember で作った新しい構造体が root に接続 root Bob 13af62 102 13af63 関数 addmember (Linda, 294) 関数 createmember (Linda, 294) curmember abff60??? ea9130 733578??? Linda 43f702 294 43f703 39

リスト構造 :2 番目のノードを作成 つまり 関数 createmember で作った新しい構造体が root に接続 root Bob 13af62 102 13af63 add! Linda 43f702 294 43f703 関数 addmember (Linda, 294) 関数 createmember (Linda, 294) curmember abff60??? ea9130 733578??? Linda 43f702 294 43f703 40

root リスト構造 :3 番目以降のノードを作成 curmember curmemberの(=rootの) が? がになるまでcurMembeを更新 関数 addmember (Mike, 105) 関数 createmember (Mike, 105) abff60??? Bob が じゃない! 13af62 102 create! 132910 3dfd00 13af63 453578 3dfd00??? Linda 3dfd00 Mike 43f702 294 43f703 3dfd01 105 3dfd02 41

root リスト構造 :3 番目以降のノードを作成 curmember curmemberの(=rootの) が? がになるまでcurMembeを更新 関数 addmember の内容 (Mike, 105) をコピー関数 createmember (Mike, 105) abff60??? Bob 13af62 102 132910 3dfd00 13af63 453578 3dfd00??? Linda 3dfd00 Mike 43f702 294 43f703 3dfd01 105 3dfd02 42

root リスト構造 :3 番目以降のノードを作成 curmember curmemberの(=rootの) が? がになるまでcurMembeを更新 関数 addmember の内容が (Mike, 105)!! 関数 createmember (Mike, 105) abff60 Bob 132910 3dfd00 13af62 102 13af63 453578 3dfd00??? Linda 3dfd00 Mike 43f702 294 3dfd01 105 43f703 3dfd02 43

リスト構造 :3 番目以降のノードを作成 curmember の に の内容をコピー root Bob 13af62 102 13af63 Linda 43f702 294 43f703 3dfd00 関数 addmember (Mike, 105) 関数 createmember (Mike, 105) curmember abff60 132910 3dfd00 453578 3dfd00??? 3dfd00 Mike 3dfd01 105 3dfd02 44

リスト構造 :3 番目以降のノードを作成 つまり 関数 createmember で作った新しい構造体がリストの最後に接続 root Bob 13af62 102 13af63 Linda 43f702 294 43f703 3dfd00 関数 addmember (Mike, 105) 関数 createmember (Mike, 105) curmember abff60??? 132910 3dfd00 453578 3dfd00??? 3dfd00 Mike 3dfd01 105 3dfd02 45

root リスト構造 :3 番目以降のノードを作成 curmember つまり 関数 createmember で作った新しい構造体がリストの最後に接続 関数 addmember (Mike, 105) 関数 createmember (Mike, 105) abff60??? Bob 132910 3dfd00 13af62 102 13af63 453578 3dfd00??? Linda 3dfd00 Mike 43f702 294 3dfd01 105 43f703 3dfd00 add! 3dfd02 nam (char 型ポ 3dfd 46 Mik

リスト構造 : ノードを消すとき prevmember-> = curmember-> prevmember ノード 1 のアドレス curmember ノード 2 のアドレス ノード1 ノード2 ノード3 :Bob :102 : ノード23 のアドレス :Linda :294 : ノード3の : アドレス :Mike :105 : 47