情報実習I (第8回) 木曜4・5限 担当:北川 晃
例題:10人の点数の平均点 10人のテストの点数データをキーボードから1つずつ 入力し,その平均点を計算して表示するプログラムを作れ. 10人のテストの点数データをキーボードから1つずつ 入力し,その平均点を計算して表示するプログラムを作れ. 入力のためのフォーム (InputBox関数を使用)
Label1に「ここにデータが表示されます」と入力 10人の点数の平均点:プログラム例 Label1,Textbox1, Button1,2の貼り付け Label1に「ここにデータが表示されます」と入力
10人の点数の平均点:プログラム例(つづき) Private Sub Button1_Click(sender As Object, e As EventArgs) … Dim goukei, n, ten As Integer : Dim heikin As Single goukei = 0 : Label1.Text = "入力データ" & vbLf For n = 1 To 10 ten = InputBox("点数を入力してください", "点数") Label1.Text = Label1.Text & Format(ten, " ##0") goukei = goukei + ten Next n heikin = goukei / 10 TextBox1.Text = Format(heikin, "平均点は###.0点") End Sub Private Sub Button2_Click(sender As Object, e As EventArgs) … End
例題:多重ループ 2から20までの数について,1を除くすべての約数を ラベルに表示するプログラムを作れ.
多重ループ:プログラム例 Label1,Button1,2 の貼り付け
多重ループ:プログラム例(つづき) 次のnの評価に移る前に改行コードを入れる Private Sub Button1_Click(sender As Object, e As EventArgs) … Dim n, m As Integer Label1.Text = "" For n = 2 To 20 Label1.Text = Label1.Text & Format(n, "##の約数は:") For m = 2 To n If n Mod m = 0 Then Label1.Text = Label1.Text & Format(m, " ## ") End If Next m Label1.Text = Label1.Text & vbLf Next n End Sub Private Sub Button2_Click(sender As Object, e As EventArgs) … End nをmで割って,余りがゼロなら約数なので書き出す 次のnの評価に移る前に改行コードを入れる
例題:数字列の表示 フォームに0~9のボタンを配置し,これを押した順番に 数字がテキストボックスに表示されるプログラムを作れ. フォームに0~9のボタンを配置し,これを押した順番に 数字がテキストボックスに表示されるプログラムを作れ. ただし,ACキーを押すと,表示が消えるものとする.
数字列の表示:考え方 文字列”s”を用いて数字を表示する. 数字ボタンを押すたびに,新たな文字列が 文字列は,”&”もしくは”+”の演算子で結合できる. “AC”(=All Clear)キーを押した場合,それまで 記憶していた文字列”s”は消去される. “AC”キーを押すと,テキストボックスの表示も消去される.
数字列の表示:プログラム例 Textbox1,Button1~11の貼り付け たとえば”5”のキーを押した場合, それまでの文字列をsとして, s = s & ”5”のように文字列を結合, 新たなsをテキストボックスに書き出す “AC”キーを押すと,s = “”に初期化され, テキストボックスの表示も””に初期化
数字列の表示:プログラム例(つづき) sを共通の変数として宣言 初期値は文字列無し Dim s As String = "" Private Sub Button1_Click(sender As Object, e As EventArgs) … s = s & "1" TextBox1.Text = s End Sub Private Sub Button2_Click(sender As Object, e As EventArgs) … s = s & "2" Private Sub Button3_Click(sender As Object, e As EventArgs) … s = s & "3" … 1のキーが押された場合,sの右側に 文字列”1”を結合し,文字列を表示 2のキーが押された場合,sの右側に 文字列”2”を結合し,文字列を表示 3のキーが押された場合,sの右側に 文字列”3”を結合し,文字列を表示
ACキーが押された場合,sを空に設定し, 数字列の表示:プログラム例(つづき) … Private Sub Button9_Click(sender As Object, e As EventArgs) … s = s & "9" TextBox1.Text = s End Sub Private Sub Button10_Click(sender As Object, e As EventArgs) … s = s & "0" Private Sub Button11_Click(sender As Object, e As EventArgs) … s = "" TextBox1.Text = "" 9のキーが押された場合,sの右側に 文字列”9”を結合し,文字列を表示 0のキーが押された場合,sの右側に 文字列”0”を結合し,文字列を表示 ACキーが押された場合,sを空に設定し, 表示も空にする.
数字列の表示:応用 先の例題のプログラムを応用すれば, 簡単な電卓を作成することもできる. 製品として販売されている電卓を研究し, どのような動作をするか考えてみよう
課題:電卓のフォームアプリ作成 0~9および小数点のキーを備えていること. ACキー(すべてを初期化する)を備えていること. キー入力と連動したディスプレイを一つ以上備えていること. 正の実数の四則演算ができること (答えは負の数になる場合もある). 追加要素の例: 平方根 クリアーキー 正負変換
電卓のフォームアプリ作成:ヒント TextBoxに表示される数字の文字列を 数字のデータに変えたり,また文字列に戻したり. 四則演算をさせるためには,二つの数字を 記憶させなければならない.どのボタンに, どのタイミングで動作させるか. 四則演算のボタンを押したとき,最後にイコール キーを押すまで,どの演算を行うかをどうやって 記憶しておくか ボタンが多くなるので,それぞれの動作の 関連付けを間違えないこと.
データの型の変更 Cint(x): xを整数型へ変換 CStr(x): xを文字列へ変換 CSng(x): xを単精度実数型へ変換 CDbl(x): xを倍精度実数型へ変換 CBool(x): xを論理型へ変換 Val(s): sを適切な数値へ変換
プログラミング演習 次の微分方程式の初期値問題を,数値的に解け. 0≤𝑥≤5,𝑑𝑥=0.1 𝑥 𝑖 , 𝑦 𝑖 を配列で処理する. 𝑑𝑦 𝑑𝑥 =−𝑦, 𝑦 0 =3 (1) 𝑦 𝑖 = 𝑦 𝑖−1 −Δ𝑥 𝑦 𝑖−1 𝑦 0 =3 𝑑𝑦 𝑑𝑥 −2𝑦=−4𝑥+8, 𝑦 0 =4 (2) 𝑦 𝑖 = 𝑦 𝑖−1 +Δ𝑥 2 𝑦 𝑖−1 −4 𝑥 𝑖−1 𝑦 0 =4 𝑑 2 𝑦 𝑑 𝑥 2 +4𝑦=0, 𝑦 0 = 1 2 , 𝑑𝑦 𝑑𝑥 𝑥=0 =0 (3) 𝑦 𝑖 =2 𝑦 𝑖−1 − 𝑦 𝑖−2 −4Δ 𝑥 2 𝑦 𝑖−1 𝑦 0 = 1 2 , 𝑦 1 = 1 2
プログラミング演習 Dim Writer As New IO.StreamWriter(“c:\…\result1.csv") Dim x(100), y(100), dx As Single x(0) = 0 : y(0) = 3 : dx = 0.1 Writer.WriteLine("{0,16},{1,16}", x(0), y(0)) For i As Integer = 1 To 50 x(i) = i * dx y(i) = y(i - 1) - dx * y(i - 1) Writer.WriteLine("{0,16},{1,16}", x(i), y(i)) Next Writer.Close()
プログラミング演習 Dim Writer As New IO.StreamWriter(“c:\…\result2.csv") Dim x(100), y(100), dx As Single x(0) = 0 : y(0) = 4 : dx = 0.1 Writer.WriteLine("{0,16},{1,16}", x(0), y(0)) For i As Integer = 1 To 50 x(i) = i * dx y(i) = y(i - 1) + dx * (2 * y(i - 1) - 4 * x(i - 1) + 8) Writer.WriteLine("{0,16},{1,16}", x(i), y(i)) Next Writer.Close()
プログラミング演習 Dim Writer As New IO.StreamWriter(“c:\…\result3.csv") Dim x(100), y(100), dx As Single x(0) = 0 : y(0) = 0.5 : dx = 0.1 Writer.WriteLine("{0,16},{1,16}", x(0), y(0)) x(1) = dx : y(1) = 0.5 Writer.WriteLine("{0,16},{1,16}", x(1), y(1)) For i As Integer = 2 To 50 x(i) = i * dx y(i) = 2 * y(i - 1) - y(i - 2) - 4 * dx ^ 2 * y(i - 1) Writer.WriteLine("{0,16},{1,16}", x(i), y(i)) Next Writer.Close()