• 検索結果がありません。

情報処理演習 B8クラス

N/A
N/A
Protected

Academic year: 2021

シェア "情報処理演習 B8クラス"

Copied!
13
0
0

読み込み中.... (全文を見る)

全文

(1)

予定スケジュール

予定スケジュール

(

(

15

15

)

)

1.

終了

プログラミング言語の基礎

2.

終了

演算と型

3.

終了

プログラムの流れの分岐 (if文,switch文など)

4.

終了

プログラムの流れの繰返し (do, while, for文など)

5.

終了

中間レポート1

6.

終了

配列

7.

終了

関数

8.

終了

文字列

(文字列の配列,文字列の操作)

9.

終了

ポインタ

(ポインタ,アドレス,ポインタと配列の関係など)

10.

終了

中間レポート2

11.

終了

文字列とポインタ

(ポインタによる文字列の操作など )

12.

終了

予備日

13.

1/12 ファイル処理

14.

1/13 最終レポート

(統一補講日)

15.

1/19 最終レポート

★このレジュメ,演習課題のプログラム例は,WebCT,または

http://www.ritsumei.ac.jp/~ykubo

から閲覧,印刷可能です.

(2)

本日の

本日の

内容(第13章)・ファイル処理

内容(第13章)・ファイル処理

ファイルとストリーム

ファイルのオープン・クローズ

データの読み込み・書き込み

テキストとバイナリ

データを読み込んだり,保存したりする「ファイル」の取り扱いについて学習する

データを読み込んだり,保存したりする「ファイル」の取り扱いについて学習する

(3)

ファイルとストリーム

ファイルとストリーム

ストリーム: ファイル,キーボード,ディスプレイ,プリンタ等々の周辺機器

に対するデータの流れの概念

標準ストリーム

stdin:

標準入力ストリーム

(入力を読み取る.大抵の場合はキーボード.scanf関数,getchar関数など)

stdout: 標準出力ストリーム

(出力を書き込む.大抵の場合はディスプレイ.printf関数,puts関数など)

stderr: 標準エラーストリーム

(エラーを書き出す.大抵の場合はディスプレイ)

FILE型のポインタ

stdio.hで定義

FILE型(

FILE型はストリームの制御に必要な情報を記録するための型

ファイル位置表示子: 現在アクセスしているアドレスを記録 エラー表示子: 読み取りエラー・書き込みエラーを記録 ファイル終了表示子: ファイルの終わりに達したかどうかを記録

(4)

ファイルのオープン・クローズ

ファイルのオープン・クローズ

ファイルを使用するには,ファイルを

「オープン」

する.使い終わったら

「クローズ」

する

fopen関数を利用する モードを選択: 読み取り 書き込み 更新 追加

ファイルのオープン

fclose関数を利用する

ファイルのクローズ

(5)

ファイルのオープン・クローズ(例)

ファイルのオープン・クローズ(例)

"abc"というファイルを"読み取りモード"でオープンし,閉じるプログラム.

オープン出来なかった場合は,「ファイルをオープンできません」と表示する

/* ファイルのオープンとクローズ */ #include <stdio.h> int main(void) { FILE *fp; fp = fopen("abc", "r"); /* ファイルのオープン */ if (fp == NULL) printf("¥aファイルをオープンできません。¥n"); else { /* ファイルから読込みなどを行う */ fclose(fp); /* ファイルのクローズ */ } return (0); }

List 13-1

(6)

ファイルからデータを読み込む

ファイルからデータを読み込む

Aiba 160 59.3 Kurata 162 51.6 Masaki 182 76.5 Tanaka 170 60.7 Tsuji 175 83.9 Washio 175 72.5 データファイル 「hw.dat」 データファイル「hw.dat」をオープンする データファイル「hw.dat」から ・名前(文字列) ・身長(double型実数) ・体重(double型実数) を読み取る. データファイル「hw.dat」をクローズする fp = fopen("hw.dat","r");

fscanf(fp, "%s%lf%lf", name, &height, &weight);

(7)

ファイルからデータを読み込む(例)

ファイルからデータを読み込む(例)

/* 身長と体重を読み込んで平均値を求めて表示する */ #include <stdio.h> int main(void) { FILE *fp; int ninzu = 0; /* 人数 */ char name[100]; /* 名前 */

double height, weight; /* 身長・体重 */

double hsum = 0.0; /* 身長の合計 */

double wsum = 0.0; /* 体重の合計 */

if ((fp = fopen("hw.dat", "r")) == NULL) /* オープン */

printf("¥aファイルをオープンできません。¥n"); else {

while (fscanf(fp, "%s%lf%lf", name, &height, &weight) == 3) { printf("%-10s %5.1f %5.1f¥n", name, height, weight);

ninzu++;

hsum += height; wsum += weight; }

printf("---¥n");

printf("平均 %5.1f %5.1f", hsum / ninzu, wsum / ninzu); fclose(fp); /* クローズ */ } return (0); }

List 13-2

Aiba 160 59.3 Kurata 162 51.6 Masaki 182 76.5 Tanaka 170 60.7 Tsuji 175 83.9 Washio 175 72.5 ---平均 170.7 67.4 実行結果

(8)

ファイルにデータを書き込む

ファイルにデータを書き込む

