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