プログラムの動作を確認する場合、指定された値を使って計算したり、その結果を他のプログラムで使いたい場合が多い。そこで、入出リダイレクトについて説明する。
入力リダイレクト
以下に上げるような Excel のデータで平均を計算してみよう。
A6 に =AVERAGE(A1:A5) を入力…
というのは、ナシ。Visual Basic で組むのもナシ。(^_^;
Excelで、「ファイル-名前をつけて保存」、「ファイル形式」に「スペース区切りテキスト(.prn)」で保存する。
// 入力値の平均を求める
// ファイルは、Z:¥foo¥bar¥avg.c にあるとする。
#include <stdio.h>
int main() {
int count = 0 , sum = 0 ;
int x ;
while( scanf( "%d" , &x ) == 1 ) {
count++ ;
sum += x ;
}
printf( "%lf¥n" , sum / count ) ; // この行は間違い。修正せよ。
return 0 ;
}
このプログラムを普通に実行したら、キーボードから 83,95,92,95,77 と毎回入力しなければならない。めんどくさくない?
Excel の空白区切りのデータを読み込む
先程の Excel で保存したファイルを同じディレクトリにコピーする。(Z:¥foo¥bar¥avg.prnとする)
コンパイラで、avg.c をコンパイルし、avg.exe ができていることを確認し、 cmd.exe を起動 Z:¥> cd Z:¥foo¥bar Z:¥foo¥bar> avg.exe < avg.prn
このように、プログラムを起動する時に、通常はキーボードから入力するプログラムに対し、起動時に “< ファイル名” を付けて起動し、ファイル入力に切り替えることを、入力リダイレクトと言う。
出力リダイレクトとグラフ化
前回の授業での sin(x) のプログラムの実行結果を、Excel で確認してみよう。
// sin の値を出力 // ファイルは、Z:¥foo¥bar¥sin.c にあるとする。 #include <stdio.h> #include <math.h> int main() { double th , y ; for( th = 0.0 ; th <= 360.0 ; th += 5.0 ) { y = sin( th / 180.0 * 3.1415926535 ) ; printf( "%lf %lf¥n" , th , y ) ; } return 0 ; }
プログラムを実行する時に、
コンパイラで sin.c をコンパイルし、sin.exe ができていることを確認し cmd.exe を起動 Z:¥> cd Z:¥foo¥bar プログラムのディレクトリに移動 Z:¥foo¥bar> sin.exe > sin.csv プログラムを起動し出力を sin.csv に保存
このように、プログラムを起動する時に、通常は結果を画面に出力するプログラムに対し、起動時に “> ファイル名” を付けて起動し、結果をファイル出力に切り替えることを、出力リダイレクトと言う。
Excelにインポートしてグラフ化
Excel を起動し、「ファイル-インポート」より、「テキストファイル」を選び、「区切り文字」-「スペース区切り」でデータを取り込む。
あとは、取り込まれたデータ範囲を選択し、「挿入」-「グラフ」で好きなグラフ形式を選ぶ。