List13-2(身長と体重を読み込んで平均値を求めて表示する)プログラムを改良して, 計算結果をファイルに記録するようにする. データ書き出しファイル「kekka.dat」をオープンする fp2 = fopen("kekka.dat","w"); ファイル「kekka.dat」に ・平均身長(double型実数) ・平均体重(double型実数) を書き出す

fprintf(fp2, "平均身長:%f 平均体重: %f ", hsum/ninzu, wsum/ninzu);

ファイル「kekka.dat」をクローズする

(9)

ファイルにデータを書き込む(例)

ファイルにデータを書き込む(例)

/* 身長と体重を読み込んで平均値を求めて表示する */ #include <stdio.h> int main(void) { FILE *fp, *fp2; int ninzu = 0; /* 人数 */ char name[100]; /* 名前 */ double height, weight; /* 身長・体重 */ double hsum = 0.0; /* 身長の合計 */ double wsum = 0.0; /* 体重の合計 */ if ((fp = fopen("hw.dat", "r")) == NULL) /* オープン */

printf("¥aファイルをオープンできません。¥n"); else {

while (fscanf(fp, "%s%lf%lf", name, &height, &weight) == 3) { printf("%-10s %5.1f %5.1f¥n", name, height, weight); ninzu++;

hsum += height; wsum += weight; }

printf("---¥n");

printf("平均 %5.1f %5.1f", hsum / ninzu, wsum / ninzu); fclose(fp); /* クローズ */ }

if ((fp2 = fopen("kekka.dat", "w")) == NULL) /* オープン */ printf("¥aファイルをオープンできません。¥n");

else {

printf("平均身長: %f 平均体重: %f", hsum/ninzu, wsum/ninzu); fclose(fp); /* クローズ */ }

return (0); }

(10)

テキストファイルとバイナリファイル

テキストファイルとバイナリファイル

整数「357」,「2057」をfprintf関数によってファイルに書き出す場合を考えよう (a)テキストで書き出す場合は,1文字1バイトで,各桁を「文字」として書き出す (b)バイナリで書き出す場合は,int型の大きさ(この場合は2バイト)で,2進数のビットの並び として書き出す

(11)

バイナリファイルへの実数値の保存

バイナリファイルへの実数値の保存

double型実数 double pi = 3.14159265358979323846; をバイナリファイルに書き出してみよう データ書き出しファイル「kekka.dat」をオープンする fp = fopen("kekka.dat","wb"); ファイル「kekka.dat」に 変数「pi」(double型実数)に格納された値を書き出す fwrite(&pi, sizeof(double), 1, fp); 「先頭番地(&pi)」から,「double型の大きさ」のデータを,「1個」,「fp」が示す対象へ書き出す. 読み出しは? データファイル「data.dat」をオープンする fp = fopen("data.dat","rb"); ファイル「data.dat」から double型実数を1個読み取り,変数「pi」に格納する fread(&pi, sizeof(double), 1, fp);

(12)

バイナリファイルへの実数値の保存(例)

バイナリファイルへの実数値の保存(例)

/* 円周率の値をバイナリファイルに書き込んで読み取る */ #include <stdio.h> int main(void) { FILE *fp; double pi = 3.14159265358979323846; /* 書込み */ if ((fp = fopen("PI.bin", "wb")) == NULL) /* オープン */ printf("¥aファイルをオープンできません。¥n"); else {

fwrite(&pi, sizeof(double), 1, fp); /* piを書き込む */

fclose(fp); } /* クローズ */ /* 読取り */ if ((fp = fopen("PI.bin", "rb")) == NULL) /* オープン */ printf("¥aファイルをオープンできません。¥n"); else {

fread(&pi, sizeof(double), 1, fp); /* piに読み取る */

printf("円周率は%23.21fです。¥n", pi); fclose(fp); /* クローズ */ } return (0);

List 13-9

実行結果 円周率は3.141592653589793116000です。 実行結果一例

(13)

演習課題

演習課題

【演習1】

List13-2のプログラムを改良して,データファイル「hw.dat」からデータを読み込み,

平均身長,平均体重を計算し,その結果をデータファイルの末尾に追加するプログラムを作

成しなさい.

参照

関連したドキュメント

Lane and Bands Table と同様に、Volume Table と Lane Statistics Table も Excel 形式や CSV

予報モデルの種類 予報領域と格子間隔 予報期間 局地モデル 日本周辺 2km 9時間 メソモデル 日本周辺 5km 39時間.. 全球モデル

 現在、PCB廃棄物処理施設、ガス化溶融等発電施設、建設混合廃棄物リサ イクル施設(2 施設) 、食品廃棄物リサイクル施設(2 施設)

(ECシステム提供会社等) 同上 有り PSPが、加盟店のカード情報を 含む決済情報を処理し、アクワ

※ 本欄を入力して報告すること により、 「項番 14 」のマスター B/L番号の積荷情報との関

 現在、PCB廃棄物処理施設、ガス化溶融等発電施設、建設混合廃棄物リサ イクル施設(2 施設) 、食品廃棄物リサイクル施設(2 施設)

QRされた .ino ファイルを Arduino に‚き1む ことで、 GUI |}した ƒ+どおりに Arduino を/‡((スタンドアローン})させるこ とができます。. 1)

DC・OA 用波形データ  2,560Hz  収録した波形ファイルの 後半 1024 サンプリング . 従来の収録ソフトウェアも DC, OA 算出時は最新の