Visual Basic 入門

末広ページへ このコーナーの目次へ

 日本総合ビジネス専門学校  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日より受付開始)


1月28日ではじまる週,期末開始まで

今週の課題

 2年2組,3年1組 スロットゲーム自分なりに拡張する。

 2年1組 国家試験(今週のテーマ問題)の問題を VB,Java,アクセス,エクセルを利用して作成する。


1月21日ではじまる週

今週の課題 タイマーアイコンの使用法

 スロットゲーム

基本課題

 プリントを配布するので,それを参考に行う。

  画像を扱うコントロールは,picutre と イメージがある。今回は,イメージを利用する。

 動作例

応用課題

 プリントの指示で修正する。

質問やりとり

Q 画像はどうするのですか。

    A 100×100 ピクセルで,自分で描いてください。

Q 4段目の絵を見えなくするには

    A Imageコントロールのプロパティで,visible を false にします。

Q 今週の課題は,簡単なので,すぐに終了してしまいます。

    A 今週の課題は,期末までやります。自分なりに機能を追加してください。

Q 音を出すには,

A プログラミングテクニックで説明しました。

 


1月15日ではじまる週

今週の課題

 再帰プログラム

 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であるが,テキスト枠を追加して,画面から入力可能にする。

応用課題1

 練習62−1(dr62)を基本課題のように,テキスト枠を追加して,Nを画面から入力可能にする。

応用課題2

 応用課題1とは,別のプログラムとすること。
 応用課題1は,来週使用するため。クロスステッチ,樹木曲線,C曲線,ドラゴン曲線,ヒルベルト曲線,シェルピンスキー曲線を応用課題1に合体する。


1月11日の課題

 ホームページ課題

 いかにも年はじめというところを作って,最新情報から,そのページをリンクすること。
 例:今年の目標,新年の挨拶,冬休みの思い出等

 3年1組最新情報
 2年1組最新情報
 2年2組最新情報


12月17日ではじまる週

今週の課題

 タートル(亀)グラフィックに挑戦 その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 対応にする。

 

 参考:ロゴ坊(フリーウェアのLogo)マニュアル

pendown 移動しながら絵を描くようにセット
penup 絵を描かない状態にする。
forward 前進
rigth 右方向に回転。角度は,度。
left 左方向に回転。角度は,度。
setcolor 色を設定する。

 


12月10日ではじまる週

今週の課題

 タートル(亀)グラフィックに挑戦

基本課題

 例題56を動作させる。次に,一辺が,1200 の正三角形を横に 40 移動して,それを 100 個表示する。

 例題をコピーしてくるときに turtle.bas もコピーすること。「読み取り」の属性をはずしておくこと。

 

応用課題

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

タートルグラフィックとは

 亀を画面の上を歩かせるように,絵を描いていく手法。


12月3日ではじまる週

今週の課題

 ヒープのシュミレーションのゆっくり動作に挑戦。

基本課題

 先週の応用課題に,y = msgbox("次") を挿入して,途中動作をとめながら確認できるようにする。

 先週の応用課題のプログラム(授業で紙で配布)を手で入力する。入力ミス等のバグをとりまず,動作させること。次にy = msgbox("次") を適当は場所に入れて,一番動作が良く分かるところを探す。

 なお,今回は,自分のプログラムをもとに,教材のプログラムリストを参考に手で入力して,エラーを出しながら勉強すること。コピーしてはいけない。

応用課題

 応用1 Option Explicit を追加して,変数の宣言を明確にする。
 応用2 msgbox 以外を使用して,途中動作をよく分かるようにする。

Option Explicit とは

 Visual Basic のソースの1行目にこれを入れることで,変数の宣言が必須になる。変数の宣言を必須にすることで,プログラムでの変数のつづりミスを防ぐ効果がある。グローバル変数,ローカル変数を意識してプログラムを作成するための助けになる。

 explicit(イクスプリシット) とは,「明晰な」という形容詞である。


11月26日ではじまる週

今週の課題

 ヒープのシュミレーションに,ソートをするボタンを追加。

基本課題

 先週の応用課題に,ソートのボタンを追加する。ロジックは,教科書『はじめてのアルゴリズム入門』(p318)(rei48)を参考にする。

 基本1 先週の応用課題 ← 最低限をこれはやること
 基本2 「ソート」ボタンの追加

応用課題

 p318のソートのプログラムを利用するだけだと,一度ソートボタンを押したあとの動作が正しくない。ソートボタンを押した後の動作も正しくする。

出来上がりは,ouyou1126.exe で公開してある。

ヒント

 木を表示するところは,

*
For i = 1 To n -1
    Picuture1.Print heap(i);
    lblHeap(i).Caption = heap(i);
