日本総合ビジネス専門学校 2年1組,2年2組,3年1組の授業です。
全クラス共通 教科書『Visual Basicによるはじめてのアルゴリズム入門』河西 朝雄 著
3年1組,2年1組 教科書『COBOLプログラムのためのVisualBasic入門』
2年2組 教科書『Visual Basic for ビギナーズ』翔泳社
末広ページ内 Visual Basic入門
後期期末課題
テクニック関係のQ&Aは,プログラミングテクニックを参照
2年2組,3年1組 スロットゲームの応用
2年1組 国家試験の問題を実行可能にすること
各自,テーマ(具体的に),実行可能なファイルの保存場所(
\\c1\ で始まる場所)をメールにて,saito-s@school.ac.jp
に送ること。
VBは,コンパイルしておくこと。メールには,自分が努力したところをかいておくように,そこを中心に評価します。
受付日 テスト期間中(2月4日より受付開始)
2年2組,3年1組 スロットゲーム自分なりに拡張する。
2年1組 国家試験(今週のテーマ問題)の問題を VB,Java,アクセス,エクセルを利用して作成する。
スロットゲーム
プリントを配布するので,それを参考に行う。
画像を扱うコントロールは,picutre と イメージがある。今回は,イメージを利用する。
プリントの指示で修正する。
Q 画像はどうするのですか。
A 100×100 ピクセルで,自分で描いてください。
Q 4段目の絵を見えなくするには
A Imageコントロールのプロパティで,visible を false にします。
Q 今週の課題は,簡単なので,すぐに終了してしまいます。
A 今週の課題は,期末までやります。自分なりに機能を追加してください。
Q 音を出すには,
A プログラミングテクニックで説明しました。
再帰プログラム
s(100) = 1 + 2 + 3 + 4 + … + 99 + 100
を求めるプログラムを考える。
s(1) = 1
s(2) = 1 + 2 = 3
s(3) = 1 + 2 + 3 = 6
s(4) = 1 + 2 + 3 + 4 = 10
なので,
s(100) = s(99) + 100 とかける。s(99)が分かれば答えは単純に求まる。
s(99)は,
s(99) = s(98) + 99 とかける。s(98)が分かれば答えは単純に求まる。
同様に,
s(98) = s(97) + 98
……
s(4) = s(3) + 4
s(3) = s(2) + 3
s(2) = s(1) + 2
s(1) = 1 であることが,分かるので,上の式を順に下から計算していけば,s(100)を計算することができる。このようなテクニックを,順番に降りていって,また,上がってくるということで,再帰的プログラムという。この説明の例の場合は,s(1) = 1 が例外で,ほかは,s(n) = s(n-1) + n という式であったことに注目すること。
例題26を動作させる。例題26では,n = 12であるが,テキスト枠を追加して,画面から入力可能にする。
練習62−1(dr62)を基本課題のように,テキスト枠を追加して,Nを画面から入力可能にする。
応用課題1とは,別のプログラムとすること。
応用課題1は,来週使用するため。クロスステッチ,樹木曲線,C曲線,ドラゴン曲線,ヒルベルト曲線,シェルピンスキー曲線を応用課題1に合体する。
ホームページ課題
いかにも年はじめというところを作って,最新情報から,そのページをリンクすること。
例:今年の目標,新年の挨拶,冬休みの思い出等
タートル(亀)グラフィックに挑戦 その2
練習56を動作させる。テキスト枠を2つ,コマンドボタンを1つ追加して,回転角度,減少値を画面より入力可能にする。画像の消去(クリア)の命令は,cls を使用する。

応用課題1 渦巻きをグラデーション(色を少しずつ変化)する。
応用課題2
本来のロゴのコマンドに合わせる。その1
turtle.bas の中を触る。movel,Turn にかわる命令,tgFoward(前進), tgRight, tgLeft, tgSetColor を作成する。tgを頭につけるのは,VBの本来の命令と重複を防ぐためである。
Turn を tgLeftにして,次に tgRightを作成する。次に movel の色指定を tgSetColorで別命令にして,movelの線を引く動作だけを tgForwadにする。
応用課題3
本来のロゴの命令に合わせる。その2
turtle.bas の中を触る。pendown, penup の命令を追加して,他の命令を pendown, penup 対応にする。
| pendown | 移動しながら絵を描くようにセット |
| penup | 絵を描かない状態にする。 |
| forward | 前進 |
| rigth | 右方向に回転。角度は,度。 |
| left | 左方向に回転。角度は,度。 |
| setcolor | 色を設定する。 |
タートル(亀)グラフィックに挑戦
例題56を動作させる。次に,一辺が,1200 の正三角形を横に 40 移動して,それを 100 個表示する。
例題をコピーしてくるときに turtle.bas もコピーすること。「読み取り」の属性をはずしておくこと。

