情報アイランド

「情報を制する者は世界を制す」をモットーに様々な情報を提供することを目指すブログです。現在はプログラミング関連情報が多めですが、投資関連情報も取り扱っていきたいです。

学生でも社会人でも分かる!!初めてのプログラミング入門 第7回 計算と変数

2017/02/17

第6回

↑ ↑ ↑

計算と変数

今回はHiMacroExのプログラムにおいて計算を行ったり、計算結果を記憶したりする方法について解説したいと思います。

前々回の記事では複利計算プログラムを作成しましたが、前々回作成した複利計算プログラムでは複利の計算を行うのに「電卓」というソフトを利用していました。

つまり、HiMacroExとは何の関係もない独立した別個のソフトを利用して計算を行っていました。

しかし、実は、HiMacroExでは「電卓」のようなものを使わずとも、プログラムの中で直接計算ができるようになっています

プログラムの中で直接計算を行うのにも今までと同様に専用の命令をプログラムの適切な場所に記述することになります。

ただし、計算を命令として記述するには具体的な計算内容を命令として表現しなければなりませんので、命令の書き方も今までよりは少し複雑なものとなってきます。

たとえば、プログラムの中で1 + 1という計算を行うには下のようにします。

プログラムの一部

    ・・・    

#A = 1 + 1
1 + 1を計算し、変数Aに結果を格納する。

    ・・・    

つまり、#A = 1 + 1という命令が1 + 1という計算を行う命令です。

このことはプログラミングが初めての方でも#A = 1 + 1という命令の字面から何となく分かるのではないでしょうか。しかし、実は、この命令は1 + 1という計算以外のことも行っています。

この命令の意味を詳しく見ていきましょう。

まず、この命令は=より前の部分と後の部分に分かれます。

分かりやすいのは=より後の部分かと思います。#A = 1 + 1という命令の=より後の部分である1 + 1を見れば明らかかと思いますが、=より後の部分は具体的な計算内容を表しています。

この場合の計算内容は正に1 + 1であり、「11を足す」という計算です。

それでは、=より前の部分は何を表しているのでしょうか?

実は、この部分は変数というものを表しています。

とは言え、変数と言われても何のことだかさっぱりだと思いますので詳しく説明していきましょう。

変数という言葉自体はもしかしたら数学で聞いたことがある方もおられるかもしれません。

しかし、それは数学における変数であって、プログラミングにおける変数とは異なるものです。いや、確かに数学における変数とプログラミングにおける変数は似通っているところもあります。しかし、基本的には別物だと思っておいた方が無難かと思います。

さて、プログラミングにおける変数とは、分かりやすく言えば、計算結果を入れておく箱のようなものです。

当たり前ですが、何らかの計算を行うと、ほぼ必ず計算の結果というものが得られることになります。たとえば、1 + 1の計算結果は2ですし、2 * 2の計算結果は4です。

なので、計算を行う際には得られた計算結果をどうするかということをも考えなければなりません。

計算を行った後得られた計算結果をすぐに捨ててしまうのでは何の意味もありません。得られた計算結果を使って何かしたいからこそ計算というものを行うのです。

そして、HiMacroExでは得られた計算結果に対して行えることとして、取り敢えず得られた結果をパソコンのどこかに記憶しておくという選択肢が提供されています(実を言うと、HiMacroExの場合、計算結果に対して行えることはこれ以外には何もありません。つまり、計算結果は必ず1度どこかに記憶させる必要があります)。

そして、計算結果を入れておくための箱のような役割を果たすものが変数だという訳です。

ですから、変数というのはパソコンの記憶領域のどこかに存在していて、計算結果を保持する働きをします

しかし、私たちは変数が実際にパソコンの記憶領域のどこに存在するかを気にする必要はありません。私たちは変数に計算結果を格納したり、逆に、変数から計算結果を取り出したりできればそれで十分だからです。

