情報基礎II (第1回)

情報基礎Ⅱ/基礎工学Ⅲ
(第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("ファイル書き込み完了しました.")
三角関数のグラフ:出力例
追記されている
三角関数のグラフ:出力例(続き)
データの列を選択
三角関数のグラフ:出力例(続き)