応用1 正方形を斜めに移動しながら,100
個表示させる。
応用2 星型を画面に3つ表示させる。星を下向きにしないこと。

亀を画面の上を歩かせるように,絵を描いていく手法。
ヒープのシュミレーションのゆっくり動作に挑戦。
先週の応用課題に,y = msgbox("次") を挿入して,途中動作をとめながら確認できるようにする。
先週の応用課題のプログラム(授業で紙で配布)を手で入力する。入力ミス等のバグをとりまず,動作させること。次にy = msgbox("次") を適当は場所に入れて,一番動作が良く分かるところを探す。
なお,今回は,自分のプログラムをもとに,教材のプログラムリストを参考に手で入力して,エラーを出しながら勉強すること。コピーしてはいけない。
応用1 Option Explicit
を追加して,変数の宣言を明確にする。
応用2 msgbox
以外を使用して,途中動作をよく分かるようにする。
Visual Basic のソースの1行目にこれを入れることで,変数の宣言が必須になる。変数の宣言を必須にすることで,プログラムでの変数のつづりミスを防ぐ効果がある。グローバル変数,ローカル変数を意識してプログラムを作成するための助けになる。
explicit(イクスプリシット) とは,「明晰な」という形容詞である。
ヒープのシュミレーションに,ソートをするボタンを追加。
先週の応用課題に,ソートのボタンを追加する。ロジックは,教科書『はじめてのアルゴリズム入門』(p318)(rei48)を参考にする。
基本1 先週の応用課題 ← 最低限をこれはやること
基本2 「ソート」ボタンの追加
p318のソートのプログラムを利用するだけだと,一度ソートボタンを押したあとの動作が正しくない。ソートボタンを押した後の動作も正しくする。
出来上がりは,ouyou1126.exe で公開してある。
木を表示するところは,
*
For i = 1 To n -1
Picuture1.Print heap(i);
lblHeap(i).Caption = heap(i);
Next i
*
|
ヒープのシュミレーションを行う。ヒープを利用したソートをすることができる。
教科書『はじめてのアルゴリズム入門』(p312)(rei47)を動作させる。[「表示」のコマンドボタンを削除して,「追加」ボタンを押したら,同時に表示をするようにする。
Pucture枠の表示に加えて,その下に,ラベルの配列(lblHeepという名前にして)で,ツリーを表現する。配列の要素は,16ヶ用意して,[0] を表示せずにすると,簡単に実現できる。
出来上がりは,ouyou1119.exe で公開してある。
ポーランド後置記法(逆ポーランド記法)のシュミレーションを行う。なお,この記法は,ポーランドの数学者ルカシェーヴィッチが考えた。
教科書『はじめてのアルゴリズム入門』(p267)(dr38-2)を動作させる。さらに,テキスト枠を追加して,式の入力を可能にする。
計算結果も表示できるようにする。 (参考 教科書の例39)
VBS版を作成して,ホームページでも動作可能する(参考,電卓スケルトン,少し作成したもの)
RPN(@ I love Hewlett-Packard Calculator)
スタックとキューのシュミレーションを作成する。Listコントロールの使用法も学習すること。
教科書『はじめてのアルゴリズム入門』(p228,238)をまず,別々に動作させ,次に一つのフォームに合体させる。
教科書のCDの中のフォルダ5のrei32 とrei33
をそれぞれ動作させて,動きを調べる。
rei32 を改造する。rei32にコマンドボタンcommand3とcommand4とListBox(List2)を追加する。
ヒント1
プログラムの最初に,キュー関係の変数を定義する。
* Const MaxSize = 100 'スタック・サイズ Dim stack(MaxSize) 'スタック Dim sp 'スタック・ポインタ Dim queue(MaxSize) 'キュー Dim head, tail 'キューの先頭、終端へのポインタ * |
ヒント2
command3ボタン(キューイン)は,次のようなプログラムである。これを参考に,command4ボタンのプログラムを完成させること。
* Private Sub Command3_Click()
If queuein(Val(Text1.Text)) = -1 Then
Text1.Text = "キューが一杯です"
Else
List2.Clear
For i = head To tail
List2.AddItem queue(i)
Next i
Text1.Text = ""
End If
End Sub
* |
基本情報処理技術者試験の平成13年秋の問題を実際ためしてみる。
出来上がり(基本情報の問題に合わせて,関数名を変更した)
* * |
ホームページに今の時刻を表示する。
IE で動作する,VBScriptを利用する。VBScript とは,VisualBasicを簡略したものである。
各自の更新情報ページ(例:log.htm)の見本(ステータス行時刻表示)を参考にステータス行に時刻を表示する。
各自の更新情報ページのステータス行に時刻に追加して曜日(参考,曜日表示)も表示する。
時刻に従って,挨拶を出すのもよい。(参考:日付型のデータから時のみを取り出す,未作成)
各自のホームページ充実(テーマ決定,日記,最新情報)
VBと直接関係がありませんが,折角のインターネット環境でのプログラム授業です。余裕のあるときは,ぜひ,ホームページを作成したください。
日記のページは,友人が見に来ます。友人が自分のホームページを見てくれる作成する気力も沸きます。また,何回も訪問してくれる人が友達のようになっていきます。
最新情報(What New)は,再訪問のための方のサービスと同時に,自分の作業の励みにもなります。
FrontpPageExpressをできるだけ利用するとよい。通常の編集画面と,HTMLソース表示画面を行き来しながら,作成する。
「パラパラアニメ」を作成する。サンプルを元に,自分の絵をアニメショーンする。
コマンドボタンを2つ,表示用イメージコントロールを一つ,保存用イメージコントロールを5つ,タイマコントロールを一つ利用する。
保存用イメージコントロールは,まず,一つ用意して,名前を変更,拡張可能,非表示に設定する。それをコピー&貼り付けで,コントロール配列とする。
*パラパラアニメのソース Dim n As Integer
Private Sub Command1_Click()
Timer1.Interval = 200 '絵の変わる時間を設定 ミリ秒
Timer1.Enabled = True '時間測定開始
imgPic.Picture = imgHozon(0).Picture
End Sub
Private Sub Command2_Click()
Timer1.Enabled = False '時間測定中断
End Sub
Private Sub Timer1_Timer()
'一定間隔ごとの仕事
If n > 4 Then n = 0
imgPic.Picture = imgHozon(n).Picture
n = n + 1
End Sub
* |
「どきどきタイマー」にアニメを組み込む。
Q 絵を描いても,先生の絵と変わりません。どうしたらいいですか?(3-1 Y)
A 保存用イメージコントロールのプロパティでPicutureを再度設定してください。
Q アニメのスピードがintervalを設定してもかわらないのですが。(3-1 i )
A フォーム上のタイマアイコンのプロパティで設定してもだめです。プログラムの中で,実行中に設定しています。プログラム内での設定を消したら,タイマアイコンのプロパティ一覧で設定したものがそのまま有効になります。
「どきどきタイマー」を作成する。
コマンドボタンを2つ,ラベルを一つ利用。コマンドボタンの一つは,スタート,2つめは,「5秒たったら教えね」とする。
ラベルに,評価を表示する。
5秒を超えたら失格。5秒に近いほどよい。表現する言葉は,自分で考えること。セクハラぽい表現は厳禁。
timer関数,ElseIFを利用すると比較的簡単にできる。(使用法はヘルプで調べるとよい)
スタート時間を記憶しておく変数は,スタートボタンと,測定終了コマンド「押してねボタン」にまたがるため,コマンドボタンのプログラムの外で定義する必要がある。
ラベルを2つ追加して,スタート時間と,終了時間を表示すると,テストがしやすい。
ゲームらしいバックを絵を入れるよい。ゲームとしては,10秒測定の方がおもしろい。
VBScript版にするとホームページにも貼り付けることができる。
サイコロを作成する。
教科書『Visual Basicによるはじめてのアルゴリズム入門』のp52を参考にして,コマンドボタン「サイコロをふる」を押したら,1から6の数字を出すようにする。はずは,ラベルに数字のみを表示
1 サイコロの目を画像で表示する。
2 サイコロの数字をルーレットに拡張する。ルーレットは,0,00,1から36。チップをかけれるようにしたらなお,よし。
基本情報技術者午後平成13年春問5(日付から曜日を求める)を作成する。
フォーム上に,年(西暦),月,日を入力するテキスト枠を配置。コマンドボタンを押したら,ラベルに曜日とエラーコードを表示する。
\\c1\usr の各自の非公開用フォルダに入れて,そこのurlをメールで送ること。VBは3つのファイルでひと組である。3つとも同一フォルダにいれ,そのうち,プロジェクトファイルのURLを教えること。
メールで通知したURLから動作が確認できるかどうかは,友人にメールを送り,そこで動作すれば,OK。なお,正しい曜日がでなく,エラーコードのみ表示が可能であれば,最低限の評価(DあるいはC)はでる。
送信URLの例
2年2組の学生 \\C1\usr-s32\s32nagaya\vb\0925\Project1.vbp
締め切り:9月26日(水)
メールの提出先:saito-s@school.ac.jp
1 コマンドボタンを押したら,表示の代わりに?を表示する。
2 E1エラーを判断できるようにする。次に,E2エラーを判断できるようにする(評価D)。次にE3エラーを表示(評価C)する。
3 正しく曜日を表示するようにする。(評価AあるいはB)
コマンドボタンを押したらする仕事は
テキスト枠から入力された数字
判断して値を設定
割り切れるかどうかの判定
日付から曜日を求める
閏(うるう)年の判定は,4で割り切れたら閏年,ただし,100で割り切れると閏年でなくなる。さらに,400で割り切れると閏年となる。
曜日の出し方は,日付のデータをVBの書式付き表示すると可能。また,曜日関数を利用することでも可能。さらに,ツェラーの公式を利用しても可能。
VBで作成したものを,IE上のVBSにする。さらに,JavaScriptにする。
夏の予定のページを思い出のページに更新し,ホームページで公開する。卒業年度生は,「学生時代最後の夏休み」という題にする。2年1組は,「専門学校2年の夏休み」
6月25日の週の課題に追加
クィックソート追加(p220) ,コマンドボタン名をcmdQuick とする。
p220のプログラムはバグがある。10行目あたりの i = I + 1 の下に,
if i >= j Then Exit Do
を挿入すること。
夏の計画をホームページで公開する。卒業年度生は,「学生時代最後の夏休み」という題にする。2年1組は,「専門学校2年の夏休み」
2001s.htm
今までの夏の思い出を学年とともに一覧にするとよい。
| 小学1年 | 覚えていない |
| 小学6年 | 子供会のリーダを中心のキャンプ。 |
| 中学3年 | 京都のお寺で参禅。 |
| 高校1年 | 中村くんと植物採集の宿題をがんばる。彼に面倒なことをやらせた。楽しい宿題であった。 臨海学校で篠島にいく。岩についている牡蠣を生でたべて腹をこわした。ウニの受精を顕微鏡でみる。光るプランクトンを夜,見て感動。 |
| 高校3年 | 受験勉強。英語ばかりやっていたような気がする。勉強のコツがわかりはじめおもしろくなった。毎日大垣の図書館がよい。 |
| 最後の夏休み | 女房にアタック中。金華山ロープウェイでバイト |
今週の課題
自分のホームページの公開(基本)。夏休みに昔の友達にあったときに,自慢できるようにする。
index.htmの作成
c-dairy.htmの公開
最新情報ページ作成
ロゴマークの作成
時間があれば,先週までの課題を完全に動作させること。
学校のホームページ公開用のやり方にあわせて,自分用のフォルダを作成し,そこに,index.htm を入れる。
作成したプログラムリストの保管が目的。何年たってもあとで見ることができるようにする。自分が作成したプログラムは,必ず残すようにしよう。(卒業の時は,FDに入れて持ってかえるように)
繰り返して自分のホームページを訪問してくれる人へのサービスと,更新の記録をかねる。できるだけ,最新情報ページから,変更先へリンクで飛べるようしよう。
新しい情報ほど,ページの上にくるのが,インターネット時代の常識。
自分用のフォルダを作成して,index.htm を入れる。
自分用のロゴマークを作成しよう。ペイントブラシで,作成して,gif で保存できれば,する。できないときは,bmpでデスクトップに保存し,それをフロントページエクスプレスのメニュー,挿入,画像,ファイルからで,読み込む。保存すると,自動的にgifに変更できる。gifをペイントブラシで読み込むと,次より,ペイントブラシでもgifの形式も利用可能になる。
参考:末広ページのロゴのサイズは,120*60
単位はピクセル。
各ページにロゴマークを貼り付けて,クリックしたら,自分のトップページを表示するようにしよう。
6月18日の週の課題に追加
swap サブルーチン
コマンドボタン名称の変更
シェルソート(p135)の追加
「次?」をview内に移動
(1) hikaku 関数作成して,その中で,比較回数をカウントする。その数字をview内で表示する。
(2) view をバージョンアップして,見やすくする。たとえば,ラベルの配列を10用意して,そこに数字を表示。変えたところを色を変える。
大小関係が前後しているときに入れ替えをしている。入れ替えのサブルーチンがあれば、プログラムが見やすくなる。
sub swap(x As Integer, y As Integer) 入れ替えロジック End Sub 使用例 a, b を入れ替える swap a, b |
cmdTikuji
cmdBubble
cmdShake
cmdSounyu
cmdShell
次をするかどうかで訪ねているが,これは,表示を止めるためいれているだけである。よって,表示ルーチンにおくのが自然と判断した。
6月4日の週の課題に追加
Option Explict 導入
シェーカ・ソート,基本挿入法
比較回数をラベルで表示 並び替え対象をランダムで作成
hikaku関数導入
Option Explict をプログラムの一行目に入れます。そうすると,宣言していない変数は使用できなくなります。これによって,変数の文字の間違いをチェックします。
VB では,変数の宣言は
Dim i As Integer
と書くと i を整数として定義(宣言)したことになります。
Private Sub の内と外の違いを考えよう。
*
' -------------------------
' * ソート *
' プログラムを拡張していく
' MVC Model 対象、View 表示、Control 制御
' -------------------------
'シェーカ・ソート '6月18日から
'基本挿入法 '6月18日から
'シェル・ソート '6月18日から
Option Explicit '6月18日から
' モデル(整列の対象)
Const N = 10
Dim a(N - 1) As Integer
Dim hikakukaisu As Integer ← Private Sub の外,ここに入れる?
Private Sub init()
Dim i As Integer ← Private Sub の内,ここに入れる?
Randomize
For i = 0 To N - 1
a(i) = Int(99 * Rnd + 1)
Next i
hikakukaisu = 0
End Sub
|
if 文で比較してている。比較回数を取るには、この比較の作業の際に数えると都合がいいので、関数として独立させる。
hikaku 回数の表示は、表示なので、view の一部とする。
*
Randomize
For i = 0 To N - 1
a(i) = Int(99 * Rnd + 1)
Next i
|
Randomize は、麻雀のパイをかき回す。
Rnd は、手前から一つとるような感じです。Randomizeをせずに、Rnd
すると、同じパターンになります。
メニュープログラム作成
プリント参照
直接選択法,バブルソートのプログラムを合体(先週)したプログラムを,MVCの視点でバージョンアップする。
MVC の視点でプログラムを修正する。
MVC の説明
対話型プログラムの代表的なモジュール分割の仕方。表示する対象をMODEL,表し方をView,それらを制御するContorolに分割する。
今回のプログラムの場合
モデル部
表示部
' モデル(整列の対象)
Const N = 10
Dim a(N - 1)
Private Sub init()
a(0) = 80
a(1) = 41
a(2) = 35
a(3) = 90
a(4) = 40
a(5) = 20
a(6) = 22
a(7) = 25
a(8) = 78
a(9) = 52
End Sub
'表示
Private Sub view()
Picture1.Cls
For k = 0 To N - 1
Picture1.Print a(k);
Next k
End Sub
参考プログラム
Sub swap(x As Integer, y As Integer)
Dim temp As Integer
temp = x
x = y
y = temp
End Sub
|
Sub swap(x As Integer, y As Integer)
Dim temp As Integer
temp = x
x = y
y = temp
End Sub
|