そして、変数には1つ1つ名前が付いており、私たちはこの変数の名前を使って変数に計算結果を格納したり、変数から計算結果を取り出したりすることができます

たとえば、#A = 1 + 1という命令の場合、=より前の部分が変数を表している訳ですが、#A#の部分は変数であることを表す頭文字です。つまり、変数の名前を記述する場合には必ず頭に#を付けなければなりません。これにより、HiMacroExは記述されているのが変数の名前であることを認識することができます。

そして、Aの部分が正に変数の名前を表しています。つまり、この場合の変数の名前はAです。

先程申し上げましたように、私たちは変数が実際にパソコンの記憶領域のどこに存在するかを意識する必要はありません。変数に対する操作(変数に計算結果を格納するとか、取り出すとか)は変数の名前を使って記述します。

そして、#A = 1 + 1という命令は、分かりやすく言えば、Aという名前の変数に1 + 1という計算の結果を格納しろという意味です。つまり、こういう形式の命令は計算を行い、更にその計算結果を変数に格納しろという意味の命令なのです。

まず何らかの変数名を記述し、次に=を記述し、最後に計算内容を記述すればこのような命令を記述することができます。

まず、変数名についてですが、変数名はプログラムを作成する人が自由に考えて付けて構いません。

しかし、今までこの連載で見てきたように、プログラムというのは自分にも他人にも分かりやすいということが非常に重要ですので、なるべく分かりやすい名前を付けるように努めるべきです。基本的には変数に格納される計算結果が何であるかが明確に分かるような名前を付けるようにします。難しいですが、長過ぎず短過ぎない名前を付けるのが理想です。

もし分かりにくい名前を付けてしまうと、後でプログラムを見返した時に変数に何を格納しているのかがよく分からず、プログラム全体についても理解しにくくなり、何をどうやってプログラムしたかも思い出すことができず、ほとほと困り果ててしまうことになるかもしれません。

それから、変数名に使える文字は英数字と_などに限られています。変数名自体はプログラムを作成する人が決めることになるのですが、変数名に使える文字には制限があるということです。完全に自由な訳ではありません。実を言うと、ひらがなや漢字やギリシャ文字のようなものも一応使えるのですが、基本的には使用するべきではありません。

なお、当然と言えば当然ですが、変数名が同じ変数は全く同じ変数を表すことに注意してください。

たとえば、プログラム中で#A = 1 + 1という命令が記述されている行の次の行に#A = 1 + 2という命令が記述されている場合、最初の行で1 + 1という計算が行われ、その結果である2Aという名前の変数に格納されます。しかし、次の行では1 + 2という計算が行われ、その結果である3Aという名前の同じ変数に格納されます。なので、結局この2つの行の命令の実行が終わった時点では変数Aには3という計算結果が格納されていることになります。

なので、基本的には1つの変数の名前は1つの用途でしか使わないようにすべきです。全く関係のない複数の計算結果を同じ変数に格納するとプログラムが分かりにくくなってしまいます。

次に、=についてですが、この=は、=の右側の計算の結果を左側の変数に格納するという意味だと解釈すると分かりやすいかと思います。

ただ、注意していただきたいのは、この=は数学における=とは意味が異なるということです。

数学における=は等しいという意味でしたが、プログラミングにおける=は等しいという意味ではありません。プログラミングにおける=を数学用語に強引に当て嵌めるとすれば、強いて言えば、代入に近いです。

数学における代入というのは数学における変数を具体的な数値に置き換えて計算を進めることでしたが、これは変数の中に具体的な数値を入れることであると考えられなくもないです。

そのため、プログラミングにおいて変数の中に具体的な計算結果を格納することと似ていなくもないです。

何にせよ、重要なのはプログラミングにおける=と数学における=は意味が異なるということです。

たとえば、#A = 1 + 1というのは#A1 + 1が等しいということを表している訳では決してありません。

