Presentation is loading. Please wait.

Presentation is loading. Please wait.

情報実習I (第7回) 木曜4・5限 担当:北川 晃.

Similar presentations


Presentation on theme: "情報実習I (第7回) 木曜4・5限 担当:北川 晃."— Presentation transcript:

1 情報実習I (第7回) 木曜4・5限 担当:北川 晃

2 復習:平方根の計算 a=1, 2, …, 50に対して,その平方根 を求め, 表を出力するプログラムを作れ. : Math.Sqrt(a)
補正値:

3 平方根の計算:アルゴリズム 整数 について,以下の手順を繰り返す. 初期値として, roota=1を代入する. 補正値 の計算を行う.
整数 について,以下の手順を繰り返す. 初期値として, roota=1を代入する. 補正値 の計算を行う. roota=roota+cにより補正を行う. 補正した値の相対値 を設定した値 と比較して 小さくなるまで補正を繰り返す.

4 平方根の計算:出力例

5 これがないと,続くWhile文の評価ができない
平方根の計算:プログラム例 Dim a As Integer, eps As Single = Dim roota, c As Single For a = 1 To 50 roota = 1 c = 1 While Math.Abs(c) / roota > eps c = (a / roota - roota) / 2 roota = roota + c End While Console.WriteLine("√{0}={1}", a, roota) Next 補正量𝑐の初期値: これがないと,続くWhile文の評価ができない While文では最初に条件判定を行う

6 Do……Loop文の基本的な表式1 前判定ループ Do While 条件式 文ブロック Loop 条件が「真」の間は, ループを繰り返す.
条件が最初から「偽」の場合は, ループを1回も実行しない. Do Until 条件式 文ブロック Loop 条件が「真」になるまで, ループを繰り返す. 条件が最初から「真」の場合は, ループを1回も実行しない.

7 文ブロックは条件の「真」,「偽」に関わらず,最低一回は実行される.
Do……Loop文の基本的な表式2 後判定ループ Do 文ブロック Loop While 条件式 条件が「真」の間は, ループを繰り返す. 文ブロックは条件の「真」,「偽」に関わらず,最低一回は実行される. Do 文ブロック Loop Until 条件式 条件が「真」になるまで, ループを繰り返す.

8 Do……Loop文を用いた書き換え 前判定ループ 後判定ループ 初期値 一度はループを 必ず通る 一度もループを 通らない場合もある 初期値
roota = 1 c = 1 Do While Math.Abs(c) / roota > eps c = (a / roota - roota) / 2 roota = roota + c Loop roota = 1 Do c = (a / roota - roota) / 2 roota = roota + c Loop While Math.Abs(c) / roota > eps 初期値 一度はループを 必ず通る 一度もループを 通らない場合もある roota = 1 c = 1 Do Until Math.Abs(c) / roota <= eps c = (a / roota - roota) / 2 roota = roota + c Loop roota = 1 Do c = (a / roota - roota) / 2 roota = roota + c Loop Until Math.Abs(c) / roota <= eps 初期値

9 例題:二乗,三乗,平方根の数表 1~10まで,0.5おきに,その数自身,二乗,三乗, 平方根の数表をラベルに表示するプログラムを作れ.
 1~10まで,0.5おきに,その数自身,二乗,三乗, 平方根の数表をラベルに表示するプログラムを作れ. データを書き出す ごとに改行する

10 システムにより様々なコードが混在しているので注意が必要
改行コード vbCr(キャリッジリターン):行頭復帰 vbLf(ラインフィード):行送り vbCrLf:改行文字 vbTab:タブ文字 縦方向は紙を動かし, 横方向はキャリッジを動かす 改行のための レバー システムにより様々なコードが混在しているので注意が必要

11 二乗,三乗,平方根の数表:プログラム例 Label1~8,Button1,2の貼り付け 「計算」ボタンを押すと,

12 二乗,三乗,平方根の数表:プログラム例(つづき)
Private Sub Button1_Click(sender As Object, e As EventArgs) … Dim n As Single For n = 1 To 10 Step 0.5 Label1.Text = Label1.Text & Format(n, "##.0") & vbLf Label2.Text = Label2.Text & Format(n ^ 2, "###0.0") & vbLf Label3.Text = Label3.Text & Format(n ^ 3, "####0.0") & vbLf Label4.Text = Label4.Text & Format(Math.Sqrt(n), "#.0000") _ & vbLf Next End Sub Private Sub Button2_Click(sender As Object, e As EventArgs) … End Private Sub Form1_Load(sender As Object, e As EventArgs) … Label1.Text = "" : Label2.Text = "" Label3.Text = "" : Label4.Text = "" プログラム開始した直後の動作

