250 likes | 387 Views
情報基礎実習 I ( 第5回). 木 曜4・5限 担当 :北川 晃. Stream クラスを用いたファイルの接続. 外部ファイルから変数 ’s’ にデータを 読み込む 場合. プログラム中における ファイルの名前. … Dim インスタンス名 As New IO.StreamReader ( _ “ ファイルの絶対パス ”, _ System.Text.Encoding.Default ) … s = インスタンス名 . … インスタンス名 .Close(). ReadToEnd :ファイルの内容すべてを取得
E N D
情報基礎実習I(第5回) 木曜4・5限 担当:北川 晃
Streamクラスを用いたファイルの接続 外部ファイルから変数’s’にデータを読み込む場合 プログラム中における ファイルの名前 … Dim インスタンス名 AsNew IO.StreamReader( _ “ファイルの絶対パス”, _ System.Text.Encoding.Default) … s = インスタンス名. … インスタンス名.Close() ReadToEnd:ファイルの内容すべてを取得 ReadLine:ファイルから1行読み込む Read :ファイルから1文字読み込む ファイルを閉じる
外部ファイルからのデータの読み込み:例文 Dim a, b, c As Single Dim ReadTextAsNew IO.StreamReader( _ “D:\read_test\data.txt”, _ System.Text.Encoding.Default) a = ReadText.ReadLine b = ReadText.ReadLine c = ReadText.ReadLine Console.WriteLine(“a={0}”,a) Console.WriteLine(“b={0}”,b) Console.WriteLine(“c={0}”,c) ReadText.Close() 1行ずつ 読み込み ファイル名”data.txt”として “D:\read_test\”に保存 3.141592656 2.718281828 1 ファイル を閉じる
Streamクラスを用いたファイルの接続 外部ファイルにデータを書き込む場合 プログラム中における ファイルの名前 … Dim インスタンス名AsNew IO.StreamWriter( _ “ファイルの絶対パス”, _ [True またはFalse], [文字コードの指定]) … インスタンス名. … インスタンス名.Close() ‘True’のときは追記 WriteLine:ファイルに書き込む(改行) Write:ファイルに書き込む(改行無し) ファイルを閉じる
外部ファイルへのデータの書き出し:例文 Writerとして,ファイル “D:\...\result.txt”を接続 Dim Writer As New IO.StreamWriter(_ "D:\...\result.txt") Dim x As Single = 3, y As Single y = Math.Sqrt(x) Writer.Write(y) Writer.Close() ‘True’と書かれていないので,ファイルは上書きされる ‘y’の値を,Writerとして接続したファイルに書き込む ファイルを閉じる
例題:フィボナッチ数列(改) フィボナッチ数列の最初の40項を求めて外部ファイル ’result.txt’へ出力するプログラムを作れ. …
フィボナッチ数列:アルゴリズム 求めたい項を’n_new’,ひとつ前の項を’n_last’, 二つ前の項を’n_old’とする. 初期値としてn_old=0,n_last=1を代入し, 第一項と第二項をそれぞれ書き出す. 第三項をn_new=n_old+n_lastにより計算し,書き出す. 次の第四項を求めるために, n_old=n_last,n_last=n_newの置き換えを行う. この手順を,第40項が求まるまで繰り返す.
フィボナッチ数列:プログラム例 Dim i, num, n_old, n_last, n_new As Integer Dim Writer As New IO.StreamWriter( _ "D:\...\result.txt") num= 40 n_old= 0 Writer.WriteLine("{0}", n_old) n_last= 1 Writer.WriteLine("{0}", n_last) For i = 3 To num n_new = n_last + n_old Writer.WriteLine("{0}", n_new) n_old = n_last : n_last= n_new Next Writer.Close() Console.WriteLine("ファイル書き込み完了しました.") Writerとして,ファイル “D:\...\result.txt”を接続 項の数 Writerとして 接続した ファイルに 書き込む 初項 第二項 i=1~num(=40)まで繰り返し ファイルを 閉じる 増分”Step 1” は省略 これらの文を 逆にしてはならない 完了を 知らせる出力
例題:関数のグラフの作成 区間において,正弦関数の グラフを作成せよ. 考え方: • x0をキーボードから読み込み,x=x0から0.1刻みで • x=x0+1まで変化させる. • それぞれのxについて,y=Math.Sin(x)を計算する. • x,yの組をCSV (Comma Separated Value) 形式で • ファイルに書き出す⇒Excelで読み込み
CSV形式のファイル • Excelで開くと… • テキストエディタで開くと…
三角関数のグラフ:プログラム例 Writerとして,ファイル “D:\...\result.csv”を接続 Dim x0, x, y As Single Dim Writer As New IO.StreamWriter( _ "D:\...\result.csv",True) Console.Write("初期値x0を入力してください:x0=") x0 = Console.ReadLine() For x = x0 To x0 + 1.0 Step 0.1 y = Math.Sin(x) Writer.WriteLine(" {0,10}, {1,10}", x, y) Next Writer.Close() Console.WriteLine("ファイル書き込み完了しました.") ファイルがある場合は追記 Writerとして接続した ファイルに書き込む コンマで区切る ファイルを閉じる 完了を知らせる出力
三角関数のグラフ:出力例 追記されている
三角関数のグラフ:出力例(続き) データの列を選択
プログラミング演習 区間 において,正弦関数 およびその導関数,2階導関数のグラフを作成せよ. 考え方: • オイラーの差分公式を用いる. • x, y, dy, d2yの各値を,CSV形式で • 外部ファイルに書き出す. y ⇒ dy⇒ d2y ⇒
三角関数の導関数:プログラム例 Writerとして,ファイル “D:\...\result.csv”を接続 Dim x, y, dy, d2y, h As Single Dim Writer As New IO.StreamWriter("D:\...\result.csv") h = 0.01 For x = 0 To 10 Step 0.1 y = Math.Sin(x) dy = (Math.Sin(x + h) - Math.Sin(x)) / h d2y = (Math.Sin(x + h) - 2 * Math.Sin(x) _ + Math.Sin(x - h)) / h ^ 2 Writer.WriteLine("{0,10},{1,10},{2,10},{3,10}", _ x, y, dy, d2y) Next Console.WriteLine("ファイルの書き込み終了しました.") Writer.Close() 微小量を定める 導関数の計算 コンマで区切る 完了を知らせる出力 ファイルを閉じる
プログラミング演習 区間において,矩形波を 出力するプログラムを作れ. 考え方: • 矩形波 を • Functionプロシージャとして作成する. • x,yの組をCSV (Comma Separated Value) 形式で • ファイルに書き出す⇒Excelで読み込み
矩形波のグラフ:プログラム例 Writerとして,ファイル “D:\...\result.csv”を接続 Sub Main() Dim x, y As Single Dim Writer As New IO.StreamWriter( _ "D:\...\result.csv") For x = 0 To 10 Step 0.01 y = rect(x) Writer.WriteLine(" {0,10}, {1,10}", x, y) Next Writer.Close() Console.WriteLine("ファイル書き込み完了しました.") End Sub Writerとして接続した ファイルに書き込む コンマで区切る ファイルを閉じる 完了を知らせる出力
矩形波のグラフ:プログラム例(続き) Function rect(x) Dim y As Single If x - Fix(x / 2) * 2 < 1 Then y = 0 Else y = 1 End If Return y End Function • x=0.5のとき, • 0.5-Fix(0.25)*2=0.5<1 • x=1.5のとき, • 1.5-Fix(0.75)*2=1.5>1 • x=2.5のとき, • 2.5-Fix(1.25)*2=0.5<1 • … yの値を返す
プログラミング演習 次の微分方程式の初期値問題をオイラー法により数値的に解け. 考え方: • オイラーの差分公式を利用する. • について,繰り返し計算を行う. • x=0のとき, =y0=2として, =yを計算する. • xとyを書き出し,y0=yと置き直して • 次のxについて計算を続ける. ⇒
微分方程式(オイラー法):プログラム例 Writerとして,ファイル “D:\...\result.csv”を接続 Dim x, y, y0, h As Single Dim Writer As New IO.StreamWriter("D:\...\result.csv") h = 0.01 : y0 = 2 For x = 0 To 2 Step h y = y0 + h * f(x, y0) Writer.WriteLine("{0,10}, {1,10}", x, y) y0 = y Next Console.WriteLine("ファイルの書き込み終了しました.") Writer.Close() 刻み幅,初期値の設定 Writerとして接続した ファイルに書き込む コンマで区切る 次の計算のための置き直し ファイルを閉じる 完了を知らせる出力
微分方程式(オイラー法):プログラム例(続き)微分方程式(オイラー法):プログラム例(続き) Function f(x, y0) Dim y As Single y = -x / y0 Return y End Function 関数プロシージャ部分