数学においては=の右側にも左側にも何らかの式を記述することができますが、プログラミングにおいては=の右側には必ず計算内容を記述し、=の左側には必ず変数を記述しなければなりません。

そして、最後に、計算内容についてですが、これは一転して数学における数式とよく似ています。足し算を行うには+を普通の数式と同じように使いますし、引き算を行うのにも-を普通の数式と同じように使います。()も普通の数式の場合と同じように使用することができます。

しかし、掛け算を行うには×の代わりに*という記号を使います。また、割り算を行うには÷の代わりに/という記号を使います。

これについては前々回の記事でも言及しましたが、パソコン関係では割り算や掛け算を表すのに「÷」や「×」という記号より「/」や「*」という記号が使われることの方が多いのです。

プログラミングにおいても基本的には×÷の代わりに*/を使用します。

後は、足し算や引き算より掛け算や割り算の方が優先される(先に計算される)というのも数学の場合と全く同じです。

命令

#変数名 = 計算内容
計算内容を計算し、変数変数名に結果を格納する。

四則演算

さて、ここからはHiMacroExで行うことのできる主な計算について見ていきたいと思います。また、説明がてら、そのような計算を用いた簡単なプログラムも幾つか作ってみたいと思います。

まず、四則演算ですが、四則演算は前のセクションでも書いたように、足し算を行うには+を使い、引き算を行うには-を使い、掛け算を行うには*を使い、割り算を行うには/を使います。

計算

計算内容1 + 計算内容2
計算内容1の計算結果と計算内容2の計算結果を足し合わせる。

計算内容1 - 計算内容2
計算内容1の計算結果から計算内容2の計算結果を差し引く。

計算内容1 * 計算内容2
計算内容1の計算結果に計算内容2の計算結果を掛ける。

計算内容1 / 計算内容2
計算内容1の計算結果を計算内容2の計算結果で割る。

四則演算を使った簡単なプログラムとして三角形の底辺の長さと高さから三角形の面積を計算するプログラムを作成してみましょう。

底辺の長さが10で高さが5の三角形の面積を計算するプログラムは下のようになります。

プログラム6

1
#area = 10 * 5 / 2
変数areaに計算結果を格納する。

2
MsgBox #area
メッセージボックスを表示する。

三角形の面積の公式は「底辺×高さ÷2」ですので、プログラムにおいては10 * 5 / 2という計算を行います。

そして、上のプログラムでは変数areaに計算結果、すなわち、三角形の面積を格納しています。

最後に、前回の記事で紹介したMsgBox命令を使って、変数areaに格納されている三角形の面積をメッセージボックスに表示しています。

ここで注意していただきたいのが、MsgBox命令のメッセージとして#areaと指定していることです。このようにすることで変数に格納されているデータをメッセージとしてメッセージボックスを表示することができます。

このように、変数にデータを格納するのではなく逆に変数からデータを取り出す場合には変数のデータを使いたい場所で#に続けて変数名を記述することで行います。今後この使い方は頻出しますので、覚えておいてください。

上のプログラムを実行すると下のような25というメッセージが表示されたメッセージボックスが現れます。正しく三角形の面積の計算が行われていることが分かります。

三角形の面積を計算するプログラム

四則演算以外の基本的な計算

HiMacroExでは四則演算以外にも様々な種類の計算を行うことができるようになっています。

四則演算以外で算数や数学で学習したかもしれない基本的な計算としては下のようなものがあります。

  • 小数の小数点以下を切り捨てて整数にする計算
  • 小数の小数点以下を四捨五入して整数にする計算
  • 小数点以下切り捨ての割り算
  • 余りの計算
  • 冪乗の計算
  • 平方根の計算
  • 絶対値の計算
  • 符号の計算(この計算の結果は正数に対しては1となり、0に対しては0となり、負数に対しては-1となります。つまり、数値の符号によって結果が変わる計算です)

小数の小数点以下を切り捨てて整数にする計算

計算

