プログラミング演習Ⅱ 第 11 回 ポインタ(2) 情報・知能工学系 山本一公

Slides:



Advertisements
Similar presentations
1 B10 CPU を作る 1 日目 解説 TA 高田正法
Advertisements

プログラミング演習Ⅱ 第1回 ガイダンス 情報・知能工学系 山本一公 本演習の概要(1) C 言語の「基礎知識」の習得 – プログラミング演習Ⅰの続き – 配列、関数、ポインタ等 – プログラミング演習Ⅰの内容だけでは、 とてもじゃないが「 C 言語を勉強した」とは 言えない.
メモリとポインタ. プログラムの前提 コンピュータは、0と1で計算をし、 0と1でデータを保存している。 メモリを学ぶのに必要な知識である。
プログラミング演習Ⅱ 第 8 回 マクロ・列挙体等 情報・知能工学系 山本一公
プログラミング演習( 2 組) 第 9 回
情報・知能工学系 山本一公 プログラミング演習Ⅱ 第3回 配列(1) 情報・知能工学系 山本一公
情報・知能工学系 山本一公 プログラミング演習Ⅱ 第5回 関数(1) 情報・知能工学系 山本一公
プログラミング演習II 2004年11月 30日(第6回) 理学部数学科・木村巌.
15.1 文字列処理の基本 15.2 文字列処理用ライブラリ関数
関数(1) 第11回 [6月29日、H.16(‘04)] 今日のメニュー 1 前回の課題 2 前回の宿題 3 いろいろな関数の演習 4 課題
情報・知能工学系 山本一公 プログラミング演習Ⅱ 第4回 配列(2) 情報・知能工学系 山本一公
ポインタ プログラミング入門2 第10回 芝浦工業大学情報工学科 青木 義満
情報基礎演習B 後半第5回 担当 岩村 TA 谷本君.
数理情報工学演習第一C プログラミング演習 (第3回 ) 2014/04/21
配列(2) 第10回[平成15年6月26日(木)]:PN03-10.ppt 今日の内容 1 素数を求める(教科書の例):復習
情報・知能工学系 山本一公 プログラミング演習Ⅱ 第7回 データの基本型 情報・知能工学系 山本一公
データ構造とアルゴリズム 第10回 mallocとfree
システムプログラミング 第5回 情報工学科 篠埜 功 ヒアドキュメント レポート課題 main関数の引数 usageメッセージ
プログラミング演習Ⅱ 第12回 文字列とポインタ(1)
プログラミング演習(2組) 第12回
プログラミング演習II 2004年10月19日(第1回) 理学部数学科・木村巌.
情報処理Ⅱ 2005年12月9日(金).
第8回 プログラミングⅡ 第8回
担当:青木義満 情報工学科 3年生対象 専門科目 システムプログラミング システムプログラミング プロセス間通信(パイプ) 担当:青木義満
アルゴリズムとデータ構造 2011年6月13日
配列の扱い、探索 有効範囲と記憶域期間 第12回 [7月10日、H.15(‘03)] 今日のメニュー 1 前回の課題の復習
第10回 プログラミングⅡ 第10回
【プログラミング応用】 必修2単位 通年 30週 授業形態:演習.
情報工学科 3年生対象 専門科目 システムプログラミング 第5回、第6回 ヒアドキュメント レポート課題 情報工学科 篠埜 功.
ちょっとした練習問題① 配列iroを['R', 'W', 'R', 'R', 'W' , 'W' , 'W']を宣言して、「W」のときの配列の番号をprintfで表示するようなプログラムを記述しなさい。
関数と配列とポインタ 1次元配列 2次元配列 配列を使って結果を返す 演習問題
情報・知能工学系 山本一公 プログラミング演習Ⅱ 第2回 ファイル処理 情報・知能工学系 山本一公
プログラミング 4 記憶の割り付け.
第10章 これはかなり大変な事項!! ~ポインタ~
プログラミング入門2 第8回 ポインタ 情報工学科 篠埜 功.
講義では、Cプログラミングの基本を学び 演習では、やや実践的なプログラミングを通して学ぶ
第7回 プログラミングⅡ 第7回
復習 前回の関数のまとめ(1) 関数はmain()関数または他の関数から呼び出されて実行される.
アルゴリズムとデータ構造 補足資料5-1 「メモリとポインタ」
第11回 プログラミングⅡ 第11回
P n ポインタの基礎 5 q m 5 7 int* p; int 型の変数を指すポインタ int* q; int 型の変数を指すポインタ int n=5, m=7; int 型の変数 int array[3]; int* pArray[3]; p = &n; ポインタにアドレスを代入しているのでOK.
地域情報学 C言語プログラミング 第1回 導入、変数、型変換、printf関数 2016年11月11日
プログラミング基礎B 文字列の扱い.
アルゴリズムとデータ構造1 2005年6月24日
第2回課題 配布した通り.氏名・学生番号を忘れないこと.
岩村雅一 知能情報工学演習I 第12回(C言語第6回) 岩村雅一
オブジェクト指向言語論 第六回 知能情報学部 新田直也.
プログラミング言語論 第六回 理工学部 情報システム工学科 新田直也.
15.1 文字列処理の基本 15.2 文字列処理用ライブラリ関数
プログラミング入門2 第9回 ポインタ 情報工学科 篠埜 功.
アルゴリズムとプログラミング (Algorithms and Programming)
文字列へのポインタの配列 static char *lines[MAXLINES]; lines[0] NULL
情報基礎演習B 後半第2回 担当 岩村 TA 谷本君.
アルゴリズムとデータ構造 2012年6月11日
プログラミング論 ポインタ
ネットワーク・プログラミング Cプログラミングの基礎.
第5回 プログラミングⅡ 第5回
岩村雅一 知能情報工学演習I 第12回(後半第6回) 岩村雅一
第7章 そろそろ int 以外も使ってみよう! ~データ型 double , bool~
プログラミング演習I 2003年6月11日(第9回) 木村巌.
情報処理Ⅱ 2005年11月25日(金).
プログラミング演習II 2004年11月 16日(第5回) 理学部数学科・木村巌.
15.1 文字列処理の基本 15.2 文字列処理用ライブラリ関数
プログラミング演習II 2003年12月10日(第7回) 木村巌.
プログラミング演習II 2004年11月 2日(第3回) 理学部数学科・木村巌.
プログラミング入門2 第5回 配列 変数宣言、初期化について
情報処理Ⅱ 小テスト 2005年2月1日(火).
プログラミング演習II 2003年10月29日(第2,3回) 木村巌.
岩村雅一 知能情報工学演習I 第7回(後半第1回) 岩村雅一
オブジェクト指向言語論 第六回 知能情報学部 新田直也.
Presentation transcript:

