情報基礎Ⅱ/基礎工学Ⅲ (第8回) 月曜4限 担当:北川 晃 最大値と最小値 n個のデータx1, x2, …, xnがある.データの個数とデータを 順次読み込んで,それらのデータの最大値と最小値を求めよ. N=11個のデータ 最大値:9,最小値:1 最大値と最小値:考え方 1. 第(i-1)番目までのデータについて, 最大値xmaxと最小値xminが分かっているとする. 2. 次に読み込む第 i 番目のデータ xi について, (i)xi>xmaxのとき,xiが新たな最大値となる. xmax=xi (ii)xi≦xmaxのとき, (ii)-1. xi≧xminのとき,xmax,xminは変わらず. (ii)-2. xi<xminのとき,xiが新たな最小値となる. xmin=xi 3. これをすべてのデータについて繰り返す. 最大値と最小値:アルゴリズム 1. 最初のデータxを読み込む. 2. 最大値と最小値の初期値として,最初のデータを代入 xmax=x, xmin=x 3. 次のデータxを読み込み,xmaxとの大小を判定. 4. xmaxの方が小さければ,xとxminの大小を判定. 5. 必要があればxmaxもしくはxminを 読み込んだデータxで置き換え. 6. これを繰り返し,最後にxmaxとxminを書き出す. プログラム例:最大値と最小値 その1 Dim xmax, xmin, x As Single, n As Integer Console.Write("データの個数nを入力して下さい") n = Console.ReadLine() Console.Write("1個目のデータxを入力して下さい") x = Console.ReadLine() xmax = x xmin = x 最大の値,最小の値の初期値として, ともに1個目のデータxを代入する. プログラム例:最大値と最小値 その2 For i As Integer = 2 To n Console.Write("{0}個目のデータxを入力して下さい", i) x = Console.ReadLine() xが最大値より大きければ, If x > xmax Then 最大値を置き換える. xmax = x xは最大値より小さい. ElseIf x >= xmin Then このとき,xの値が最小値より 大きい場合は,何もしない. Else xmin = x それ以外の場合は End If 最小値を置き換える. Next Console.WriteLine("最大の値は{0}", xmax) Console.WriteLine("最小の値は{0}", xmin) 例題:最大値と最小値 (改) n個のデータx1, x2, …, xnがある.データの個数とデータを 順次読み込んで,それらのデータの最大値と最小値を求めよ. N=100個のデータ 100個のデータ,すべて手で打ち込むの? 外部データファイルからの読み込み max_min_data.txt データの個数 データ の数列 Streamクラスを用いたファイルの接続 外部ファイルから変数’s’にデータを読み込む場合 プログラム中における ファイルの名前 … Dim インスタンス名 As New IO.StreamReader( _ “ファイルの絶対パス”, _ System.Text.Encoding.Default) … s = インスタンス名. ReadToEnd:ファイルの内容すべてを取得 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() ファイル を閉じる 外部ファイルからのデータの読み込み:出力例 プログラム例:最大値と最小値(改)その1 Dim xmax, xmin, x As Single, n As Integer Dim ReadText As New IO.StreamReader( _ 外部ファイル "D:\...\max_min_data.txt", _ の指定 System.Text.Encoding.Default) n = ReadText.ReadLine() x = ReadText.ReadLine() xmax = x xmin = x 外部ファイル から読み込み 最大の値,最小の値の初期値として, ともに1個目のデータxを代入する. プログラム例:最大値と最小値(改)その2 For i As Integer = 2 To n x = ReadText.ReadLine() 外部ファイル から読み込み If x > xmax Then xが最大値より大きければ, xmax = x 最大値を置き換える. ElseIf x >= xmin Then xは最大値より小さい. このとき,xの値が最小値より Else 大きい場合は,何もしない. xmin = x End If それ以外の場合は Next 最小値を置き換える. Console.WriteLine("最大の値は{0}", xmax) Console.WriteLine("最小の値は{0}", xmin) 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("ファイル書き込み完了しました.") 三角関数のグラフ:出力例 追記されている 三角関数のグラフ:出力例(続き) データの列を選択 三角関数のグラフ:出力例(続き)
© Copyright 2025 ExpyDoc