INT(計算内容)
計算内容の計算結果の小数点以下を切り捨てて整数にする。

たとえば、3.24の小数点以下を切り捨てて整数にするにはINT(3.24)とします。この計算結果は3となります。

小数の小数点以下を四捨五入して整数にする計算

計算

ROUND(計算内容)
計算内容の計算結果の小数点以下を四捨五入して整数にする。

たとえば、3.56の小数点以下を四捨五入して整数にするにはROUND(3.56)とします。この計算結果は4となります。

小数点以下切り捨ての割り算

計算

計算内容1 \ 計算内容2
計算内容1の計算結果を計算内容2の計算結果で割り、結果の小数点以下を切り捨てて整数にする。

たとえば、5 \ 2の計算結果は2となります。

余りの計算

計算

計算内容1 Mod 計算内容2
計算内容1の計算結果を計算内容2の計算結果で割った余りを求める。

たとえば、5 Mod 2の計算結果は1となります。

冪乗の計算

計算

計算内容1 ^ 計算内容2
計算内容1の計算結果を計算内容2の計算結果の数だけ掛け合わせる。

たとえば、2 ^ 10の計算結果は1024となります。

平方根の計算

計算

SQR(計算内容)
計算内容の計算結果の平方根を求める。

たとえば、SQR(81)の計算結果は9となります。

絶対値の計算

計算

ABS(計算内容)
計算内容の計算結果の絶対値を求める。

たとえば、ABS(-5)の計算結果は5となります。

符号の計算

計算

SGN(計算内容)
計算内容の計算結果の符号を求める。

たとえば、SGN(-5)の計算結果は-1となります。

数値の比較

HiMacroExには数値の比較を行う計算も用意されています。

数値の比較を行う計算とは2つの数値の内、小さい方を選んだり、逆に、大きい方を選んだりする計算のことです。

計算

MIN(計算内容1,計算内容2)
計算内容1の計算結果と計算内容2の計算結果の内、小さい方を選ぶ。

MAX(計算内容1,計算内容2)
計算内容1の計算結果と計算内容2の計算結果の内、大きい方を選ぶ。

たとえば、MIN(10,100)の計算結果は10となり、MAX(10,100)の計算結果は100となります。

もしかしたら数値の比較の計算というのはマイナーで、あまり使いどころがないと思われる方も多いかもしれません。確かに算数や高校までの数学ではあまり出てくることのない計算です。

しかし、プログラミングにおいては非常によく使う計算ですので必ず覚えるようにしてください。

数値の比較の計算を用いなければならないプログラミングパターンというものもあります。このプログラミングパターンについては次々回で詳しく解説する予定です。

クリップボードのデータの取得

ここまでの計算は算数や数学でも出てくる「計算らしい計算」でした。

しかし、プログラミングにおいては算数や数学では出てこない独特の計算が多数あります。

HiMacroExにもそのような計算が幾つか用意されており、その中の1つとしてクリップボードに現在格納されているデータを計算結果とする計算があります。

計算

GetClip
クリップボードに現在格納されているデータを計算結果とする。

このように、計算の中でGetClipと書くだけでクリップボードに現在格納されているデータを計算結果として取得することができます。

もしかしたら、これは果たして計算なのかと思われる方もおられるかもしれませんが、これもれっきとしたある種の計算なのです。

プログラミングにおいては変数に格納することのできる何らかの結果を生じさせることのできるものは全て1つの計算であると見做すことができるのです。

さて、このGetClipという計算を使うと、たとえば、現在「エクスプローラ」で選択されているファイルかフォルダの名前を取得し、ダイアログボックスに表示するといったプログラムも簡単に書くことができます。

具体的には、このプログラムは下のように書くことができます。

プログラム7

1
F2
F2キーを押したことにする。

2
LCtrl Down
Ctrlキーを押したままでいることにする。

3
A
Aキーを押したことにする。

4
LCtrl Up
Ctrlキーを離したことにする。