プログラミング演習Ⅱ 第 11 回 ポインタ(2) 情報・知能工学系 山本一公

前回の課題の解説・ポイント(1) 課題9-1 –p.228 、 List 10-2 を参考に作成 –printf() のアドレスを表示するための変換指定 子は “%p” – 全ての変数が連続した領域に確保されるわけ ではないことが分かる 隙間があいている – コンピュータがアクセスし易いように割りつけられる 配列は必ず連続した領域に確保される

前回の課題の解説・ポイント(2) 課題9-2 – 月日数が 31 日でない月の処理に注意 特に閏日がある 2 月 – 閏年の判定方法 現在の暦(グレゴリオ暦)では – 西暦年が 4 で割り切れる年は閏年 – ただし、西暦年が 100 で割り切れる年は平年 – ただし、西暦年が 400 で割り切れる年は閏年 if ((*y % 4 == 0) && (*y % 100 != 0) || (*y % 400 == 0)) {…

課題8の採点結果から(1) 課題8-1 – 関数の中で変換用の文字配列を用意している と、処理できる文字列の長さがその配列の大 きさで制限されることになる 汎用性が下がる 元の文字配列上で 1 文字ずつ直接入れ替えれば、文 字列の長さに依存しない

課題8の採点結果から(2) 課題8-2 –toupper() / tolower() は関数の中で行わないと意味がな い 問題で指定された関数を作成しましょう – 一致・不一致の判定が最後の行の結果だけに依存し ているプログラムがあった – 長さの違うファイルをきちんと扱えていない File1 の後ろに何かを付け足して File2 を作って比較すると、 一致判定を出すプログラムが多かった – パターンをいろいろ考えてテストすべき

今日の内容 教科書 pp.238 ~ 245 ポインタと配列 ポインタの型 ポインタと配列 配列の受渡し

ポインタの型 p.239, List 10-9 のプログラム – warning は出るものの、コンパイルできるし、 動かすこともできる – しかし、 sizeof(int) と sizeof(double) が異なっ ているので、上手く動いていない –int と double なのだから、ある意味当然か ポインタの型が問題になりやすいのは、 ポインタ演算を行う場合 – 配列をやると分かりやすい …… かな?

ポインタと配列(1) p.240, List ptr = &vc[0] と初期化 “ptr + i” は、 ptr が指すオブジェクト(ここ では配列 vc[] の先頭)の i 個後ろの要素を 指すポインタとなる – すなわち、 *(ptr + i) ⇒ vc[i] と同じ

ポインタと配列(2) ここで「ポインタの型」の話に戻る “ptr + i” は、 “ メモリ上のアドレス ptr の i 番地後ろ ” ではなくて、 “ptr が指すオブジェクトの i 個後ろの要素 ” である – アドレスを決定するためには、1個のオブ ジェクトの大きさが分からないといけない – それを決めているのが「ポインタの型」

ポインタと配列(3) “float *ptr” だったら、 sizeof(float) は 4 [Byte] なので、 “ptr + 1” の実際のアドレ スは、 ptr に “4” を加えたものになる “double *ptr” だったら、 sizeof(double) は 8 [Byte] なので、 “ptr + 1” の実際のアドレ スは、 ptr に “8” を加えたものになる ポインタの型を正しく与えておけば、こ のような計算は自動で正しく行われる

ポインタと配列(4) いちいち “&vc[0]” って書くの面倒だよね “vc” とだけ書くと “&vc[0]” と同じ意味になる! – 例外1: “sizeof(vc)” の場合 – 例外2: “&vc” の場合 p.243, Column 10-2 – ポインタは単なるアドレスなので、配列の大きさ (領域)に対する配慮はプログラマが自分でしなけ ればならない それが “ 参照 ” との違い

配列の受渡し(1) 関数のところでやった、配列の受渡し – 関数定義側では、 ”[]” だけを付ける 要素数を書いても間違いではない – 呼び出し側では ”[]” を付けない int function(int x[], int no) /* int *x でも良いが、 厳密には意味が異なる */ { return x[no]; } int array[100], num, value; value = function(array, num);

配列の受渡し(2) 呼出し側 – 配列名だけ書いているので、 “array” は “&array[0]” と同じ意味になり、配列の先頭ア ドレスを指す ⇒ それを関数に渡している int array[100], num, value; value = function(array, num);

配列の受渡し(3) 受け取り側 – 通常、 “x[]” と “*x” は別物である 配列変数は const である – 関数の仮引数では、同じもの(単なるアドレ スの受渡し)になる int function(int x[], int no) /* 仮引数の場合のみ、 int *x でも同じ意味に */ { return x[no]; }

今週の課題(1) 1. 要素数 n の double 型配列 array に入っている数値の平均を 求めて返す関数 double ave(double *array, int n) を作成せ よ。ただし、これはポインタを上手く扱えるようにな るための演習課題なので、 ave 関数中で “[” “]” を使用し てはならない。 main 関数等も作成して、完成したプロ グラムを作成すること。 2. 要素数 n の int 型配列 array に入っている数値を昇順(小 → 大の順)に並べ替えて array に上書き格納する関数 void sort(int *array, int n) を作成せよ。ただし、こちらも、 sort 関数中で “[” “]” を使用してはならない。 main 関数等 も作成して、完成したプログラムを作成すること。

今週の課題(2) 課題10-2のためのソートアルゴリズム – 何でも良い。適当に調べたものを使え。ネットで見 つけたソースコードを参考にしても良い。 – 分からない人は以下のアルゴリズム(選択ソート) を使え 1.n 個の要素の中で一番小さい値を探し、 1 番目の要素と交換 する 2. 以下、 k=2 ~ n-1 まで「 k 番目から n 番目までの要素の中から 一番小さい値を探し、 k 番目の要素と交換する」ことを繰 り返す

レポートについて 電子メールで提出 – 提出先は –Subject を「プログラミング演習2 課題 10 提出 学籍 番号・氏名 」とすること –C 言語ソースファイルを添付する メールの本文には何も書かなくて良いです – ソースファイルの頭にコメントで以下の情報を入れる 学籍番号・氏名 プログラムの説明(どのように動くのか、工夫した点等) 実行結果(長い場合は一部)を貼る – 提出締切は、 1 月 23 日(水) 12:00 (1週間後)

授業用 Web サイト URL: – 課題の pdf ファイルが置いてあります。 – 授業で使った ppt ファイルを置いていきます。 質問メールは、以下のどちらかのアドレスまで C-515 へ直接質問しに来ても構いません