演算増幅器

Similar documents
Microsoft Word - Cプログラミング演習(9)

情報処理演習 B8クラス

ファイル入出力

ファイル入出力

Microsoft PowerPoint - 第3回目.ppt [互換モード]

gengo1-12

C言語講座 ~ファイル入出力編~

PowerPoint Presentation

Microsoft PowerPoint - prog04.ppt

gengo1-12

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

2006年10月5日(木)実施

プログラミング基礎

Prog1_12th

gengo1-12

FORTRAN( と C) によるプログラミング 5 ファイル入出力 ここではファイルからデータを読みこんだり ファイルにデータを書き出したりするプログラムを作成してみます はじめに テキスト形式で書かれたデータファイルに書かれているデータを読みこんで配列に代入し 標準出力に書き出すプログラムを作り

Taro-ファイル処理(公開版).jtd

※ ポイント ※

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

PowerPoint Presentation

02: 変数と標準入出力

02: 変数と標準入出力

Microsoft PowerPoint - prog06.ppt

PowerPoint プレゼンテーション

Microsoft PowerPoint - kougi6.ppt

1. ファイルにアクセスするには ファイルにアクセスするには 1. ファイルを開く 2. アクセスする 3. ファイルを閉じるという手順を踏まなければなりません 1.1. ファイルを読み込む まずはファイルの内容を画面に表示させるプログラムを作りましょう 開始 FILE *fp char fname

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

memo

PowerPoint プレゼンテーション

プログラミング演習3 - Cプログラミング -

Microsoft Word - no204.docx

計算機プログラミング

文字列 2 前回の授業ではコンピュータ内部での文字の取り扱い 文字型の変数 文字型変数への代入方法などを学習した 今回は 前回に引き続き 文字処理を学習する 内容は 標準入出力 ( キーボード ディスプレイ ) での文字処理 文字のファイル処理 文字を取り扱うライブラリ関数である 標準入出力 Lin

プログラミング演習3 - Cプログラミング -

Microsoft PowerPoint - guidance.ppt

Microsoft PowerPoint - kougi9.ppt

Microsoft PowerPoint - kougi2.ppt

練習&演習問題

memo

ポインタ変数

Microsoft Word - no15.docx

Microsoft PowerPoint - kougi8.ppt

slide4.pptx

Microsoft Word - 3new.doc

スライド タイトルなし

Microsoft PowerPoint - 11.pptx

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

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

PowerPoint プレゼンテーション

ゲームエンジンの構成要素

Microsoft PowerPoint - lec10.ppt

ディジタル信号処理

char int float double の変数型はそれぞれ 文字あるいは小さな整数 整数 実数 より精度の高い ( 数値のより大きい より小さい ) 実数 を扱う時に用いる 備考 : 基本型の説明に示した 浮動小数点 とは数値を指数表現で表す方法である 例えば は指数表現で 3 書く

Microsoft PowerPoint pptx

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

基礎プログラミング2015

< 中略 > 24 0 NNE 次に 指定した日時の時間降水量と気温を 観測地点の一覧表に載っているすべての地点について出力するプログラムを作成してみます 観測地点の一覧表は index.txt というファイルで与えられています このファイルを読みこむためのサブルーチンが AMD

DVIOUT

< 中略 > 24 0 NNE 次に 指定した日時の時間降水量と気温を 観測地点の一覧表に載っているすべての地点について出力するプログラムを作成してみます 観測地点の一覧表は index.txt というファイルで与えられています このファイルを読みこむためのサブルーチンが AMD

PowerPoint プレゼンテーション

プログラミング実習I

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

A/B (2018/10/19) Ver kurino/2018/soft/soft.html A/B

PowerPoint Presentation

Prog1_15th

PowerPoint Presentation

画像ファイルを扱う これまでに学んだ条件分岐, 繰り返し, 配列, ファイル入出力を使って, 画像を扱うプログラムにチャレンジしてみよう

格子点データの解析 1 月平均全球客観解析データの解析 客観解析データや衛星観測データのような格子点データは バイナリ形式のデータファイルに記録されていることが多いです バイナリ形式のデータファイルは テキスト形式の場合とは異なり 直接中身を見ることができません プログラムを書いてデータを読み出して