5
LCtrl Down
Ctrlキーを押したままでいることにする。

6
C
Cキーを押したことにする。

7
LCtrl Up
Ctrlキーを離したことにする。

8
Esc
Escキーを押したことにする。

9
#name = GetClip
クリップボードに現在格納されているデータを変数nameに格納する。

10
MsgBox #name
メッセージボックスを表示する。

「エクスプローラ」でF2キーを押すことで選択しているファイルかフォルダの名前を変更することができる状態に移行し、Ctrl+Aキーを押すことでファイル名かフォルダ名全体を選択し、Ctrl+Cキーを押すことでファイル名かフォルダ名全体をクリップボードにコピーし、Escキーを押すことでファイル名かフォルダ名の変更をキャンセルします。

後は9行目の#name = GetClipでクリップボードにコピーされたファイル名かフォルダ名を変数nameに格納し、10行目のMsgBox #nameで変数nameに格納されているデータをメッセージボックスに表示しています。

下のように「エクスプローラ」で適当なファイルかフォルダを選択した状態で上のプログラムを実行すると下のようなメッセージボックスが表示されます。正しくプログラムが動いていることが分かります。

エクスプローラ

メッセージボックス

ユーザからのデータの取得

HiMacroExが提供している「計算らしくない計算」としては他にもユーザにデータを入力させるためのダイアログボックスを開き、そこでユーザが実際に入力したデータを計算結果とする計算もあります。

計算

InputBox
ユーザにデータを入力させるためのダイアログボックスを開き、そこでユーザが実際に入力したデータを計算結果とする。

つまり、計算の中でInputBoxと書くだけでユーザからのデータを取得することができます。

この計算を使うと、たとえば、ユーザに三角形の底辺の長さと高さを入力させ、三角形の面積を計算するといったプログラムも簡単に書くことができます。

具体的には、このプログラムは下のように書くことができます。

プログラム8

1
#base = InputBox
ユーザにデータを入力させるためのダイアログボックスを開き、そこでユーザが実際に入力したデータを変数baseに格納する。

2
#height = InputBox
ユーザにデータを入力させるためのダイアログボックスを開き、そこでユーザが実際に入力したデータを変数heightに格納する。

3
#area = #base * #height / 2
変数areaに計算結果を格納する。

4
MsgBox #area
メッセージボックスを表示する。

上のプログラムを実行すると下のようにユーザにデータの入力を求めるダイアログボックスが2回連続で表示されます。

ダイアログボックス

1回目のダイアログボックスの入力欄に三角形の底辺の長さを入力し「OK」ボタンをクリックし、2回目のダイアログボックスの入力欄に三角形の高さを入力し「OK」ボタンをクリックすると、三角形の面積が書かれたメッセージボックスが表示されます。正しくプログラムが動いていることが分かります。

底辺の長さの入力

高さの入力

面積の出力

つづく

今回はプログラム中で直接計算を行う方法や変数の使い方について解説しました。

そして、HiMacroExで行うことのできる主要な計算やそれを使った簡単なプログラムも紹介しました。

変数というものが使えるようになり、様々な計算が自由に行えるようになったおかげで、前回と比べて更により多くのプログラムが簡単に作れるようになりました。

今回で変数の基本的な使い方については説明し終わったのですが、次回からは3回に亘って変数のより有用な、応用的な使い方について更に深く解説していく予定です。

まず次回は変数と繰り返しを組み合わせた使い方についてです。

プログラミング言語の機能というものは単体で使うのではなく他の機能と組み合わせて使ってこそ力を発揮するものが多いです。

この連載記事は初心者向けのものですので、様々な機能の有効な組み合わせ方についても詳しく解説していきたいと思っています。

↓ ↓ ↓

第8回

pizyumi
プログラミング歴19年のベテランプログラマー。業務システム全般何でも作れます。現在はWeb系の技術を勉強中。
スポンサーリンク

-プログラミング, 講座