Next i
*

勉強になるページ


11月19日ではじまる週

今週の課題

 ヒープのシュミレーションを行う。ヒープを利用したソートをすることができる。

基本課題

 教科書『はじめてのアルゴリズム入門』(p312)(rei47)を動作させる。[「表示」のコマンドボタンを削除して,「追加」ボタンを押したら,同時に表示をするようにする。

応用課題

 Pucture枠の表示に加えて,その下に,ラベルの配列(lblHeepという名前にして)で,ツリーを表現する。配列の要素は,16ヶ用意して,[0] を表示せずにすると,簡単に実現できる。

 出来上がりは,ouyou1119.exe で公開してある。

勉強になるページ

 

 


11月12日ではじまる週

今週の課題

 ポーランド後置記法(逆ポーランド記法)のシュミレーションを行う。なお,この記法は,ポーランドの数学者ルカシェーヴィッチが考えた。

基本課題

 教科書『はじめてのアルゴリズム入門』(p267)(dr38-2)を動作させる。さらに,テキスト枠を追加して,式の入力を可能にする。

応用課題

 計算結果も表示できるようにする。 (参考 教科書の例39)

 VBS版を作成して,ホームページでも動作可能する(参考,電卓スケルトン少し作成したもの

勉強になるページ

逆ポーランド記法による式の計算の可視化(@ 北原 鉄朗氏)

RPN(@ I love Hewlett-Packard Calculator)


 

11月5日ではじまる週

今週の課題

 スタックとキューのシュミレーションを作成する。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年秋の問題を実際ためしてみる。

出来上がり(基本情報の問題に合わせて,関数名を変更した)

*
 
*

 

 


10月29日ではじまる週

今週の課題

 ホームページに今の時刻を表示する。

 IE で動作する,VBScriptを利用する。VBScript とは,VisualBasicを簡略したものである。

基本課題

 各自の更新情報ページ(例:log.htm)の見本(ステータス行時刻表示)を参考にステータス行に時刻を表示する。

応用課題

 各自の更新情報ページのステータス行に時刻に追加して曜日(参考,曜日表示)も表示する。

 時刻に従って,挨拶を出すのもよい。(参考:日付型のデータから時のみを取り出す,未作成)


10月22日ではじまる週

今週の課題

 各自のホームページ充実(テーマ決定,日記,最新情報)

 VBと直接関係がありませんが,折角のインターネット環境でのプログラム授業です。余裕のあるときは,ぜひ,ホームページを作成したください。

 日記のページは,友人が見に来ます。友人が自分のホームページを見てくれる作成する気力も沸きます。また,何回も訪問してくれる人が友達のようになっていきます。

 最新情報(What New)は,再訪問のための方のサービスと同時に,自分の作業の励みにもなります。

作成ツール

 FrontpPageExpressをできるだけ利用するとよい。通常の編集画面と,HTMLソース表示画面を行き来しながら,作成する。

リンク

 目次ページ(2年1組2年2組3年1組


10月15日ではじまる週

今週の課題

 「パラパラアニメ」を作成する。サンプルを元に,自分の絵をアニメショーンする。

 コマンドボタンを2つ,表示用イメージコントロールを一つ,保存用イメージコントロールを5つ,タイマコントロールを一つ利用する。

 保存用イメージコントロールは,まず,一つ用意して,名前を変更,拡張可能,非表示に設定する。それをコピー&貼り付けで,コントロール配列とする。

パラパラアニメのダウンロード(lzhファイル)

*パラパラアニメのソース
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 フォーム上のタイマアイコンのプロパティで設定してもだめです。プログラムの中で,実行中に設定しています。プログラム内での設定を消したら,タイマアイコンのプロパティ一覧で設定したものがそのまま有効になります。


10月8日ではじまる週

今週の課題

 「どきどきタイマー」を作成する。

 コマンドボタンを2つ,ラベルを一つ利用。コマンドボタンの一つは,スタート,2つめは,「5秒たったら教えね」とする。
 ラベルに,評価を表示する。

 5秒を超えたら失格。5秒に近いほどよい。表現する言葉は,自分で考えること。セクハラぽい表現は厳禁。

ヒント

 timer関数,ElseIFを利用すると比較的簡単にできる。(使用法はヘルプで調べるとよい)

 スタート時間を記憶しておく変数は,スタートボタンと,測定終了コマンド「押してねボタン」にまたがるため,コマンドボタンのプログラムの外で定義する必要がある。

 ラベルを2つ追加して,スタート時間と,終了時間を表示すると,テストがしやすい。

発展課題

 ゲームらしいバックを絵を入れるよい。ゲームとしては,10秒測定の方がおもしろい。

 VBScript版にするとホームページにも貼り付けることができる。


 

10月1日の週

今週の課題

 サイコロを作成する。

 教科書『Visual Basicによるはじめてのアルゴリズム入門』のp52を参考にして,コマンドボタン「サイコロをふる」を押したら,1から6の数字を出すようにする。はずは,ラベルに数字のみを表示

発展課題

 1 サイコロの目を画像で表示する。
 2 サイコロの数字をルーレットに拡張する。ルーレットは,0,00,1から36。チップをかけれるようにしたらなお,よし。


9月3日の週

今週の課題

 基本情報技術者午後平成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年の夏休み」


 

7月16日の週

今週の課題

 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年 受験勉強。英語ばかりやっていたような気がする。勉強のコツがわかりはじめおもしろくなった。毎日大垣の図書館がよい。
   
   
最後の夏休み 女房にアタック中。金華山ロープウェイでバイト

7月2日の週

今週の課題

 自分のホームページの公開(基本)。夏休みに昔の友達にあったときに,自慢できるようにする。

 index.htmの作成
 c-dairy.htmの公開
 最新情報ページ作成
 ロゴマークの作成

 時間があれば,先週までの課題を完全に動作させること。

index.htm作成

 学校のホームページ公開用のやり方にあわせて,自分用のフォルダを作成し,そこに,index.htm を入れる。

c-dairy.htmの公開

 作成したプログラムリストの保管が目的。何年たってもあとで見ることができるようにする。自分が作成したプログラムは,必ず残すようにしよう。(卒業の時は,FDに入れて持ってかえるように)

最新情報ページの作成

 繰り返して自分のホームページを訪問してくれる人へのサービスと,更新の記録をかねる。できるだけ,最新情報ページから,変更先へリンクで飛べるようしよう。
 新しい情報ほど,ページの上にくるのが,インターネット時代の常識。

 自分用のフォルダを作成して,index.htm を入れる。

ロゴマークの作成

 自分用のロゴマークを作成しよう。ペイントブラシで,作成して,gif で保存できれば,する。できないときは,bmpでデスクトップに保存し,それをフロントページエクスプレスのメニュー,挿入,画像,ファイルからで,読み込む。保存すると,自動的にgifに変更できる。gifをペイントブラシで読み込むと,次より,ペイントブラシでもgifの形式も利用可能になる。

 参考:末広ページのロゴのサイズは,120*60 単位はピクセル。

 各ページにロゴマークを貼り付けて,クリックしたら,自分のトップページを表示するようにしよう。


6月25日の週

今週の課題

 6月18日の週の課題に追加

 swap サブルーチン
 コマンドボタン名称の変更
 シェルソート(p135)の追加
 「次?」をview内に移動

応用課題

 (1) hikaku 関数作成して,その中で,比較回数をカウントする。その数字をview内で表示する。

 (2)  view をバージョンアップして,見やすくする。たとえば,ラベルの配列を10用意して,そこに数字を表示。変えたところを色を変える。

swapサブルーチンの導入

 大小関係が前後しているときに入れ替えをしている。入れ替えのサブルーチンがあれば、プログラムが見やすくなる。 

sub swap(x As Integer, y As Integer)
 入れ替えロジック
End Sub
使用例
 a, b を入れ替える
 swap a, b

コマンドボタン名称の変更

 cmdTikuji
  cmdBubble
  cmdShake
  cmdSounyu
  cmdShell

「次?」をview内に移動

 次をするかどうかで訪ねているが,これは,表示を止めるためいれているだけである。よって,表示ルーチンにおくのが自然と判断した。


6月18日の週

 6月4日の週の課題に追加

 Option Explict 導入

 シェーカ・ソート,基本挿入法

 比較回数をラベルで表示 並び替え対象をランダムで作成

応用課題

 hikaku関数導入 

Option Explicitの導入解説

 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

      

hikaku 関数の導入

 if 文で比較してている。比較回数を取るには、この比較の作業の際に数えると都合がいいので、関数として独立させる。

hikaku 回数の表示

 hikaku 回数の表示は、表示なので、view の一部とする。

ランダムな数を作成

*
    Randomize
    For i = 0 To N - 1
        a(i) = Int(99 * Rnd + 1)
    Next i

 Randomize は、麻雀のパイをかき回す。
 Rnd は、手前から一つとるような感じです。Randomizeをせずに、Rnd すると、同じパターンになります。


6月11日の週

 メニュープログラム作成

 プリント参照

6月4日の週

 直接選択法,バブルソートのプログラムを合体(先週)したプログラムを,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

 

 


spage@yscon.co.jp

末広ページへ このコーナーの目次へ