書式に示すように表示したい文字列をダブルクォーテーション (") の間に書けば良い ダブルクォーテーションで囲まれた文字列は 文字列リテラル と呼ばれる プログラム中では以下のように用いる プログラム例 1 printf(" 情報処理基礎 "); printf("c 言語の練習 "); printf

データ構造

C言語入門

Taro-リストⅠ(公開版).jtd

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

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

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

<4D F736F F D20438CBE8CEA8D758DC03389F0939A82C282AB2E646F63>

Microsoft PowerPoint - kougi4.ppt

PowerPoint プレゼンテーション

Prog1_10th

次に示す数値の並びを昇順にソートするものとする このソートでは配列の末尾側から操作を行っていく まず 末尾の数値 9 と 8 に着目する 昇順にソートするので この値を交換すると以下の数値の並びになる 次に末尾側から 2 番目と 3 番目の 1

PowerPoint プレゼンテーション

Taro-リストⅢ(公開版).jtd

プログラミング基礎

PowerPoint プレゼンテーション

: CR (0x0d) LF (0x0a) line separator CR Mac LF UNIX CR+LF MS-DOS WINDOWS Japan Advanced Institute of Science and Technology

1 C STL(1) C C C libc C C C++ STL(Standard Template Library ) libc libc C++ C STL libc STL iostream Algorithm libc STL string vector l

第2回講義:まとめ

全体ロードマップ インターネット電話 音の符号化 ( 信号処理 ) 今日 音の録音 再生 ネットワーク ( ソケット ) プログラミング ファイル入出力 インターネットの基礎 C プログラミング基礎

ポインタ変数

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

cp-7. 配列

Microsoft Word - cpro_m_13.doc

演算増幅器

Microsoft Word - 06

PowerPoint プレゼンテーション

C 言語講座 Vol 年 6 月 26 日 CISC

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

memo

slide5.pptx

ポインタ変数

Transcription:

ファイルこれまでにデータの入力方法として キーボードからの入力を用いてきた 構造体を習った際に実感してもらえたと思うが 入力データ量が多いときにはその作業は大変なものとなり 入力するデータを間違えた場合には最初からやり直しになる そこで今回はこれらの問題を解決するため あらかじめ入力データをテキストエディタなどで編集し ファイルとして保存したものを入力データとして用いる方法を習っていく さらにプログラムで作成したデータをファイルに出力する方法も併せて習っていく C 言語におけるファイルでの入出力には 通常の文書として見ることができるテキストファイルと 2 進数のデータの羅列として記録されるバイナリファイルの 2 種類が用意されている テキストファイルは一見してデータの内容を把握できるが ファイルのサイズがバイナリファイルに比べて大きくなる また バイナリファイルではファイルのサイズが比較的小さくなるが データの内容はバイナリエディタなどで確認することになり その場合でも内容を正確に把握することは難しい ここでは取り扱いが簡単なテキストファイルの取り扱いについて学んでいく ファイルの操作ファイルとは Windows や linux で採用されているデータの管理システムとして扱うことができるひとまとまりのデータの単位であり 日常生活におけるノートのような役割を持つ このファイルはハードディスクなどの記憶装置に保存され 読み 書き 実行に利用される C 言語のプログラムにおいて このファイルの読み書きを行う場合には以下の操作に従う (1) ファイルを開く (2) ファイルの読み / 書きを行う (3) ファイルを閉じる ファイルの操作に関する関数はいくつか用意されているが ここでは fopen( 開く ) fclose( 閉 じる ) fprintf( 書く ) fscanf( 読む ) の 4 つについて学んでいく ファイルの読み込み それでは具体的な処理として ファイルからデータを読み込み プログラム内でそのデータを利 用するプログラム例を示していく プログラム例 1 #include <stdio.h> #include <stdlib.h> int main(void) char fn[] = "indata0.dat"; int val, num, sum; FILE *fp; if((fp = fopen(fn, "r")) == NULL) - 1 -

num = 0; sum = 0; while(1) fscanf(fp, "%d", &val); if(val == 0) break; printf(" 読み込み回数 :%d 合計 :%d\n", num, sum); fclose(fp); return EXIT_SUCCESS; 実行結果例読み込み回数 :5 合計 :1725 このプログラムは入力データを記述したファイル indata0.dat からデータを読み込み 読み込んだデータ数 読み込んだデータの合計を求めて表示するプログラムである このプログラムを実行する際には以下のようにして indata0.dat というファイルをテキストエディタで編集して保存したものをプログラム例 1の実行ファイルと同じフォルダに用意してから実行する必要がある 今回の場合 ファイルの最後には 0 を必ずつけることで 読み込むデータが終了したことを把握出来るようにしている 入力データファイル indata0.dat 123 234 345 456 567 0 ファイルを開く処理は以下のに従って行う fp = fopen(fn, "r"); fn はファイル名を保存してある文字列の先頭アドレスである "r" は read の頭文字で読み込みモードを設定している fp は FILE 型ポインタで宣言した変数名である この FILE 型ポインタは ストリームポインタ とも呼ばれる この処理を行った場合 ファイルの読み込み処理が失敗する場合がある それは読み込みたいファイルが存在しなかったり 読み込みを制限する設定が行われたファイルだった - 2 -

り ハードウェアやシステムの問題だったりと様々な理由があるが その場合には変数 fp には NULL が格納される この状態で以降のプログラムを行うことは危険であるため 読み込みが成功したかどうかのエラーチェックと供に用いるのが通常である エラーチェックを行った読み込み処理はプログラム中でも示しているが 以下の通りになる if((fp = fopen(fn, "r")) == NULL) これは以下と同じ処理である fp = fopen(fn, "r"); if(fp == NULL) この使用方法で示した exit() 関数はプログラムを終了させる処理を行う この関数は stdlib.h に用意されているため インクルードが必要となる また () 内の EXIT_FAILURE は 1 に置き換えることも可能であり その場合にはプログラムが異常終了したことを表す 環境によってはプログラムを実行したターミナル上に プログラムが異常終了しました という内容の表示を行うため 問題の特定に役立つ また プログラムの最後に今までは return 0; と書いてきたが今回 return EXIT_SUCCESS; と用いた これを使うと処理の意味が分かりやすい 次にファイルの読み込みについて示す ファイルの読み込みには fscanf を用いた 基本的な使い方はキーボードからデータを読み込む際に用いた scanf と同様である 違いは関数の引数の 1 番目に FILE 型ポインタである変数 fp を書く必要があることである fscanf(fp, "%d", &val); 最後にファイルを閉じる処理を示す 以下のプログラムの実行によって ファイルが閉じられる fclose(fp); このファイルを閉じる処理はファイルを読み込む際には大きな問題にはならない しかし 後述するファイルの書き込み処理で行わなかった場合 データを正しくファイルに保存することが保証されない それでは次のプログラムを確認しよう indata0.dat ファイルはファイルの最後に 0 を必ずつ - 3 -

けるというルールでファイルを作成したが これでは使い勝手が悪い 実際にはファイルの最後か どうかの判断は別の処理を利用する プログラム例 2 #include <stdio.h> #include <stdlib.h> int main(void) char fn[] = "indata.dat"; int val, num, sum; FILE *fp; if((fp = fopen(fn, "r")) == NULL) num = 0; sum = 0; while(fscanf(fp, "%d", &val)!= EOF) printf(" 読み込み回数 :%d 合計 :%d\n", num, sum); fclose(fp); return EXIT_SUCCESS; 実行結果例読み込み回数 :5 合計 :1725 このプログラムでは以下のように最後の 0 を削除したファイル indata.dat ファイルを用意す ること 入力データファイル indata.dat 123 234 345 456 567 プログラム例 1 との違いは while 文の部分であり 以下のようになっている while(fscanf(fp, "%d", &val)!= EOF) - 4 -

条件式に用いているが データの読み込みに用いる fscanf() 関数はファイルの読み込み時にチ ェックを行い ファイルの最後だった場合には返却値として EOF を返す これは End Of File という意味がある ファイルの書き込み それでは 次にファイルの書き込みを行うプログラム例を示す これはプログラム例 2 について ディスプレイに出力した結果と同じものをファイルに保存する処理を追加したプログラムである プログラム例 3 #include <stdio.h> #include <stdlib.h> int main(void) char ifn[] = "indata.dat"; char ofn[] = "outdata.dat"; int val, num, sum; FILE *ifp, *ofp; if((ifp = fopen(ifn, "r")) == NULL) printf(" ファイル %s が見つかりません \n", ifn); num = 0; sum = 0; while(fscanf(ifp, "%d", &val)!= EOF) fclose(ifp); if((ofp = fopen(ofn, "w")) == NULL) printf(" ファイル %s が見つかりません \n", ofn); printf(" 読み込み回数 :%d 合計 :%d\n", num, sum); fprintf(ofp, " 読み込み回数 :%d 合計 :%d\n", num, sum); fclose(ofp); return EXIT_SUCCESS; 実行結果例 - 5 -

読み込み回数 :5 合計 :1725 まずはファイルを開く処理について確認する は読み込み処理を行う場合に似ているが 書 き込みモードで行うため "r" だった部分が "w" に置き換わっている "w" は write の頭文字である ofp = fopen(ofn, "w"); プログラム中ではエラーチェックと供に記述したが 使い方は読み込みモードの場合と同じである 次に実際に書き込みを行っている処理について見ていく 書き込みは fprintf() 関数を用いているが これは printf() 関数の使い方と似ている 違う点はやはり FILE 型ポインタ変数 ofp を第一引数に持つことである fprintf(ofp, " 読み込み回数 :%d 合計 :%d\n", num, sum); 最後にファイルを閉じるが必要であるため 以下の処理を記述する fclose(ofp); 読み込み処理のところでも触れたが ファイルの書き込み処理における fclose() 関数は重要である なぜなら ファイルへの書き出しはある程度のデータがバッファに貯まった段階で行われる バッファはデータを一時的に蓄えておく場所である よってファイルを行わない場合にはバッファに蓄えられたデータを書き出すタイミングを失うことになるため データが正しくファイルに書き出されない状況が発生する ファイルを扱う処理では オープン 読み / 書き クローズの 3 つの処理は必ずセットで行うことが原則である ファイルへの追記すでにデータが記述されたファイルにデータを追加したい場合がある その場合にはファイルを追記モードとして開くことになる 追記モードの利用は "a" を使って以下のように記述する "a" は addition の頭文字である ofp = fopen(ofn, "a"); この処理以降は fprintf() 関数を使って 通常の書き込み処理と同様に行えばよい 例えば プ ログラム例 3 において 上記のに変更した場合には実行するたびにファイルにデータが追加さ れるため 以下のようなファイルが作成されることになる 実行結果例読み込み回数 :5 合計 :1725-6 -

読み込み回数 :5 合計 :1725 読み込み回数 :5 合計 :1725 : 課題 5 Kadai5-1 プログラム例 1~2 を作成し 実行結果を確認する その上で 入力ファイル名をキーボードから入力するプログラムに変更しなさい 提出はプログラム例 2 をキーボードから入力できるようにしたものだけでよい Kadai5-2 プログラム例 3 を作成し 実行結果を確認する また 書き込みモード "w" を追記モード "a" に変更したものを実行しなさい その上で 入力ファイル名と出力ファイル名をキーボードから入力するプログラムに変更しなさい 提出はキーボードから入力できるようにしたものだけでよい Kadai5-3 プログラムの実行ファイルを実行した回数をカウントするプログラムを作成しなさい これは実行した回数をファイルに記録することで実現する 例えば data.dat ファイルを用意し 中身を 0 としておく プログラム実行時にはこのファイルのデータを読み込み +1 してから ファイルにその結果を書き出せばよい この場合にはファイル名をプログラム内で指定している方が良い Kadai5-4 ファイル処理を用いたオリジナルのプログラムを作成しなさい 締め切りについては後で示す - 7 -