Transcript 第5回

授業計画
5.変数・関数の定義と使用
変数の型や概念、および関数の定義・使用方法についての理解
5.1 授業内容
プログラムの基本構造
変数の概念、定義
簡単なプログラムの作成
※授業用資料、レポート課題等は
http://ace.cen.kagoshima-u.ac.jp/bunseki/proex/proex.htm
にアップロードしてあります。
☆質問、レポート提出先:[email protected]
5.2
プログラムの基本構造
プログラムの流れ
コメント
5.3
変数・定数
変数・定数の型と定義
プログラム内における計算
5.4
VBA によるセルの操作
セルへのデータの入力、セルからの取得(cells 命令)
5.5
IF 文による条件判断
IF 文による変数の判定
※授業用資料、レポート課題等は
http://ace.cen.kagoshima-u.ac.jp/bunseki/proex/proex.htm
にアップロードしてあります。
☆質問、レポート提出先:[email protected]
5.変数・関数の定義と使用
【プログラムの基本構造】
Sub 足し算()
【プロシージャ名】プログラムの名前。全角日本語もOK。
'A1に入っている数値の回数だけbに1を足して、最後に2倍にする。
'最終的な計算結果はA1に入っている数値の2倍になる。
'その結果をA2に出力する。
'
Dim a As Integer
'変数の型の宣言
Dim b As Integer
'整数だけを扱うのでInteger型が適切
Dim i As Integer
b = 0
a = Cells(1, 1).Value
'変数bへの値の入力(bの初期化)
'セルA1からの値の取得
If a = 0 Then Exit Sub 'セルA1が空白や0だったら終了
For i = 1 To a
b = b + 1
Next
'iの内容が1~aまでbに1を足す。
'(bに1をa回足す)
b = b * 2
'bの内容を2倍にする。
Cells(2, 1).Value = b
'セルA2に計算結果を出力。
End Sub
【コメント】
プログラムを読みやすく
するために、簡単に内容や
意味を説明するもの。
'(シングルクォーテーション)の右側が
コメントとして扱われる
※プログラムの間違いを
バグと呼び、バグを直す
ことをデバッグと呼ぶ。
バグを出さないためには、
変数の定義、コメントに
よる内容の明示、字下げ
による命令ブロックの明示
などが有効である。
【プロシージャ】
Sub~End Subに囲まれた部分。
プログラムはこの範囲で『上から下に』実行される。
※従って、記述する順序を間違えると正常に動作しない場合が多い。
※上のサンプルプログラムはこれから習得する要素のほとんどが入っている。
【変数・定数】
【変数の型】
※数学と同様、コンピュータでも文字を使って数値や文字列を表すことができる。
これを『変数』と呼ぶ。
数学との大きな違いは、「文字列」を扱えることと、変数を使う前に『宣言』が
必要なことである。
変数の型には、以下のようなものがある。
データ型
データ型名
扱える内容
備考
バイト
Byte
0~255 (2の8乗)
正の整数のみ
整数
Integer
-32768~32767
(2の16乗)
整数のみ
長整数
Long
単精度
浮動小数点
Single
±3.4×1038~±1.4×10-45
倍精度
浮動小数点
Double
±3.4×10308~±1.4×10-324
文字列
String
文字列のみ
数字も文字列として扱う
万能
Variant
上記全て
『宣言』省略時はこの型
-2147483648~2147483647
(2の32乗)
整数のみ
余談
ドラクエのパラメーターの上限、マリオの残機など、255が多いワケ
ドラクエの経験値の上限など、65535が出てくるワケ
1.コンピュータは2進数で動きます。 例:2進数 10101101 = 10進数173
2.16進数1桁(0~9, A, B, ~F)が2進数4桁に対応する。 例 2進数10101101 = 16進数AD
3.上記の理由から、コンピュータ言語では、2進数を少ない桁数で表せる16進数が使われる
8ビットコンピュータ (8ビットOS) → 2進数8桁 = 16進数2桁を一度に扱える
16ビットコンピュータ(16ビットOS) → 2進数16桁 = 16進数4桁を一度に扱える
4.コンピュータ言語の扱える数値の範囲もこれに準ずる
例:2進数8桁 1111 1111 = 10進数255 → Byte型
2進数16桁 1111 1111 1111 1111 = 10進数 65535 → Integer型
ただし、VBAのInteger型の場合は、0~65535ではなく、
半分の32768を引いて-32768~32767
5.プログラマは考えました。
→パラメータはByte型で十分なんじゃない? → 猛者が255をたたき出す!
→経験値は大きな数値になるからInteger型が適切? → 猛者が65535をたたき出す!
ただし、ゲームによってはInteger型を使いつつ上限を限定して見やすい数字にしている
→攻撃力 1000 (上限65535のInteger型を使って、プログラムで1000に制限)
【変数を用いた計算】
【変数への値の代入】
①直接代入する
a = 15
※プログラムにおいて「=」は、
「右のものを左に代入せよ」の意
②InputBox命令を用いる
a = InputBox("aに値を入れる", "入力")
③セルから入力
次項にて説明
【変数を用いた計算】
a = 3 + 5
:aに3+5の計算結果(8)を代入
a = b + c
:aにb+cの計算結果を代入
a = a + b
:a+bを計算し、その結果をaに代入し直せ
【例題】Sub 足し算1()
Dim a As Integer
Dim b As Integer
Dim c As Integer
a = 10
b = 20
c = a + b
MsgBox c
End Sub
a、b、cは整数型。
従ってこのプログラムでは小数は
使えないことに注意!
aに10、bに20を代入
cにa+bの値(30)を代入
【演習】InputBox命令を使って数値を二つ入力させ、
それらの積を表示するプログラムを作成せよ。
余談
・世界最初のプログラマとも云われる
オーガスタ・エイダ・バイロン(エイダ・ラブレス)
・マイクロソフト社のホログラムステッカーに
彼女の肖像が使われている
・プログラム言語「Ada(エイダ)」の語源
・コンピュータの父と呼ばれるジョン・フォン・
ノイマン (ストアードプログラム方式の開発者)
・現代のコンピュータは「ノイマン型コンピュータ」
と呼ばれる。
Fパネルの70番リレー
リレー中に「蛾」がいた
実際にバグが見つかった最初のケース
「世界で最初のコンピュータ」
グレース・ホッパー女史によるバグ報告書
と呼ばれるENIACの写真
(コンピュータ ハーバード・マークIIから採取)
※リレー(リレー回路)
・初期のコンピュータは数万個の真空管と
機械的にスイッチでOn-Offを切り替える回路
リレー回路で構成されていた。
参考文献(Wikipediaはアドレス省略)
・ENIACは内部では10進法で計算が行われていた。
Wikipedia:エイダ・ラブレス、ジョン・フォン・ノイマン、Harvard Mark I、バグ
ENIAC http://www.wizforest.com/OldGood/eniac/