13 例題:10人の点数の平均点 10人のテストの点数データをキーボードから1つずつ 入力し,その平均点を計算して表示するプログラムを作れ.
 10人のテストの点数データをキーボードから1つずつ 入力し,その平均点を計算して表示するプログラムを作れ. 入力のためのフォーム (InputBox関数を使用)

14 Label1に「ここにデータが表示されます」と入力
10人の点数の平均点:プログラム例 Label1,Textbox1, Button1,2の貼り付け Label1に「ここにデータが表示されます」と入力

15 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

16 例題:多重ループ  2から20までの数について,1を除くすべての約数を ラベルに表示するプログラムを作れ.

17 多重ループ:プログラム例 Label1,Button1,2 の貼り付け

18 多重ループ:プログラム例(つづき) 次の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の評価に移る前に改行コードを入れる

19 例題:数字列の表示 フォームに0~9のボタンを配置し,これを押した順番に 数字がテキストボックスに表示されるプログラムを作れ.
 フォームに0~9のボタンを配置し,これを押した順番に 数字がテキストボックスに表示されるプログラムを作れ. ただし,ACキーを押すと,表示が消えるものとする.

20 数字列の表示:考え方 文字列”s”を用いて数字を表示する. 数字ボタンを押すたびに,新たな文字列が
文字列は,”&”もしくは”+”の演算子で結合できる. “AC”(=All Clear)キーを押した場合,それまで 記憶していた文字列”s”は消去される. “AC”キーを押すと,テキストボックスの表示も消去される.

21 数字列の表示:プログラム例 Textbox1,Button1~11の貼り付け たとえば”5”のキーを押した場合,
それまでの文字列をsとして, s = s & ”5”のように文字列を結合, 新たなsをテキストボックスに書き出す “AC”キーを押すと,s = “”に初期化され, テキストボックスの表示も””に初期化

22 数字列の表示:プログラム例(つづき) 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”を結合し,文字列を表示

23 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を空に設定し, 表示も空にする.

24 数字列の表示:応用 先の例題のプログラムを応用すれば, 簡単な電卓を作成することもできる. 製品として販売されている電卓を研究し,
どのような動作をするか考えてみよう

25 課題:電卓のフォームアプリ作成 0~9および小数点のキーを備えていること. ACキー(すべてを初期化する)を備えていること.
キー入力と連動したディスプレイを一つ以上備えていること. 正の実数の四則演算ができること (答えは負の数になる場合もある). 追加要素の例: 平方根 クリアーキー 正負変換

26 電卓のフォームアプリ作成:ヒント TextBoxに表示される数字の文字列を 数字のデータに変えたり,また文字列に戻したり.
四則演算をさせるためには,二つの数字を 記憶させなければならない.どのボタンに, どのタイミングで動作させるか. 四則演算のボタンを押したとき,最後にイコール キーを押すまで,どの演算を行うかをどうやって 記憶しておくか ボタンが多くなるので,それぞれの動作の 関連付けを間違えないこと.

27 データの型の変更 Cint(x): xを整数型へ変換 CStr(x): xを文字列へ変換 CSng(x): xを単精度実数型へ変換
CDbl(x): xを倍精度実数型へ変換 CBool(x): xを論理型へ変換 Val(s): sを適切な数値へ変換

28 ヒント:足し算機能の実装 足し算キーとイコールキーの動作を次のように設定する. 足し算キー イコールキー
それまでに入力されている数の記憶 足し算キー m = Val(TextBox1.Text) op = 1 s = "" 足し算であることの記憶 記憶されている数の消去 イコールキー 二つ目に入力された数の記憶 n = Val(TextBox1.Text) Select Case op Case 1 TextBox1.Text = m + n End Select s = "" 足し算の場合は… 記憶されている数の消去

29 電卓の自然な動作に向けて1 ディスプレイに「0」が表示されているときに, 0キーを押しても「00」とは表示されない.
ヒント:0キーの動作を,ディスプレイの 表示によって場合分けする. (Hint: We divide the action of 0 key Into cases according to string on the display. ) Pushing ‘0’ key Yes No s=‘0’? s=s s=s + ‘0’ Displaying the string ‘s’

30 電卓の自然な動作に向けて2 ディスプレイ上の数字が小数点を含む場合, 二つ目の小数点を表示しない.
方法1:文字列’s’が’.’を含んでいるかどうかを判定する. 方法2:数字が整数か,小数かを判定する. s1=‘12345’ s2=‘12.345’ Console.WriteLine(s1.IndexOf(“.”)) ’結果は0 Console.WriteLine(s2.IndexOf(“.”)) ’結果は1 文字列の中に’.’が 含まれているかを判定 Fix関数,Int関数 xを整数の範囲で1で割り算 ⇒整数部分だけを取り出せる x-(x\1)=0 or not?


Download ppt "情報実習I (第7回) 木曜4・5限 担当:北川 晃."

Similar presentations


Ads by Google