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

Slides:



Advertisements
Similar presentations
情報基礎実習 I (第6回) 木曜4・5限 担当:北川 晃. Stream クラスを用いたファイルの接続 … Dim インスタンス名 As New IO.StreamReader( _ “ ファイルの絶対パス ”, _ System.Text.Encoding.Default) … s = インスタンス名.
Advertisements

1 情報基礎 A 第 9 週 プログラミング入門 VBA の基本文法 1 準備・変数・データの入出力 徳山 豪・全 眞嬉 東北大学情報科学研究科 システム情報科学専攻 情報システム評価学分野.
情報基礎実習 I (第3回) 木曜4・5限 担当:北川 晃. プログラミング演習 2 つの数を入力し,「計算」ボタンをクリック すると,それぞれの計算結果を次のように 表示するプログラムを作れ.
5.制御構造と配列 場合分け( If Then Else , Select Case ) 繰返し( Do While ) 繰返しその2( For Next )
復習 配列変数の要素 5は配列の要素数 これらの変数をそれぞれ配列の要素と呼ぶ この数字を配列の添え字,またはインデックスと呼ぶ
復習 配列変数の要素 5は配列の要素数 これらの変数をそれぞれ配列の要素と呼ぶ この数字を配列の添え字,またはインデックスと呼ぶ
情報・知能工学系 山本一公 プログラミング演習Ⅱ 第4回 配列(2) 情報・知能工学系 山本一公
情報基礎実習I (第4回) 木曜4・5限 担当:北川 晃.
プログラミング言語としてのR 情報知能学科 白井 英俊.
情報基礎実習I (第2回) 木曜4・5限 担当:北川 晃.
VBAを通して プログラム言語の基本構造を学ぶ
情報基礎実習I (第7回) 木曜4・5限 担当:北川 晃.
12.3,E,-15, 12.3,E5,+,=, >,<,…,
ファーストイヤー・セミナーⅡ 第8回 データの入力.
6/26 前回復習 for文、while文による繰り返し計算
数値計算及び実習 第3回 プログラミングの基礎(1).
VBA H106077 寺沢友宏.
情報基礎実習I (第5回) 木曜4・5限 担当:北川 晃.
情報基礎A 第10週 プログラミング入門 VBAの基本文法2 データ型・If ~Then~Else
理由:文字数より要素数の多い配列を用いた時に,文字列の最後を示すため
理由:文字数より要素数の多い配列を用いた時に,文字列の最後を示すため
4.2 連立非線形方程式 (1)繰返し法による方法
問題 1 キーボードから入力した数の合計を計算するプログラムを 作成せよ。最初に、何個の数を入力するかその数を入力 するようにする。
情報基礎A 第11週 プログラミング入門 VBAの基本文法3 配列・For~Next
情報基礎実習I (第1回) 木曜4・5限 担当:北川 晃.
テキストボックス、チェックボックス×2、コマンドボタンを配置する。 コマンドボタンに機能を与える
第7回 条件による繰り返し.
整数データと浮動小数データ 整数データと浮動小数データの違い.
実例で学ぶプログラミング VBAを用いて簡単なゲームを作ろう 徳山 豪 東北大学情報科学研究科 システム情報科学専攻 情報システム評価学分野.
岩村雅一 知能情報工学演習I 第11回(後半第5回) 岩村雅一
情報工学Ⅱ (第9回) 月曜4限 担当:北川 晃.
第二回 VB講座 電卓を作ろう.
電気・機械・情報概論 VBAプログラミング 第2回 2018年7月2日
情報実習I (第6回) 木曜4・5限 担当:北川 晃.
プログラミング入門 電卓を作ろう・パートIV!!.
地域情報学演習 VBAプログラミング 第3回 2017年10月24日
アルゴリズムとプログラミング (Algorithms and Programming)
第7回 条件による繰り返し.
情報基礎Ⅱ (第11回) 月曜4限 担当:北川 晃.
すべてのレポートの提出期限 1月22日 火曜日 これ以降は特殊な理由が無い限り レポートを受け取りません!
「入力」はInputBoxやテキストボックスに限らず、 セルからのデータの入力や、チェックボックス等からの入力全てを含める。
VBで始めるプログラミング 第三回 コードを書こう!! まきはた@ナーク ’04/05/21.
岩村雅一 知能情報工学演習I 第11回(後半第5回) 岩村雅一
整数データと浮動小数データ.
情報基礎Ⅱ (第5回) 月曜4限 担当:北川 晃.
情報実習I (第1回) 木曜4・5限 担当:北川 晃.
復習 一定回数を繰り返す反復処理の考え方 「ループ」と呼ぶ false i < 3 true i をループ変数あるいはカウンタと呼ぶ
プログラムの基本構造と 構造化チャート(PAD)
プログラミング入門.
C言語ファミリー C# 高級言語(抽象的) Java オブジェクト指向 C++ C 機械語(原始的)
先週の復習 2重ループを用いた、 表の記入と読み込み.
情報実習I (第2回) 木曜4・5限 担当:北川 晃.
基礎プログラミング演習 第6回.
第6回レポート解説 条件1 条件2 条件3 月の入力 月、日、曜日の表示 日の入力 曜日の入力
プログラミングⅡ 第2回.
情報工学Ⅱ (第9回) 月曜4限 担当:北川 晃.
情報工学Ⅱ (第2回) 月曜4限 担当:北川 晃.
ウェブデザイン演習 第6回.
C言語講座 制御(選択) 2006年 計算技術研究会.
プログラミング基礎演習 第4回.
情報実習I (第6回) 木曜4・5限 担当:北川 晃.
情報工学Ⅱ (第8回) 月曜4限 担当:北川 晃.
情報実習I (第1回) 木曜4・5限 担当:北川 晃.
情報実習I (第15回) 木曜4・5限 担当:北川 晃.
場合分け(If Then Else,Select Case) 繰返し(Do While) 繰返しその2(For Next)
プログラミング入門2 第3回 条件分岐(2) 繰り返し文 篠埜 功.
3.テキストボックスによる データ入力 データ入力と表示のプログラム.
復習 いろいろな変数型(2) char 1バイト → 英数字1文字を入れるのにぴったり アスキーコード → 付録 int
情報処理Ⅱ 2006年10月20日(金).
ファーストイヤー・セミナーⅡ 第10回 if文による選択処理(2).
Presentation transcript:

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

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

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

平方根の計算:出力例

これがないと,続くWhile文の評価ができない 平方根の計算:プログラム例 Dim a As Integer, eps As Single = 0.000001 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文では最初に条件判定を行う

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

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

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 初期値

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

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

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

二乗,三乗,平方根の数表:プログラム例(つづき) 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 = "" プログラム開始した直後の動作

例題: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を適切な数値へ変換

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

電卓の自然な動作に向けて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’

電卓の自然な動作に向けて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?